guix-commits
[Top][All Lists]
Advanced

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

04/04: utils: Add 'search-input-directory'.


From: guix-commits
Subject: 04/04: utils: Add 'search-input-directory'.
Date: Wed, 7 Jul 2021 18:29:44 -0400 (EDT)

civodul pushed a commit to branch core-updates
in repository guix.

commit 7a9f4822c0c431c25071977b68ab79d152887ec3
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Wed Jul 7 23:29:25 2021 +0200

    utils: Add 'search-input-directory'.
    
    * guix/build/utils.scm (search-input-directory): New procedure.
    * doc/guix.texi (Build Utilities): Document it next to
    'search-input-file'.  Tweak wording.
---
 doc/guix.texi        | 13 +++++++++----
 guix/build/utils.scm | 17 +++++++++++++++++
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 53766fb..808b2af 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -8677,10 +8677,15 @@ Return the complete file name for @var{program} as 
found in
 @end deffn
 
 @deffn {Scheme Procedure} search-input-file @var{inputs} @var{name}
-Return the complete file name for @var{name} as found in @var{inputs}.
-If @var{name} could not be found, an exception is raised instead.
-Here, @var{inputs} is an association list like @var{inputs} and
-@var{native-inputs} as available to build phases.
+@deffnx {Scheme Procedure} search-input-directory @var{inputs} @var{name}
+Return the complete file name for @var{name} as found in @var{inputs};
+@code{search-input-file} searches for a regular file and
+@code{search-input-directory} searches for a directory.  If @var{name}
+could not be found, an exception is raised.
+
+Here, @var{inputs} must be an association list like @code{inputs} and
+@code{native-inputs} as available to build phases (@pxref{Build
+Phases}).
 @end deffn
 
 Here is a (simplified) example of how @code{search-input-file} is used
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 2636da3..e7782d3 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -81,6 +81,7 @@
             list->search-path-as-string
             which
             search-input-file
+            search-input-directory
             search-error?
             search-error-path
             search-error-file
@@ -633,6 +634,22 @@ raised."
      (or (search-path directories file)
          (raise (condition (&search-error (path directories) (file file))))))))
 
+(define (search-input-directory inputs directory)
+  "Find a sub-directory named DIRECTORY among the INPUTS and return its
+absolute file name.
+
+DIRECTORY must be a string like \"xml/dtd/docbook\".  If DIRECTORY is not
+found, an exception is raised."
+  (match inputs
+    (((_ . directories) ...)
+     (or (any (lambda (parent)
+                (let ((directory (string-append parent "/" directory)))
+                  (and (directory-exists? directory)
+                       directory)))
+              directories)
+         (raise (condition
+                 (&search-error (path directories) (file directory))))))))
+
 
 ;;;
 ;;; Phases.



reply via email to

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