[commit: ghc] master: Add support for opting out of package environments (8f3c149)

git at git.haskell.org git at git.haskell.org
Mon May 14 02:52:58 UTC 2018


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

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/8f3c149d94814e4f278b08c562f06fc257eb3c43/ghc

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

commit 8f3c149d94814e4f278b08c562f06fc257eb3c43
Author: Herbert Valerio Riedel <hvr at gnu.org>
Date:   Sun May 13 18:37:18 2018 -0400

    Add support for opting out of package environments
    
    This implements the first part proposed in #13753:
    
    Define a special magic "null" environment, which instructs GHC to ignore
    any package environment files. To this end, I propose to use the name
    `-` (i.e. a single dash), as that is more portable than using the empty
    string for environment variables. In other words, a
    
    - `-package-env -` CLI flag, or a
    - `GHC_ENVIRONMENT=-` env var (unless a `-package-env` flag is present)
    
    would inhibit GHC from looking up and interpreting any package
    environment files from the filesystem; this is the equivalent of
    `-ignore-dot-ghci` for package environment files.
    
    Reviewers: bgamari
    
    Reviewed By: bgamari
    
    Subscribers: rwbarton, thomie, carter
    
    GHC Trac Issues: #13753
    
    Differential Revision: https://phabricator.haskell.org/D4690


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

8f3c149d94814e4f278b08c562f06fc257eb3c43
 compiler/main/DynFlags.hs | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index c80f552..25e99ee 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -4894,12 +4894,14 @@ interpretPackageEnv :: DynFlags -> IO DynFlags
 interpretPackageEnv dflags = do
     mPkgEnv <- runMaybeT $ msum $ [
                    getCmdLineArg >>= \env -> msum [
-                       probeEnvFile env
+                       probeNullEnv env
+                     , probeEnvFile env
                      , probeEnvName env
                      , cmdLineError env
                      ]
                  , getEnvVar >>= \env -> msum [
-                       probeEnvFile env
+                       probeNullEnv env
+                     , probeEnvFile env
                      , probeEnvName env
                      , envError     env
                      ]
@@ -4912,6 +4914,9 @@ interpretPackageEnv dflags = do
       Nothing ->
         -- No environment found. Leave DynFlags unchanged.
         return dflags
+      Just "-" -> do
+        -- Explicitly disabled environment file. Leave DynFlags unchanged.
+        return dflags
       Just envfile -> do
         content <- readFile envfile
         putLogMsg dflags NoReason SevInfo noSrcSpan
@@ -4941,6 +4946,10 @@ interpretPackageEnv dflags = do
       guard =<< liftMaybeT (doesFileExist path)
       return path
 
+    probeNullEnv :: FilePath -> MaybeT IO FilePath
+    probeNullEnv "-" = return "-"
+    probeNullEnv _   = mzero
+
     parseEnvFile :: FilePath -> String -> DynP ()
     parseEnvFile envfile = mapM_ parseEntry . lines
       where



More information about the ghc-commits mailing list