Source: dh-fortran-mod
Version: 0.16
Severity: wishlist
Tags: patch
User: reproducible-bui...@lists.alioth.debian.org
Usertags: randomness toolchain
X-Debbugs-Cc: reproducible-b...@lists.alioth.debian.org
Hi,
Whilst working on the Reproducible Builds effort [0] we noticed that
dh-fortran-mod was not generating deterministic output. For example,
here is healpix-fortran's preinst file:
│ │ │ │ @@ -1,14 +1,14 @@
│ │ │ │ #!/bin/sh
│ │ │ │ set -e
│ │ │ │ # Automatically added by dh_fortran_mod/0.16
│ │ │ │ # May be installed multiple times for different canoncomp
│ │ │ │ multiarch="x86_64-linux-gnu"
│ │ │ │ base="gfortran-mod-15"
│ │ │ │ -canoncomp='gfortran-10'
│ │ │ │ +canoncomp='x86_64-linux-gnu-gfortran-9'
│ │ │ │
│ │ │ │ # clear cruft from old bug if present
│ │ │ │ rm -f /usr/lib/$multiarch/fortran/$base/$base
│ │ │ │
│ │ │ │ mkdir -p /usr/lib/$multiarch/fortran/$base
│ │ │ │ if ! test -x /usr/lib/$multiarch/fortran/$canoncomp ; then
│ │ │ │ ln -sf /usr/lib/$multiarch/fortran/$base
/usr/lib/$multiarch/fortran/$canoncomp
│ │ │ │ @@ -21,15 +21,15 @@
│ │ │ │ rmdir /usr/lib/$multiarch/fortran/flang-mod-33
│ │ │ │ fi
│ │ │ │ # End automatically added section
│ │ │ │ # Automatically added by dh_fortran_mod/0.16
│ │ │ │ # May be installed multiple times for different canoncomp
│ │ │ │ multiarch="x86_64-linux-gnu"
│ │ │ │ base="gfortran-mod-15"
│ │ │ │ -canoncomp='x86_64-linux-gnu-gfortran-9'
│ │ │ │ +canoncomp='gfortran-8'
│ │ │ │
│ │ │ │ # clear cruft from old bug if present
│ │ │ │ rm -f /usr/lib/$multiarch/fortran/$base/$base
│ │ │ │
│ │ │ │ mkdir -p /usr/lib/$multiarch/fortran/$base
│ │ │ │ if ! test -x /usr/lib/$multiarch/fortran/$canoncomp ; then
│ │ │ │ ln -sf /usr/lib/$multiarch/fortran/$base
/usr/lib/$multiarch/fortran/$canoncomp
│ │ │ │ @@ -42,15 +42,15 @@
│ │ │ │ rmdir /usr/lib/$multiarch/fortran/flang-mod-33
│ │ │ │ fi
│ │ │ │ # End automatically added section
│ │ │ │ # Automatically added by dh_fortran_mod/0.16
│ │ │ │ # May be installed multiple times for different canoncomp
│ │ │ │ multiarch="x86_64-linux-gnu"
│ │ │ │ base="gfortran-mod-15"
│ │ │ │ -canoncomp='gfortran-8'
│ │ │ │ +canoncomp='gfortran-10'
│ │ │ │
│ │ │ │ # clear cruft from old bug if present
│ │ │ │ rm -f /usr/lib/$multiarch/fortran/$base/$base
│ │ │ │
│ │ │ │ mkdir -p /usr/lib/$multiarch/fortran/$base
│ │ │ │ if ! test -x /usr/lib/$multiarch/fortran/$canoncomp ; then
│ │ │ │ ln -sf /usr/lib/$multiarch/fortran/$base
/usr/lib/$multiarch/fortran/$canoncomp
The ordering is non-deterministic due to the main dh_fortran_mod
script iterates over a Perl dictionary in key order.
Patch attached.
[0] https://reproducible-builds.org/
Regards,
--
,''`.
: :' : Chris Lamb
`. `'` la...@debian.org / chris-lamb.co.uk
`-
diff --git a/dh_fortran_mod.in b/dh_fortran_mod.in
index 8a3a48e..79f5b3f 100755
--- a/dh_fortran_mod.in
+++ b/dh_fortran_mod.in
@@ -388,7 +388,7 @@ foreach my $package (getpackages()) {
keys %modversions;
if ($config) { # config file defined, so create scripts
- while (my($compiler,$fcompilermod) = each %modversions) {
+ while (my($compiler,$fcompilermod) = sort each %modversions) {
my $lnk=`readlink -f /usr/bin/$compiler`;
my $canoncomp=`basename $lnk`;
chomp $canoncomp;