summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi13
-rw-r--r--guix/build/utils.scm17
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.