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
Thanks for your work on free software,
--
Niko Tyni ntyni@debian.org
Subject: | 0001-Make-the-XS-code-reproducible-by-sorting-hash-keys.patch |
From 490886f85f22c84268702fad88163e7e6392fe6f Mon Sep 17 00:00:00 2001
From: Niko Tyni <ntyni@debian.org>
Date: Mon, 1 Jun 2015 20:32:04 +0300
Subject: [PATCH] Make the XS code reproducible by sorting hash keys.
---
Makefile.PL | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/Makefile.PL b/Makefile.PL
index bd7e649..3f494d8 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -74,7 +74,7 @@ sub post_initialize
$self->{'C'} = ["$name.c"];
# $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
# get built.
@@ -92,7 +92,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";
@@ -121,7 +121,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";
@@ -135,14 +135,14 @@ sub postamble
my $dir = "."; # $self->catdir('Encode');
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);
--
2.1.4