diff --git a/ChangeLog.md b/ChangeLog.md index 4d22828373..967f885a5c 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -21,6 +21,10 @@ Major changes: Behavior changes: +* When Stack's Nix integration is enabled and a `shell-file` is not specified, + Stack sets `LANG=C.UTF-8` (rather than `en_US.UTF-8`, which may not be + available if Stack has been built from source). + Other enhancements: Bug fixes: diff --git a/src/Stack/Nix.hs b/src/Stack/Nix.hs index 666280052e..4cda74eb87 100644 --- a/src/Stack/Nix.hs +++ b/src/Stack/Nix.hs @@ -122,9 +122,10 @@ runShellAndExit = do -- LD_LIBRARY_PATH is set because for now it's needed by -- builds using Template Haskell , "STACK_IN_NIX_EXTRA_ARGS = stackExtraArgs; " - -- overriding default locale so Unicode output using base - -- won't be broken - , "LANG=\"en_US.UTF-8\";" + -- Overriding default locale so Unicode output using base + -- won't be broken (including on systems that do not provide + -- locale en_US.UTF-8): + , "LANG=\"C.UTF-8\";" , "} \"\"" ] ] diff --git a/tests/integration/tests/4095-utf8-pure-nix/Main.hs b/tests/integration/tests/4095-utf8-pure-nix/Main.hs index 34ee080b98..7387f20675 100644 --- a/tests/integration/tests/4095-utf8-pure-nix/Main.hs +++ b/tests/integration/tests/4095-utf8-pure-nix/Main.hs @@ -1,6 +1,7 @@ -- Stack supports Unicode code points in a Nix environment. -- -- See: https://github.com/commercialhaskell/stack/issues/4095 +-- See: https://github.com/commercialhaskell/stack/pull/6945 import Control.Monad ( unless ) import Data.Maybe ( isJust ) @@ -20,7 +21,9 @@ main | otherwise = do isInContainer <- getInContainer unless isInContainer $ do + -- Building causes GHC to emit Unicode: stack ["build", "--nix-pure"] + -- Running causes the executable to output Unicode: stack ["exec", "--nix-pure", "myExe"] -- | 'True' if we are currently running inside a Docker container. diff --git a/tests/integration/tests/4095-utf8-pure-nix/files/app/Main.hs b/tests/integration/tests/4095-utf8-pure-nix/files/app/Main.hs index 3350958478..8ee99c7f8f 100644 --- a/tests/integration/tests/4095-utf8-pure-nix/files/app/Main.hs +++ b/tests/integration/tests/4095-utf8-pure-nix/files/app/Main.hs @@ -1,5 +1,4 @@ -import System.IO ( stdout ) -import Text.Printf ( hPrintf ) +import Lib ( unicode ) main :: IO () -main = hPrintf stdout "平和" +main = unicode diff --git a/tests/integration/tests/4095-utf8-pure-nix/files/package.yaml b/tests/integration/tests/4095-utf8-pure-nix/files/package.yaml index ee1f9f8afa..bea19d444e 100644 --- a/tests/integration/tests/4095-utf8-pure-nix/files/package.yaml +++ b/tests/integration/tests/4095-utf8-pure-nix/files/package.yaml @@ -5,7 +5,12 @@ name: myPackage dependencies: - base +library: + source-dirs: src + executables: myExe: source-dirs: app main: Main.hs + dependencies: + - myPackage diff --git a/tests/integration/tests/4095-utf8-pure-nix/files/src/Lib.hs b/tests/integration/tests/4095-utf8-pure-nix/files/src/Lib.hs new file mode 100644 index 0000000000..ee5f943c29 --- /dev/null +++ b/tests/integration/tests/4095-utf8-pure-nix/files/src/Lib.hs @@ -0,0 +1,7 @@ +module Lib + ( unicode + ) where + +{-# WARNING unicode "Warning itself emits unicode: 😊" #-} +unicode :: IO () +unicode = putStrLn "Function outputs unicode: 😊"