diff options
author | John Kehayias <john.kehayias@protonmail.com> | 2022-11-03 14:25:09 -0400 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-11-06 12:38:02 +0100 |
commit | 905443abb742315d89901f3b011980ac796d78a4 (patch) | |
tree | c3150565cb38b905ae0bcc566c5c68f2d046d757 /guix | |
parent | f1b0b2344c4c6465cd6033128366e86fa16e5f23 (diff) |
shell: Fix '--emulate-fhs' sometimes not including 'glibc-for-fhs'.
Fixes <https://issues.guix.gnu.org/58861>.
Previously the order of the options giving to 'guix shell' could mean that the
'glibc-for-fhs' package included with the '--emulate-fhs' option would not
appear in the container. For example, using the development option with a
package using the 'gnu-build-system', e.g. 'guix shell -CFD hello', would
include the regular 'glibc' package. The option ordered mattered: 'guix shell
-CD hello -F' would include the expected 'glibc-for-fhs'. We fix this by
having 'glibc-for-fhs' added to the package list just before calling
'options-with-caching' so the option order given by the user does not matter.
* guix/scripts/shell.scm (%options): Move the '--emulate-fhs' (expression
. ...) component from here...
(parse-args): ... to here.
* tests/guix-environment-container.sh: Add a test to check that
'glibc-for-fhs' is in the container even when 'glibc' is included in the 'guix
shell' package list.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'guix')
-rw-r--r-- | guix/scripts/shell.scm | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/guix/scripts/shell.scm b/guix/scripts/shell.scm index a2836629ad..7a379122ae 100644 --- a/guix/scripts/shell.scm +++ b/guix/scripts/shell.scm @@ -143,16 +143,7 @@ interactive shell in that environment.\n")) (option '(#\F "emulate-fhs") #f #f (lambda (opt name arg result) - (let ((result - ;; For an FHS-container, add the (hidden) - ;; package glibc-for-fhs which uses the global - ;; cache at /etc/ld.so.cache. - (alist-cons - 'expression - '(ad-hoc-package - "(@@ (gnu packages base) glibc-for-fhs)") - result))) - (alist-cons 'emulate-fhs? #t result))))) + (alist-cons 'emulate-fhs? #t result)))) (filter-map (lambda (opt) (and (not (any (lambda (name) (member name to-remove)) @@ -173,8 +164,18 @@ interactive shell in that environment.\n")) ;; The '--' token is used to separate the command to run from the rest of ;; the operands. (let ((args command (break (cut string=? "--" <>) args))) - (let ((opts (parse-command-line args %options (list %default-options) - #:argument-handler handle-argument))) + (let* ((args-parsed (parse-command-line args %options (list %default-options) + #:argument-handler handle-argument)) + ;; For an FHS-container, add the (hidden) package glibc-for-fhs + ;; which uses the global cache at /etc/ld.so.cache. We handle + ;; adding this package here to ensure it will always appear in the + ;; container as it is the first package in OPTS. + (opts (if (assoc-ref args-parsed 'emulate-fhs?) + (alist-cons 'expression + '(ad-hoc-package + "(@@ (gnu packages base) glibc-for-fhs)") + args-parsed) + args-parsed))) (options-with-caching (auto-detect-manifest (match command |