build-system/channel: Add support for additional channels.

Until now, ‘channel-build-system’ would assume a single channel, the
‘guix’ channel.  This change lets users specify additional channels
using the #:channels parameter.

* guix/build-system/channel.scm (build-channels): Add #:channels and
honor it.
(channel-build-system): In ‘lower’, add #:channels and honor it.
* doc/guix.texi (Build Systems): Document it.

Change-Id: I36c1d19cbeee02a4d1144de089b78df0390774a0
This commit is contained in:
Ludovic Courtès 2024-03-21 23:38:04 +01:00
parent 69b8feabcf
commit d6a3818761
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 9 additions and 3 deletions

View file

@ -10466,7 +10466,10 @@ field (@pxref{Channels}); alternatively, its source can be a directory
name, in which case an additional @code{#:commit} argument must be name, in which case an additional @code{#:commit} argument must be
supplied to specify the commit being built (a hexadecimal string). supplied to specify the commit being built (a hexadecimal string).
The resulting package is a Guix instance of the given channel, similar Optionally, a @code{#:channels} argument specifying additional channels
can be provided.
The resulting package is a Guix instance of the given channel(s), similar
to how @command{guix time-machine} would build it. to how @command{guix time-machine} would build it.
@end defvar @end defvar

View file

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019-2022 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2019-2022, 2024 Ludovic Courtès <ludo@gnu.org>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -37,6 +37,7 @@ (define latest-channel-instances*
(define* (build-channels name inputs (define* (build-channels name inputs
#:key source system commit #:key source system commit
(channels '())
(authenticate? #t) (authenticate? #t)
#:allow-other-keys) #:allow-other-keys)
(mlet* %store-monad ((instances (mlet* %store-monad ((instances
@ -44,7 +45,7 @@ (define* (build-channels name inputs
(return (list source))) (return (list source)))
((channel? source) ((channel? source)
(latest-channel-instances* (latest-channel-instances*
(list source) (cons source channels)
#:authenticate? authenticate?)) #:authenticate? authenticate?))
((string? source) ((string? source)
;; If SOURCE is a store file name, as is the ;; If SOURCE is a store file name, as is the
@ -64,12 +65,14 @@ (define* (build-channels name inputs
(define channel-build-system (define channel-build-system
;; Build system used to "convert" a channel instance to a package. ;; Build system used to "convert" a channel instance to a package.
(let ((lower (lambda* (name #:key system source commit (authenticate? #t) (let ((lower (lambda* (name #:key system source commit (authenticate? #t)
(channels '())
#:allow-other-keys) #:allow-other-keys)
(bag (bag
(name name) (name name)
(system system) (system system)
(build build-channels) (build build-channels)
(arguments `(#:source ,source (arguments `(#:source ,source
#:channels ,channels
#:authenticate? ,authenticate? #:authenticate? ,authenticate?
#:commit ,commit)))))) #:commit ,commit))))))
(build-system (name 'channel) (build-system (name 'channel)