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;

Reply via email to