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.
This commit is contained in:
Ludovic Courtès 2021-07-07 23:29:25 +02:00
parent 198df03756
commit 7a9f4822c0
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 26 additions and 4 deletions

View File

@ -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

View File

@ -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.