From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:470:142:3::10]:44321) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNB4-0004xL-Oa for guix-patches@gnu.org; Thu, 12 Mar 2020 08:43:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jCNB0-000067-3t for guix-patches@gnu.org; Thu, 12 Mar 2020 08:43:06 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:50166) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jCNB0-000061-0U for guix-patches@gnu.org; Thu, 12 Mar 2020 08:43:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jCNAz-0001F5-VI for guix-patches@gnu.org; Thu, 12 Mar 2020 08:43:01 -0400 Subject: [bug#39862] [PATCH v2 6/6] gnu: define dune-*-openmpi packages Resent-Message-ID: From: Ludovic =?UTF-8?Q?Court=C3=A8s?= References: <5e890189-d5f7-a646-fe37-1f93115d17f9@posteo.net> <20200310192910.6251-7-felgru@posteo.net> Date: Thu, 12 Mar 2020 13:42:37 +0100 In-Reply-To: <20200310192910.6251-7-felgru@posteo.net> (Felix Gruber's message of "Tue, 10 Mar 2020 20:29:10 +0100") Message-ID: <87k13pvj5u.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Felix Gruber Cc: zimoun , 39862@debbugs.gnu.org Hi again, Felix Gruber 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=E2=80=99s a good idea to add those =E2=80=9C-openmpi=E2=80=9D pa= ckages. 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 =E2=80=98replace-package=E2=80=99 above is overly gener= ic: since it=E2=80=99s an internal procedure, we don=E2=80=99t need to add error case= s, messages, etc. Last, could it be written in terms of =E2=80=98package-mapping=E2=80=99? T= hat takes care of graph traversal and memoization. Thanks, Ludo=E2=80=99.