summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Lattarini <stefano.lattarini@gmail.com>2014-12-22 20:25:13 +0100
committerStefano Lattarini <stefano.lattarini@gmail.com>2014-12-22 20:31:29 +0100
commit50a6af3c7807c44148544adbbf2ae67b848fb585 (patch)
tree79796a85ae4098809976911b11e2201bcc59f663
parent064a6d543a3735d93b5902ffe79ae0ec14a63b15 (diff)
parent033293c247160e1d7a6d834a785bd1adf16d34d5 (diff)
downloadautomake-50a6af3c7807c44148544adbbf2ae67b848fb585.tar.gz
Merge branch 'master' into ng/master
* master: cleanup: refactor code to initialize DIST_COMMON dist: ordering of files in DIST_COMMON is deterministic now tests: refactor some tests on DIST_COMMON maint: make output of 'gen-testsuite-part' deterministic When computing lispdir, don't load emacs site wide init file. PATH: quote $(PATH_SEPARATOR) as well Improve detection of GNU make, avoiding "Arg list too long" errors. Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
-rw-r--r--Makefile.am2
-rw-r--r--NEWS11
-rw-r--r--bin/automake.in34
-rw-r--r--doc/automake-ng.texi2
-rwxr-xr-xgen-testsuite-part8
-rw-r--r--lib/am/texi-vers.am14
-rw-r--r--m4/lispdir.m42
-rw-r--r--t/Makefile.inc4
8 files changed, 42 insertions, 35 deletions
diff --git a/Makefile.am b/Makefile.am
index ecd3a1a10..0b21450d9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -66,7 +66,7 @@ generated_file_finalize = $(AM_V_at) \
# For some tests or targets, we need to have the just-build automake and
# aclocal scripts avaiable on PATH.
extend_PATH = \
- { PATH='$(abs_builddir)/t/wrap'$(PATH_SEPARATOR)$$PATH && export PATH; }
+ { PATH='$(abs_builddir)/t/wrap$(PATH_SEPARATOR)'$$PATH && export PATH; }
# The master location for INSTALL is lib/INSTALL.
# This is where "make fetch" will install new versions.
diff --git a/NEWS b/NEWS
index 23a9144f8..52ffac245 100644
--- a/NEWS
+++ b/NEWS
@@ -169,6 +169,15 @@ New in 1.15:
- We no longer risk to use '$ac_aux_dir' before it's defined (see
automake bug#15981). Bug introduced in Automake 1.14.
+ - The code used to detect whether the currently used make is GNU make
+ or not (relying on the private macro 'am__is_gnu_make') no longer
+ risks causing "Arg list too long" for projects using automatic
+ dependency tracking and having a ton of source files (bug#18744).
+
+ - Automake tries to offer a more deterministic output for generated
+ Makefiles, in the face of the newly-introduced randomization for
+ hash keys order in Perl 5.18.
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New in 1.14.1:
@@ -184,7 +193,7 @@ New in 1.14.1:
was only relevant when the number of python files was high (which is
unusual in practice).
- - Automake try to offer a more reproducible output for warning messages,
+ - Automake try to offer a more deterministic output for warning messages,
in the face of the newly-introduced randomization for hash keys order
in Perl 5.18.
diff --git a/bin/automake.in b/bin/automake.in
index 13b27d155..d699ec6ee 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -335,9 +335,6 @@ my %extension_map = ();
# configure.ac.
my @configure_dist_common = ();
-# List of the "auto-discovered" distributed files.
-my @dist_common = ();
-
# This maps languages names onto objects.
my %languages = ();
# Maps each linker variable onto a language object.
@@ -462,6 +459,9 @@ my %language_scratch;
# handling on a per-language basis.
my %lang_specific_files;
+# List of the "auto-discovered" distributed files.
+my @dist_common = ();
+
# This is set when 'handle_dist' has finished. Once this happens,
# we should no longer push on dist_common.
my $handle_dist_run;
@@ -510,8 +510,6 @@ sub initialize_per_input ()
$output_rules = '';
$output_trailer = '';
- @dist_common = ();
-
Automake::Options::reset;
Automake::Variable::reset;
Automake::Rule::reset;
@@ -536,9 +534,12 @@ sub initialize_per_input ()
@dist_targets = ();
+ @dist_common = ();
+ $handle_dist_run = 0;
+
%known_programs = ();
- %known_libraries= ();
- %known_ltlibraries= ();
+ %known_libraries = ();
+ %known_ltlibraries = ();
%extension_seen = ();
@@ -546,8 +547,6 @@ sub initialize_per_input ()
%lang_specific_files = ();
- $handle_dist_run = 0;
-
$need_link = 0;
$must_handle_compiled_objects = 0;
@@ -3107,7 +3106,7 @@ sub handle_dist ()
}
# We might copy elements from @configure_dist_common to
- # %dist_common if we think we need to. If the file appears in our
+ # @dist_common if we think we need to. If the file appears in our
# directory, we would have discovered it already, so we don't
# check that. But if the file is in a subdir without a Makefile,
# we want to distribute it here if we are doing '.'. Ugly!
@@ -3125,7 +3124,7 @@ sub handle_dist ()
push_dist_common ($file)
if ($dir eq '.' || ! is_make_dir ($dir));
}
- @configure_dist_common = ();
+ @configure_dist_common = ();
}
# We don't expected further attempts to modify @dist_common
@@ -6246,10 +6245,10 @@ sub required_file_check_or_copy
return
if $found_it && (! $add_missing || ! $force_missing);
- # If we've already looked for it, we're done. You might wonder why
- # we don't do this before searching for the file. If we do that,
- # then something like AC_OUTPUT(subdir/foo foo) will fail to put
- # 'foo.in' into the list of distributed files @dist_common.
+ # If we've already looked for it, we're done. You might wonder why we
+ # don't do this before searching for the file. If we do that, then
+ # something like AC_OUTPUT([subdir/foo foo]) will fail to put 'foo.in'
+ # into $(DIST_COMMON).
if (! $found_it)
{
return if defined $required_file_not_found{$fullfile};
@@ -6646,10 +6645,7 @@ sub generate_makefile
# Helper function for usage().
sub print_autodist_files
{
- # NOTE: we need to call our 'uniq' function with the leading '&'
- # here, because otherwise perl complains that "Unquoted string
- # 'uniq' may clash with future reserved word".
- my @lcomm = sort (&uniq (@_));
+ my @lcomm = uniq (sort @_);
my @four;
format USAGE_FORMAT =
diff --git a/doc/automake-ng.texi b/doc/automake-ng.texi
index 2c4b4479b..b2f166fc7 100644
--- a/doc/automake-ng.texi
+++ b/doc/automake-ng.texi
@@ -12732,7 +12732,7 @@ instance, here is how @code{AM_PATH_LISPDIR} (@pxref{Emacs Lisp})
computes @samp{$(lispdir)}:
@example
-$EMACS -batch -q -eval '(while load-path
+$EMACS -batch -Q -eval '(while load-path
(princ (concat (car load-path) "\n"))
(setq load-path (cdr load-path)))' >conftest.out
lispdir=`sed -n
diff --git a/gen-testsuite-part b/gen-testsuite-part
index 3fac81f0b..087817aea 100755
--- a/gen-testsuite-part
+++ b/gen-testsuite-part
@@ -285,8 +285,9 @@ foreach my $test (@all_tests)
$wrapper_setups{$test} = \@setups if @setups;
}
# And now create all the wrapper tests.
-while (my ($wrapped_test, $setup_list) = each %wrapper_setups)
+for my $wrapped_test (sort keys %wrapper_setups)
{
+ my $setup_list = $wrapper_setups{$wrapped_test};
(my $base = $wrapped_test) =~ s/\.([^.]*)$//;
my $suf = $1 or die "$me: test '$wrapped_test' lacks a suffix\n";
my $count = 0;
@@ -345,7 +346,7 @@ my %depmodes =
foreach my $lt (TRUE, FALSE)
{
- foreach my $m (keys %depmodes)
+ foreach my $m (sort keys %depmodes)
{
my $planned = ($lt && $m eq "auto") ? 84 : 28;
my @required =
@@ -393,8 +394,9 @@ print <<EOF;
EOF
-while (my ($k, $x) = each %deps_extractor)
+for my $k (sort keys %deps_extractor)
{
+ my $x = $deps_extractor{$k};
my $dist_prereqs = $x->{dist_prereqs} || "";
my $nodist_prereqs = $x->{nodist_prereqs} || "";
my @tests = grep { line_match $x->{line_matcher}, $_ } @all_tests;
diff --git a/lib/am/texi-vers.am b/lib/am/texi-vers.am
index 5e8010b31..cda2c262f 100644
--- a/lib/am/texi-vers.am
+++ b/lib/am/texi-vers.am
@@ -28,16 +28,16 @@ am.dist.common-files += %VTEXI% %STAMPVTI%
## in this file.)
%STAMPVTI%: %TEXI% $(top_srcdir)/configure
@$(am.cmd.ensure-target-dir-exists)
- @(set `$(SHELL) $(am.conf.aux-dir)/mdate-sh $<`; \
- echo "@set UPDATED $$1 $$2 $$3"; \
- echo "@set UPDATED-MONTH $$2 $$3"; \
- echo "@set EDITION $(VERSION)"; \
- echo "@set VERSION $(VERSION)") > %VTI%.$$$$.tmp
- @if cmp -s %VTI%.$$$$.tmp %VTEXI%; then \
+ @(set `$(SHELL) $(am.conf.aux-dir)/mdate-sh $<` \
+ && echo "@set UPDATED $$1 $$2 $$3" \
+ && echo "@set UPDATED-MONTH $$2 $$3" \
+ && echo "@set EDITION $(VERSION)" \
+ && echo "@set VERSION $(VERSION)") > %VTI%.$$$$.tmp || exit; \
+ if cmp -s %VTI%.$$$$.tmp %VTEXI%; then \
rm -f %VTI%.$$$$.tmp; \
else \
echo "Updating %VTEXI%" && mv -f %VTI%.$$$$.tmp %VTEXI%; \
- fi;
+ fi
@cp %VTEXI% $@
am.clean.mostly.f += %VTI%.[0-9]*.tmp
diff --git a/m4/lispdir.m4 b/m4/lispdir.m4
index 95a88da30..f1f2212f1 100644
--- a/m4/lispdir.m4
+++ b/m4/lispdir.m4
@@ -34,7 +34,7 @@ AC_DEFUN([AM_PATH_LISPDIR],
# which is non-obvious for non-emacs users.
# Redirecting /dev/null should help a bit; pity we can't detect "broken"
# emacsen earlier and avoid running this altogether.
- AC_RUN_LOG([$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out])
+ AC_RUN_LOG([$EMACS -batch -Q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out])
am_cv_lispdir=`sed -n \
-e 's,/$,,' \
-e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \
diff --git a/t/Makefile.inc b/t/Makefile.inc
index a7b371439..8091be479 100644
--- a/t/Makefile.inc
+++ b/t/Makefile.inc
@@ -125,9 +125,9 @@ AM_TESTS_ENVIRONMENT += stderr_fileno_=9; export stderr_fileno_;
# in case it is given with a relative name containing no slashes.
AM_TESTS_ENVIRONMENT += \
if test $(srcdir) != .; then \
- PATH='$(abs_srcdir)/%D%/ax'$(PATH_SEPARATOR)$$PATH; \
+ PATH='$(abs_srcdir)/%D%/ax$(PATH_SEPARATOR)'$$PATH; \
fi; \
- PATH='$(abs_builddir)/%D%/ax'$(PATH_SEPARATOR)$$PATH; \
+ PATH='$(abs_builddir)/%D%/ax$(PATH_SEPARATOR)'$$PATH; \
export PATH;
# Automatically-computed dependencies for tests.