~ruther/guix-local

2d14ef0f2ce486fceeeff69cc838c652bb5de9be — Ludovic Courtès 13 years ago 9d9ef45
build-system/gnu: Fix `#:path-exclusions' handling.

* guix/build/gnu-build-system.scm (set-paths)[relevant-input-directories]:
  New procedure.  Use it.  This fixes #:path-exclusions handling.
1 files changed, 28 insertions(+), 32 deletions(-)

M guix/build/gnu-build-system.scm
M guix/build/gnu-build-system.scm => guix/build/gnu-build-system.scm +28 -32
@@ 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))