packages: Add 'package-transitive-native-search-paths'.

* guix/packages.scm (package-transitive-native-search-paths): New
procedure.
* tests/packages.scm ("package-transitive-native-search-paths"): New
test.
This commit is contained in:
Ludovic Courtès 2015-12-20 14:34:36 +01:00
parent 54b7f63a72
commit aa8e051532
2 changed files with 33 additions and 0 deletions

View file

@ -89,6 +89,7 @@ (define-module (guix packages)
package-transitive-target-inputs
package-transitive-native-inputs
package-transitive-propagated-inputs
package-transitive-native-search-paths
package-transitive-supported-systems
package-source-derivation
package-derivation
@ -632,6 +633,17 @@ (define (package-transitive-propagated-inputs package)
recursively."
(transitive-inputs (package-propagated-inputs package)))
(define (package-transitive-native-search-paths package)
"Return the list of search paths for PACKAGE and its propagated inputs,
recursively."
(append (package-native-search-paths package)
(append-map (match-lambda
((label (? package? p) _ ...)
(package-native-search-paths p))
(_
'()))
(package-transitive-propagated-inputs package))))
(define (transitive-input-references alist inputs)
"Return a list of (assoc-ref ALIST <label>) for each (<label> <package> . _)
in INPUTS and their transitive propagated inputs."

View file

@ -29,6 +29,7 @@ (define-module (test-packages)
#:use-module (guix hash)
#:use-module (guix derivations)
#:use-module (guix packages)
#:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix build-system trivial)
#:use-module (guix build-system gnu)
@ -504,6 +505,26 @@ (define read-at
(equal? x (collect (package-derivation %store b)))
(equal? x (collect (package-derivation %store c)))))))
(test-assert "package-transitive-native-search-paths"
(let* ((sp (lambda (name)
(list (search-path-specification
(variable name)
(files '("foo/bar"))))))
(p0 (dummy-package "p0" (native-search-paths (sp "PATH0"))))
(p1 (dummy-package "p1" (native-search-paths (sp "PATH1"))))
(p2 (dummy-package "p2"
(native-search-paths (sp "PATH2"))
(inputs `(("p0" ,p0)))
(propagated-inputs `(("p1" ,p1)))))
(p3 (dummy-package "p3"
(native-search-paths (sp "PATH3"))
(native-inputs `(("p0" ,p0)))
(propagated-inputs `(("p2" ,p2))))))
(lset= string=?
'("PATH1" "PATH2" "PATH3")
(map search-path-specification-variable
(package-transitive-native-search-paths p3)))))
(test-assert "package-cross-derivation"
(let ((drv (package-cross-derivation %store (dummy-package "p")
"mips64el-linux-gnu")))