diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-12-06 17:55:49 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-12-06 23:50:04 +0100 |
commit | d98a0203b733316a8a5c9440469dfdd10fc9613f (patch) | |
tree | aab053f7ebc269f76a95daa4190e12eb323d0828 | |
parent | 4a6cef9d66ff26e96d63f2f1f886b8212154ca00 (diff) | |
download | guix-d98a0203b733316a8a5c9440469dfdd10fc9613f.tar guix-d98a0203b733316a8a5c9440469dfdd10fc9613f.tar.gz |
shell: ‘--development’ honors ‘--system’.
Fixes a bug whereby ‘package->development-manifest’ would run with the
wrong system in mind, leading to errors like this:
$ guix shell -s i586-gnu -D shepherd --no-grafts
guix shell: error: package linux-libre-headers@5.15.49 does not support i586-gnu
* guix/scripts/environment.scm (options/resolve-packages): Define
‘system’ and pass it to ‘package->development-manifest’.’
* tests/guix-shell.sh: Test it.
Change-Id: I95c471c1918913ab80dec7d3ca64fe38583cce78
-rw-r--r-- | guix/scripts/environment.scm | 10 | ||||
-rw-r--r-- | tests/guix-shell.sh | 33 |
2 files changed, 39 insertions, 4 deletions
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index 6ae3b11e39..1d7a6e198d 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -311,6 +311,9 @@ use '--preserve' instead~%")) (define (options/resolve-packages store opts) "Return OPTS with package specification strings replaced by manifest entries for the corresponding packages." + (define system + (assoc-ref opts 'system)) + (define (manifest-entry=? e1 e2) (and (eq? (manifest-entry-item e1) (manifest-entry-item e2)) (string=? (manifest-entry-output e1) @@ -327,11 +330,11 @@ for the corresponding packages." ((? package? package) (if (eq? mode 'ad-hoc-package) (list (package->manifest-entry* package)) - (manifest-entries (package->development-manifest package)))) + (manifest-entries (package->development-manifest package system)))) (((? package? package) (? string? output)) (if (eq? mode 'ad-hoc-package) (list (package->manifest-entry* package output)) - (manifest-entries (package->development-manifest package)))) + (manifest-entries (package->development-manifest package system)))) ((lst ...) (append-map (cut packages->outputs <> mode) lst)))) @@ -345,7 +348,8 @@ for the corresponding packages." (('package 'package (? string? spec)) (manifest-entries (package->development-manifest - (transform (specification->package+output spec))))) + (transform (specification->package+output spec)) + system))) (('expression mode str) ;; Add all the outputs of the package STR evaluates to. (packages->outputs (read/eval str) mode)) diff --git a/tests/guix-shell.sh b/tests/guix-shell.sh index 2f5fd86809..b2f820bf26 100644 --- a/tests/guix-shell.sh +++ b/tests/guix-shell.sh @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2021-2022 Ludovic Courtès <ludo@gnu.org> +# Copyright © 2021-2023 Ludovic Courtès <ludo@gnu.org> # # This file is part of GNU Guix. # @@ -103,6 +103,37 @@ guix shell --bootstrap --pure -D -f "$tmpdir/empty-package.scm" \ guile-bootstrap -- guile --version rm "$tmpdir/empty-package.scm" +# Make sure '--development' honors '--system'. +this_system="$(guile -c '(use-modules (guix utils)) + (display (%current-system))')" +other_system="$(guile -c '(use-modules (guix utils)) + (display (if (string=? "riscv64-linux" (%current-system)) + "x86_64-linux" + "riscv64-linux"))')" +cat > "$tmpdir/some-package.scm" <<EOF +(use-modules (guix utils) + (guix packages) + (gnu packages base)) + +(define unsupported-dependency + (package + (inherit grep) + (name "unsupported-dependency") + (supported-systems '()))) + +(package + (inherit hello) + (name "phony-package") + (inputs + (if (string=? (%current-system) "$this_system") + (list unsupported-dependency) + '()))) +EOF + +guix shell -D -f "$tmpdir/some-package.scm" -n && false +guix shell -D -f "$tmpdir/some-package.scm" -n -s "$other_system" + + if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null then # Compute the build environment for the initial GNU Make. |