[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#49169] [PATCH v2 15/16] import: print: Emit new-style package input
From: |
Ludovic Courtès |
Subject: |
[bug#49169] [PATCH v2 15/16] import: print: Emit new-style package inputs when possible. |
Date: |
Wed, 30 Jun 2021 22:48:31 +0200 |
* guix/import/print.scm (redundant-input-labels?): New procedure.
(package->code)[package-lists->code]: Rename to...
[inputs->code]: ... this. When 'redundant-input-labels?' returns true,
emit label-less inputs. Adjust callers to new name.
* tests/print.scm (pkg-with-inputs): Adjust accordingly.
---
guix/import/print.scm | 57 +++++++++++++++++++++++++++++--------------
tests/print.scm | 4 +--
2 files changed, 41 insertions(+), 20 deletions(-)
diff --git a/guix/import/print.scm b/guix/import/print.scm
index dcc38abc70..77492e222c 100644
--- a/guix/import/print.scm
+++ b/guix/import/print.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -30,6 +31,14 @@
#:use-module (ice-9 match)
#:export (package->code))
+(define (redundant-input-labels? inputs)
+ "Return #t if input labels in the INPUTS list are redundant."
+ (every (match-lambda
+ ((label (? package? package) . _)
+ (string=? label (package-name package)))
+ (_ #f))
+ inputs))
+
;; FIXME: the quasiquoted arguments field may contain embedded package
;; objects, e.g. in #:disallowed-references; they will just be printed with
;; their usual #<package ...> representation, not as variable names.
@@ -104,21 +113,33 @@ when evaluated."
,@(if (null? patches) '()
`((patches (search-patches ,@(map basename patches))))))))
- (define (package-lists->code lsts)
- (list 'quasiquote
- (map (match-lambda
- ((? symbol? s)
- (list (symbol->string s) (list 'unquote s)))
- ((label pkg . out)
- (let ((mod (package-module-name pkg)))
- (cons* label
- ;; FIXME: using '@ certainly isn't pretty, but it
- ;; avoids having to import the individual package
- ;; modules.
- (list 'unquote
- (list '@ mod (variable-name pkg mod)))
- out))))
- lsts)))
+ (define (inputs->code inputs)
+ (if (redundant-input-labels? inputs)
+ `(list ,@(map (match-lambda ;no need for input labels ("new style")
+ ((_ package)
+ (let ((module (package-module-name package)))
+ `(@ ,module ,(variable-name package module))))
+ ((_ package output)
+ (let ((module (package-module-name package)))
+ (list 'quasiquote
+ (list
+ (list 'unquote
+ `(@ ,module
+ ,(variable-name package module)))
+ output)))))
+ inputs))
+ (list 'quasiquote ;preserve input labels (deprecated)
+ (map (match-lambda
+ ((label pkg . out)
+ (let ((mod (package-module-name pkg)))
+ (cons* label
+ ;; FIXME: using '@ certainly isn't pretty, but
it
+ ;; avoids having to import the individual
package
+ ;; modules.
+ (list 'unquote
+ (list '@ mod (variable-name pkg mod)))
+ out))))
+ inputs))))
(let ((name (package-name package))
(version (package-version package))
@@ -160,13 +181,13 @@ when evaluated."
(outs `((outputs (list ,@outs)))))
,@(match native-inputs
(() '())
- (pkgs `((native-inputs ,(package-lists->code pkgs)))))
+ (pkgs `((native-inputs ,(inputs->code pkgs)))))
,@(match inputs
(() '())
- (pkgs `((inputs ,(package-lists->code pkgs)))))
+ (pkgs `((inputs ,(inputs->code pkgs)))))
,@(match propagated-inputs
(() '())
- (pkgs `((propagated-inputs ,(package-lists->code pkgs)))))
+ (pkgs `((propagated-inputs ,(inputs->code pkgs)))))
,@(if (lset= string=? supported-systems %supported-systems)
'()
`((supported-systems (list ,@supported-systems))))
diff --git a/tests/print.scm b/tests/print.scm
index 3386590d3a..1b24e12f2e 100644
--- a/tests/print.scm
+++ b/tests/print.scm
@@ -60,8 +60,8 @@
(base32
"070pwb7brdcn1mfvplkd56vjc7lbz4iznzkqvfsakvgbv68k71ah"))))
(build-system (@ (guix build-system gnu) gnu-build-system))
- (inputs `(("coreutils" ,(@ (gnu packages base) coreutils))
- ("glibc" ,(@ (gnu packages base) glibc) "debug")))
+ (inputs (list (@ (gnu packages base) coreutils)
+ `(,(@ (gnu packages base) glibc) "debug")))
(home-page "http://gnu.org")
(synopsis "Dummy")
(description "This is a dummy package.")
--
2.32.0
- [bug#49169] [PATCH v2 03/16] lint: Add 'input-labels' checker., (continued)
- [bug#49169] [PATCH v2 03/16] lint: Add 'input-labels' checker., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 02/16] packages: Allow inputs to be plain package lists., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 04/16] packages: Add 'lookup-package-input' & co., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 05/16] packages: Add 'modify-inputs'., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 07/16] utils: 'edit-expression' no longer leaks file ports., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 06/16] gnu: Change inputs of core packages to plain lists., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 10/16] utils: 'edit-expression' copies part of the original source map., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 12/16] packages: 'hidden-package' inherits the original package location., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 13/16] import: pypi: Emit new-style package inputs., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 14/16] import: cran: Emit new-style package inputs., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 15/16] import: print: Emit new-style package inputs when possible.,
Ludovic Courtès <=
- [bug#49169] [PATCH v2 08/16] utils: Add 'go-to-location' with source location caching., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 09/16] utils: 'edit-expression' modifies the file only if necessary., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 11/16] Add 'guix style'., Ludovic Courtès, 2021/06/30
- [bug#49169] [PATCH v2 16/16] import: elpa: Emit new-style package inputs., Ludovic Courtès, 2021/06/30