guix-commits
[Top][All Lists]
Advanced

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

04/11: packages: Add 'lookup-package-input' & co.


From: guix-commits
Subject: 04/11: packages: Add 'lookup-package-input' & co.
Date: Mon, 21 Jun 2021 17:50:51 -0400 (EDT)

civodul pushed a commit to branch wip-simplified-packages
in repository guix.

commit 3c603f03959e65e50637009fcd587155de4a1612
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Wed Jun 16 23:19:16 2021 +0200

    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.
---
 doc/guix.texi     | 24 ++++++++++++++++++++++++
 guix/packages.scm | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 5ff3898..aeb0b21 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -6802,6 +6802,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
diff --git a/guix/packages.scm b/guix/packages.scm
index 087e6e6..c845026 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -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."



reply via email to

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