~ruther/guix-local

a81bc5312ba26893c07f9aa432e4cc14e4ceefab — Ludovic Courtès 13 years ago 9c7dd33
package: Use ~/.guix-profile as the default for --search-paths.

* guix/scripts/package.scm (search-path-environment-variables): Prefer
  %USER-ENVIRONMENT-DIRECTORY when it points to PROFILE.
  (display-search-paths): Use 3 spaces for indentation.
1 files changed, 41 insertions(+), 33 deletions(-)

M guix/scripts/package.scm
M guix/scripts/package.scm => guix/scripts/package.scm +41 -33
@@ 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))))


;;;