diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-07-07 23:29:25 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-07-08 00:28:57 +0200 |
commit | 7a9f4822c0c431c25071977b68ab79d152887ec3 (patch) | |
tree | d8e44705829c6454b4fd769eb8e7349d75d02bd5 | |
parent | 198df037562e7b4e0e90783dc5cba1e1c32f2110 (diff) | |
download | guix-7a9f4822c0c431c25071977b68ab79d152887ec3.tar.gz |
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.
-rw-r--r-- | doc/guix.texi | 13 | ||||
-rw-r--r-- | guix/build/utils.scm | 17 |
2 files changed, 26 insertions, 4 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 53766fbec2..808b2af664 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 2636da392f..e7782d3e08 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. |