summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/build/gnu-build-system.scm60
1 files changed, 28 insertions, 32 deletions
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index c57bc60d24..112b34cd4d 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -49,38 +49,34 @@
 
 (define* (set-paths #:key inputs (path-exclusions '())
                     #:allow-other-keys)
-  (let ((inputs (map cdr inputs)))
-    (set-path-environment-variable "PATH" '("bin")
-                                   (remove (cute member <>
-                                                 (or (assoc-ref path-exclusions
-                                                                "PATH")
-                                                     '()))
-                                           inputs))
-    (set-path-environment-variable "CPATH" '("include")
-                                   (remove (cute member <>
-                                                 (or (assoc-ref path-exclusions
-                                                                "CPATH")
-                                                     '()))
-                                           inputs))
-    (set-path-environment-variable "LIBRARY_PATH" '("lib" "lib64")
-                                   (remove (cute member <>
-                                                 (or (assoc-ref path-exclusions
-                                                                "LIBRARY_PATH")
-                                                     '()))
-                                           inputs))
-
-    ;; FIXME: Eventually move this to the `search-paths' field of the
-    ;; `pkg-config' package.
-    (set-path-environment-variable "PKG_CONFIG_PATH"
-                                   '("lib/pkgconfig" "lib64/pkgconfig")
-                                   (remove (cute member <>
-                                                 (or (assoc-ref path-exclusions
-                                                                "PKG_CONFIG_PATH")
-                                                     '()))
-                                           inputs))
-
-    ;; Dump the environment variables as a shell script, for handy debugging.
-    (system "export > environment-variables")))
+  (define (relevant-input-directories env-var)
+    ;; Return the subset of INPUTS that should be considered when setting
+    ;; ENV-VAR.
+    (match (assoc-ref path-exclusions env-var)
+      (#f
+       (map cdr inputs))
+      ((excluded ...)
+       (filter-map (match-lambda
+                    ((name . dir)
+                     (and (not (member name excluded))
+                          dir)))
+                   inputs))))
+
+  (set-path-environment-variable "PATH" '("bin")
+                                 (relevant-input-directories "PATH"))
+  (set-path-environment-variable "CPATH" '("include")
+                                 (relevant-input-directories "CPATH"))
+  (set-path-environment-variable "LIBRARY_PATH" '("lib" "lib64")
+                                 (relevant-input-directories "LIBRARY_PATH"))
+
+  ;; FIXME: Eventually move this to the `search-paths' field of the
+  ;; `pkg-config' package.
+  (set-path-environment-variable "PKG_CONFIG_PATH"
+                                 '("lib/pkgconfig" "lib64/pkgconfig")
+                                 (relevant-input-directories "PKG_CONFIG_PATH"))
+
+  ;; Dump the environment variables as a shell script, for handy debugging.
+  (system "export > environment-variables"))
 
 (define* (unpack #:key source #:allow-other-keys)
   (and (zero? (system* "tar" "xvf" source))