build-support/gnu: Add support for file patterns in search paths.
* guix/build/utils.scm (search-path-as-list): Add #:pattern parameter and honor it. (set-path-environment-variable): Likewise, and pass it to 'search-path-as-list'. * guix/packages.scm (search-path-specification->sexp): Add PATTERN slot. * guix/build/gnu-build-system.scm (set-paths): Adjust accordingly.
This commit is contained in:
parent
af07095516
commit
7ec02d374d
|
@ -73,21 +73,23 @@
|
||||||
input-directories)))
|
input-directories)))
|
||||||
|
|
||||||
(for-each (match-lambda
|
(for-each (match-lambda
|
||||||
((env-var (files ...) separator type)
|
((env-var (files ...) separator type pattern)
|
||||||
(set-path-environment-variable env-var files
|
(set-path-environment-variable env-var files
|
||||||
input-directories
|
input-directories
|
||||||
#:separator separator
|
#:separator separator
|
||||||
#:type type)))
|
#:type type
|
||||||
|
#:pattern pattern)))
|
||||||
search-paths)
|
search-paths)
|
||||||
|
|
||||||
(when native-search-paths
|
(when native-search-paths
|
||||||
;; Search paths for native inputs, when cross building.
|
;; Search paths for native inputs, when cross building.
|
||||||
(for-each (match-lambda
|
(for-each (match-lambda
|
||||||
((env-var (files ...) separator type)
|
((env-var (files ...) separator type pattern)
|
||||||
(set-path-environment-variable env-var files
|
(set-path-environment-variable env-var files
|
||||||
native-input-directories
|
native-input-directories
|
||||||
#:separator separator
|
#:separator separator
|
||||||
#:type type)))
|
#:type type
|
||||||
|
#:pattern pattern)))
|
||||||
native-search-paths))
|
native-search-paths))
|
||||||
|
|
||||||
#t)
|
#t)
|
||||||
|
|
|
@ -291,7 +291,7 @@ matches REGEXP."
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
(define* (search-path-as-list files input-dirs
|
(define* (search-path-as-list files input-dirs
|
||||||
#:key (type 'directory))
|
#:key (type 'directory) pattern)
|
||||||
"Return the list of directories among FILES of the given TYPE (a symbol as
|
"Return the list of directories among FILES of the given TYPE (a symbol as
|
||||||
returned by 'stat:type') that exist in INPUT-DIRS. Example:
|
returned by 'stat:type') that exist in INPUT-DIRS. Example:
|
||||||
|
|
||||||
|
@ -300,13 +300,26 @@ returned by 'stat:type') that exist in INPUT-DIRS. Example:
|
||||||
=> (\"/package1/share/emacs/site-lisp\"
|
=> (\"/package1/share/emacs/site-lisp\"
|
||||||
\"/package3/share/emacs/site-lisp\")
|
\"/package3/share/emacs/site-lisp\")
|
||||||
|
|
||||||
|
When PATTERN is true, it is a regular expression denoting file names to look
|
||||||
|
for under the directories designated by FILES. For example:
|
||||||
|
|
||||||
|
(search-path-as-list '(\"xml\") (list docbook-xml docbook-xsl)
|
||||||
|
#:type 'regular
|
||||||
|
#:pattern \"^catalog\\\\.xml$\")
|
||||||
|
=> (\"/…/xml/dtd/docbook/catalog.xml\"
|
||||||
|
\"/…/xml/xsl/docbook-xsl-1.78.1/catalog.xml\")
|
||||||
"
|
"
|
||||||
(append-map (lambda (input)
|
(append-map (lambda (input)
|
||||||
(filter-map (lambda (file)
|
(append-map (lambda (file)
|
||||||
(let* ((file (string-append input "/" file))
|
(let ((file (string-append input "/" file)))
|
||||||
(stat (stat file #f)))
|
;; XXX: By using 'find-files', we implicitly
|
||||||
(and stat (eq? type (stat:type stat))
|
;; assume #:type 'regular.
|
||||||
file)))
|
(if pattern
|
||||||
|
(find-files file pattern)
|
||||||
|
(let ((stat (stat file #f)))
|
||||||
|
(if (and stat (eq? type (stat:type stat)))
|
||||||
|
(list file)
|
||||||
|
'())))))
|
||||||
files))
|
files))
|
||||||
input-dirs))
|
input-dirs))
|
||||||
|
|
||||||
|
@ -319,7 +332,8 @@ returned by 'stat:type') that exist in INPUT-DIRS. Example:
|
||||||
(define* (set-path-environment-variable env-var files input-dirs
|
(define* (set-path-environment-variable env-var files input-dirs
|
||||||
#:key
|
#:key
|
||||||
(separator ":")
|
(separator ":")
|
||||||
(type 'directory))
|
(type 'directory)
|
||||||
|
pattern)
|
||||||
"Look for each of FILES of the given TYPE (a symbol as returned by
|
"Look for each of FILES of the given TYPE (a symbol as returned by
|
||||||
'stat:type') in INPUT-DIRS. Set ENV-VAR to a SEPARATOR-separated path
|
'stat:type') in INPUT-DIRS. Set ENV-VAR to a SEPARATOR-separated path
|
||||||
accordingly. Example:
|
accordingly. Example:
|
||||||
|
@ -327,9 +341,19 @@ accordingly. Example:
|
||||||
(set-path-environment-variable \"PKG_CONFIG\"
|
(set-path-environment-variable \"PKG_CONFIG\"
|
||||||
'(\"lib/pkgconfig\")
|
'(\"lib/pkgconfig\")
|
||||||
(list package1 package2))
|
(list package1 package2))
|
||||||
|
|
||||||
|
When PATTERN is not #f, it must be a regular expression (really a string)
|
||||||
|
denoting file names to look for under the directories designated by FILES:
|
||||||
|
|
||||||
|
(set-path-environment-variable \"XML_CATALOG_FILES\"
|
||||||
|
'(\"xml\")
|
||||||
|
(list docbook-xml docbook-xsl)
|
||||||
|
#:type 'regular
|
||||||
|
#:pattern \"^catalog\\\\.xml$\")
|
||||||
"
|
"
|
||||||
(let* ((path (search-path-as-list files input-dirs
|
(let* ((path (search-path-as-list files input-dirs
|
||||||
#:type type))
|
#:type type
|
||||||
|
#:pattern pattern))
|
||||||
(value (list->search-path-as-string path separator)))
|
(value (list->search-path-as-string path separator)))
|
||||||
(if (string-null? value)
|
(if (string-null? value)
|
||||||
(begin
|
(begin
|
||||||
|
|
|
@ -181,7 +181,8 @@ representation."
|
||||||
corresponds to the arguments expected by `set-path-environment-variable'."
|
corresponds to the arguments expected by `set-path-environment-variable'."
|
||||||
(match spec
|
(match spec
|
||||||
(($ <search-path-specification> variable files separator type)
|
(($ <search-path-specification> variable files separator type)
|
||||||
`(,variable ,files ,separator ,type))))
|
;; TODO: Add support for PATTERN.
|
||||||
|
`(,variable ,files ,separator ,type #f))))
|
||||||
|
|
||||||
(define %supported-systems
|
(define %supported-systems
|
||||||
;; This is the list of system types that are supported. By default, we
|
;; This is the list of system types that are supported. By default, we
|
||||||
|
|
Loading…
Reference in New Issue