mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
packages: Add 'package-development-inputs'.
* guix/packages.scm (package-development-inputs): New procedure. * guix/scripts/environment.scm (package-environment-inputs): Use it. * tests/packages.scm ("package-development-inputs") ("package-development-inputs, cross-compilation"): New tests. * doc/guix.texi (package Reference): Document it.
This commit is contained in:
parent
e4276fc4c1
commit
fb368f4e76
4 changed files with 66 additions and 1 deletions
|
@ -6848,6 +6848,47 @@ cross-compiling:
|
||||||
It is an error to refer to @code{this-package} outside a package definition.
|
It is an error to refer to @code{this-package} outside a package definition.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@cindex development inputs, of a package
|
||||||
|
@cindex implicit inputs, of a package
|
||||||
|
Sometimes you will want to obtain the list of inputs needed to
|
||||||
|
@emph{develop} a package---all the inputs that are visible when the
|
||||||
|
package is compiled. This is what the @code{package-development-inputs}
|
||||||
|
procedure returns.
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} package-development-inputs @var{package} @
|
||||||
|
[@var{system}] [#:target #f]
|
||||||
|
Return the list of inputs required by @var{package} for development
|
||||||
|
purposes on @var{system}. When @var{target} is true, return the inputs
|
||||||
|
needed to cross-compile @var{package} from @var{system} to
|
||||||
|
@var{triplet}, where @var{triplet} is a triplet such as
|
||||||
|
@code{"aarch64-linux-gnu"}.
|
||||||
|
|
||||||
|
Note that the result includes both explicit inputs and implicit
|
||||||
|
inputs---inputs automatically added by the build system (@pxref{Build
|
||||||
|
Systems}). Let us take the @code{hello} package to illustrate that:
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(use-modules (gnu packages base) (guix packages))
|
||||||
|
|
||||||
|
hello
|
||||||
|
@result{} #<package hello@@2.10 gnu/packages/base.scm:79 7f585d4f6790>
|
||||||
|
|
||||||
|
(package-direct-inputs hello)
|
||||||
|
@result{} ()
|
||||||
|
|
||||||
|
(package-development-inputs hello)
|
||||||
|
@result{} (("source" @dots{}) ("tar" #<package tar@@1.32 @dots{}>) @dots{})
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
In this example, @code{package-direct-inputs} returns the empty list,
|
||||||
|
because @code{hello} has zero explicit dependencies. Conversely,
|
||||||
|
@code{package-development-inputs} includes inputs implicitly added by
|
||||||
|
@code{gnu-build-system} that are required to build @code{hello}: tar,
|
||||||
|
gzip, GCC, libc, Bash, and more. To visualize it, @command{guix graph
|
||||||
|
hello} would show you explicit inputs, whereas @command{guix graph -t
|
||||||
|
bag hello} would include implicit inputs (@pxref{Invoking guix graph}).
|
||||||
|
@end deffn
|
||||||
|
|
||||||
Because packages are regular Scheme objects that capture a complete
|
Because packages are regular Scheme objects that capture a complete
|
||||||
dependency graph and associated build procedures, it is often useful to
|
dependency graph and associated build procedures, it is often useful to
|
||||||
write procedures that take a package and return a modified version
|
write procedures that take a package and return a modified version
|
||||||
|
|
|
@ -153,6 +153,7 @@ (define-module (guix packages)
|
||||||
bag-transitive-host-inputs
|
bag-transitive-host-inputs
|
||||||
bag-transitive-build-inputs
|
bag-transitive-build-inputs
|
||||||
bag-transitive-target-inputs
|
bag-transitive-target-inputs
|
||||||
|
package-development-inputs
|
||||||
package-closure
|
package-closure
|
||||||
|
|
||||||
default-guile
|
default-guile
|
||||||
|
@ -1070,6 +1071,15 @@ (define (bag-transitive-target-inputs bag)
|
||||||
(%current-system (bag-system bag)))
|
(%current-system (bag-system bag)))
|
||||||
(transitive-inputs (bag-target-inputs bag))))
|
(transitive-inputs (bag-target-inputs bag))))
|
||||||
|
|
||||||
|
(define* (package-development-inputs package
|
||||||
|
#:optional (system (%current-system))
|
||||||
|
#:key target)
|
||||||
|
"Return the list of inputs required by PACKAGE for development purposes on
|
||||||
|
SYSTEM. When TARGET is true, return the inputs needed to cross-compile
|
||||||
|
PACKAGE from SYSTEM to TRIPLET, where TRIPLET is a triplet such as
|
||||||
|
\"aarch64-linux-gnu\"."
|
||||||
|
(bag-transitive-inputs (package->bag package system target)))
|
||||||
|
|
||||||
(define* (package-closure packages #:key (system (%current-system)))
|
(define* (package-closure packages #:key (system (%current-system)))
|
||||||
"Return the closure of PACKAGES on SYSTEM--i.e., PACKAGES and the list of
|
"Return the closure of PACKAGES on SYSTEM--i.e., PACKAGES and the list of
|
||||||
packages they depend on, recursively."
|
packages they depend on, recursively."
|
||||||
|
|
|
@ -82,7 +82,7 @@ (define (package-environment-inputs package)
|
||||||
packages for PACKAGE."
|
packages for PACKAGE."
|
||||||
;; Remove non-package inputs such as origin records.
|
;; Remove non-package inputs such as origin records.
|
||||||
(filter-map input->manifest-entry
|
(filter-map input->manifest-entry
|
||||||
(bag-transitive-inputs (package->bag package))))
|
(package-development-inputs package)))
|
||||||
|
|
||||||
(define (show-help)
|
(define (show-help)
|
||||||
(display (G_ "Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...]
|
(display (G_ "Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...]
|
||||||
|
|
|
@ -353,6 +353,20 @@ (define read-at
|
||||||
(package-transitive-supported-systems d)
|
(package-transitive-supported-systems d)
|
||||||
(package-transitive-supported-systems e))))
|
(package-transitive-supported-systems e))))
|
||||||
|
|
||||||
|
(test-assert "package-development-inputs"
|
||||||
|
;; Note: Due to propagated inputs, 'package-development-inputs' returns a
|
||||||
|
;; couple more inputs, such as 'linux-libre-headers'.
|
||||||
|
(lset<= equal?
|
||||||
|
`(("source" ,(package-source hello)) ,@(standard-packages))
|
||||||
|
(package-development-inputs hello)))
|
||||||
|
|
||||||
|
(test-assert "package-development-inputs, cross-compilation"
|
||||||
|
(lset<= equal?
|
||||||
|
`(("source" ,(package-source hello))
|
||||||
|
,@(standard-cross-packages "mips64el-linux-gnu" 'host)
|
||||||
|
,@(standard-cross-packages "mips64el-linux-gnu" 'target))
|
||||||
|
(package-development-inputs hello #:target "mips64el-linux-gnu")))
|
||||||
|
|
||||||
(test-assert "package-closure"
|
(test-assert "package-closure"
|
||||||
(let-syntax ((dummy-package/no-implicit
|
(let-syntax ((dummy-package/no-implicit
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
|
|
Loading…
Reference in a new issue