summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-09-01 01:14:31 +0200
committerLudovic Courtès <ludo@gnu.org>2012-09-01 01:14:31 +0200
commitdc4e02572ec8726957402c1b0c2c6d37e2589af7 (patch)
tree5e72ae07cf3fffbb2a3bbfc1bb385aef0ed7c1f9
parentf1f100b297fd0bf1fad4a1dc1b2764c6e85901db (diff)
downloadguix-dc4e02572ec8726957402c1b0c2c6d37e2589af7.tar.gz
build-system/gnu: Add `path-exclusions' parameter.
* guix/build/gnu-build-system.scm (set-paths): Add new `path-exclusions'
  parameter; honor it.
* guix/build-system/gnu.scm (gnu-build): New `path-exclusions' keyword
  parameter; pass it to BUILDER.

* distro/base.scm (gcc-4.7): Exclude "libc" from $LIBRARY_PATH.
-rw-r--r--distro/base.scm9
-rw-r--r--guix/build-system/gnu.scm2
-rw-r--r--guix/build/gnu-build-system.scm30
3 files changed, 36 insertions, 5 deletions
diff --git a/distro/base.scm b/distro/base.scm
index 44ee059748..949cb571b1 100644
--- a/distro/base.scm
+++ b/distro/base.scm
@@ -605,6 +605,15 @@ BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc.")
                             "-Wl," libc "/lib/ld-linux-x86-64.so.2")
             ,(string-append "BOOT_CFLAGS=-O2 "
                             ,(if stripped? "-g0" "-g"))))
+
+        ;; Exclude libc from $LIBRARY_PATH since the compiler being used
+        ;; should know whether its libc is, and to avoid linking build tools
+        ;; like `genhooks' against the wrong libc (for instance, when
+        ;; building a gcc-for-glibc-2.16 with a gcc-for-glibc-2.13,
+        ;; `genhooks' could end up being linked with glibc-2.16 but using
+        ;; crt*.o from glibc-2.13.)
+        #:path-exclusions '(("LIBRARY_PATH" "libc"))
+
         #:tests? #f
         #:phases
         (alist-cons-before
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 7bdd4174bd..f4e7c1bcc4 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -47,6 +47,7 @@
                     (make-flags ''())
                     (patches ''()) (patch-flags ''("--batch" "-p1"))
                     (out-of-source? #f)
+                    (path-exclusions ''())
                     (tests? #t)
                     (parallel-build? #t) (parallel-tests? #t)
                     (patch-shebangs? #t)
@@ -74,6 +75,7 @@ input derivation INPUTS, using the usual procedure of the GNU Build System."
                   #:configure-flags ,configure-flags
                   #:make-flags ,make-flags
                   #:out-of-source? ,out-of-source?
+                  #:path-exclusions ,path-exclusions
                   #:tests? ,tests?
                   #:parallel-build? ,parallel-build?
                   #:parallel-tests? ,parallel-tests?
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 4ff4aca6a0..763665590d 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -47,17 +47,37 @@
                     #f
                     dir))
 
-(define* (set-paths #:key inputs #:allow-other-keys)
+(define* (set-paths #:key inputs (path-exclusions '())
+                    #:allow-other-keys)
   (let ((inputs (map cdr inputs)))
-    (set-path-environment-variable "PATH" '("bin") inputs)
-    (set-path-environment-variable "CPATH" '("include") inputs)
-    (set-path-environment-variable "LIBRARY_PATH" '("lib" "lib64") 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")
-                                   inputs)
+                                   (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")))