gexp: 'file-append' correctly handles bases without an expander.

This fixes this use case:

  (file-append (let-system ...) ...)

* guix/gexp.scm (file-append-compiler): When BASE lacks an expander,
delegate to LOWERED.
* tests/gexp.scm ("let-system in file-append"): New test.
This commit is contained in:
Ludovic Courtès 2021-11-27 22:10:38 +01:00
parent 61ad9bc2ad
commit 6b30eb189e
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 13 additions and 1 deletions

View file

@ -685,7 +685,8 @@ (define-gexp-compiler file-append-compiler <file-append>
expander => (lambda (obj lowered output)
(match obj
(($ <file-append> base suffix)
(let* ((expand (lookup-expander base))
(let* ((expand (or (lookup-expander base)
(lookup-expander lowered)))
(base (expand base lowered output)))
(string-append base (string-concatenate suffix)))))))

View file

@ -441,6 +441,17 @@ (define (match-input thing)
'(system-binding)))
(x x)))))
(test-assert "let-system in file-append"
(let ((mixed (file-append (let-system (system target)
(if (not target) grep sed))
"/bin"))
(grep (file-append grep "/bin"))
(sed (file-append sed "/bin")))
(and (equal? (gexp->sexp* #~(list #$mixed))
(gexp->sexp* #~(list #$grep)))
(equal? (gexp->sexp* #~(list #$mixed) "powerpc64le-linux-gnu")
(gexp->sexp* #~(list #$sed) "powerpc64le-linux-gnu")))))
(test-assert "ungexp + ungexp-native"
(let* ((exp (gexp (list (ungexp-native %bootstrap-guile)
(ungexp coreutils)