diff options
Diffstat (limited to 'guix/scripts/package.scm')
-rw-r--r-- | guix/scripts/package.scm | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index c691315253..4018a34ed7 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -336,38 +336,46 @@ but ~a is available upstream~%") PACKAGES in PROFILE. Use GETENV to determine the current settings and report only settings not already effective." - ;; The search path info is not stored in the manifest. Thus, we infer the - ;; search paths from same-named packages found in the distro. - - (define package-in-manifest->package - (match-lambda - ((name version _ ...) - (match (append (find-packages-by-name name version) - (find-packages-by-name name)) - ((p _ ...) p) - (_ #f))))) - - (define search-path-definition - (match-lambda - (($ <search-path-specification> variable directories separator) - (let ((values (or (and=> (getenv variable) - (cut string-tokenize* <> separator)) - '())) - (directories (filter file-exists? - (map (cut string-append profile - "/" <>) - directories)))) - (if (every (cut member <> values) directories) - #f - (format #f "export ~a=\"~a\"" - variable - (string-join directories separator))))))) - - (let* ((packages (filter-map package-in-manifest->package packages)) - (search-paths (delete-duplicates - (append-map package-native-search-paths - packages)))) - (filter-map search-path-definition search-paths))) + ;; Prefer ~/.guix-profile to the real profile directory name. + (let ((profile (if (and %user-environment-directory + (false-if-exception + (string=? (readlink %user-environment-directory) + profile))) + %user-environment-directory + profile))) + + ;; The search path info is not stored in the manifest. Thus, we infer the + ;; search paths from same-named packages found in the distro. + + (define package-in-manifest->package + (match-lambda + ((name version _ ...) + (match (append (find-packages-by-name name version) + (find-packages-by-name name)) + ((p _ ...) p) + (_ #f))))) + + (define search-path-definition + (match-lambda + (($ <search-path-specification> variable directories separator) + (let ((values (or (and=> (getenv variable) + (cut string-tokenize* <> separator)) + '())) + (directories (filter file-exists? + (map (cut string-append profile + "/" <>) + directories)))) + (if (every (cut member <> values) directories) + #f + (format #f "export ~a=\"~a\"" + variable + (string-join directories separator))))))) + + (let* ((packages (filter-map package-in-manifest->package packages)) + (search-paths (delete-duplicates + (append-map package-native-search-paths + packages)))) + (filter-map search-path-definition search-paths)))) (define (display-search-paths packages profile) "Display the search path environment variables that may need to be set for @@ -375,7 +383,7 @@ PACKAGES, in the context of PROFILE." (let ((settings (search-path-environment-variables packages profile))) (unless (null? settings) (format #t (_ "The following environment variable definitions may be needed:~%")) - (format #t "~{ ~a~%~}" settings)))) + (format #t "~{ ~a~%~}" settings)))) ;;; |