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.
This commit is contained in:
Ludovic Courtès 2021-12-13 17:43:02 +01:00
parent 148a03b971
commit aca2defe01
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5

@ -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)