[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH RFC 2/4] DRAFT packages: Allow inputs to be plain package lists.
From: |
Ludovic Courtès |
Subject: |
[PATCH RFC 2/4] DRAFT packages: Allow inputs to be plain package lists. |
Date: |
Thu, 20 May 2021 16:58:28 +0200 |
DRAFT: Is it a good idea? If it is, add tests and doc.
* guix/packages.scm (add-input-label, sanitize-inputs): New procedures.
(<package>)[inputs, propagated-inputs, native-inputs]: Add 'sanitize' property.
---
guix/packages.scm | 35 ++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
diff --git a/guix/packages.scm b/guix/packages.scm
index ba19174646..fc3290b8e8 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -366,6 +366,32 @@ name of its URI."
;; <https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00790.html>.
(fold delete %supported-systems '("mips64el-linux")))
+(define (add-input-label input)
+ "Add an input label to INPUT."
+ (match input
+ ((? package? package)
+ (list (package-name package) package))
+ (((? package? package) output) ;XXX: ugly?
+ (list (package-name package) package output))
+ ((? gexp-input?) ;XXX: misplaced because 'native?' field is ignored?
+ (let ((obj (gexp-input-thing input))
+ (output (gexp-input-output input)))
+ `(,(if (package? obj)
+ (package-name obj)
+ "_")
+ ,obj
+ ,@(if (string=? output "out") '() (list output)))))
+ (x
+ `("_" ,x))))
+
+(define-inlinable (sanitize-inputs inputs)
+ "Sanitize INPUTS by turning it into a list of name/package tuples if it's
+not already the case."
+ (cond ((null? inputs) inputs)
+ ((and (pair? (car inputs))
+ (string? (caar inputs)))
+ inputs)
+ (else (map add-input-label inputs))))
;; A package.
(define-record-type* <package>
@@ -380,11 +406,14 @@ name of its URI."
(default '()) (thunked))
(inputs package-inputs ; input packages or derivations
- (default '()) (thunked))
+ (default '()) (thunked)
+ (sanitize sanitize-inputs))
(propagated-inputs package-propagated-inputs ; same, but propagated
- (default '()) (thunked))
+ (default '()) (thunked)
+ (sanitize sanitize-inputs))
(native-inputs package-native-inputs ; native input packages/derivations
- (default '()) (thunked))
+ (default '()) (thunked)
+ (sanitize sanitize-inputs))
(outputs package-outputs ; list of strings
(default '("out")))
--
2.31.1
- [PATCH RFC 0/4] Getting rid of input labels?, Ludovic Courtès, 2021/05/20
- [PATCH RFC 2/4] DRAFT packages: Allow inputs to be plain package lists.,
Ludovic Courtès <=
- [PATCH RFC 1/4] records: Support field sanitizers., Ludovic Courtès, 2021/05/20
- [PATCH RFC 3/4] DRAFT gnu: Change inputs of core packages to plain lists., Ludovic Courtès, 2021/05/20
- [PATCH RFC 4/4] DRAFT lint: Add 'input-labels' checker., Ludovic Courtès, 2021/05/20
- Re: [PATCH RFC 0/4] Getting rid of input labels?, Vincent Legoll, 2021/05/20
- Re: [PATCH RFC 0/4] Getting rid of input labels?, Maxime Devos, 2021/05/20
- Re: [PATCH RFC 0/4] Getting rid of input labels?, Nicolas Goaziou, 2021/05/21