unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Alex Kost <alezost@gmail.com>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: guix-devel@gnu.org
Subject: Re: [PATCH 6/7] guix build: Add 'build-package'.
Date: Sun, 06 Sep 2015 12:03:38 +0300	[thread overview]
Message-ID: <87bndfx6l1.fsf@gmail.com> (raw)
In-Reply-To: <87si73u5no.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Fri, 28 Aug 2015 11:24:43 +0200")

[-- Attachment #1: Type: text/plain, Size: 3566 bytes --]

Ludovic Courtès (2015-08-28 12:24 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2015-08-26 14:12 +0300) wrote:
>>
>>> Alex Kost <alezost@gmail.com> skribis:
>>>
>>>> Ludovic Courtès (2015-08-18 17:15 +0300) wrote:
>>>>
>>>>> Alex Kost <alezost@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)?


[-- Attachment #2: 0001-store-Add-set-build-options.patch --]
[-- Type: text/x-patch, Size: 1157 bytes --]

From fd38fdae6e66effeba346e7bc863fc5348ec9b9a Mon Sep 17 00:00:00 2001
From: Alex Kost <alezost@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 <ludo@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


[-- Attachment #3: 0002-guix-build-Add-build-package.patch --]
[-- Type: text/x-patch, Size: 4120 bytes --]

From 9ffc27f7a076e4213ef3bee00e5cebad501685ac Mon Sep 17 00:00:00 2001
From: Alex Kost <alezost@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 <ludo@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 <ludo@gnu.org>
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Alex Kost <alezost@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


  reply	other threads:[~2015-09-06  9:03 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-25  8:49 [PATCH 0/7] Add "guix-devel-…" commands Alex Kost
2015-07-25  8:49 ` [PATCH 1/7] emacs: Move guile related code to "guix-guile.el" Alex Kost
2015-08-18 13:50   ` Ludovic Courtès
2015-08-18 13:51   ` Ludovic Courtès
2015-07-25  8:49 ` [PATCH 2/7] emacs: Move code for evaluating to "guix-geiser.el" Alex Kost
2015-08-18 13:52   ` Ludovic Courtès
2015-07-25  8:49 ` [PATCH 3/7] emacs: Add code to call guile procedures Alex Kost
2015-08-18 13:52   ` Ludovic Courtès
2015-07-25  8:49 ` [PATCH 4/7] emacs: Add 'guix-devel-use-current-module' Alex Kost
2015-07-25 18:51   ` Mathieu Lirzin
2015-07-26  8:29     ` Alex Kost
2015-07-26 14:00       ` Mathieu Lirzin
2015-07-26 18:11         ` Alex Kost
2015-07-28  9:19           ` Mathieu Lirzin
2015-08-18 14:05   ` Ludovic Courtès
2015-08-19 20:47     ` Alex Kost
2015-08-26 11:07       ` Ludovic Courtès
2015-07-25  8:49 ` [PATCH 5/7] ui: Add 'show-derivation-outputs' Alex Kost
2015-08-18 14:07   ` Ludovic Courtès
2015-07-25  8:49 ` [PATCH 6/7] guix build: Add 'build-package' Alex Kost
2015-08-18 14:15   ` Ludovic Courtès
2015-08-19 20:50     ` Alex Kost
2015-08-26 11:12       ` Ludovic Courtès
2015-08-26 17:44         ` Alex Kost
2015-08-28  9:24           ` Ludovic Courtès
2015-09-06  9:03             ` Alex Kost [this message]
2015-09-06  9:32               ` Alex Kost
2015-09-08 19:59                 ` Ludovic Courtès
2015-09-08 20:10               ` Ludovic Courtès
2015-09-10 10:25                 ` [PATCH] Add (guix scripts) Alex Kost
2015-09-14 13:34                   ` Ludovic Courtès
2015-09-14 18:39                     ` Alex Kost
2015-09-16 20:21                       ` Ludovic Courtès
2015-09-18 18:52                         ` Alex Kost
2015-09-18 18:51                 ` [PATCH 6/7] guix build: Add 'build-package' Alex Kost
2015-09-22 15:12                   ` Ludovic Courtès
2015-09-22 19:10                     ` Alex Kost
2015-09-22 21:39                       ` Ludovic Courtès
2015-07-25  8:49 ` [PATCH 7/7] emacs: Add 'guix-devel-use-current-module' Alex Kost
2015-08-18 14:17   ` Ludovic Courtès
2015-08-19 20:51     ` [PATCH 7/7] emacs: Add 'guix-devel-build-current-package-definition' Alex Kost
2015-08-26 11:14       ` Ludovic Courtès
2015-09-22 19:10         ` [PATCH 1/2] emacs: Add development utils Alex Kost
2015-09-22 21:44           ` Ludovic Courtès
2015-08-18 13:50 ` [PATCH 0/7] Add "guix-devel-…" commands Ludovic Courtès
2015-08-19 20:47   ` Alex Kost
2015-08-25 20:59     ` Ludovic Courtès
2015-09-22 19:11       ` [PATCH 2/2] emacs: Add 'guix-devel-build-package-definition' Alex Kost
2015-09-22 21:47         ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87bndfx6l1.fsf@gmail.com \
    --to=alezost@gmail.com \
    --cc=guix-devel@gnu.org \
    --cc=ludo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).