guix-commits
[Top][All Lists]
Advanced

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

01/11: gnu: bootstrap: Create a wrapper for guile to set the system load


From: Mark H. Weaver
Subject: 01/11: gnu: bootstrap: Create a wrapper for guile to set the system load path.
Date: Sat, 11 Jul 2015 03:48:03 +0000

mhw pushed a commit to branch core-updates
in repository guix.

commit 5d6792f06f1b8646fe9c6d8ca5763323912a7fba
Author: Mark H Weaver <address@hidden>
Date:   Wed Jul 8 12:31:32 2015 -0400

    gnu: bootstrap: Create a wrapper for guile to set the system load path.
    
    * gnu/packages/bootstrap.scm (raw-build): After unpacking, use the bootstrap
      guile to create its own wrapper that sets the guile system load path.
---
 gnu/packages/bootstrap.scm |   38 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 1f0fe16..f3c1c5a 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -197,6 +197,33 @@ successful, or false to signal an error."
                             "guile-2.0.11.tar.xz")
                            (_
                             "guile-2.0.9.tar.xz"))))
+         ;; The following code, run by the bootstrap guile after it is
+         ;; unpacked, creates a wrapper for itself to set its load path.
+         ;; This replaces the previous non-portable method based on
+         ;; reading the /proc/self/exe symlink.
+         (make-guile-wrapper
+          '(begin
+             (use-modules (ice-9 match))
+             (match (command-line)
+               ((_ out bash)
+                (let ((bin-dir    (string-append out "/bin"))
+                      (guile      (string-append out "/bin/guile"))
+                      (guile-real (string-append out "/bin/.guile-real"))
+                      ;; We must avoid using a bare dollar sign in this code,
+                      ;; because it would be interpreted by the shell.
+                      (dollar     (string (integer->char 36))))
+                  (chmod bin-dir #o755)
+                  (rename-file guile guile-real)
+                  (call-with-output-file guile
+                    (lambda (p)
+                      (format p "\
+#!~a
+export GUILE_SYSTEM_PATH=~a/share/guile/2.0
+export GUILE_SYSTEM_COMPILED_PATH=~a/lib/guile/2.0/ccache
+exec -a \"~a0\" ~a \"address@hidden"\n"
+                              bash out out dollar guile-real dollar)))
+                  (chmod guile   #o555)
+                  (chmod bin-dir #o555))))))
          (builder
           (add-text-to-store store
                              "build-bootstrap-guile.sh"
@@ -206,10 +233,17 @@ echo \"unpacking bootstrap Guile to '$out'...\"
 cd $out
 ~a -dc < ~a | ~a xv
 
+# Use the bootstrap guile to create its own wrapper to set the load path.
+GUILE_SYSTEM_PATH=$out/share/guile/2.0 \
+GUILE_SYSTEM_COMPILED_PATH=$out/lib/guile/2.0/ccache \
+$out/bin/guile -c ~s $out ~a
+
 # Sanity check.
 $out/bin/guile --version~%"
-                                     mkdir xz guile tar)
-                             (list mkdir xz guile tar))))
+                                     mkdir xz guile tar
+                                     (format #f "~s" make-guile-wrapper)
+                                     bash)
+                             (list mkdir xz guile tar bash))))
     (derivation store name
                 bash `(,builder)
                 #:system system



reply via email to

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