summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-07-20 22:23:15 +0200
committerLudovic Courtès <ludo@gnu.org>2016-07-20 22:53:02 +0200
commit13cee334f1a31e7d8f7124d045b136106fe8d356 (patch)
tree74af2900ae0ef80b8b752c51481e47f0b3abcf38
parent0b0086e94c68769bfcada7c2b3b426873aac8efc (diff)
downloadguix-13cee334f1a31e7d8f7124d045b136106fe8d356.tar.gz
pull: Install (guix config) module to override the user's one.
* build-aux/build-self.scm (zlib, gzip, bzip2, xz): New variables.
(build)[storedir, localstatedir, sysconfdir, sbindir]: New variables.
[builder]: Pass them to 'build-guix'.
* guix/build/pull.scm (build-guix): Add #:system, #:storedir,
  #:localstatedir, #:sysconfdir, #:sbindir, #:package-name,
  #:package-version, #:bug-report-address, #:home-page-url, #:libgcrypt,
  #:zlib, #:gzip, #:bzip2, and #:xz.  Remove #:gcrypt.
  Instantiate all the substitution variables in (guix config).  Remove
  code to delete OUT/guix/config.{scm,go}.
* guix/config.scm.in: Add note about (guix script pull).
-rw-r--r--build-aux/build-self.scm48
-rw-r--r--guix/build/pull.scm39
-rw-r--r--guix/config.scm.in3
3 files changed, 76 insertions, 14 deletions
diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index b78f3cb437..c673912af5 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +19,7 @@
 (define-module (build-self)
   #:use-module (gnu)
   #:use-module (guix)
+  #:use-module (guix config)
   #:use-module (srfi srfi-1)
   #:export (build))
 
@@ -44,6 +45,18 @@
 (define libgcrypt
   (first (find-best-packages-by-name "libgcrypt" #f)))
 
+(define zlib
+  (first (find-best-packages-by-name "zlib" #f)))
+
+(define gzip
+  (first (find-best-packages-by-name "gzip" #f)))
+
+(define bzip2
+  (first (find-best-packages-by-name "bzip2" #f)))
+
+(define xz
+  (first (find-best-packages-by-name "xz" #f)))
+
 (define guile-json
   (first (find-best-packages-by-name "guile-json" #f)))
 
@@ -63,6 +76,19 @@
                 #:rest rest)
   "Return a derivation that unpacks SOURCE into STORE and compiles Scheme
 files."
+  ;; The '%xxxdir' variables were added to (guix config) in July 2016 so we
+  ;; cannot assume that they are defined.  Try to guess their value when
+  ;; they're undefined (XXX: we get an incorrect guess when environment
+  ;; variables such as 'NIX_STATE_DIR' are defined!).
+  (define storedir
+    (if (defined? '%storedir) %storedir %store-directory))
+  (define localstatedir
+    (if (defined? '%localstatedir) %localstatedir (dirname %state-directory)))
+  (define sysconfdir
+    (if (defined? '%sysconfdir) %sysconfdir (dirname %config-directory)))
+  (define sbindir
+    (if (defined? '%sbindir) %sbindir (dirname %guix-register-program)))
+
   (define builder
     #~(begin
         (use-modules (guix build pull))
@@ -73,12 +99,28 @@ files."
 
         (build-guix #$output #$source
 
+                    #:system #$%system
+                    #:storedir #$storedir
+                    #:localstatedir #$localstatedir
+                    #:sysconfdir #$sysconfdir
+                    #:sbindir #$sbindir
+
+                    #:package-name #$%guix-package-name
+                    #:package-version #$%guix-version
+                    #:bug-report-address #$%guix-bug-report-address
+                    #:home-page-url #$%guix-home-page-url
+
+                    #:libgcrypt #$libgcrypt
+                    #:zlib #$zlib
+                    #:gzip #$gzip
+                    #:bzip2 #$bzip2
+                    #:xz #$xz
+
                     ;; XXX: This is not perfect, enabling VERBOSE? means
                     ;; building a different derivation.
                     #:debug-port (if #$verbose?
                                      (current-error-port)
-                                     (%make-void-port "w"))
-                    #:gcrypt #$libgcrypt)))
+                                     (%make-void-port "w")))))
 
   (gexp->derivation "guix-latest" builder
                     #:modules '((guix build pull)
diff --git a/guix/build/pull.scm b/guix/build/pull.scm
index 4ddb12ac04..ccf1868516 100644
--- a/guix/build/pull.scm
+++ b/guix/build/pull.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -36,7 +36,17 @@
 ;;; Code:
 
 (define* (build-guix out source
-                     #:key gcrypt
+                     #:key
+                     system
+                     storedir localstatedir sysconfdir sbindir
+
+                     (package-name "GNU Guix")
+                     (package-version "0")
+                     (bug-report-address "bug-guix@gnu.org")
+                     (home-page-url "https://gnu.org/s/guix")
+
+                     libgcrypt zlib gzip bzip2 xz
+
                      (debug-port (%make-void-port "w"))
                      (log-port (current-error-port)))
   "Build and install Guix in directory OUT using SOURCE, a directory
@@ -55,13 +65,26 @@ containing the source code.  Write any debugging output to DEBUG-PORT."
     (copy-file "guix.scm" (string-append out "/guix.scm"))
     (copy-file "gnu.scm" (string-append out "/gnu.scm"))
 
-    ;; Add a fake (guix config) module to allow the other modules to be
-    ;; compiled.  The user's (guix config) is the one that will be used.
+    ;; Instantiate a (guix config) module that preserves the original
+    ;; settings.
     (copy-file "guix/config.scm.in"
                (string-append out "/guix/config.scm"))
     (substitute* (string-append out "/guix/config.scm")
-      (("@LIBGCRYPT@")
-       (string-append gcrypt "/lib/libgcrypt")))
+      (("@PACKAGE_NAME@") package-name)
+      (("@PACKAGE_VERSION@") package-version)
+      (("@PACKAGE_BUGREPORT@") bug-report-address)
+      (("@PACKAGE_URL@") home-page-url)
+      (("@storedir@") storedir)
+      (("@guix_localstatedir@") localstatedir)
+      (("@guix_sysconfdir@") sysconfdir)
+      (("@guix_sbindir@") sbindir)
+      (("@guix_system@") system)
+      (("@LIBGCRYPT@") (string-append libgcrypt "/lib/libgcrypt"))
+      (("@LIBZ@") (string-append zlib "/lib/libz"))
+      (("@GZIP@") (string-append gzip "/bin/gzip"))
+      (("@BZIP2@") (string-append bzip2 "/bin/bzip2"))
+      (("@XZ@") (string-append xz "/bin/xz"))
+      (("@NIX_INSTANTIATE@") ""))                 ;remnants from the past
 
     ;; Augment the search path so Scheme code can be compiled.
     (set! %load-path (cons out %load-path))
@@ -119,10 +142,6 @@ containing the source code.  Write any debugging output to DEBUG-PORT."
              (set! completed (+ 1 completed))))
          files))))
 
-  ;; Remove the "fake" (guix config).
-  (delete-file (string-append out "/guix/config.scm"))
-  (delete-file (string-append out "/guix/config.go"))
-
   (newline)
   #t)
 
diff --git a/guix/config.scm.in b/guix/config.scm.in
index 7a420401ce..8f2c4abd8e 100644
--- a/guix/config.scm.in
+++ b/guix/config.scm.in
@@ -42,7 +42,8 @@
 
 ;;; Commentary:
 ;;;
-;;; Compile-time configuration of Guix.
+;;; Compile-time configuration of Guix.  When adding a substitution variable
+;;; here, make sure to equip (guix scripts pull) to substitute it.
 ;;;
 ;;; Code: