GNU bug report logs -
#50335
Inheritance vs. ‘this-package’
Previous Next
Full log
View this message in rfc822 format
Hi!
We stumbled upon an idiom for package arguments that, combined with
package inheritance, would not work as expected. It goes like this
(taken from <https://gitlab.inria.fr/guix-hpc/guix-hpc/>):
--8<---------------cut here---------------start------------->8---
(define-public starpu
(package
;; …
(arguments
(substitute-keyword-arguments (package-arguments starpu-1.2)
((#:configure-flags flags '())
(match (assoc "mpi" (package-propagated-inputs this-package))
(("mpi" mpi)
(if (string=? (package-name mpi) "nmad")
`(cons "--enable-nmad" ,flags)
flags))))))
(propagated-inputs `(("mpi" ,openmpi)))))
(define-public starpu+fxt
(package
(inherit starpu)
;; …
(arguments
(substitute-keyword-arguments (package-arguments starpu)
((#:configure-flags flags '())
`(cons "--with-fxt" ,flags))))))
--8<---------------cut here---------------end--------------->8---
The first package, ‘starpu’, has its arguments depend on:
(package-propagated-inputs this-package)
This is smart because if you inherit from it without changing the
‘arguments’ field (for instance by doing ‘--with-input=openmpi=nmad’),
it’ll adjust its configure flags based on the MPI package it actually
depends on.
However, this trick doesn’t work with the second package, ‘starpu-fxt’:
if you do:
guix build starpu-fxt --with-input=openmpi=nmad
the ‘--enable-nmad’ configure flag will not be passed. This is because
‘starpu-fxt’ calls:
(package-arguments starpu)
which returns the original arguments of ‘starpu’.
Still here? :-)
This is admittedly a pretty far-fetched example and there are ways to
work around it¹. Still, I wonder if we could up with a linguistic
device (ah ha!) to address that.
We don’t want to (package-arguments this-package) here: that would
naturally lead to an infinite loop. But we want something close to it,
in spirit: (package-arguments parent), where ‘parent’ is the package we
inherit from.
(package-arguments parent) could call the ‘arguments’ thunk of the
parent, but it would pass it the child as its argument.
Or something like that.
Thoughts?
Ludo’.
¹ https://gitlab.inria.fr/guix-hpc/guix-hpc/-/commit/761cfe97d5bb42dbbde538593cef93e803086e3b
This bug report was last modified 1 year and 298 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.