From 4e9f59205835e148d4329e7d77c81dccfacd4ea2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Sun, 3 May 2015 23:01:35 +0200
Subject: [PATCH] guix package: Introduce 'evaluate-search-paths'.

* guix/scripts/package.scm (evaluate-search-paths): New procedure, with
  most of the code formerly in 'search-path-environment-variables'.
  (search-path-environment-variables): Use it.
---
 guix/scripts/package.scm | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index d9bad7ba87c..003f6958ef4 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -379,10 +379,10 @@ (define-syntax-rule (with-null-error-port exp)
   (with-error-to-port (%make-void-port "w")
     (lambda () exp)))
 
-(define* (search-path-environment-variables entries profile
-                                            #:optional (getenv getenv))
-  "Return environment variable definitions that may be needed for the use of
-ENTRIES, a list of manifest entries, in PROFILE.  Use GETENV to determine the
+(define* (evaluate-search-paths search-paths directory
+                                #:optional (getenv (const #f)))
+  "Evaluate SEARCH-PATHS, a list of search-path specifications, for DIRECTORY,
+and return a list of variable/value pairs.  Use GETENV to determine the
 current settings and report only settings not already effective."
   (define search-path-definition
     (match-lambda
@@ -401,18 +401,26 @@ (define search-path-definition
               ;; directories (see
               ;; <http://lists.gnu.org/archive/html/guix-devel/2015-01/msg00269.html>.)
               (path   (with-null-error-port
-                       (search-path-as-list files (list profile)
+                       (search-path-as-list files (list directory)
                                             #:type type
                                             #:pattern pattern))))
          (if (every (cut member <> values) path)
-             #f
-             (format #f "export ~a=\"~a\""
-                     variable
-                     (string-join path separator)))))))
+             #f                         ;VARIABLE is already set appropriately
+             (cons variable (string-join path separator)))))))
+
+  (filter-map search-path-definition search-paths))
 
+(define* (search-path-environment-variables entries profile
+                                            #:optional (getenv getenv))
+  "Return environment variable definitions that may be needed for the use of
+ENTRIES, a list of manifest entries, in PROFILE.  Use GETENV to determine the
+current settings and report only settings not already effective."
   (let ((search-paths (delete-duplicates
                        (append-map manifest-entry-search-paths entries))))
-    (filter-map search-path-definition search-paths)))
+    (filter-map (match-lambda
+                  ((variable . value)
+                   (format #f "export ~a=\"~a\"" variable value)))
+                (evaluate-search-paths search-paths profile getenv))))
 
 (define (display-search-paths entries profile)
   "Display the search path environment variables that may need to be set for
-- 
GitLab