aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlec Theriault <alec.theriault@gmail.com>2018-01-07 03:59:14 -0800
committerAlexander Biehl <alexbiehl@gmail.com>2018-02-01 14:58:18 +0100
commit854083b44b8fe3924e1ee3926192adfae36ea16a (patch)
tree8cecdd91c7b86b7498695f2ed48dd3f3cc4eab75
parent6ed6c110c874a746b002aca148192c3cbc819d7f (diff)
Filter RTS arguments from 'ghc-options' arguments (#725)
This fixes #666.
-rw-r--r--haddock-api/src/Haddock.hs17
1 files changed, 15 insertions, 2 deletions
diff --git a/haddock-api/src/Haddock.hs b/haddock-api/src/Haddock.hs
index 3f5e5298..23fefb3b 100644
--- a/haddock-api/src/Haddock.hs
+++ b/haddock-api/src/Haddock.hs
@@ -439,13 +439,26 @@ withGhc' libDir flags ghcActs = runGhc (Just libDir) $ do
_ <- setSessionDynFlags dynflags''
ghcActs dynflags''
where
+
+ -- ignore sublists of flags that start with "+RTS" and end in "-RTS"
+ --
+ -- See https://github.com/haskell/haddock/issues/666
+ filterRtsFlags :: [String] -> [String]
+ filterRtsFlags flgs = foldr go (const []) flgs True
+ where go "-RTS" func _ = func True
+ go "+RTS" func _ = func False
+ go _ func False = func False
+ go arg func True = arg : func True
+
+
parseGhcFlags :: MonadIO m => DynFlags -> m DynFlags
parseGhcFlags dynflags = do
-- TODO: handle warnings?
- (dynflags', rest, _) <- parseDynamicFlags dynflags (map noLoc flags)
+ let flags' = filterRtsFlags flags
+ (dynflags', rest, _) <- parseDynamicFlags dynflags (map noLoc flags')
if not (null rest)
- then throwE ("Couldn't parse GHC options: " ++ unwords flags)
+ then throwE ("Couldn't parse GHC options: " ++ unwords flags')
else return dynflags'
unsetPatternMatchWarnings :: DynFlags -> DynFlags