Message ID | 20200310192910.6251-7-felgru@posteo.net |
---|---|
State | Accepted |
Headers | show |
Series | Update Dune finite element packages | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
Hi again, Felix Gruber <felgru@posteo.net> skribis: > +(define add-openmpi-to-dune-package > + (let ((transformed-packages '())) > + (lambda (p) > + (let* ((p-name (package-name p)) > + (replace-package > + (lambda (mapping) > + (let* ((name (car mapping)) > + (p (cadr mapping)) > + (new-p > + (match (assoc-ref transformed-packages name) > + (#f > + (if (string-prefix? "dune-" name) > + (raise (condition > + (&message > + (message > + (format #f "Need to call \ > +add-openmpi-to-dune-package on '~a' before '~a'." > + name p-name))))) > + p)) > + (transformed-p transformed-p)))) > + `(,name ,new-p)))) > + (substitute-mpi-packages (lambda (inputs) > + (map replace-package inputs))) > + (mpi-p > + (package (inherit p) > + (name (string-append p-name "-openmpi")) > + (inputs `(,@(substitute-mpi-packages (package-inputs p)) > + ("openmpi" ,openmpi))) > + (propagated-inputs > + (substitute-mpi-packages (package-propagated-inputs p))) > + (arguments > + (substitute-keyword-arguments (package-arguments p) > + ((#:phases phases '%standard-phases) > + `(modify-phases ,phases > + (add-before 'check 'mpi-setup > + ,%openmpi-setup))))) > + (synopsis (string-append (package-synopsis p) " (with MPI support)"))))) > + (begin > + (set! transformed-packages > + (acons p-name mpi-p transformed-packages)) > + mpi-p))))) I think it’s a good idea to add those “-openmpi” packages. However, I have suggestions regarding the code above. :-) A general note: set!, car, cdr, etc. are frowned upon in Guix: https://guix.gnu.org/manual/en/html_node/Coding-Style.html It seems to me that ‘replace-package’ above is overly generic: since it’s an internal procedure, we don’t need to add error cases, messages, etc. Last, could it be written in terms of ‘package-mapping’? That takes care of graph traversal and memoization. Thanks, Ludo’.
Hi Ludo’, thanks for your suggestions regarding the creation of the dune-*-openmpi packages. I've rewritten the add-openmpi-to-dune-package in terms of package-mapping as you suggested. You'll find the modified version of my last two patches in the following two emails. Many thanks, Felix Felix Gruber (2): gnu: dune-*: remove openmpi dependency gnu: define dune-*-openmpi packages gnu/packages/maths.scm | 90 ++++++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 30 deletions(-)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 33a5efd2f0..e904ca1bd8 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -126,7 +126,9 @@ #:use-module (gnu packages version-control) #:use-module (gnu packages wxwidgets) #:use-module (gnu packages xml) - #:use-module (srfi srfi-1)) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35)) (define-public aris (package @@ -5027,6 +5029,81 @@ built on top of DUNE, the Distributed and Unified Numerics Environment.") ;; Either GPL version 2 with "runtime exception" or LGPLv3+. (license (list license:lgpl3+ license:gpl2)))) +(define add-openmpi-to-dune-package + (let ((transformed-packages '())) + (lambda (p) + (let* ((p-name (package-name p)) + (replace-package + (lambda (mapping) + (let* ((name (car mapping)) + (p (cadr mapping)) + (new-p + (match (assoc-ref transformed-packages name) + (#f + (if (string-prefix? "dune-" name) + (raise (condition + (&message + (message + (format #f "Need to call \ +add-openmpi-to-dune-package on '~a' before '~a'." + name p-name))))) + p)) + (transformed-p transformed-p)))) + `(,name ,new-p)))) + (substitute-mpi-packages (lambda (inputs) + (map replace-package inputs))) + (mpi-p + (package (inherit p) + (name (string-append p-name "-openmpi")) + (inputs `(,@(substitute-mpi-packages (package-inputs p)) + ("openmpi" ,openmpi))) + (propagated-inputs + (substitute-mpi-packages (package-propagated-inputs p))) + (arguments + (substitute-keyword-arguments (package-arguments p) + ((#:phases phases '%standard-phases) + `(modify-phases ,phases + (add-before 'check 'mpi-setup + ,%openmpi-setup))))) + (synopsis (string-append (package-synopsis p) " (with MPI support)"))))) + (begin + (set! transformed-packages + (acons p-name mpi-p transformed-packages)) + mpi-p))))) + +(define-public dune-common-openmpi + (add-openmpi-to-dune-package dune-common)) + +(define-public dune-geometry-openmpi + (add-openmpi-to-dune-package dune-geometry)) + +(define-public dune-istl-openmpi + (add-openmpi-to-dune-package dune-istl)) + +(define-public dune-typetree-openmpi + (add-openmpi-to-dune-package dune-typetree)) + +(define-public dune-uggrid-openmpi + (add-openmpi-to-dune-package dune-uggrid)) + +(define-public dune-grid-openmpi + (add-openmpi-to-dune-package dune-grid)) + +(define-public dune-alugrid-openmpi + (add-openmpi-to-dune-package dune-alugrid)) + +(define-public dune-subgrid-openmpi + (add-openmpi-to-dune-package dune-subgrid)) + +(define-public dune-localfunctions-openmpi + (add-openmpi-to-dune-package dune-localfunctions)) + +(define-public dune-functions-openmpi + (add-openmpi-to-dune-package dune-functions)) + +(define-public dune-pdelab-openmpi + (add-openmpi-to-dune-package dune-pdelab)) + (define-public mlucas (package (name "mlucas")