~ruther/guix-local

f52fbf7094c9c346d38ad469cc8d92d18387786e — Ludovic Courtès 6 years ago a89df83
packages: Ensure bags are insensitive to '%current-target-system'.

Fixes a bug whereby a bag's transitive dependencies would depend on the
global '%current-target-system' value.

Partly fixes <https://issues.guix.gnu.org/41182>.

* guix/packages.scm (bag-transitive-inputs)
(bag-transitive-build-inputs, bag-transitive-target-inputs):
Parameterize '%current-target-system'.
* tests/packages.scm ("package->bag, sensitivity to %current-target-system"):
New test.
2 files changed, 19 insertions(+), 3 deletions(-)

M guix/packages.scm
M tests/packages.scm
M guix/packages.scm => guix/packages.scm +6 -3
@@ 814,11 814,13 @@ dependencies are known to build on SYSTEM."

(define (bag-transitive-inputs bag)
  "Same as 'package-transitive-inputs', but applied to a bag."
  (transitive-inputs (bag-direct-inputs bag)))
  (parameterize ((%current-target-system #f))
    (transitive-inputs (bag-direct-inputs bag))))

(define (bag-transitive-build-inputs bag)
  "Same as 'package-transitive-native-inputs', but applied to a bag."
  (transitive-inputs (bag-build-inputs bag)))
  (parameterize ((%current-target-system #f))
    (transitive-inputs (bag-build-inputs bag))))

(define (bag-transitive-host-inputs bag)
  "Same as 'package-transitive-target-inputs', but applied to a bag."


@@ 827,7 829,8 @@ dependencies are known to build on SYSTEM."

(define (bag-transitive-target-inputs bag)
  "Return the \"target inputs\" of BAG, recursively."
  (transitive-inputs (bag-target-inputs bag)))
  (parameterize ((%current-target-system (bag-target bag)))
    (transitive-inputs (bag-target-inputs bag))))

(define* (package-closure packages #:key (system (%current-system)))
  "Return the closure of PACKAGES on SYSTEM--i.e., PACKAGES and the list of

M tests/packages.scm => tests/packages.scm +13 -0
@@ 1000,6 1000,19 @@
      (("dep" package)
       (eq? package dep)))))

(test-assert "package->bag, sensitivity to %current-target-system"
  (let* ((dep (dummy-package "dep"
                (propagated-inputs (if (%current-target-system)
                                       `(("libxml2" ,libxml2))
                                       '()))))
         (pkg (dummy-package "foo"
                (native-inputs `(("dep" ,dep)))))
         (bag (package->bag pkg (%current-system) "foo86-hurd")))
    (equal? (parameterize ((%current-target-system "foo64-gnu"))
              (bag-transitive-inputs bag))
            (parameterize ((%current-target-system #f))
              (bag-transitive-inputs bag)))))

(test-assert "bag->derivation"
  (parameterize ((%graft? #f))
    (let ((bag (package->bag gnu-make))