From baed923682802b7281bd68274f080d2bb55d3eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 14 Jun 2018 21:59:23 +0200 Subject: [PATCH] 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'. --- gnu/packages/package-management.scm | 47 +++++++++++++++++++++++++++++ guix/self.scm | 15 ++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) 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)