on master help sign in
ghc 8.10 compatibility (CPP optP) (#452)
6f3bd73sheaf
src/Development/IDE/Core/Preprocessor.hs+1−8
@@ -166,18 +166,11 @@ runLhs dflags filename contents = withTempDir $ \dir -> do
166 escape (c:cs) = c : escape cs
166 escape (c:cs) = c : escape cs
167 escape [] = []
167 escape [] = []
168
168
169−
170−modifyOptP :: ([String] -> [String]) -> DynFlags -> DynFlags
171−modifyOptP op = onSettings (onOptP op)
172− where
173− onSettings f x = x{settings = f $ settings x}
174− onOptP f x = x{sOpt_P = f $ sOpt_P x}
175−
176-- | Run CPP on a file
169-- | Run CPP on a file
177runCpp :: DynFlags -> FilePath -> Maybe SB.StringBuffer -> IO SB.StringBuffer
170runCpp :: DynFlags -> FilePath -> Maybe SB.StringBuffer -> IO SB.StringBuffer
178runCpp dflags filename contents = withTempDir $ \dir -> do
171runCpp dflags filename contents = withTempDir $ \dir -> do
179 let out = dir </> takeFileName filename <.> "out"
172 let out = dir </> takeFileName filename <.> "out"
180− dflags <- pure $ modifyOptP ("-D__GHCIDE__":) dflags
173+ dflags <- pure $ addOptP "-D__GHCIDE__" dflags
181
174
182 case contents of
175 case contents of
183 Nothing -> do
176 Nothing -> do
src/Development/IDE/GHC/CPP.hs+22−1
@@ -19,7 +19,8 @@
19--
19--
20-----------------------------------------------------------------------------
20-----------------------------------------------------------------------------
21
21
22−module Development.IDE.GHC.CPP(doCpp) where
22+module Development.IDE.GHC.CPP(doCpp, addOptP)
23+where
23
24
24import Development.IDE.GHC.Compat
25import Development.IDE.GHC.Compat
25import Packages
26import Packages
@@ -33,6 +34,10 @@ import LlvmCodeGen (llvmVersionList)
33#elif MIN_GHC_API_VERSION(8,8,0)
34#elif MIN_GHC_API_VERSION(8,8,0)
34import LlvmCodeGen (LlvmVersion (..))
35import LlvmCodeGen (LlvmVersion (..))
35#endif
36#endif
37+#if MIN_GHC_API_VERSION (8,10,0)
38+import Fingerprint
39+import ToolSettings
40+#endif
36
41
37import System.Directory
42import System.Directory
38import System.FilePath
43import System.FilePath
@@ -162,6 +167,22 @@ getBackendDefs dflags | hscTarget dflags == HscLlvm = do
162getBackendDefs _ =
167getBackendDefs _ =
163 return []
168 return []
164
169
170+addOptP :: String -> DynFlags -> DynFlags
171+#if MIN_GHC_API_VERSION (8,10,0)
172+addOptP f = alterToolSettings $ \s -> s
173+ { toolSettings_opt_P = f : toolSettings_opt_P s
174+ , toolSettings_opt_P_fingerprint = fingerprintStrings (f : toolSettings_opt_P s)
175+ }
176+ where
177+ fingerprintStrings ss = fingerprintFingerprints $ map fingerprintString ss
178+ alterToolSettings f dynFlags = dynFlags { toolSettings = f (toolSettings dynFlags) }
179+#else
180+addOptP opt = onSettings (onOptP (opt:))
181+ where
182+ onSettings f x = x{settings = f $ settings x}
183+ onOptP f x = x{sOpt_P = f $ sOpt_P x}
184+#endif
185+
165-- ---------------------------------------------------------------------------
186-- ---------------------------------------------------------------------------
166-- Macros (cribbed from Cabal)
187-- Macros (cribbed from Cabal)
167
188