self: Add 'guix-daemon' to the result.
authorLudovic Courtès <ludo@gnu.org>
Thu, 14 Jun 2018 19:59:23 +0000 (21:59 +0200)
committerLudovic Courtès <ludo@gnu.org>
Thu, 14 Jun 2018 21:34:59 +0000 (23:34 +0200)
* gnu/packages/package-management.scm (guix-daemon): New variable.
* guix/self.scm (whole-package): Add #:daemon and honor it.
(compiled-guix): Pass #:daemon to 'whole-package'.

gnu/packages/package-management.scm
guix/self.scm

index 24cf3ad..6d99cdd 100644 (file)
@@ -294,6 +294,53 @@ the Nix package manager.")
 ;; Alias for backward compatibility.
 (define-public guix-devel guix)
 
+(define-public guix-daemon
+  ;; This package is for internal consumption: it allows us to quickly build
+  ;; the 'guix-daemon' program and use that in (guix self), used by 'guix
+  ;; pull'.
+  (package
+    (inherit guix)
+    (properties `((hidden? . #t)))
+    (name "guix-daemon")
+
+    ;; Use a minimum set of dependencies.
+    (native-inputs
+     (fold alist-delete (package-native-inputs guix)
+           '("po4a" "graphviz" "help2man")))
+    (inputs
+     `(("gnutls" ,gnutls)
+       ("guile-git" ,guile-git)
+       ,@(package-inputs guix)))
+    (propagated-inputs '())
+
+    (arguments
+     (substitute-keyword-arguments (package-arguments guix)
+       ((#:tests? #f #f)
+        #f)
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (replace 'build
+             (lambda _
+               (invoke "make" "nix/libstore/schema.sql.hh")
+               (invoke "make" "-j" (number->string
+                                    (parallel-job-count))
+                       "guix-daemon")))
+           (delete 'copy-bootstrap-guile)
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (invoke "make" "install-binPROGRAMS"
+                       "install-nodist_pkglibexecSCRIPTS")
+
+               ;; We need to tell 'guix-daemon' which 'guix' command to use.
+               ;; Here we use a questionable hack where we hard-code
+               ;; "~root/.config", which could be wrong (XXX).
+               (let ((out (assoc-ref outputs "out")))
+                 (substitute* (find-files (string-append out "/libexec"))
+                   (("exec \".*/bin/guix\"")
+                    "exec ~root/.config/current/bin/guix"))
+                 #t)))
+           (delete 'wrap-program)))))))
+
 (define-public guile2.0-guix
   (package
     (inherit guix)
index 3023ae3..1306df4 100644 (file)
@@ -385,7 +385,7 @@ load path."
 (define* (whole-package name modules dependencies
                         #:key
                         (guile-version (effective-version))
-                        info
+                        info daemon
                         (command (guix-command modules
                                                #:dependencies dependencies
                                                #:guile-version guile-version)))
@@ -401,6 +401,10 @@ the modules, and DEPENDENCIES, a list of packages depended on.  COMMAND is the
                        (symlink #$command
                                 (string-append #$output "/bin/guix"))
 
+                       (when #$daemon
+                         (symlink (string-append #$daemon "/bin/guix-daemon")
+                                  (string-append #$output "/bin/guix-daemon")))
+
                        (let ((modules (string-append #$output
                                                      "/share/guile/site/"
                                                      (effective-version)))
@@ -611,6 +615,15 @@ the modules, and DEPENDENCIES, a list of packages depended on.  COMMAND is the
                                       #:guile-version guile-version)))
            (whole-package name built-modules dependencies
                           #:command command
+
+                          ;; Include 'guix-daemon'.  XXX: Here we inject an
+                          ;; older snapshot of guix-daemon, but that's a good
+                          ;; enough approximation for now.
+                          #:daemon (module-ref (resolve-interface
+                                                '(gnu packages
+                                                      package-management))
+                                               'guix-daemon)
+
                           #:info (info-manual source)
                           #:guile-version guile-version)))
         ((= 0 pull-version)