aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Hengel <sol@typeful.net>2012-03-05 11:14:20 +0100
committerSimon Hengel <sol@typeful.net>2012-03-05 11:18:34 +0100
commiteada277a0f492e20d034ec6b8fb08a476232c7c4 (patch)
tree686a2f875f91b2f6a10cfdb6cdcb70d7c44f7b87 /src
parent12d931b4c3fcd6d8e26cc48b9072b4291efa5cdb (diff)
Save/restore global state for static flags when running GHC actions
This is necessary if we want to run createInterfaces (from Documentation.Haddock) multiple times in the same process.
Diffstat (limited to 'src')
-rw-r--r--src/Main.hs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/Main.hs b/src/Main.hs
index 0a3c9ffc..c0b7df4b 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -57,6 +57,7 @@ import Paths_haddock
import GHC hiding (flags, verbosity)
import Config
import DynFlags hiding (flags, verbosity)
+import StaticFlags (saveStaticFlagGlobals, restoreStaticFlagGlobals)
import Panic (panic, handleGhcException)
import Module
@@ -290,7 +291,7 @@ dumpInterfaceFile path ifaces homeLinks = writeInterfaceFile path ifaceFile
-- | Start a GHC session with the -haddock flag set. Also turn off
-- compilation and linking. Then run the given 'Ghc' action.
withGhc :: String -> [String] -> (DynFlags -> Ghc a) -> IO a
-withGhc libDir flags ghcActs = do
+withGhc libDir flags ghcActs = saveStaticFlagGlobals >>= \savedFlags -> do
-- TODO: handle warnings?
(restFlags, _) <- parseStaticFlags (map noLoc flags)
runGhc (Just libDir) $ do
@@ -308,6 +309,7 @@ withGhc libDir flags ghcActs = do
-- dynamic or static linking at all!
_ <- setSessionDynFlags dynflags'''
ghcActs dynflags'''
+ `finally` restoreStaticFlagGlobals savedFlags
where
parseGhcFlags :: Monad m => DynFlags -> [Located String]
-> [String] -> m DynFlags