Package: libkinosearch1-perl
Version: 1.01-2
Severity: wishlist
Tags: patch
User: reproducible-builds@lists.alioth.debian.org
Usertags: fileordering
X-Debbugs-Cc: reproducible-builds@lists.alioth.debian.org

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   nt...@debian.org
>From efa36d64ab5be55a03deebf2fa91a4938de57fef Mon Sep 17 00:00:00 2001
From: Niko Tyni <nt...@debian.org>
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
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Reply via email to