Package: libkinosearch1-perl Version: 1.01-2 Severity: wishlist Tags: patch User: [email protected] Usertags: fileordering X-Debbugs-Cc: [email protected]
While working on the "reproducible builds" effort [0], we have noticed that the XS code generated by Build.PL depends on the order of the source files as returned by File::Find, which is nondeterministic. The attached patch fixes this. Please note that this package is also affected by the Module::Build linking order issue (#797709) so this fix alone is not sufficient to make the build reproducible. However, I've verified that the two together make things work for me. [0] https://wiki.debian.org/ReproducibleBuilds -- Niko Tyni [email protected]
>From efa36d64ab5be55a03deebf2fa91a4938de57fef Mon Sep 17 00:00:00 2001 From: Niko Tyni <[email protected]> Date: Fri, 28 Aug 2015 22:49:22 +0300 Subject: [PATCH] Sort the list of source files when generating XS code The order of the file list affects generated code, so nondeterminism there renders the build unreproducible. The $first trick is a tad inelegant, but a custom sort() function that would put Kinosearch1.pm first would probably be more confusing. --- Build.PL | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Build.PL b/Build.PL index 50a466a..31fbd4f 100644 --- a/Build.PL +++ b/Build.PL @@ -37,10 +37,11 @@ my %source_pm = (); # grab all .pm filepaths, making sure that KinoSearch1.pm is first my @pm_filepaths; +my $first; find( { wanted => sub { if ( $File::Find::name =~ /KinoSearch1\.pm$/ ) { - unshift @pm_filepaths, $File::Find::name; + $first = $File::Find::name; } elsif ( $File::Find::name =~ /\.pm$/ ) { push @pm_filepaths, $File::Find::name; @@ -51,6 +52,8 @@ find( 'lib', ); +@pm_filepaths = ( $first, sort @pm_filepaths ); + for my $pm_filepath (@pm_filepaths) { open( my $module_fh, '<', $pm_filepath ) or die "couldn't open file '$pm_filepath': $!"; -- 2.1.4
_______________________________________________ Reproducible-builds mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds
