diff mbox series

[bug#71232] gexp: Allow program-file to output unicode.

Message ID f7a61ff72518ba5e594d7ab54fed3d8669d0e6d8.1716834624.git.~@wolfsden.cz
State New
Headers show
Series [bug#71232] gexp: Allow program-file to output unicode. | expand

Commit Message

Tomas Volf May 27, 2024, 6:30 p.m. UTC
Due to the port being in ANSI_X3.4-1968 by default, λ character in the gexp is
replaced by ?.  Therefore #~((λ _ #t)) builds as ((? _ #t)), which does not
work (obviously).

The solution is to set the output port to UTF-8 encoding.  That allows

    (program-file "utf8" #~((λ _ (display "猫\n"))))

to build as

    #!...
    !#
    ((λ _ (display "猫\n")))

which does what you would expect.

Change-Id: Ib96f5eed7fe0acfe23db09260a93a09bd6969024
---
Tested locally.  No tests are provided, since whole tests/gexp.scm uses
%bootstrap-guile (so version 2), where it worked already.  It is problem
only with more modern guile 3, which is used by actual builds.

I am not sure how much this will rebuild and do not know how to find out.

 guix/gexp.scm | 1 +
 1 file changed, 1 insertion(+)

--
2.41.0
diff mbox series

Patch

diff --git a/guix/gexp.scm b/guix/gexp.scm
index 74b4c49f90..23b7e4eae6 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1997,6 +1997,7 @@  (define* (gexp->script name exp
                       (gexp
                        (call-with-output-file (ungexp output)
                          (lambda (port)
+                           (set-port-encoding! port "UTF-8")
                            ;; Note: that makes a long shebang.  When the store
                            ;; is /gnu/store, that fits within the 128-byte
                            ;; limit imposed by Linux, but that may go beyond