[commit: ghc] wip/nfs-locking: Add Environment module for setting up environment variables. (f6cd23d)

git at git.haskell.org git at git.haskell.org
Thu Oct 26 23:56:41 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/nfs-locking
Link       : http://ghc.haskell.org/trac/ghc/changeset/f6cd23dc4b92bcedc230754f06b4c3f11438f6ae/ghc

>---------------------------------------------------------------

commit f6cd23dc4b92bcedc230754f06b4c3f11438f6ae
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date:   Sun Jan 24 01:35:03 2016 +0000

    Add Environment module for setting up environment variables.
    
    Fix #191.


>---------------------------------------------------------------

f6cd23dc4b92bcedc230754f06b4c3f11438f6ae
 shaking-up-ghc.cabal |  1 +
 src/Environment.hs   | 22 ++++++++++++++++++++++
 src/Main.hs          | 14 ++++++++------
 src/Rules/Config.hs  |  8 +-------
 4 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/shaking-up-ghc.cabal b/shaking-up-ghc.cabal
index bd21d28..cdd512a 100644
--- a/shaking-up-ghc.cabal
+++ b/shaking-up-ghc.cabal
@@ -20,6 +20,7 @@ executable ghc-shake
     other-modules:       Base
                        , Builder
                        , CmdLineFlag
+                       , Environment
                        , Expression
                        , GHC
                        , Oracles
diff --git a/src/Environment.hs b/src/Environment.hs
new file mode 100644
index 0000000..fd207ed
--- /dev/null
+++ b/src/Environment.hs
@@ -0,0 +1,22 @@
+module Environment (setupEnvironment) where
+
+import Base
+import System.Environment
+
+-- | The build system invokes many external builders whose behaviour is
+-- influenced by the environment variables. We need to modify some of them
+-- for better robustness of the build system.
+setupEnvironment :: IO ()
+setupEnvironment = do
+    -- ghc-cabal refuses to work when GHC_PACKAGE_PATH is set (e.g. by Stack)
+    unsetEnv "GHC_PACKAGE_PATH"
+
+    -- On Windows, some path variables start a prefix like "C:\\" which may
+    -- lead to failures of scripts such as autoreconf. One particular variable
+    -- which causes issues is ACLOCAL_PATH. At the moment we simply reset it
+    -- if it contains a problematic Windows path.
+    -- TODO: Handle Windows paths in ACLOCAL_PATH more gracefully.
+    aclocal <- lookupEnv "ACLOCAL_PATH"
+    case aclocal of
+        Nothing -> return ()
+        Just s  -> when (":\\" `isPrefixOf` drop 1 s) $ unsetEnv "ACLOCAL_PATH"
diff --git a/src/Main.hs b/src/Main.hs
index 7321f88..69f739b 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -3,7 +3,8 @@ module Main (main) where
 import Development.Shake
 
 import qualified Base
-import           CmdLineFlag
+import qualified CmdLineFlag
+import qualified Environment
 import qualified Rules
 import qualified Rules.Cabal
 import qualified Rules.Clean
@@ -16,8 +17,9 @@ import qualified Rules.Perl
 import qualified Test
 
 main :: IO ()
-main = shakeArgsWith options flags $ \cmdLineFlags targets -> do
-    putCmdLineFlags cmdLineFlags
+main = shakeArgsWith options CmdLineFlag.flags $ \cmdLineFlags targets -> do
+    CmdLineFlag.putCmdLineFlags cmdLineFlags
+    Environment.setupEnvironment
     return . Just $ if null targets
                     then rules
                     else want targets >> withoutActions rules
@@ -27,13 +29,13 @@ main = shakeArgsWith options flags $ \cmdLineFlags targets -> do
         [ Rules.Cabal.cabalRules
         , Rules.Clean.cleanRules
         , Rules.Config.configRules
-        , Rules.Generate.copyRules
         , Rules.Generate.generateRules
-        , Rules.Perl.perlScriptRules
-        , Rules.generateTargets
+        , Rules.Generate.copyRules
         , Rules.Gmp.gmpRules
         , Rules.Libffi.libffiRules
         , Rules.Oracles.oracleRules
+        , Rules.Perl.perlScriptRules
+        , Rules.generateTargets
         , Rules.packageRules
         , Test.testRules ]
     options = shakeOptions
diff --git a/src/Rules/Config.hs b/src/Rules/Config.hs
index 77ac1ac..1297825 100644
--- a/src/Rules/Config.hs
+++ b/src/Rules/Config.hs
@@ -21,10 +21,4 @@ configRules = do
     -- TODO: Handle Windows paths in ACLOCAL_PATH more gracefully.
     "configure" %> \_ -> do
         putBuild "| Running boot..."
-        aclocal <- getEnv "ACLOCAL_PATH"
-        let env = case aclocal of
-                Nothing -> []
-                Just s  -> if ":\\" `isPrefixOf` (drop 1 s)
-                           then [AddEnv "ACLOCAL_PATH" ""]
-                           else []
-        quietly $ cmd (EchoStdout False) env "perl boot"
+        quietly $ cmd (EchoStdout False) "perl boot"



More information about the ghc-commits mailing list