diff options
author | Ludovic Courtès <ludo@gnu.org> | 2022-08-08 23:06:11 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-08-09 15:16:06 +0200 |
commit | cf60a0a906440ccb007bae1243c3e0397c3a0aba (patch) | |
tree | 929340ac8a8c8effeb4b2350647c4049ccbd4ca2 /guix/build-system | |
parent | 5bce4c82422de6beb3ce6120ba1592be898c2b72 (diff) |
build-system/channel: Accept a channel or instance as the source.
* guix/build-system/channel.scm (latest-channel-instances*): New
variable.
(build-channels): New procedure, with code formerly in
'channel-build-system', augmented with clauses for when SOURCE is a
channel instance or a channel.
* doc/guix.texi (Build Systems): Adjust accordingly.
Diffstat (limited to 'guix/build-system')
-rw-r--r-- | guix/build-system/channel.scm | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/guix/build-system/channel.scm b/guix/build-system/channel.scm index 227eb08373..b6ef3bfacf 100644 --- a/guix/build-system/channel.scm +++ b/guix/build-system/channel.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2019-2021 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2019-2022 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,7 +17,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix build-system channel) - #:use-module ((guix store) #:select (%store-monad)) + #:use-module ((guix store) #:select (%store-monad store-lift)) #:use-module ((guix gexp) #:select (lower-object)) #:use-module (guix monads) #:use-module (guix channels) @@ -32,26 +32,39 @@ ;;; ;;; Code: +(define latest-channel-instances* + (store-lift latest-channel-instances)) + +(define* (build-channels name inputs + #:key source system commit + (authenticate? #t) + #:allow-other-keys) + (mlet* %store-monad ((instances + (cond ((channel-instance? source) + (return (list source))) + ((channel? source) + (latest-channel-instances* + (list source) + #:authenticate? authenticate?)) + (else + (mlet %store-monad ((source + (lower-object source))) + (return + (list (checkout->channel-instance + source #:commit commit)))))))) + (channel-instances->derivation instances))) + (define channel-build-system ;; Build system used to "convert" a channel instance to a package. - (let* ((build (lambda* (name inputs - #:key source commit system - #:allow-other-keys) - (mlet* %store-monad ((source (if (string? source) - (return source) - (lower-object source))) - (instance - -> (checkout->channel-instance - source #:commit commit))) - (channel-instances->derivation (list instance))))) - (lower (lambda* (name #:key system source commit - #:allow-other-keys) - (bag - (name name) - (system system) - (build build) - (arguments `(#:source ,source - #:commit ,commit)))))) + (let ((lower (lambda* (name #:key system source commit (authenticate? #t) + #:allow-other-keys) + (bag + (name name) + (system system) + (build build-channels) + (arguments `(#:source ,source + #:authenticate? ,authenticate? + #:commit ,commit)))))) (build-system (name 'channel) (description "Turn a channel instance into a package.") (lower lower)))) |