summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-12-13 17:43:02 +0100
committerLudovic Courtès <ludo@gnu.org>2021-12-13 17:48:25 +0100
commitaca2defe0172868295941fd9f0e97886f6e9b2d4 (patch)
tree2eb08a14c1f0743761aaf5125f5319edff973176
parent148a03b971b0225ee17720c8e0b69245d2b82130 (diff)
downloadguix-aca2defe0172868295941fd9f0e97886f6e9b2d4.tar.gz
packages: 'modify-inputs' preserves and introduces input labels if needed.
Fixes a bug whereby, in an expression like this:

  (modify-inputs lst
    (delete ...)
    (prepend ...))

the 'delete' clause would have no effect because 'prepend' would pass it
a label-less input list.

* guix/packages.scm (inputs-sans-labels): Remove.
(modify-inputs): In the 'prepend' and 'append' cases, preserve/add input
labels instead of removing them.
-rw-r--r--guix/packages.scm16
1 files changed, 6 insertions, 10 deletions
diff --git a/guix/packages.scm b/guix/packages.scm
index b3c5a00011..b00fa2f702 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1083,13 +1083,6 @@ otherwise."
 otherwise."
   (lookup-input (package-direct-inputs package) name))
 
-(define (inputs-sans-labels inputs)
-  "Return INPUTS stripped of any input labels."
-  (map (match-lambda
-         ((label obj) obj)
-         ((label obj output) `(,obj ,output)))
-       inputs))
-
 (define (replace-input name replacement inputs)
   "Replace input NAME by REPLACEMENT within INPUTS."
   (map (lambda (input)
@@ -1124,7 +1117,10 @@ inputs of Coreutils and adds libcap:
     (delete \"gmp\" \"acl\")
     (append libcap))
 
-Other types of clauses include 'prepend' and 'replace'."
+Other types of clauses include 'prepend' and 'replace'.
+
+The first argument must be a labeled input list; the result is also a labeled
+input list."
     ;; Note: This macro hides the fact that INPUTS, as returned by
     ;; 'package-inputs' & co., is actually an alist with labels.  Eventually,
     ;; it will operate on list of inputs without labels.
@@ -1135,10 +1131,10 @@ Other types of clauses include 'prepend' and 'replace'."
      (modify-inputs (fold alist-delete inputs (list names ...))
                     clauses ...))
     ((_ inputs (prepend lst ...) clauses ...)
-     (modify-inputs (append (list lst ...) (inputs-sans-labels inputs))
+     (modify-inputs (append (map add-input-label (list lst ...)) inputs)
                     clauses ...))
     ((_ inputs (append lst ...) clauses ...)
-     (modify-inputs (append (inputs-sans-labels inputs) (list lst ...))
+     (modify-inputs (append inputs (map add-input-label (list lst ...)))
                     clauses ...))
     ((_ inputs (replace name replacement) clauses ...)
      (modify-inputs (replace-input name replacement inputs)