packages: 'package-transitive-supported-systems' accounts for implicit inputs.

Reported by Federico Beffa.

* guix/packages.scm (package-transitive-supported-systems): Use
  bag-direct-inputs + package->bag rather than package-direct-inputs.
* tests/packages.scm ("package-transitive-supported-systems"): Add
  explicit 'build-system' field to each 'dummy-package' form.
  ("package-transitive-supported-systems, implicit inputs"): New test.
This commit is contained in:
Ludovic Courtès 2015-04-11 12:41:49 +02:00
parent cceab87536
commit 9bf3ced06c
2 changed files with 33 additions and 10 deletions

View file

@ -579,7 +579,7 @@ (define-memoized/v (package-transitive-supported-systems package)
(_
systems)))
(package-supported-systems package)
(package-direct-inputs package)))
(bag-direct-inputs (package->bag package))))
(define (bag-direct-inputs bag)
"Same as 'package-direct-inputs', but applied to a bag."

View file

@ -128,21 +128,44 @@ (define read-at
("y") ;c
("y") ;d
("y")) ;e
(let* ((a (dummy-package "a" (supported-systems '("x" "y" "z"))))
(b (dummy-package "b" (supported-systems '("x" "y"))
(inputs `(("a" ,a)))))
(c (dummy-package "c" (supported-systems '("y" "z"))
(inputs `(("b" ,b)))))
(d (dummy-package "d" (supported-systems '("x" "y" "z"))
(inputs `(("b" ,b) ("c" ,c)))))
(e (dummy-package "e" (supported-systems '("x" "y" "z"))
(inputs `(("d" ,d))))))
;; Use TRIVIAL-BUILD-SYSTEM because it doesn't add implicit inputs and thus
;; doesn't restrict the set of supported systems.
(let* ((a (dummy-package "a"
(build-system trivial-build-system)
(supported-systems '("x" "y" "z"))))
(b (dummy-package "b"
(build-system trivial-build-system)
(supported-systems '("x" "y"))
(inputs `(("a" ,a)))))
(c (dummy-package "c"
(build-system trivial-build-system)
(supported-systems '("y" "z"))
(inputs `(("b" ,b)))))
(d (dummy-package "d"
(build-system trivial-build-system)
(supported-systems '("x" "y" "z"))
(inputs `(("b" ,b) ("c" ,c)))))
(e (dummy-package "e"
(build-system trivial-build-system)
(supported-systems '("x" "y" "z"))
(inputs `(("d" ,d))))))
(list (package-transitive-supported-systems a)
(package-transitive-supported-systems b)
(package-transitive-supported-systems c)
(package-transitive-supported-systems d)
(package-transitive-supported-systems e))))
(test-equal "package-transitive-supported-systems, implicit inputs"
%supported-systems
;; Here GNU-BUILD-SYSTEM adds implicit inputs that build only on
;; %SUPPORTED-SYSTEMS. Thus the others must be ignored.
(let ((p (dummy-package "foo"
(build-system gnu-build-system)
(supported-systems
`("does-not-exist" "foobar" ,@%supported-systems)))))
(package-transitive-supported-systems p)))
(test-skip (if (not %store) 8 0))
(test-assert "package-source-derivation, file"