guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/03: build-system/gnu: Add support for non-directory search paths.


From: Ludovic Courtès
Subject: 03/03: build-system/gnu: Add support for non-directory search paths.
Date: Sat, 27 Dec 2014 11:25:52 +0000

civodul pushed a commit to branch core-updates
in repository guix.

commit 6aa47e388390e98bec6caa90fef7f39a60e338a7
Author: Ludovic Courtès <address@hidden>
Date:   Sat Dec 27 12:16:18 2014 +0100

    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'.
---
 guix/build/gnu-build-system.scm |   14 ++++++++------
 guix/build/utils.scm            |   33 +++++++++++++++++++--------------
 guix/packages.scm               |    3 ++-
 3 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index d3de92b..4cc755f 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -73,19 +73,21 @@
                                              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)
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 9b1e098..f22b2c3 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -290,9 +290,10 @@ matches REGEXP."
 ;;; 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 @@ INPUT-DIRS.  Example:
 
 "
   (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 @@ INPUT-DIRS.  Example:
 (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
diff --git a/guix/packages.scm b/guix/packages.scm
index a25eab7..ed9a565 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -180,7 +180,8 @@ representation."
 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]