diff options
author | Simon Hengel <sol@typeful.net> | 2012-03-05 11:14:20 +0100 |
---|---|---|
committer | Simon Hengel <sol@typeful.net> | 2012-03-05 11:18:34 +0100 |
commit | eada277a0f492e20d034ec6b8fb08a476232c7c4 (patch) | |
tree | 686a2f875f91b2f6a10cfdb6cdcb70d7c44f7b87 /src | |
parent | 12d931b4c3fcd6d8e26cc48b9072b4291efa5cdb (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.hs | 4 |
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 |