From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark H Weaver Subject: [PATCH] gnu: bootstrap: Create a wrapper for guile to set the system load path Date: Wed, 08 Jul 2015 12:45:40 -0400 Message-ID: <87380y1tu3.fsf@netris.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53505) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZCsTt-0005sW-5T for guix-devel@gnu.org; Wed, 08 Jul 2015 12:45:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZCsTl-0002Oe-Cc for guix-devel@gnu.org; Wed, 08 Jul 2015 12:45:57 -0400 Received: from world.peace.net ([50.252.239.5]:38713) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZCsTl-0002O1-8J for guix-devel@gnu.org; Wed, 08 Jul 2015 12:45:49 -0400 List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel@gnu.org --=-=-= Content-Type: text/plain Hello Guix, We currently use gnu/packages/patches/guile-relocatable.patch to set the system load path in the bootstrap guile. However, that patch depends on /proc/self/exe which is not present on the Hurd. Therefore, I came up with another approach in the attached patch. After unpacking the bootstrap guile, we use it to create its own wrapper that sets the GUILE_SYSTEM_PATH and GUILE_SYSTEM_COMPILED_PATH environment variables. My only concern is that these variables will be present in the environment in any subprograms launched by the bootstrap guile, and so if the bootstrap guile ever tries to run a different version of guile, those variable settings may cause trouble. Comments and suggestions welcome. Mark --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-gnu-bootstrap-Create-a-wrapper-for-guile-to-set-the-.patch Content-Description: [PATCH] gnu: bootstrap: Create a wrapper for guile to set the system load path >From 885997fec1f0a175279edbf56b86050731892148 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Wed, 8 Jul 2015 12:31:32 -0400 Subject: [PATCH] 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 | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm index ae8c289..8598c10 100644 --- a/gnu/packages/bootstrap.scm +++ b/gnu/packages/bootstrap.scm @@ -199,6 +199,29 @@ successful, or false to signal an error." "guile-2.0.11.tar.xz") (_ "guile-2.0.9.tar.xz")))) + (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" @@ -208,10 +231,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 -- 2.4.3 --=-=-=--