summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Snoyman <michael@snoyman.com>2015-08-29 12:23:48 +0200
committerBen Gamari <ben@smart-cactus.org>2015-08-29 13:08:17 +0200
commit1b56c40578374a15b4a2593895710c68b0e2a717 (patch)
treee0766bac78805696ef3a3155be7cc210fdfca3db
parenta6826c5d18675a783acce39352eea283e462bf8b (diff)
downloadhaskell-1b56c40578374a15b4a2593895710c68b0e2a717.tar.gz
Respect GHC_CHARENC environment variable #10762
Only supports UTF-8 as a value right now. I expect some discussion to go on around the naming of this variable and whether it's valid to backport it to GHC 7.10 (which would be my preference). The motivation here is that, when capturing the output of GHC to a file, we often want to ensure that the output is UTF-8, regardless of the actual character encoding of the terminal/console. On the other hand, we don't want to necessary change the terminal/console encoding. The reason being: * On Windows, this requires a global-esque change to the console codepage, which adversely affects other processes in the same console * On all OSes, this can break features like smart quote auto-detection. Test Plan: Set LANG to C, GHC_CHARENC to UTF-8, and compile a Haskell source file with a non-ASCII warning produced. The output who include the UTF-8 sequence instead of replacing it with ?. Reviewers: austin, rwbarton, bgamari Reviewed By: bgamari Subscribers: hsyl20, thomie Differential Revision: https://phabricator.haskell.org/D1167 GHC Trac Issues: #10762
-rw-r--r--ghc/Main.hs14
1 files changed, 12 insertions, 2 deletions
diff --git a/ghc/Main.hs b/ghc/Main.hs
index ed2ac67fa6..a1a4eccb12 100644
--- a/ghc/Main.hs
+++ b/ghc/Main.hs
@@ -80,8 +80,18 @@ main = do
initGCStatistics -- See Note [-Bsymbolic and hooks]
hSetBuffering stdout LineBuffering
hSetBuffering stderr LineBuffering
- hSetTranslit stdout
- hSetTranslit stderr
+
+ -- Handle GHC-specific character encoding flags, allowing us to control how
+ -- GHC produces output regardless of OS.
+ env <- getEnvironment
+ case lookup "GHC_CHARENC" env of
+ Just "UTF-8" -> do
+ hSetEncoding stdout utf8
+ hSetEncoding stderr utf8
+ _ -> do
+ -- Avoid GHC erroring out when trying to display unhandled characters
+ hSetTranslit stdout
+ hSetTranslit stderr
GHC.defaultErrorHandler defaultFatalMessager defaultFlushOut $ do
-- 1. extract the -B flag from the args