v4 should (hopefully) fix all issues regarding reprocuibility of petsc: I have tested v4 on multiple machines with exact identical output (ran `guix hash -S nar ...` on the packages) and also tested on one machine with `guix build --check` On 6 Mar 2024, at 12:51, Lars Bilke wrote: > 'Libraries compiled on' does not have to be removed since PETSc 3.9: > > https: //gitlab.com/petsc/petsc/-/commit/a970bd748978a4e12790be7c36b10e832ec0149f > > Also merged all add-after 'install phases into `clean-install. > > Change-Id: I41d82339e43187d7dc7e3fc189a338784c363c68 > > sort source files in generated makefiles for reproducibility > > Change-Id: I86e5b9cd0d7184019617bd8ae9a23eaf459891d7 > --- > gnu/packages/maths.scm | 56 ++++++++++++++++++------------------------ > 1 file changed, 24 insertions(+), 32 deletions(-) > > diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm > index 1f61ee0583..1ea5ccee74 100644 > --- a/gnu/packages/maths.scm > +++ b/gnu/packages/maths.scm > @@ -3447,38 +3447,41 @@ (define-public petsc > (let* ((prefix (assoc-ref outputs "out")) > (flags `(,(string-append "--prefix=" prefix) > ,@configure-flags))) > + ;; sort source files in configure (for reproducibility) > + (substitute* "config/gmakegen.py" > + (("join\\(srcs\\[lang\\]\\)") "join(sorted(srcs[lang]))")) > (format #t "build directory: ~s~%" (getcwd)) > (format #t "configure flags: ~s~%" flags) > (apply invoke "./configure" flags) > - > + ;; Prevent build directory Linux version from leaking into > + ;; compiled code > + (substitute* (find-files "." "petscmachineinfo.h") > + (((getcwd)) out) > + ;; Scrub build machine characteristic > + (("Machine characteristics: Linux-[0-9]+\\.[0-9]+\\.[0-9]+") > + "Machine characteristics: Linux-x.x.x")) > ;; Generate test scripts with the right shebang. > (substitute* "config/example_template.py" > (("#!/usr/bin/env bash") > (string-append "#!" (which "bash"))))))) > - (add-after 'configure 'clean-local-references > - (lambda* (#:key outputs #:allow-other-keys) > - (let ((out (assoc-ref outputs "out"))) > - (substitute* (find-files "." "^petsc(conf|machineinfo).h$") > - ;; Prevent build directory from leaking into compiled code > - (((getcwd)) out) > - ;; Scrub timestamp for reproducibility > - ((".*Libraries compiled on.*") "")) > - (substitute* (find-files "." "petscvariables") > - ;; Do not expose build machine characteristics, set to defaults. > - (("MAKE_NP = [:digit:]+") "MAKE_NP = 2") > - (("NPMAX = [:digit:]+") "NPMAX = 2"))))) > (add-after 'install 'clean-install > - ;; Try to keep installed files from leaking build directory names. > (lambda* (#:key inputs outputs #:allow-other-keys) > (let ((out (assoc-ref outputs "out"))) > - (substitute* (map (lambda (file) > - (string-append out "/lib/petsc/conf/" file)) > - '("petscvariables")) > - (((getcwd)) out)) > - ;; Make compiler references point to the store > (substitute* (string-append out "/lib/petsc/conf/petscvariables") > - (("= (gcc|g\\+\\+|gfortran)" _ compiler) > - (string-append "= " (which compiler)))) > + ;; Try to keep installed files from leaking build directory names. > + (((getcwd)) out) > + ;; Do not expose build machine characteristics, set to defaults. > + (("MAKE_NP = [[:digit:]]+") "MAKE_NP = 2") > + (("MAKE_TEST_NP = [[:digit:]]+") "MAKE_TEST_NP = 2") > + (("MAKE_LOAD = [[:digit:]]+\\.[[:digit:]]+") "MAKE_LOAD = 2.0") > + (("NPMAX = [[:digit:]]+") "NPMAX = 2") > + ;; Do not retain a reference to GCC and other build only inputs. > + (("([[:graph:]]+)/bin/gcc") "gcc") > + (("([[:graph:]]+)/bin/g\\+\\+") "g++") > + (("([[:graph:]]+)/bin/make") "make") > + (("([[:graph:]]+)/bin/diff") "diff") > + (("([[:graph:]]+)/bin/sed") "sed") > + (("([[:graph:]]+)/bin/gfortran") "gfortran")) > ;; PETSc installs some build logs, which aren't necessary. > (for-each (lambda (file) > (let ((f (string-append out "/lib/petsc/conf/" file))) > @@ -3490,17 +3493,6 @@ (define-public petsc > "configure-hash" > ;; Once installed, should uninstall with Guix > "uninstall.py"))))) > - (add-after 'clean-install 'clear-reference-to-compiler > - (lambda* (#:key inputs outputs #:allow-other-keys) > - ;; Do not retain a reference to GCC and other build only inputs. > - (let ((out (assoc-ref outputs "out"))) > - (substitute* (string-append out "/lib/petsc/conf/petscvariables") > - (("([[:graph:]]+)/bin/gcc") "gcc") > - (("([[:graph:]]+)/bin/g\\+\\+") "g++") > - (("([[:graph:]]+)/bin/make") "make") > - (("([[:graph:]]+)/bin/diff") "diff") > - (("([[:graph:]]+)/bin/sed") "sed") > - (("([[:graph:]]+)/bin/gfortran") "gfortran"))))) > (add-after 'install 'move-examples > (lambda* (#:key outputs #:allow-other-keys) > (let* ((out (assoc-ref outputs "out")) > > base-commit: 75bad75367fcf2c289fae3b40dbcc850f92177be > -- > 2.43.0