From: Christopher Baines <mail@cbaines.net>
To: 47989@debbugs.gnu.org
Subject: [bug#47989] [PATCH v2] channels: Add a #:system argument to channel-instances->manifest.
Date: Wed, 5 May 2021 12:24:19 +0100 [thread overview]
Message-ID: <20210505112419.14893-1-mail@cbaines.net> (raw)
In-Reply-To: <20210424081402.26742-1-mail@cbaines.net>
This allows computing a manifest for a specific system. Previously this was
possible, but only through changing %current-system, which caused the
derivation to be computed using that system as well (so computing a derivation
for aarch64-linux on x86_64-linux would require running aarch64-linux code).
This new argument adds the possibility of computing derivations for non-native
systems, without having to run non-native code.
I'm looking at this as it will enable the Guix Data Service to compute channel
instance derivations without relying on QEMU emulation for non-native
systems (it should be faster as well).
* guix/channels.scm (build-from-source): Add #:system argument and pass to
build.
(build-channel-instance): Add system argument and pass to build-from-source.
(channel-instance-derivations): Add #:system argument and pass to
build-channel-instance, also rename system to current-system-value.
(channel-instances->manifest): Add #:system argument and pass to
channel-instance-derivations.
---
guix/channels.scm | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/guix/channels.scm b/guix/channels.scm
index c40fc0c507..476d62e1f4 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -657,10 +657,11 @@ that unconditionally resumes the continuation."
store))))
(define* (build-from-source instance
- #:key core verbose? (dependencies '()))
+ #:key core verbose? (dependencies '()) system)
"Return a derivation to build Guix from INSTANCE, using the self-build
script contained therein. When CORE is true, build package modules under
-SOURCE using CORE, an instance of Guix."
+SOURCE using CORE, an instance of Guix. By default, build for the current
+system, or SYSTEM if specified."
(define name
(symbol->string
(channel-name (channel-instance-channel instance))))
@@ -700,20 +701,22 @@ SOURCE using CORE, an instance of Guix."
(with-trivial-build-handler
(build source
#:verbose? verbose? #:version commit
+ #:system system
#:channel-metadata (channel-instance->sexp instance)
#:pull-version %pull-version))))
;; Build a set of modules that extend Guix using the standard method.
(standard-module-derivation name source core dependencies)))
-(define* (build-channel-instance instance
+(define* (build-channel-instance instance system
#:optional core (dependencies '()))
"Return, as a monadic value, the derivation for INSTANCE, a channel
-instance. DEPENDENCIES is a list of extensions providing Guile modules that
-INSTANCE depends on."
+instance, for SYSTEM. DEPENDENCIES is a list of extensions providing Guile
+modules that INSTANCE depends on."
(build-from-source instance
#:core core
- #:dependencies dependencies))
+ #:dependencies dependencies
+ #:system system))
(define (resolve-dependencies instances)
"Return a procedure that, given one of the elements of INSTANCES, returns
@@ -743,9 +746,9 @@ list of instances it depends on."
(lambda (instance)
(vhash-foldq* cons '() instance edges)))
-(define (channel-instance-derivations instances)
+(define* (channel-instance-derivations instances #:key system)
"Return the list of derivations to build INSTANCES, in the same order as
-INSTANCES."
+INSTANCES. Build for the current system by default, or SYSTEM if specified."
(define core-instance
;; The 'guix' channel is treated specially: it's an implicit dependency of
;; all the other channels.
@@ -757,13 +760,13 @@ INSTANCES."
(resolve-dependencies instances))
(define (instance->derivation instance)
- (mlet %store-monad ((system (current-system)))
+ (mlet %store-monad ((system (if system (return system) (current-system))))
(mcached (if (eq? instance core-instance)
- (build-channel-instance instance)
+ (build-channel-instance instance system)
(mlet %store-monad ((core (instance->derivation core-instance))
(deps (mapm %store-monad instance->derivation
(edges instance))))
- (build-channel-instance instance core deps)))
+ (build-channel-instance instance system core deps)))
instance
system)))
@@ -865,9 +868,10 @@ derivation."
intro))))))
'()))))
-(define (channel-instances->manifest instances)
+(define* (channel-instances->manifest instances #:key system)
"Return a profile manifest with entries for all of INSTANCES, a list of
-channel instances."
+channel instances. By default, build for the current system, or SYSTEM if
+specified."
(define (instance->entry instance drv)
(let ((commit (channel-instance-commit instance))
(channel (channel-instance-channel instance)))
@@ -883,7 +887,8 @@ channel instances."
(properties
`((source ,(channel-instance->sexp instance)))))))
- (mlet* %store-monad ((derivations (channel-instance-derivations instances))
+ (mlet* %store-monad ((derivations (channel-instance-derivations instances
+ #:system system))
(entries -> (map instance->entry instances derivations)))
(return (manifest entries))))
--
2.30.1
next prev parent reply other threads:[~2021-05-05 11:25 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-24 8:14 [bug#47989] [PATCH] channels: Add a #:system argument to channel-instances->manifest Christopher Baines
2021-05-03 20:56 ` Ludovic Courtès
2021-05-03 21:35 ` Christopher Baines
2021-05-04 13:48 ` Ludovic Courtès
2021-05-05 9:28 ` Christopher Baines
2021-05-11 8:48 ` Ludovic Courtès
2021-05-04 13:52 ` Ludovic Courtès
2021-05-05 11:25 ` Christopher Baines
2021-05-05 11:24 ` Christopher Baines [this message]
2021-05-11 8:52 ` Ludovic Courtès
2021-05-12 8:52 ` bug#47989: " Christopher Baines
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210505112419.14893-1-mail@cbaines.net \
--to=mail@cbaines.net \
--cc=47989@debbugs.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 external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.