diff options
author | Mark H Weaver <mhw@netris.org> | 2015-07-08 12:31:32 -0400 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2015-07-10 23:47:07 -0400 |
commit | 5d6792f06f1b8646fe9c6d8ca5763323912a7fba (patch) | |
tree | e5611e5291b818f4f969bfd02fcfa5da83b614b4 /gnu | |
parent | 1f4335ae78300c658e441340195b5144595977b4 (diff) | |
download | guix-5d6792f06f1b8646fe9c6d8ca5763323912a7fba.tar.gz |
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.
Diffstat (limited to 'gnu')
-rw-r--r-- | 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 1f0fe16688..f3c1c5a617 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 \"~a@\"\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 |