~ruther/guix-local

0b8749b7bdd68c9b28cf3d520b9a3a9cc1a5bddb — Ludovic Courtès 12 years ago ac5de15
packages: 'package-field-location' returns a relative file name.

* guix/packages.scm (package-field-location): Set
  %FILE-PORT-NAME-CANONICALIZATION.
* tests/packages.scm ("package-field-location, relative file name"): New
  test.
2 files changed, 26 insertions(+), 18 deletions(-)

M guix/packages.scm
M tests/packages.scm
M guix/packages.scm => guix/packages.scm +20 -18
@@ 221,24 221,26 @@ corresponds to the arguments expected by `set-path-environment-variable'."
    (($ <location> file line column)
     (catch 'system
       (lambda ()
         (call-with-input-file (search-path %load-path file)
           (lambda (port)
             (goto port line column)
             (match (read port)
               (('package inits ...)
                (let ((field (assoc field inits)))
                  (match field
                    ((_ value)
                     ;; Put the `or' here, and not in the first argument of
                     ;; `and=>', to work around a compiler bug in 2.0.5.
                     (or (and=> (source-properties value)
                                source-properties->location)
                         (and=> (source-properties field)
                                source-properties->location)))
                    (_
                     #f))))
               (_
                #f)))))
         ;; In general we want to keep relative file names for modules.
         (with-fluids ((%file-port-name-canonicalization 'relative))
           (call-with-input-file (search-path %load-path file)
             (lambda (port)
               (goto port line column)
               (match (read port)
                 (('package inits ...)
                  (let ((field (assoc field inits)))
                    (match field
                      ((_ value)
                       ;; Put the `or' here, and not in the first argument of
                       ;; `and=>', to work around a compiler bug in 2.0.5.
                       (or (and=> (source-properties value)
                                  source-properties->location)
                           (and=> (source-properties field)
                                  source-properties->location)))
                      (_
                       #f))))
                 (_
                  #f))))))
       (lambda _
         #f)))
    (_ #f)))

M tests/packages.scm => tests/packages.scm +6 -0
@@ 81,6 81,12 @@
                   (list version `(version ,version))))
         (not (package-field-location %bootstrap-guile 'does-not-exist)))))

;; Make sure we don't change the file name to an absolute file name.
(test-equal "package-field-location, relative file name"
  (location-file (package-location %bootstrap-guile))
  (with-fluids ((%file-port-name-canonicalization 'absolute))
    (location-file (package-field-location %bootstrap-guile 'version))))

(test-assert "package-transitive-inputs"
  (let* ((a (dummy-package "a"))
         (b (dummy-package "b"