[PATCH] dist: ordering of files in DIST_COMMON is deterministic now

Stefano Lattarini <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <f8d9608a60bd6aa960c7f05126e72380a72ec1b2.1419246745.git.stefano.lattarini@gmail.com>
It had likely stopped being deterministic due to the new perl behavior
of having non-deterministic order of numerating hash keys:
<http://search.cpan.org/dist/perl-5.18.0/pod/perldelta.pod#Hash_randomization>
<http://onionstand.blogspot.ie/2012/12/are-you-relying-on-hash-keys-being.html>

See also similar commit v1.14-19-g52e6404.

Fixes automake bug http://debbugs.gnu.org/17908

* bin/automake.in (handle_dist): Sort @dist_common.
(print_autodist_files): Swap invocations of 'sort' and 'uniq', for
consistency with the new code in 'handle_dist' and to get rid of a
minor hack.
* NEWS: Update.

Signed-off-by: Stefano Lattarini <[email protected]>
---
 NEWS            |  6 +++++-
 bin/automake.in | 14 +++++++-------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/NEWS b/NEWS
index bdc9bb9..5d14c5e 100644
--- a/NEWS
+++ b/NEWS
@@ -116,6 +116,10 @@ New in 1.14.2:
     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 for generated Makefiles,
+    in the face of the newly-introduced randomization for hash keys order
+    in Perl 5.18.
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 New in 1.14.1:
@@ -131,7 +135,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 283d1bb..7851454 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -3714,10 +3714,13 @@ sub handle_dist ()
 	}
     }
 
-  # Files to distributed.  Don't use ->value_as_list_recursive
-  # as it recursively expands '$(dist_pkgdata_DATA)' etc.
+  # Files to distributed.  Don't use ->value_as_list_recursive as it
+  # recursively expands '$(dist_pkgdata_DATA)' etc.
+  # Use 'sort' so that the expansion of $(DIST_COMMON) in the generated
+  # Makefile is deterministic, in face of m4 and/or perl randomizations
+  # (see automake bug#17908).
   my @dist_common = split (' ', rvar ('DIST_COMMON')->variable_value);
-  @dist_common = uniq (@dist_common);
+  @dist_common = uniq (sort @dist_common);
   variable_delete 'DIST_COMMON';
   define_pretty_variable ('DIST_COMMON', TRUE, INTERNAL, @dist_common);
 
@@ -7883,10 +7886,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 =
-- 
2.1.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.