summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-06-14 21:59:23 +0200
committerLudovic Courtès <ludo@gnu.org>2018-06-14 23:34:59 +0200
commitbaed923682802b7281bd68274f080d2bb55d3eff (patch)
tree44b3c9e9460f179ff741292d4296499bf56aee07
parent0effadcad538241e0cd4ae49a7dececfbb3a8782 (diff)
downloadgnu-guix-baed923682802b7281bd68274f080d2bb55d3eff.tar
gnu-guix-baed923682802b7281bd68274f080d2bb55d3eff.tar.gz
self: Add 'guix-daemon' to the result.
* 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'.
-rw-r--r--gnu/packages/package-management.scm47
-rw-r--r--guix/self.scm15
2 files changed, 61 insertions, 1 deletions
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 24cf3ad015..6d99cddc0d 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -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)
diff --git a/guix/self.scm b/guix/self.scm
index 3023ae379b..1306df46f5 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -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)