Subject: | Reproducible build |
While working on Debian's “reproducible builds” effort [1], we have
noticed that this module doesn't build reproducibly because Makefile.PL is using hash keys in a random order. Please consider the attached patch, which fixes this.
[1]: https://wiki.debian.org/ReproducibleBuilds
This is also https://bugs.debian.org/787754
Thanks for your work on free software,
--
Niko Tyni
ntyni@debian.org
Subject: | 0001-Make-the-build-reproducible-by-sorting-hash-keys-in-.patch |
From ffaee9c0e01aa0e66a8284948eb98efe4420549f Mon Sep 17 00:00:00 2001
From: Niko Tyni <ntyni@debian.org>
Date: Thu, 4 Jun 2015 20:35:36 +0300
Subject: [PATCH] Make the build reproducible by sorting hash keys in
Makefile.PL
---
Makefile.PL | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/Makefile.PL b/Makefile.PL
index 9e6cf51..28b8489 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -79,7 +79,7 @@ sub post_initialize {
my $x = $self->{'OBJ_EXT'};
# Add the table O_FILES
- foreach my $e (keys %tables) {
+ foreach my $e (sort keys %tables) {
$o{ $e . $x } = 1;
}
$o{"$name$x"} = 1;
@@ -93,7 +93,7 @@ sub post_initialize {
# $self->{'H'} = [$self->catfile($self->updir,'encode.h')];
my %xs;
- foreach my $table (keys %tables) {
+ foreach my $table (sort keys %tables) {
push(@{ $self->{'C'} }, "$table.c");
# Do NOT add $table.h etc. to H_FILES unless we own up as to how they
@@ -112,7 +112,7 @@ sub post_initialize {
#define U8 U8
#include "encode.h"
END
- foreach my $table (keys %tables) {
+ foreach my $table (sort keys %tables) {
print XS qq[#include "${table}.h"\n];
}
print XS <<"END";
@@ -141,7 +141,7 @@ PROTOTYPES: DISABLE
BOOT:
{
END
- foreach my $table (keys %tables) {
+ foreach my $table (sort keys %tables) {
print XS qq[#include "${table}.exh"\n];
}
print XS "}\n";
@@ -155,13 +155,13 @@ sub postamble {
my $str =
"# $name\$(OBJ_EXT) depends on .h and .exh files not .c files - but all written by enc2xs\n";
$str .= "$name.c : $name.xs ";
- foreach my $table (keys %tables) {
+ foreach my $table (sort keys %tables) {
$str .= " $table.c";
}
$str .= "\n\n";
$str .= "$name\$(OBJ_EXT) : $name.c\n\n";
- foreach my $table (keys %tables) {
+ foreach my $table (sort keys %tables) {
my $numlines = 1;
my $lengthsofar = length($str);
my $continuator = '';
--
2.1.4