From dc4e02572ec8726957402c1b0c2c6d37e2589af7 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 1 Sep 2012 01:14:31 +0200 Subject: 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. --- distro/base.scm | 9 +++++++++ guix/build-system/gnu.scm | 2 ++ guix/build/gnu-build-system.scm | 30 +++++++++++++++++++++++++----- 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"))) -- cgit 1.4.1