|
c2a52bf0
|
2012-06-24T10:36:15
|
|
tests: simpler workaround for shells losing the exit status in exit trap
Now that we can assume our tests are run by a decent POSIX shell, we
can simplify our workaround aimed at having the exit status propagated
correctly to the code in the exit trap. Unfortunately, we cannot
dispense with such a workaround altogether, because it's still required
by some shells we need to support (at least Solaris 10 /bin/ksh and
/usr/xpg4/bin/sh).
For more information about the need of that workaround, see the entry
about 'trap' in the section "Limitations of Shell Builtins" in the
Autoconf manual:
<http://www.gnu.org/software/autoconf/manual/autoconf.html#trap>
The new workaround has been tested successfully with the following
shells:
- Bash 4.1
- Bash 3.2
- Bash 3.0
- Bash 2.05b
- dash 0.5.5.1
- dash 0.5.2
- AT&T Ksh 93u (from official Debian package)
- MirBSD Korn Shell 40.2 (from official Debian package)
- Solaris 9, 10 and 11 /bin/ksh
- Solaris 9, 10 and 11 /usr/xpg4/bin/sh
- NetBSD 5.1 /bin/sh
- NetBSD 5.1 /bin/ksh
* t/ax/test-init.sh (Exit): Rename ...
(_am_exit): ... like this.
(exit): New alias for '_am_exit'. We cannot simply redefine 'exit'
as a shell function, because some shells (dash 0.5.5.1, Solaris 10
/bin/ksh and /usr/xpg4/bin/sh) do not allow it.
(_am_exit, trap): Add extra escaping for 'exit' calls, to ensure we
really invoke the 'exit' builtin and not our alias with the same
name.
* configure.ac: Check that the shell selected to run our testsuite
supports aliases named like shell builtins.
* t/REAMDE: Adjust.
* All tests: Adjust, by simply using 'exit' instead of 'Exit'.
* t/self-check-explicit-skips.sh: Adjust: the first usage of 'exit'
after it has been redefined as an alias must be on a new line w.r.t.
that where the alias is defined, in order for the redefinition to be
honored.
* syntax-checks.mk (sc_tests_Exit_not_exit): Delete.
(sc_tests_exit_not_Exit): New.
(syntax_check_rules): Adjust.
(sc_tests_automake_fails): Simplify the recipe a little.
* Several tests: Remove now useless spurious quoting once required
to placate the 'sc_tests_Exit_not_exit' maintainer check.
* gen-testsuite-part: Likewise. Also, avoid uses of 'Exit' in the
generated scripts.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
|
|
ec6a1357
|
2012-06-10T23:08:07
|
|
subdirs: unify rules for "cleaning" and "normal" recursive targets
Before this change, the recursive invocation of cleaning targets in
the $(SUBDIRS) where done in inverse order, i.e., starting from the
last $(SUBDIRS) entry and proceeding towards the first. According
to the code comments, this was done ...
... in an attempt to alleviate a problem that can happen when
dependencies are enabled. In this case, the .P file in one
directory can depend on some automatically generated header
in an earlier directory. Since the dependencies are required
before any target is examined, make bombs.
But this comment does not apply anymore to the current implementation
of automatic dependency tracking: the '.Po' and '.Plo' files does not
depend on any C header or source file, ever!
So it seems that the distinction between "normal" and "cleaning"
recursive targets is a stale leftover of an older implementation of
the automatic dependency tracking. In fact, the Automake History
manual seems to confirm this suspect; the section "First Take on
Dependency Tracking" reads:
Because each .P file was a dependency of Makefile, this meant
that dependency tracking was done eagerly by make. For instance,
"make clean" would cause all the dependency files to be updated,
and then immediately removed. This eagerness also caused problems
with some configurations; if a certain source file could not be
compiled on a given architecture for some reason, dependency
tracking would fail, aborting the entire build.
and the following section "Dependencies As Side Effects" reads:
In this approach, the .P files were included using the -include
command, which let us create these files lazily. This avoided
the "make clean" problem.
So the distinction between "normal" and "cleaning" recursive targets
has likely been obsolete since by then already. We can thus remove
such distinction, thus reducing some complications and duplication in
our rules. Doing so, the whole testsuite still passes (both with GCC
and Sun C 5.9), even the test 'c-demo.sh', which, among the other
things, exercise the setup described in the obsolete code comment
referenced above.
Finally, note that we still keep '$(RECURSIVE_CLEAN_TARGETS)' and
'$(RECURSIVE_TARGETS)' as two distinct variables, to ensure a better
backward-compatibility for any user-defined rules that happen to use
those variables.
* NEWS: Update.
* lib/am/subdirs.am ($(RECURSIVE_CLEAN_TARGETS), $(CLEAN_TARGETS)):
Merge their recipes.
* t/subdir-distclean.sh: New test, check that "./configure && make
&& make distclean" is actually a no-op, even when conditional SUBDIRS
are involved.
* t/list-of-tests.mk: Add it.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
|