[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#50960] [PATCH v3 02/10] profiles: Add 'package->development-manifes
From: |
Ludovic Courtès |
Subject: |
[bug#50960] [PATCH v3 02/10] profiles: Add 'package->development-manifest'. |
Date: |
Mon, 18 Oct 2021 21:52:11 +0200 |
From: Ludovic Courtès <ludovic.courtes@inria.fr>
* guix/profiles.scm (package->development-manifest): New procedure.
* guix/scripts/environment.scm (input->manifest-entry)
(package-environment-inputs): Remove.
* guix/scripts/environment.scm (options/resolve-packages): Use
'package->development-manifest' instead of 'package-environment-inputs'.
* tests/profiles.scm ("package->development-manifest"): New test.
---
doc/guix.texi | 11 +++++++++++
guix/profiles.scm | 19 +++++++++++++++++++
guix/scripts/environment.scm | 27 +++++----------------------
tests/profiles.scm | 7 +++++++
4 files changed, 42 insertions(+), 22 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index deb4eac4ac..c1045b331b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -3341,6 +3341,17 @@ objects, like this:
'("emacs" "guile@@2.2" "guile@@2.2:debug"))
@end lisp
+@findex package->development-manifest
+You might also want to create a manifest for all the dependencies of a
+package, rather than the package itself:
+
+@lisp
+(package->development-manifest (specification->package "emacs"))
+@end lisp
+
+The example above gives you all the software required to develop Emacs,
+similar to what @command{guix environment emacs} provides.
+
@xref{export-manifest, @option{--export-manifest}}, to learn how to
obtain a manifest file from an existing profile.
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 2486f91d09..9f30349c69 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -124,6 +124,7 @@ (define-module (guix profiles)
profile-manifest
package->manifest-entry
+ package->development-manifest
packages->manifest
ca-certificate-bundle
%default-profile-hooks
@@ -400,6 +401,24 @@ (define* (package->manifest-entry package #:optional
(output "out")
(properties properties))))
entry))
+(define* (package->development-manifest package
+ #:optional
+ (system (%current-system))
+ #:key target)
+ "Return a manifest for the \"development inputs\" of PACKAGE for SYSTEM,
+optionally when cross-compiling to TARGET. Development inputs include both
+explicit and implicit inputs of PACKAGE."
+ (manifest
+ (filter-map (match-lambda
+ ((label (? package? package))
+ (package->manifest-entry package))
+ ((label (? package? package) output)
+ (package->manifest-entry package output))
+ ;; TODO: Support <inferior-package>.
+ (_
+ #f))
+ (package-development-inputs package system #:target target))))
+
(define (packages->manifest packages)
"Return a list of manifest entries, one for each item listed in PACKAGES.
Elements of PACKAGES can be either package objects or package/string tuples
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 418f11c37e..54f48a7482 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -66,24 +66,6 @@ (define* (show-search-paths profile manifest #:key pure?)
(newline)))
(profile-search-paths profile manifest)))
-(define (input->manifest-entry input)
- "Return a manifest entry for INPUT, or #f if INPUT does not correspond to a
-package."
- (match input
- ((_ (? package? package))
- (package->manifest-entry package))
- ((_ (? package? package) output)
- (package->manifest-entry package output))
- (_
- #f)))
-
-(define (package-environment-inputs package)
- "Return a list of manifest entries corresponding to the transitive input
-packages for PACKAGE."
- ;; Remove non-package inputs such as origin records.
- (filter-map input->manifest-entry
- (package-development-inputs package)))
-
(define (show-help)
(display (G_ "Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...]
Build an environment that includes the dependencies of PACKAGE and execute
@@ -297,11 +279,11 @@ (define (packages->outputs packages mode)
((? package? package)
(if (eq? mode 'ad-hoc-package)
(list (package->manifest-entry* package))
- (package-environment-inputs package)))
+ (manifest-entries (package->development-manifest package))))
(((? package? package) (? string? output))
(if (eq? mode 'ad-hoc-package)
(list (package->manifest-entry* package output))
- (package-environment-inputs package)))
+ (manifest-entries (package->development-manifest package))))
((lst ...)
(append-map (cut packages->outputs <> mode) lst))))
@@ -313,8 +295,9 @@ (define (packages->outputs packages mode)
(specification->package+output spec)))
(list (package->manifest-entry* package output))))
(('package 'package (? string? spec))
- (package-environment-inputs
- (transform (specification->package+output spec))))
+ (manifest-entries
+ (package->development-manifest
+ (transform (specification->package+output spec)))))
(('expression mode str)
;; Add all the outputs of the package STR evaluates to.
(packages->outputs (read/eval str) mode))
diff --git a/tests/profiles.scm b/tests/profiles.scm
index 06a0387221..cac5b73347 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -265,6 +265,13 @@ (define transform1
(manifest-transaction-removal-candidate? guile-2.0.9 t)
(null? install) (null? downgrade) (null? upgrade)))))
+(test-assert "package->development-manifest"
+ (let ((manifest (package->development-manifest packages:hello)))
+ (every (lambda (name)
+ (manifest-installed? manifest
+ (manifest-pattern (name name))))
+ '("gcc" "binutils" "glibc" "coreutils" "grep" "sed"))))
+
(test-assertm "profile-derivation"
(mlet* %store-monad
((entry -> (package->manifest-entry %bootstrap-guile))
--
2.33.0
- [bug#50960] [PATCH v2 03/11] Add 'guix shell'., (continued)
- [bug#50960] [PATCH v3 00/10] Adding 'guix shell': last call!, Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 01/10] packages: Add 'package-development-inputs'., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 06/10] environment: Skip derivation computation when '--profile' is used., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 04/10] shell: By default load the local 'guix.scm' or 'manifest.scm' file., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 02/10] profiles: Add 'package->development-manifest'.,
Ludovic Courtès <=
- [bug#50960] [PATCH v3 09/10] cache: Gracefully handle non-existent cache., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 05/10] environment: Add tests for '--profile'., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 08/10] environment: Autoload some modules., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 07/10] environment: Do not connect to the daemon when '--profile' is used., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 10/10] shell: Maintain a profile cache., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 03/10] Add 'guix shell'., Ludovic Courtès, 2021/10/18
- [bug#50960] [PATCH v3 00/10] Adding 'guix shell': last call!, zimoun, 2021/10/19
- [bug#50960] [PATCH 00/10] Add 'guix shell' to subsume 'guix environment', zimoun, 2021/10/25
- [bug#50960] [PATCH 00/10] Add 'guix shell' to subsume 'guix environment', Ludovic Courtès, 2021/10/25
- [bug#50960] [PATCH 00/10] Add 'guix shell' to subsume 'guix environment', zimoun, 2021/10/25