gnu: petsc: Update to 3.16.1.
* gnu/packages/maths.scm (petsc): Update to 3.16.1. [native-inputs]: Use PYTHON instead of PYTHON-2. Add WHICH. [arguments]: Rewrite using gexps. Pass '--with-openblas-dir'. In 'configure' phase, modify "config/example_template.py".
This commit is contained in:
		
							parent
							
								
									57b62e5bb9
								
							
						
					
					
						commit
						07ac13a26a
					
				
					 1 changed files with 78 additions and 72 deletions
				
			
		| 
						 | 
				
			
			@ -2870,7 +2870,7 @@ September 2004}")
 | 
			
		|||
(define-public petsc
 | 
			
		||||
  (package
 | 
			
		||||
    (name "petsc")
 | 
			
		||||
    (version "3.11.2")
 | 
			
		||||
    (version "3.16.1")
 | 
			
		||||
    (source
 | 
			
		||||
     (origin
 | 
			
		||||
      (method url-fetch)
 | 
			
		||||
| 
						 | 
				
			
			@ -2878,12 +2878,13 @@ September 2004}")
 | 
			
		|||
      (uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/"
 | 
			
		||||
                          "petsc-lite-" version ".tar.gz"))
 | 
			
		||||
      (sha256
 | 
			
		||||
       (base32 "1645nwwcp9bcnfnxikk480mhbbacdvhsay2c401818hk97dqj5nx"))))
 | 
			
		||||
       (base32 "0sm03vpg010q9icidiq587n325m0598cj6hab2rdv85nwyygg74h"))))
 | 
			
		||||
    (outputs '("out"                    ; libraries and headers
 | 
			
		||||
               "examples"))             ; ~30MiB of examples
 | 
			
		||||
    (build-system gnu-build-system)
 | 
			
		||||
    (native-inputs
 | 
			
		||||
     `(("python" ,python-2)))
 | 
			
		||||
     `(("python" ,python)
 | 
			
		||||
       ("which" ,which)))
 | 
			
		||||
    (inputs
 | 
			
		||||
     `(("gfortran" ,gfortran)
 | 
			
		||||
       ("openblas" ,openblas)
 | 
			
		||||
| 
						 | 
				
			
			@ -2892,75 +2893,80 @@ September 2004}")
 | 
			
		|||
       ;; leaving out opengl, as configuration seems to only be for mac
 | 
			
		||||
       ))
 | 
			
		||||
    (arguments
 | 
			
		||||
     `(#:test-target "test"
 | 
			
		||||
       #:parallel-build? #f             ; build is parallel by default
 | 
			
		||||
       #:configure-flags
 | 
			
		||||
       `("--with-mpi=0"
 | 
			
		||||
         "--with-openmp=1"
 | 
			
		||||
         "--with-openblas=1"
 | 
			
		||||
         "--with-superlu=1")
 | 
			
		||||
       #:make-flags
 | 
			
		||||
       ;; Honor (parallel-job-count) for build.  Do not use --with-make-np,
 | 
			
		||||
       ;; whose value is dumped to $out/lib/petsc/conf/petscvariables.
 | 
			
		||||
       (list (format #f "MAKE_NP=~a" (parallel-job-count)))
 | 
			
		||||
       #:phases
 | 
			
		||||
       (modify-phases %standard-phases
 | 
			
		||||
        (replace 'configure
 | 
			
		||||
          ;; PETSc's configure script is actually a python script, so we can't
 | 
			
		||||
          ;; run it with bash.
 | 
			
		||||
          (lambda* (#:key outputs (configure-flags '())
 | 
			
		||||
                          #:allow-other-keys)
 | 
			
		||||
            (let* ((prefix (assoc-ref outputs "out"))
 | 
			
		||||
                   (flags `(,(string-append "--prefix=" prefix)
 | 
			
		||||
                            ,@configure-flags)))
 | 
			
		||||
              (format #t "build directory: ~s~%" (getcwd))
 | 
			
		||||
              (format #t "configure flags: ~s~%" flags)
 | 
			
		||||
              (apply invoke "./configure" flags))))
 | 
			
		||||
        (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"))
 | 
			
		||||
              #t)))
 | 
			
		||||
        (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))))
 | 
			
		||||
              ;; PETSc installs some build logs, which aren't necessary.
 | 
			
		||||
              (for-each (lambda (file)
 | 
			
		||||
                          (let ((f (string-append out "/lib/petsc/conf/" file)))
 | 
			
		||||
                            (when (file-exists? f)
 | 
			
		||||
                              (delete-file f))))
 | 
			
		||||
                        '("configure.log" "make.log" "gmake.log"
 | 
			
		||||
                          "test.log" "error.log" "RDict.db"
 | 
			
		||||
                          "PETScBuildInternal.cmake"
 | 
			
		||||
                          ;; Once installed, should uninstall with Guix
 | 
			
		||||
                          "uninstall.py"))
 | 
			
		||||
              #t)))
 | 
			
		||||
        (add-after 'install 'move-examples
 | 
			
		||||
          (lambda* (#:key outputs #:allow-other-keys)
 | 
			
		||||
            (let* ((out (assoc-ref outputs "out"))
 | 
			
		||||
                   (examples (assoc-ref outputs "examples"))
 | 
			
		||||
                   (exdir (string-append out "/share/petsc/examples"))
 | 
			
		||||
                   (exdir' (string-append examples "/share/petsc/examples")))
 | 
			
		||||
              (copy-recursively exdir exdir')
 | 
			
		||||
              (delete-file-recursively exdir)
 | 
			
		||||
              #t))))))
 | 
			
		||||
     (list
 | 
			
		||||
      #:test-target "test"
 | 
			
		||||
      #:parallel-build? #f             ; build is parallel by default
 | 
			
		||||
      #:configure-flags
 | 
			
		||||
      #~(list "--with-mpi=0"
 | 
			
		||||
              "--with-openmp=1"
 | 
			
		||||
              "--with-openblas=1"
 | 
			
		||||
              (string-append "--with-openblas-dir="
 | 
			
		||||
                             #$(this-package-input "openblas"))
 | 
			
		||||
              "--with-superlu=1")
 | 
			
		||||
      #:make-flags
 | 
			
		||||
      ;; Honor (parallel-job-count) for build.  Do not use --with-make-np,
 | 
			
		||||
      ;; whose value is dumped to $out/lib/petsc/conf/petscvariables.
 | 
			
		||||
      #~(list (format #f "MAKE_NP=~a" (parallel-job-count)))
 | 
			
		||||
      #:phases
 | 
			
		||||
      #~(modify-phases %standard-phases
 | 
			
		||||
          (replace 'configure
 | 
			
		||||
            ;; PETSc's configure script is actually a python script, so we can't
 | 
			
		||||
            ;; run it with bash.
 | 
			
		||||
            (lambda* (#:key outputs (configure-flags '())
 | 
			
		||||
                      #:allow-other-keys)
 | 
			
		||||
              (let* ((prefix (assoc-ref outputs "out"))
 | 
			
		||||
                     (flags `(,(string-append "--prefix=" prefix)
 | 
			
		||||
                              ,@configure-flags)))
 | 
			
		||||
                (format #t "build directory: ~s~%" (getcwd))
 | 
			
		||||
                (format #t "configure flags: ~s~%" flags)
 | 
			
		||||
                (apply invoke "./configure" flags)
 | 
			
		||||
 | 
			
		||||
                ;; 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))))
 | 
			
		||||
                ;; PETSc installs some build logs, which aren't necessary.
 | 
			
		||||
                (for-each (lambda (file)
 | 
			
		||||
                            (let ((f (string-append out "/lib/petsc/conf/" file)))
 | 
			
		||||
                              (when (file-exists? f)
 | 
			
		||||
                                (delete-file f))))
 | 
			
		||||
                          '("configure.log" "make.log" "gmake.log"
 | 
			
		||||
                            "test.log" "error.log" "RDict.db"
 | 
			
		||||
                            "PETScBuildInternal.cmake"
 | 
			
		||||
                            ;; Once installed, should uninstall with Guix
 | 
			
		||||
                            "uninstall.py")))))
 | 
			
		||||
          (add-after 'install 'move-examples
 | 
			
		||||
            (lambda* (#:key outputs #:allow-other-keys)
 | 
			
		||||
              (let* ((out (assoc-ref outputs "out"))
 | 
			
		||||
                     (examples (assoc-ref outputs "examples"))
 | 
			
		||||
                     (exdir (string-append out "/share/petsc/examples"))
 | 
			
		||||
                     (exdir' (string-append examples "/share/petsc/examples")))
 | 
			
		||||
                (copy-recursively exdir exdir')
 | 
			
		||||
                (delete-file-recursively exdir)))))))
 | 
			
		||||
    (home-page "https://www.mcs.anl.gov/petsc")
 | 
			
		||||
    (synopsis "Library to solve PDEs")
 | 
			
		||||
    (description "PETSc, pronounced PET-see (the S is silent), is a suite of
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue