guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/03: shell: Fix '--emulate-fhs' sometimes not including 'glibc-for-fhs


From: guix-commits
Subject: 01/03: shell: Fix '--emulate-fhs' sometimes not including 'glibc-for-fhs'.
Date: Sun, 6 Nov 2022 06:39:15 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit 905443abb742315d89901f3b011980ac796d78a4
Author: John Kehayias <john.kehayias@protonmail.com>
AuthorDate: Thu Nov 3 14:25:09 2022 -0400

    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>
---
 guix/scripts/shell.scm              | 25 +++++++++++++------------
 tests/guix-environment-container.sh | 10 ++++++++++
 2 files changed, 23 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
diff --git a/tests/guix-environment-container.sh 
b/tests/guix-environment-container.sh
index f233c3fcc0..fb2c19b193 100644
--- a/tests/guix-environment-container.sh
+++ b/tests/guix-environment-container.sh
@@ -1,5 +1,6 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2015 David Thompson <davet@gnu.org>
+# Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 #
 # This file is part of GNU Guix.
 #
@@ -231,3 +232,12 @@ guix shell -C --emulate-fhs --bootstrap guile-bootstrap \
 # Test that the ld cache was generated and can be successfully read.
 guix shell -CF --bootstrap guile-bootstrap \
      -- guile -c '(execlp "ldconfig" "ldconfig" "-p")'
+
+# Test that the package glibc-for-fhs is in the container even if there is the
+# regular glibc package from another source.  See
+# <https://issues.guix.gnu.org/58861>.
+guix shell -CF --bootstrap guile-bootstrap glibc \
+     -- guile -c '(exit (if (string-contains (readlink "/lib/libc.so")
+                            "glibc-for-fhs")
+                           0
+                           1))'



reply via email to

[Prev in Thread] Current Thread [Next in Thread]