Bug#1130622: dh-fortran: please make the build reproducible

Chris Lamb lamby at debian.org
Fri Mar 13 17:41:01 GMT 2026


Source: dh-fortran
Version: 0.68
Severity: wishlist
Tags: patch
User: reproducible-builds at lists.alioth.debian.org
Usertags: randomness toolchain
X-Debbugs-Cc: reproducible-bugs at lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0], we noticed that
dh-fortran was generated unreproducible output. For example, in the
fortran-assert package, the Depends field of the package (populated
via the ${fortran:Depends} substvar) was nondetermistic:

-Depends: gfortran-15 | gfortran-16 | gfortran-mod-16, flang-new-20 | flang-new-19 | flang-new-17 | flang-new-18 | flang-21 | flang-mod-1, libfortran-assert0 (= 3.1.0-5)
+Depends: gfortran-15 | gfortran-16 | gfortran-mod-16, flang-new-19 | flang-21 | flang-new-17 | flang-new-20 | flang-new-18 | flang-mod-1, libfortran-assert0 (= 3.1.0-5)

This is because dh-fortran iterated over a Python set() and similar
when generating this line.

Patch attached.

  [0] https://reproducible-builds.org/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby at debian.org / chris-lamb.co.uk
       `-
-------------- next part --------------
diff --git dhfortran/module.py dhfortran/module.py
index ee4b654..ebbbe42 100644
--- dhfortran/module.py
+++ dhfortran/module.py
@@ -239,12 +239,12 @@ def dh_fortran_mod(files, *args, **kwargs):
     depends = []
     for package in d.packages:
         if package in d.modversions:
-            for m in d.modversions[package]:
+            for m in sorted(d.modversions[package]):
                 comps = set()
                 for c in cmplrs.compilers:
                     if cmplrs.compilers[c]["mod"] == m:
                         comps.add(c)
-                depends.append("|".join(comps) + " | " + m)
+                depends.append("|".join(sorted(comps)) + " | " + m)
             d.addsubstvar(package, "fortran:Depends", ",".join(depends))
         if "config_file" in d.packages[package] and package in d.modversions:
             # config file defined, so create cleanup script


More information about the Reproducible-bugs mailing list