guix-commits
[Top][All Lists]
Advanced

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

04/08: gnu: guix: Avoid Bash wrapper.


From: guix-commits
Subject: 04/08: gnu: guix: Avoid Bash wrapper.
Date: Tue, 4 May 2021 19:01:47 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit e42bfd236e79ff2270b4a326a5cd45858ed28376
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Tue May 4 14:35:31 2021 +0200

    gnu: guix: Avoid Bash wrapper.
    
    The Bash wrapper created by 'wrap-program' creates an extra
    indirection and may annoyingly emit locale warnings:
    
      /gnu/store/…-bash-minimal-5.0.16/bin/bash: warning: setlocale: LC_ALL: 
cannot change locale (wtf)
    
    This warning would typically show up when running Guix, as produced by
    'guix pack guix', on a foreign distro, annihilating efforts made in
    1d4ab335b22a93e01c2eb1eb3e93fc6534157040 and
    8a973abc6f7eebfcd8a904bfbb99cb9f86f66ef0.
    
    * gnu/packages/package-management.scm (guix)[arguments]: In
    'wrap-program' phase, remove 'string-join' call for PATH and GOPATH.
    Replace 'wrap-program' call with a 'substitute*' form.  Remove (when
    target ...) form.
    [inputs]: Remove "bash-minimal" added in commit
    38b9af7c92344a17b6680ebd2aeea14171f84a1c and no longer needed.
---
 gnu/packages/package-management.scm | 56 ++++++++++++++++++++-----------------
 1 file changed, 31 insertions(+), 25 deletions(-)

diff --git a/gnu/packages/package-management.scm 
b/gnu/packages/package-management.scm
index 827166c..2146754 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -326,31 +326,38 @@ $(prefix)/etc/openrc\n")))
                                  (open-pipe* OPEN_READ
                                              (string-append guile "/bin/guile")
                                              "-c" "(display 
(effective-version))")))
-                               (path   (string-join
-                                        (map (cut string-append <>
-                                                  "/share/guile/site/"
-                                                  effective)
-                                             (delete #f deps*))
-                                        ":"))
-                               (gopath (string-join
-                                        (map (cut string-append <>
-                                                  "/lib/guile/" effective
-                                                  "/site-ccache")
-                                             (delete #f deps*))
-                                        ":"))
+                               (path   (map (cut string-append <>
+                                                 "/share/guile/site/"
+                                                 effective)
+                                            (delete #f deps*)))
+                               (gopath (map (cut string-append <>
+                                                 "/lib/guile/" effective
+                                                 "/site-ccache")
+                                            (delete #f deps*)))
                                (locpath (string-append locales "/lib/locale")))
 
-                          (wrap-program (string-append out "/bin/guix")
-                            `("GUILE_LOAD_PATH" ":" prefix (,path))
-                            `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,gopath))
-                            `("GUIX_LOCPATH" ":" suffix (,locpath)))
-
-                          (when target
-                            ;; XXX Touching wrap-program rebuilds world
-                            (let ((bash (assoc-ref inputs "bash")))
-                              (substitute* (string-append out "/bin/guix")
-                                (("^#!.*/bash") (string-append "#! " bash 
"/bin/bash")))))
-                          #t)))
+                          ;; Modify 'guix' directly instead of using
+                          ;; 'wrap-program'.  This avoids the indirection
+                          ;; through Bash, which in turn avoids getting Bash's
+                          ;; own locale warnings.
+                          (substitute* (string-append out "/bin/guix")
+                            (("!#")
+                             (string-append
+                              "!#\n\n"
+                              (object->string
+                               `(set! %load-path (append ',path %load-path)))
+                              "\n"
+                              (object->string
+                               `(set! %load-compiled-path
+                                  (append ',gopath %load-compiled-path)))
+                              "\n"
+                              (object->string
+                               `(let ((path (getenv "GUIX_LOCPATH")))
+                                  (setenv "GUIX_LOCPATH"
+                                          (if path
+                                              (string-append path ":" ,locpath)
+                                              ,locpath))))
+                              "\n\n"))))))
 
                     ;; The 'guix' executable has 'OUT/libexec/guix/guile' as
                     ;; its shebang; that should remain unchanged, thus remove
@@ -405,8 +412,7 @@ $(prefix)/etc/openrc\n")))
                `(("boot-guile/i686" ,(bootstrap-guile-origin "i686-linux")))
                '())
          ,@(if (%current-target-system)
-               `(("bash" ,bash-minimal)
-                 ("xz" ,xz))
+               `(("xz" ,xz))
                '())
 
          ;; Tests also rely on these bootstrap executables.



reply via email to

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