~ruther/guix-local

6b30eb189e48e290136d6a838729cf2eb07ee82f — Ludovic Courtès 4 years ago 61ad9bc
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.
2 files changed, 13 insertions(+), 1 deletions(-)

M guix/gexp.scm
M tests/gexp.scm
M guix/gexp.scm => guix/gexp.scm +2 -1
@@ 685,7 685,8 @@ SUFFIX."
  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)))))))


M tests/gexp.scm => tests/gexp.scm +11 -0
@@ 441,6 441,17 @@
                  '(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)