Fix Unicode output in `cabal-testsuite`
commit5e4fa589744f8d39a3ecac34d23242beb339e9c4
authorRebecca Turner <rbt@sent.as>
Fri, 27 Sep 2024 17:55:31 +0000 (27 10:55 -0700)
committerRebecca Turner <rbt@sent.as>
Thu, 3 Oct 2024 16:44:08 +0000 (3 09:44 -0700)
treeaa5399b442098eac574c2924eed3ca803a8cad48
parent504c7bc10cb472cb80c78f474ba010e831a133b1
Fix Unicode output in `cabal-testsuite`

`System.Process.createPipe` calls (through many intermediaries)
`GHC.IO.Handle.FD.fdToHandle`, whose documentation says:

> Makes a binary Handle. This is for historical reasons; it should
> probably be a text Handle with the default encoding and newline
> translation instead.

The documentation for `System.IO.hSetBinaryMode` says:

> This has the same effect as calling `hSetEncoding` with `char8`, together
> with `hSetNewlineMode` with `noNewlineTranslation`.

But this is a lie, and Unicode written to or read from binary handles is
always encoded or decoded as Latin-1, which is always the wrong choice.

Therefore, we explicitly set the output to UTF-8 to keep it consistent
between platforms and correct on all modern computers.

See: https://gitlab.haskell.org/ghc/ghc/-/issues/25307
cabal-testsuite/src/Test/Cabal/Run.hs