packages: Add 'lookup-package-input' & co.
* guix/packages.scm (lookup-input, lookup-package-input) (lookup-package-native-input, lookup-package-propagated-input) (lookup-package-direct-input): New procedures. * doc/guix.texi (package Reference): Document them.master
parent
b7f1b4c1d0
commit
ba32f63638
|
@ -6817,6 +6817,30 @@ cross-compiling:
|
|||
It is an error to refer to @code{this-package} outside a package definition.
|
||||
@end deffn
|
||||
|
||||
The following helper procedures are provided to help deal with package
|
||||
inputs.
|
||||
|
||||
@deffn {Scheme Procedure} lookup-package-input @var{package} @var{name}
|
||||
@deffnx {Scheme Procedure} lookup-package-native-input @var{package} @var{name}
|
||||
@deffnx {Scheme Procedure} lookup-package-propagated-input @var{package} @var{name}
|
||||
@deffnx {Scheme Procedure} lookup-package-direct-input @var{package} @var{name}
|
||||
Look up @var{name} among @var{package}'s inputs (or native, propagated,
|
||||
or direct inputs). Return it if found, @code{#f} otherwise.
|
||||
|
||||
@var{name} is the name of a package depended on. Here's how you might
|
||||
use it:
|
||||
|
||||
@lisp
|
||||
(use-modules (guix packages) (gnu packages base))
|
||||
|
||||
(lookup-package-direct-input coreutils "gmp")
|
||||
@result{} #<package gmp@@6.2.1 @dots{}>
|
||||
@end lisp
|
||||
|
||||
In this example we obtain the @code{gmp} package that is among the
|
||||
direct inputs of @code{coreutils}.
|
||||
@end deffn
|
||||
|
||||
Because packages are regular Scheme objects that capture a complete
|
||||
dependency graph and associated build procedures, it is often useful to
|
||||
write procedures that take a package and return a modified version
|
||||
|
|
|
@ -108,6 +108,11 @@
|
|||
deprecated-package
|
||||
package-field-location
|
||||
|
||||
lookup-package-input
|
||||
lookup-package-native-input
|
||||
lookup-package-propagated-input
|
||||
lookup-package-direct-input
|
||||
|
||||
package-direct-sources
|
||||
package-transitive-sources
|
||||
package-direct-inputs
|
||||
|
@ -889,6 +894,35 @@ preserved, and only duplicate propagated inputs are removed."
|
|||
((input rest ...)
|
||||
(loop rest (cons input result) propagated first? seen)))))
|
||||
|
||||
(define (lookup-input inputs name)
|
||||
"Lookup NAME among INPUTS, an input list."
|
||||
;; Note: Currently INPUTS is assumed to be an input list that contains input
|
||||
;; labels. In the future, input labels will be gone and this procedure will
|
||||
;; check package names.
|
||||
(match (assoc-ref inputs name)
|
||||
((obj) obj)
|
||||
((obj _) obj)
|
||||
(#f #f)))
|
||||
|
||||
(define (lookup-package-input package name)
|
||||
"Look up NAME among PACKAGE's inputs. Return it if found, #f otherwise."
|
||||
(lookup-input (package-inputs package) name))
|
||||
|
||||
(define (lookup-package-native-input package name)
|
||||
"Look up NAME among PACKAGE's native inputs. Return it if found, #f
|
||||
otherwise."
|
||||
(lookup-input (package-native-inputs package) name))
|
||||
|
||||
(define (lookup-package-propagated-input package name)
|
||||
"Look up NAME among PACKAGE's propagated inputs. Return it if found, #f
|
||||
otherwise."
|
||||
(lookup-input (package-propagated-inputs package) name))
|
||||
|
||||
(define (lookup-package-direct-input package name)
|
||||
"Look up NAME among PACKAGE's direct inputs. Return it if found, #f
|
||||
otherwise."
|
||||
(lookup-input (package-direct-inputs package) name))
|
||||
|
||||
(define (package-direct-sources package)
|
||||
"Return all source origins associated with PACKAGE; including origins in
|
||||
PACKAGE's inputs."
|
||||
|
|
Reference in New Issue