Ludovic Courtès (2015-08-28 12:24 +0300) wrote: > Alex Kost <alez...@gmail.com> skribis: > >> Ludovic Courtès (2015-08-26 14:12 +0300) wrote: >> >>> Alex Kost <alez...@gmail.com> skribis: >>> >>>> Ludovic Courtès (2015-08-18 17:15 +0300) wrote: >>>> >>>>> Alex Kost <alez...@gmail.com> skribis: >>>>> >>>>>> * guix/scripts/build.scm (build-package): New procedure. >>>>> >>>>> [...] >>>>> >>>>>> +(define (build-package package . build-options) >>>>>> + "Build PACKAGE using BUILD-OPTIONS." >>>>>> + (with-store store >>>>>> + (let* ((drv (run-with-store store >>>>>> + (package->derivation package))) >>>>>> + (drvs (list drv))) >>>>>> + (apply set-build-options store build-options) >>>>>> + (show-what-to-build store drvs) >>>>>> + (build-derivations store drvs) >>>>>> + (show-derivation-outputs drv)))) >>>>> >>>>> I think this doesn’t fit here because it isn’t actually used by ‘guix >>>>> build’. Maybe keep it in emacs/ for now? >>>> >>>> If you mean "guix-main.scm", I don't think it's the right place either, >>>> as all this guix-devel stuff does not depend on Guix REPL (or on any >>>> code from "guix-main.scm" in general). Besides, "guix-main.scm" doesn't >>>> provide a module. >>>> >>>> What about making some additional module?: (guix devel) or something. >>>> Other similar code may be put there in future. For example, you are >>>> editing a package definition and you may want to download the current >>>> origin source. It will probably also require some specific scheme code, >>>> which may be added to that module. >>> >>> Maybe ‘build-package’ could go to (guix packages)? >> >> ‘build-package’ uses ‘show-…’ procedures from (guix ui) module. I >> thought that adding this module to (guix packages) was not desired, or >> is it OK? > > Right, sorry. So maybe leave in (guix build scripts) with a comment > explaining that it doesn’t have a better place and is for use by the > Emacs UI. (Make sure to use the monadic style as suggested in a > previous message.) > > Could you send an updated patch?
Yes, sorry for the delay. At some point I noticed that ‘build-package’ doesn't show any build output, and I had a hard time trying to find out what's wrong. Eventually it appeared to be totally unrelated to the code itself. I think it's a Geiser bug, but I don't know how to make a guix independent recipe — I have sent a message describing it in details to guix-devel — I hope you could help with it :-) So I am attaching 2 patches here: for adding ‘set-build-options*’ and for adding ‘build-package’. Now about the second patch. At first, I don't agree with it :-). I added #:dry-run? to ‘build-package’ procedure as I think it may be useful, then I found a nice ‘maybe-build’ procedure in (guix scripts system), and I just moved it to (guix scripts build) which doesn't seem right. We have some code in (guix scripts …) that is rather common (I mean not specific to the current module), but there is no better place for it, usually because it uses (guix ui). So what about making (guix scripts) module for such general stuff? I think we can move there ‘maybe-build’, ‘%standard-build-options’, ‘set-build-options-from-command-line(*)’, ‘show-build-options-help’, perhaps exported procedures from (guix scripts package). And ‘build-package’ may also go there, WDYT? Or maybe just put those things into (guix ui)?
>From fd38fdae6e66effeba346e7bc863fc5348ec9b9a Mon Sep 17 00:00:00 2001 From: Alex Kost <alez...@gmail.com> Date: Thu, 3 Sep 2015 18:33:51 +0300 Subject: [PATCH 1/2] store: Add 'set-build-options*'. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suggested by: Ludovic Courtès <l...@gnu.org> * guix/store.scm (set-build-options*): New procedure. --- guix/store.scm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/guix/store.scm b/guix/store.scm index 132b8a3..93f2c77 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -58,6 +58,7 @@ close-connection with-store set-build-options + set-build-options* valid-path? query-path-hash hash-part->path @@ -535,6 +536,9 @@ encoding conversion errors." (let loop ((done? (process-stderr server))) (or done? (process-stderr server))))) +(define set-build-options* + (store-lift set-build-options)) + (define-syntax operation (syntax-rules () "Define a client-side RPC stub for the given operation." -- 2.5.0
>From 9ffc27f7a076e4213ef3bee00e5cebad501685ac Mon Sep 17 00:00:00 2001 From: Alex Kost <alez...@gmail.com> Date: Thu, 23 Jul 2015 16:16:41 +0300 Subject: [PATCH 2/2] guix build: Add 'build-package'. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * guix/scripts/system.scm (maybe-build): Move to ... * guix/scripts/build.scm: ...here. (build-package): New procedure. Co-authored-by: Ludovic Courtès <l...@gnu.org> --- guix/scripts/build.scm | 41 ++++++++++++++++++++++++++++++++++++++++- guix/scripts/system.scm | 13 ------------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm index f169853..ee4a3d6 100644 --- a/guix/scripts/build.scm +++ b/guix/scripts/build.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <l...@gnu.org> ;;; Copyright © 2013 Mark H Weaver <m...@netris.org> +;;; Copyright © 2015 Alex Kost <alez...@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -39,9 +40,47 @@ set-build-options-from-command-line set-build-options-from-command-line* show-build-options-help - + maybe-build + build-package guix-build)) +;; XXX This procedure does not belong this module: it is used by +;; 'build-package' and (guix scripts system). +(define* (maybe-build drvs + #:key dry-run? use-substitutes?) + "Show what will/would be built, and actually build DRVS, unless DRY-RUN? is +true." + (with-monad %store-monad + (>>= (show-what-to-build* drvs + #:dry-run? dry-run? + #:use-substitutes? use-substitutes?) + (lambda (_) + (if dry-run? + (return #f) + (built-derivations drvs)))))) + +;; XXX This procedure does not belong this module, but currently there +;; is no better place for it. It is used by Emacs development tools +;; ("emacs/guix-devel.el"). +(define* (build-package package + #:key (use-substitutes? #t) (dry-run? #f) + #:allow-other-keys + #:rest build-options) + "Build PACKAGE using BUILD-OPTIONS. +Show what and how will/would be built." + (with-store store + (run-with-store store + (mbegin %store-monad + (apply set-build-options* + #:use-substitutes? use-substitutes? + (strip-keyword-arguments '(#:dry-run?) build-options)) + (mlet %store-monad ((derivation (package->derivation package))) + (mbegin %store-monad + (maybe-build (list derivation) + #:use-substitutes? use-substitutes? + #:dry-run? dry-run?) + (return (show-derivation-outputs derivation)))))))) + (define (register-root store paths root) "Register ROOT as an indirect GC root for all of PATHS." (let* ((root (string-append (canonicalize-path (dirname root)) diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 45f5982..0db4953 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -298,19 +298,6 @@ it atomically, and then run OS's activation script." ((disk-image) (system-disk-image os #:disk-image-size image-size)))) -(define* (maybe-build drvs - #:key dry-run? use-substitutes?) - "Show what will/would be built, and actually build DRVS, unless DRY-RUN? is -true." - (with-monad %store-monad - (>>= (show-what-to-build* drvs - #:dry-run? dry-run? - #:use-substitutes? use-substitutes?) - (lambda (_) - (if dry-run? - (return #f) - (built-derivations drvs)))))) - (define* (perform-action action os #:key grub? dry-run? use-substitutes? device target -- 2.5.0