announcement: can be generated from development snapshots as well
And not only from checkouts corresponding exactly from a beta
or stable release. That was only getting in the way of proper
testing for the 'announcement' recipe.
* maint.mk (determine_release_type): If the make variable
DEVEL_SNAPSHOT is set, do not error out if the current version
denotes a development snapshot (e.g., "1.13.2c" or "1.99a").
(announcement): Relax, by also accepting to run from development
snapshots, not only stable or beta releases. Do so by defining
the target-specific variable DEVEL_SNAPSHOT to "yes".
Peter Rosin [Thu, 30 May 2013 08:49:42 +0000 (10:49 +0200)]
depcomp: avoid trailing backslash in depfile for depmode=msvc7
When compiling a file without any dependencies (no #includes), the
msvc7 depmode (and consequently msvc7msys) generates a depfile
Makefile fragment with the last line ending with a backslash. This
is less robust than needed.
Fixes automake bug#14501.
* lib/depcomp (msvc7): Finish off the depfile Makefile fragment with
an empty line.
(scriptversion): Update.
* suffix-rules-work:
NEWS: document fix for bug#14441
Automake::Rule: consistently prepend underscore to private variables
Automake::Rule: rename: suffix_rule() -> next_in_suffix_chain()
Automake::Rule: adjust comments and POD according to previous changes
Automake::Rule: make private variables lexically scoped
suffix rules: better distinction between builtin and user-derived
Automake::Rule: expose suffix rules as a function, not a scalar
tests: expose automake bug#14441
maint: sanity checks in 'check-minimal-autoconf' convenience target
* maint.mk (check-minimal-autoconf): Here, check that autoconf seems
to be locally installed, and that such local install refers to the
correct expected minimal version.
maint: install minimal supported autoconf through convenience targets
To make testing of Automake in conjunction with it easier and more
reproducible. It might be nice to also have convenience targets to
actually automatically run the Automake testsuite with such autoconf
version, but that is left to later patches.
* configure.ac: AC_SUBST the definition of $required_autoconf_version.
* maint.mk (WGET): Move definition earlier.
(gnu-ftp, ac-v, ac-n, ac-p, ac-t, ac-l, ac-d): New auxiliary variables.
(fetch-minimal-autoconf, build-minimal-autoconf): New convenience
targets.
* .gitignore: Update.
suffix rules: better distinction between builtin and user-derived
Fixes automake bug#14441.
* lib/Automake/Rule.pm ($_suffix_rules_default): Remove, superseded by ...
(%suffix_rules_builtin): ... this lexical variable.
($suffix_rules): Remove, superseded by ...
(%suffix_rules): ... this lexical variable.
(suffix_rules, suffix_rules_count): Adjust.
(register_suffix_rule): Update '%suffix_rules_builtin' rather than
'%suffix_rules' if the location (as passed by the '$where' argument)
is an "internal" one (doesn't come from user-provided Makefile.am).
(reset): Simplify resetting of '%suffix_rules' to the default ones
accordingly.
* t/list-of-tests.mk (XFAIL_TESTS): Drop test 'suffix-custom-pr14441.sh'.
Automake::Rule: expose suffix rules as a function, not a scalar
This is just a preparatory refactoring in view of future patches.
No semantic change is intended.
* lib/Automake/Rule.pm ($suffix_rules): Turn from a package-level
variable to a lexical variable.
(suffix_rule): New function, expose the details of $suffix_rules
that are actually required by code outside thus modules --- and
only those details, no more.
(@EXPORT): Adjust.
* automake.in (derive_suffix): Likewise.
And do so in a safer way, with a runtime check rather than a brittle
static maintainer check.
* t/ax/test-init.sh: Set the 'required' variable to readonly.
* syntax-checks.mk (sc_tests_required_after_defs): Remove.
(syntax_check_rules): No longer list it.
tests: use append mode to capture parallel make output
This will allow us to run the Automake testsuite forcing all the make
invocations in the test cases to run in parallel mode [1], but without
hitting the spurious failure reported in automake bug#11413.
See also:
<http://lists.gnu.org/archive/html/bug-make/2013-05/msg00135.html>
The make invocations in the test cases can be forced to run in parallel
mode by, e.g., invoking "make check" like this:
make check AM_TESTSUITE_MAKE="make -j16"
The possible spurious failures hinted above are due to the fact that
the redirected output of parallel make can racily lose lines. For
example, if GNU make (3.82) is run with -j10 on a Makefile like this:
and has its standard output redirected in overwrite-mode to a regular
file, it looses a line of that output every 15 runs or so on a Fedora
17 system with 64 ppc64 cores. Redirection in append mode does not
suffer of this problem, as explained here:
<http://lists.gnu.org/archive/html/automake-patches/2009-03/msg00073.html>
See also previous commits v1.12-63-g45c1fcd of 2012-05-05 (tests: use
append mode to capture parallel make output) and Release-1-10-280-g6426999
of 2009-03-10 (Use append mode to capture parallel test output).
* t/ax/am-test-lib.sh (run_make): Adjust and enhance.
* t/lisp8.sh: Take advantage of the enhancement, nd stop doing output
redirection for $MAKE by hand.
* t/tap-more.sh: Likewise.
* t/parallel-tests-concurrency.sh: Likewise.
To force the test scripts to invoke make in parallel mode. This should
enhance coverage of use cases (make concurrency) that are becoming more
and more important with today multicore fast machines.
* Makefile.am (check-parallel): New .PHONY target.
tests: avoid '$MAKE' redirections, use 'run_make' instead
The use 'run_make' with the -E, -O and -M option, it is more
idiomatic now. Also, this way, centralized fixes and improvements
done in 'run_make' will automatically propagate through most of
the testsuite.
* syntax-checks.mk (sc_tests_no_run_make_redirect): Also check against
'$MAKE' invocations that uses output redirections (and not only against
'run_make' invocation that do so).
* Several tests: Adjust (and few minor cosmetic changes as well, while
at it).
tests: avoid use of redirected 'run_make' invocations
Instead, properly use the -E, -O, or -M options of run_make.
The occurrences of the 'run_make' invocations using output
redirection has been found by the recently-introduced maintainer
check 'sc_tests_no_run_make_redirect'.
* t/ax/tap-summary-aux.sh: Adjust.
* t/ax/testsuite-summary-checks.sh: Likewise.
* Several other tests: Likewise.
lint: warn against redirected 'run_make' invocations
The testsuite shell function 'run_make()' has the three options
-E, -O and -M to perform the various kind of output redirections,
so the test scripts should use them instead of redirecting the
output "by hand":
See the commit message of v1.13.2-13-gc7cfa09, 2013-05-22
(tests: run_make: options to do command redirection) for an
explanation of why this is a good idea.
It's worth noting that the present patch only introduced a new
static maintainer check looking against the undesired idioms,
but doesn't yet remove usages of such idioms from the testsuite.
That will be done by follow-up patch(es).
* syntax-checks.mk (sc_tests_no_run_make_redirect): New check.
(syntax_check_rules): List it.
tests: run_make: options to do command redirection
Let's improve the API of the 'run_make()' helper shell function by
adding three new options:
-O Save the standard output from make on disk, in a regular file
named 'stdout'.
-E Save the standard error from make on disk, in a regular file
named 'stderr'.
-M Save both the standard output and standard error from make on
disk, in a regular file named 'output'. This option supersedes
both the '-O' and '-E' options.
This new API has two main advantages.
1. Its use will allow us to get rid of more cumbersome idioms
like, e.g.,
2. More importantly, using the new API we will prevent any extra output
from the shell traces of the code in run_make to be redirected along
with the make stderr (where that was redirected). This problem was
present in usages like, e.g.,
ensuring that 'stderr' won't end up containing unrelated stuff.
Note that we do not convert in bulk the old idioms and the use of
redirected 'run_make' invocations with this patch. We only convert
some occurrences, to ensure that the new implementation of 'run_make'
is sound enough. More sweeping conversions will likely be done in
follow-up patches.
* t/ax/am-test-lib.sh (run_make): Enhance and implement the extended API.
* t/tap-xfail-tests.sh: Use the new 'run_make' API.
* t/test-driver-cond.sh: Likewise.
* t/tests-environment-fd-redirect.sh: Likewise.
* t/uninstall-fail.sh: Likewise.
* t/yacc-dist-nobuild.sh: Likewise.
This makes the test logs easier to read for most shells (which do not
actually require that alias). This is especially important now that
'unset' is used in the new 'run_make()' function, and that function is
likely going to be used more and more in the future.
* t/ax/test-lib.sh (_am_unset, unset): Only define this function and
alias if "unset VAR" returns a non-zero exit status when VAR is already
unset.
tests: better idiom to override make macro defs on the cmdline
We now do so with a new wrapper shell function 'run_make()', which
relies on the use of AM_MAKEFLAGS, avoiding the use of the '-e' make
option. The use of that option (that causes the environment variables
to take precedence over the macro definitions in the Makefile) has
proved to be quite brittle in the past, causing annoying and sometimes
problematic spurious failures. This has worsened in some still
unpublished work going on in development branches. It's time to solve
the issue once and for all.
Note that we do not convert all uses of $MAKE in the testsuite right
away; we might do so in follow-up changes, with leisure, to avoid a
"patch bomb" effect (this commit is already too much of a bomb itself).
What we do in this commit is to get rid of all "$MAKE -e" invocations.
We admit that the implementation and feature-set of 'run_make()' are
far from perfect, but good enough for our current purposes. We'll
improve 'run_make()' if and when the need arises.
* syntax-checks.mk (sc_tests_no_make_e): New syntax check, guard against
the use of "$MAKE -e".
(syntax_check_rules): Add it.
(sc_tests_overriding_macros_on_cmdline): Adjust.
(lint): New, alias for 'maintainer-check', for lazy typists. Idea
backported from the 'maint' branch (Automake 1.13a).
* t/ax/am-test-lib.sh (run_make): New function. Run $MAKE with the
given command-line arguments, handling command-line override of variable
definitions in a smart way (using AM_MAKEFLAGS if a non-GNU make
implementation is detected to be in use).
(useless_vpath_rebuild): Adjust to use 'run_make', to avoid a spurious
maintainer check failure.
(yl_distcheck): Use 'run_make' rather than bare '$MAKE'.
(single_quote, append_single_quoted, is_valid_varname): New auxiliary
function, used, directly or indirectly, by it.
* Many tests: Adjust to avoid the use of "$MAKE -e", and prefer the
use of 'run_make' in few other contexts as well, where it makes sense.
Other minor fixlets while at it.
* lib/am/lisp.am (.el.elc): By initializing the 'am__dir' properly
here. For most shells, the lacking initialization, while technically
incorrect, didn't cause any issue in practice, because in those shells
"test -d" returns an exit status of 0. But with /usr/xpg4/bin/sh, the
shell complains like this: "test: argument expected", and returns a
non-zero exit status. This caused testsuite failures in several lisp
tests.
Also, while we are at it, use more proper quoting in the recipe, to
ensure a missing initialization to now be caught by more forgiving
shells as well.
* NEWS: Update.
In some shells (e.g., Solaris 10 /bin/ksh, or NetBSD 5.1 /bin/sh),
"unset VAR" returns a non-zero exit status in case the VAR variable
is already unset. This doesn't interact well with our usage of
"set -e" in the testsuite. So far, we've avoided spurious failures
by either explicitly ignoring the exit status from unset:
unset VAR || :
or explicitly ensuring that a variable is set, before trying to
unset it:
VAR=; unset VAR
But we can do better, by aliasing the 'unset' command to a custom
function that will take care of these details for us. This will
avoid us annoying spurious failures in the future, failures that
have already bitten us too much times. For an example, refer to
commit 'v1.12.2-88-g5b1dae5' of 2012-08-05 (tests: avoid tons of
spurious failures on NetBSD).
* t/ax/test-lib.sh (_am_unset): New function.
(unset): New alias to it.
(_am_exit): Adjust comments.
* t/ax/am-test-lib.sh: No need to temporary disable the 'errexit'
shell flag when unsetting variables that are potentially already
unset.
(am_process_requirements): Adjust to remove a now-useless
workaround related to unset.
* t/aclocal-macrodir.tap: Likewise.
* t/aclocal-macrodirs.tap: Likewise.
* t/auxdir-autodetect.sh: Likewise.
* t/ax/am-test-lib.sh: Likewise.
* t/ax/test-lib.sh: Likewise.
* t/check-tests-in-builddir.sh: Likewise.
* t/dist-formats.tap: Likewise.
* t/distcheck-configure-flags-am.sh: Likewise.
* t/distcheck-configure-flags.sh: Likewise.
* t/java-empty-classpath.sh: Likewise.
* t/javaflags.sh: Likewise.
* t/lflags.sh: Likewise.
* t/lflags2.sh: Likewise.
* t/lisp-flags.sh: Likewise.
* t/lisp6.sh: Likewise.
* t/missing-auxfile-stops-makefiles-creation.sh: Likewise.
* t/parallel-am.sh: Likewise.
* t/parallel-am2.sh: Likewise.
* t/parallel-am3.sh: Likewise.
* t/parallel-tests-log-override-recheck.sh: Likewise.
* t/pkg-config-macros.sh: Likewise.
* t/python-missing.sh: Likewise.
* t/python-too-old.sh: Likewise.
* t/python11.sh: Likewise.
* t/self-check-dir.tap: Likewise.
* t/self-check-report.sh: Likewise.
* t/self-check-seq.tap: Likewise.
* t/silent-configsite.sh: Likewise.
* t/suffix6c.sh: Likewise.
* t/tar-override.sh: Likewise.
* t/tests-environment-and-log-compiler.sh: Likewise.
* t/vala-configure.sh: Likewise.
* t/werror3.sh: Likewise.
* t/yflags-cmdline-override.sh: Likewise.
* t/yflags.sh: Likewise.
* t/yflags2.sh: Likewise.
tests: remove exec bit from all of them ('micro' branch)
It gives the impression that they are directly runnable, as with
"./t/foo.sh", but it has been a while since that was the case. Today,
tests are runnable only through "make check" or "./runtest".
This change is for the 'micro' branch (automake 1.13.2a). It will
soon be followed by similar patches for the 'maint' branch (automake
1.13a) and the 'master' branch (automake 1.99a).
* t/*.sh, t/*.tap: Remove executable bit.
* maint.mk (sc_tests_executable): Remove.
(syntax_check_rules): Adjust.
* gen-testsuite-part: Set permissions of generated tests to
'444' (-r--r--r--), rather than 555 (-r-xr-xr-x).
The "vala + pkg-config" doesn't interact well with cross-compilation:
<https://mail.gnome.org/archives/vala-list/2012-September/msg00094.html>
That is causing annoying failures in our testsuite when it's run in
cross-compilation mode. It's not worth trying too be overly smart and
work around these problems; just skip the affected tests instead.
* t/ax/am-test-lib.sh (require_tool): A new requirement 'valac', telling
that the test needs to compile Vala-generated C files. In particular,
this causes the test to be skipped when using a cross-compiler.
warns: don't tell AM_PROG_MKDIR_P is going to be removed
That is no longer true. For a more extended rationale, see file
'PLANS/obsolete-removed/am-prog-mkdir-p.txt' in the maint branch
(as of commit v1.13.1d-132-g90ec3fe).
* automake.in (scan_autoconf_traces): So adjust the warning message
here.
* maint.mk (announcement): Here, be prepared to handle the case
in which the first section of the NEWS file is dedicated to report
future backward-incompatibilities and/or other warnings.
Merge 'better-makeflags-recognition' and 'testing-work' into branch-1.13.2
* better-makeflags-recognition:
make flags analysis: handle more options with args
make flags analysis: use simpler variable names
make flags analysis: whitespace changes
make flags analysis: embed in a subshell
make flags analysis: be more robust
make flags analysis: cater to GNU make 3.83 (still unreleased as of now)
tests: expose weaknesses in make flags analysis
tests: improve debugging output in checks on make flags analysis
make flags analysis: refactor, to reduce code duplication
* testing-work:
maint: targets and recipes to simplify testing on real-world packages
build: preparatory refactoring
build: tiny reduction in code duplication
maint: targets and recipes to simplify testing on real-world packages
We introduce a new section in the maintainer-specific makefile that
contains recipes to test the build system of some well-known GNU
packages with the current development version of Automake. Not the
cleanest way to do so, but good enough for the moment. We'll revisit
the matter after the 1.13.2 release (which we now hope will happen
soon).
* maint.mk (git-sv-host): New.
(SV_GIT_CF, SV_GIT_AC, SV_GIT_GL): Use it to reduce code duplication.
(ALL_PACKAGES, FEW_PACKAGES): New, lists of GNU packages to try out.
(ttp-check, ttp-check-all): New targets, do the checking with said
packages.
(ttp): New, alias for 'ttp-check'.
(ttp-all): New, alias for 'ttp-check-all'.
The code was only duplicated two times, but we are soon going to
need a third occurrence, and that would be one to much.
* Makefile.am (extend_path): New.
(update_mans): Use it instead of copying & pasting its contents.
($(srcdir)/doc/amhello-1.0.tar.gz): Likewise, and minor related
adjustments.
* lib/am/header-vars.am (am__make_running_with_option): Here. Now
that we expect to be run in a subshell, we don't have to worry about
being namespace-safe. And '$foo' is much more pleasant to read than
'$am__foo' -- and pleasant code tends to be more correct.
(am__make_dryrun, am__make_keepgoing): Adjust.
make flags analysis: cater to GNU make 3.83 (still unreleased as of now)
The current development version of GNU make (that is planned to become
GNU make 3.83, sooner or later) has changed the format its $(MFLAGS)
variable slightly, removing the space between an option and its argument:
# With GNU make 3.82, compiled from official tarball:
$ make -f- <<<'all:; @echo "$$MFLAGS"' -I none
-I none
# With development version of GNU make (Git commit b5ea49b):
$ make -f- <<<'all:; @echo "$$MFLAGS"' -I none
-Inone
This was done on purpose, in order to support more easily the new
option '-O', which takes an optional argument; see:
Which was causing a spurious failure on FreeBSD. Not particularly
surprising, given how brittle "make -e" is in general ...
* t/cxx-lt-demo.sh: Instead of forcing $(CC) to be 'false' by
exporting "CC=false" in the environment and then passing the '-e'
option to make, do so by passing "CC=false" on the make command
line, both directly and using AM_MAKEFLAGS.
* fix-pr12554:
tests: avoid a spurious error with Solaris make
subdirs: don't return false positives for the '-k' option's presence
header-vars: recognize more make flags ('-k' in particular)
header-vars: simplify how make flags are determined
tests: remove dead code from t/make-dryrun.tap
header-vars: new variable $(am__running_with_option)
tests: expose bug#12554 (false positives for presence of '-k' make option)