Subject: | libkinosearch1-perl: please make the build reproducible |
Date: | Thu, 10 Sep 2015 23:39:03 +0200 |
To: | bug-kinosearch1 [...] rt.cpan.org |
From: | Florian Schlichting <fsfs [...] debian.org> |
Hi,
I'm forwarding Debian bug #797711 (http://bugs.debian.org/797711) and a
patch by Niko Tyni:
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.
[0] https://wiki.debian.org/ReproducibleBuilds
--
Niko Tyni ntyni@debian.org
From efa36d64ab5be55a03deebf2fa91a4938de57fef Mon Sep 17 00:00:00 2001
From: Niko Tyni <ntyni@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
Florian