help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Package variant defined in manifest not visible by Guix


From: Ricardo Wurmus
Subject: Re: Package variant defined in manifest not visible by Guix
Date: Mon, 16 Aug 2021 16:34:55 +0200
User-agent: mu4e 1.4.15; emacs 27.2


Hi,

I'm trying to use a manifest file to define a package variant which adds
an option to the configure phase:

```

(use-modules (inria storm))

(define starpu-maxnodes1
  (package
    (inherit starpu)
    (arguments
      (substitute-keyword-arguments (package-arguments starpu)
((#:configure-flags flags '()) `(cons "--enable-maxnodes=1"
,flags))))))

```

When I'm trying to build this variant, guix can't find it:

```

% guix build -c 2 -m starpu-maxnodes1.scm starpu-maxnodes1
guix build: erreur : starpu-maxnodes1 : paquet inconnu

```

I don't see what I'm doing wrong. Any idea ?

There seems to be a small misunderstanding. You defined a package variant, but that’s not a manifest. A manifest describes the complete contents of a profile; i.e. it’s a list of packages that Guix should install.

Here are three different ways that should work for you:

1) Build a single package from a file.

Here we define the package variant in a file and make sure that the file evaluates to the package value:

--8<---------------cut here---------------start------------->8---
(use-modules (inria storm))

(define starpu-maxnodes1
 (package
   (inherit starpu)
   (arguments
     (substitute-keyword-arguments (package-arguments starpu)
                                   ((#:configure-flags flags '())
`(cons "--enable-maxnodes=1" ,flags))))))

;; Make sure the file evaluates to the package value.
;; The definition alone has no specified return value.
starpu-maxnodes1
--8<---------------cut here---------------end--------------->8---

Now we can build the package specified in the file:

   guix build --file=this-file.scm


2) Build a whole manifest from a file.

Here the file must evaluate to a manifest value, not just a single package.

--8<---------------cut here---------------start------------->8---
(use-modules (inria storm))

(define starpu-maxnodes1
 (package
   (inherit starpu)
   (arguments
     (substitute-keyword-arguments (package-arguments starpu)
                                   ((#:configure-flags flags '())
`(cons "--enable-maxnodes=1" ,flags))))))

(packages->manifest (list starpu-maxnodes1))
--8<---------------cut here---------------end--------------->8---

Then build the profile from the manifest file:

   guix build --manifest=this-file.scm


3) Create a module and use it however you want.

You can make the custom package available to any Guix command by putting it into a Guile module and then informing Guix about the module. This is a little more effort as you need more boilerplate code to define the module (and the file name needs to match the moule header, etc).


--8<---------------cut here---------------start------------->8---
(define-module (my packages storm)
#:use-module (gnu packages)
#:use-module (guix packages)
#:use-module (guix utils)
;; …
#:use-module (inria storm)
#:export (starpu-maxnodes1))

(define starpu-maxnodes1
 (package
   (inherit starpu)
   (arguments
     (substitute-keyword-arguments (package-arguments starpu)
                                   ((#:configure-flags flags '())
`(cons "--enable-maxnodes=1" ,flags))))))
--8<---------------cut here---------------end--------------->8---

Put this in a file “my/packages/storm.scm” and then set the GUIX_PACKAGE_PATH environment variable to the directory containing “my” (e.g. $HOME/code/guix/custom containing $HOME/code/guix/custom/my/packages/storm.scm).

Note that you haven’t overridden the “name” field of the original “starpu” package, so on the command line the package cannot be distinguished (unless you use “-e '(@ (my packages storm) starpu-maxnodes1)'”). Do this to also change the name on the command line:

--8<---------------cut here---------------start------------->8---
(define starpu-maxnodes1
 (package
   (inherit starpu)
   (name "starpu-maxnodes1")
   (arguments
     (substitute-keyword-arguments (package-arguments starpu)
                                   ((#:configure-flags flags '())
`(cons "--enable-maxnodes=1" ,flags))))))
--8<---------------cut here---------------end--------------->8---

Hope this helps!

--
Ricardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]