~ruther/guix-local

ba32f6363878165b3ca53113f6c95b8677b8537b — Ludovic Courtès 4 years ago b7f1b4c
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.
2 files changed, 58 insertions(+), 0 deletions(-)

M doc/guix.texi
M guix/packages.scm
M doc/guix.texi => doc/guix.texi +24 -0
@@ 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

M guix/packages.scm => guix/packages.scm +34 -0
@@ 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."