build-system/gnu: Add support for non-directory search paths.
Partly fixes <http://bugs.gnu.org/18033>. * guix/build/utils.scm (search-path-as-list): Rename 'sub-directories' parameter to 'files'. Add #:type parameter and honor it. (set-path-environment-variable): Likewise. Pass #:type to 'search-path-as-list'. * guix/packages.scm (search-path-specification->sexp): Add 'directory as the last item of the tuple. * guix/build/gnu-build-system.scm (set-paths): Add 'type' to search-path pattern. Pass #:type to 'set-path-environment-variable'.
This commit is contained in:
parent
8c89f514bf
commit
6aa47e3883
3 changed files with 29 additions and 21 deletions
|
@ -73,19 +73,21 @@ (define native-input-directories
|
|||
input-directories)))
|
||||
|
||||
(for-each (match-lambda
|
||||
((env-var (directories ...) separator)
|
||||
(set-path-environment-variable env-var directories
|
||||
((env-var (files ...) separator type)
|
||||
(set-path-environment-variable env-var files
|
||||
input-directories
|
||||
#:separator separator)))
|
||||
#:separator separator
|
||||
#:type type)))
|
||||
search-paths)
|
||||
|
||||
(when native-search-paths
|
||||
;; Search paths for native inputs, when cross building.
|
||||
(for-each (match-lambda
|
||||
((env-var (directories ...) separator)
|
||||
(set-path-environment-variable env-var directories
|
||||
((env-var (files ...) separator type)
|
||||
(set-path-environment-variable env-var files
|
||||
native-input-directories
|
||||
#:separator separator)))
|
||||
#:separator separator
|
||||
#:type type)))
|
||||
native-search-paths))
|
||||
|
||||
#t)
|
||||
|
|
|
@ -290,9 +290,10 @@ (define file-rx
|
|||
;;; Search paths.
|
||||
;;;
|
||||
|
||||
(define (search-path-as-list sub-directories input-dirs)
|
||||
"Return the list of directories among SUB-DIRECTORIES that exist in
|
||||
INPUT-DIRS. Example:
|
||||
(define* (search-path-as-list files input-dirs
|
||||
#:key (type 'directory))
|
||||
"Return the list of directories among FILES of the given TYPE (a symbol as
|
||||
returned by 'stat:type') that exist in INPUT-DIRS. Example:
|
||||
|
||||
(search-path-as-list '(\"share/emacs/site-lisp\" \"share/emacs/24.1\")
|
||||
(list \"/package1\" \"/package2\" \"/package3\"))
|
||||
|
@ -301,12 +302,12 @@ (define (search-path-as-list sub-directories input-dirs)
|
|||
|
||||
"
|
||||
(append-map (lambda (input)
|
||||
(filter-map (lambda (dir)
|
||||
(let ((dir (string-append input "/"
|
||||
dir)))
|
||||
(and (directory-exists? dir)
|
||||
dir)))
|
||||
sub-directories))
|
||||
(filter-map (lambda (file)
|
||||
(let* ((file (string-append input "/" file))
|
||||
(stat (stat file #f)))
|
||||
(and stat (eq? type (stat:type stat))
|
||||
file)))
|
||||
files))
|
||||
input-dirs))
|
||||
|
||||
(define (list->search-path-as-string lst separator)
|
||||
|
@ -315,16 +316,20 @@ (define (list->search-path-as-string lst separator)
|
|||
(define* (search-path-as-string->list path #:optional (separator #\:))
|
||||
(string-tokenize path (char-set-complement (char-set separator))))
|
||||
|
||||
(define* (set-path-environment-variable env-var sub-directories input-dirs
|
||||
#:key (separator ":"))
|
||||
"Look for each of SUB-DIRECTORIES in INPUT-DIRS. Set ENV-VAR to a
|
||||
SEPARATOR-separated path accordingly. Example:
|
||||
(define* (set-path-environment-variable env-var files input-dirs
|
||||
#:key
|
||||
(separator ":")
|
||||
(type 'directory))
|
||||
"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
|
||||
accordingly. Example:
|
||||
|
||||
(set-path-environment-variable \"PKG_CONFIG\"
|
||||
'(\"lib/pkgconfig\")
|
||||
(list package1 package2))
|
||||
"
|
||||
(let* ((path (search-path-as-list sub-directories input-dirs))
|
||||
(let* ((path (search-path-as-list files input-dirs
|
||||
#:type type))
|
||||
(value (list->search-path-as-string path separator)))
|
||||
(if (string-null? value)
|
||||
(begin
|
||||
|
|
|
@ -180,7 +180,8 @@ (define (search-path-specification->sexp spec)
|
|||
corresponds to the arguments expected by `set-path-environment-variable'."
|
||||
(match spec
|
||||
(($ <search-path-specification> variable directories separator)
|
||||
`(,variable ,directories ,separator))))
|
||||
;; TODO: Allow other values of TYPE. See <http://bugs.gnu.org/18033>.
|
||||
`(,variable ,directories ,separator directory))))
|
||||
|
||||
(define %supported-systems
|
||||
;; This is the list of system types that are supported. By default, we
|
||||
|
|
Loading…
Reference in a new issue