From ca79f99c3ec982399ee7af2adb3fdddd7a0e71bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gr=C3=B6ber?= Date: Sun, 12 Apr 2015 02:36:17 +0200 Subject: [PATCH] Also add language options when resolving components --- Language/Haskell/GhcMod/CabalHelper.hs | 13 +++++++++---- Language/Haskell/GhcMod/PathsAndFiles.hs | 3 +++ Language/Haskell/GhcMod/Target.hs | 12 ++++++++++-- Language/Haskell/GhcMod/Types.hs | 2 +- ghc-mod.cabal | 2 +- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Language/Haskell/GhcMod/CabalHelper.hs b/Language/Haskell/GhcMod/CabalHelper.hs index 85b90d0..ed0bc5c 100644 --- a/Language/Haskell/GhcMod/CabalHelper.hs +++ b/Language/Haskell/GhcMod/CabalHelper.hs @@ -76,13 +76,18 @@ cabalHelperCache = Cached { cacheFile = cabalHelperCacheFile, cachedAction = \ _ (progs, root, _) -> runQuery' progs root $ do - q <- liftM4 join4 ghcOptions ghcSrcOptions entrypoints sourceDirs - let cs = flip map q $ \(cn, (opts, (srcOpts, (ep, srcDirs)))) -> - GmComponent cn opts srcOpts ep ep srcDirs mempty + q <- liftM5 join5 + ghcOptions + ghcSrcOptions + ghcLangOptions + entrypoints + sourceDirs + let cs = flip map q $ \(cn, (opts, (srcOpts, (langOpts, (ep, srcDirs))))) -> + GmComponent cn opts srcOpts langOpts ep ep srcDirs mempty return ([setupConfigPath], cs) } where - join4 a b c = join' a . join' b . join' c + join5 a b c d = join' a . join' b . join' c . join' d join' :: Eq a => [(a,b)] -> [(a,c)] -> [(a,(b,c))] join' lb lc = [ (a, (b, c)) | (a, b) <- lb diff --git a/Language/Haskell/GhcMod/PathsAndFiles.hs b/Language/Haskell/GhcMod/PathsAndFiles.hs index 14c04bc..32938d6 100644 --- a/Language/Haskell/GhcMod/PathsAndFiles.hs +++ b/Language/Haskell/GhcMod/PathsAndFiles.hs @@ -180,6 +180,9 @@ setupConfigFile crdl = cradleRootDir crdl setupConfigPath setupConfigPath :: FilePath setupConfigPath = "dist/setup-config" -- localBuildInfoFile defaultDistPref +macrosHeaderPath :: FilePath +macrosHeaderPath = "dist/build/autogen/cabal_macros.h" + ghcSandboxPkgDbDir :: String ghcSandboxPkgDbDir = cabalBuildPlatform ++ "-ghc-" ++ cProjectVersion ++ "-packages.conf.d" diff --git a/Language/Haskell/GhcMod/Target.hs b/Language/Haskell/GhcMod/Target.hs index 6231683..f3712a3 100644 --- a/Language/Haskell/GhcMod/Target.hs +++ b/Language/Haskell/GhcMod/Target.hs @@ -260,18 +260,26 @@ resolveGmComponent :: (IOish m, GmLog m, GmEnv m) -> GmComponent GMCRaw (Set ModulePath) -> m (GmComponent GMCResolved (Set ModulePath)) resolveGmComponent mums c@GmComponent {..} = do - withLightHscEnv gmcGhcSrcOpts $ \env -> do + withLightHscEnv ghcOpts $ \env -> do let srcDirs = if null gmcSourceDirs then [""] else gmcSourceDirs let mg = gmcHomeModuleGraph let simp = gmcEntrypoints sump <- case mums of Nothing -> return simp - Just ums -> Set.fromList . catMaybes <$> mapM (resolveModule env srcDirs) ums + Just ums -> + Set.fromList . catMaybes <$> + mapM (resolveModule env srcDirs) ums mg' <- canonicalizeModuleGraph =<< updateHomeModuleGraph env mg simp sump return $ c { gmcEntrypoints = simp, gmcHomeModuleGraph = mg' } + where ghcOpts = concat [ + gmcGhcSrcOpts, + gmcGhcLangOpts, + [ "-optP-include", "-optP" ++ macrosHeaderPath ] + ] + resolveEntrypoint :: IOish m => Cradle -> GmComponent GMCRaw ChEntrypoint diff --git a/Language/Haskell/GhcMod/Types.hs b/Language/Haskell/GhcMod/Types.hs index fcc0199..f7340d0 100644 --- a/Language/Haskell/GhcMod/Types.hs +++ b/Language/Haskell/GhcMod/Types.hs @@ -164,7 +164,6 @@ type ModuleString = String -- | A Module type Module = [String] - data GmLogLevel = GmPanic | GmException | GmError @@ -215,6 +214,7 @@ data GmComponent (t :: GmComponentType) eps = GmComponent { gmcName :: ChComponentName, gmcGhcOpts :: [GHCOption], gmcGhcSrcOpts :: [GHCOption], + gmcGhcLangOpts :: [GHCOption], gmcRawEntrypoints :: ChEntrypoint, gmcEntrypoints :: eps, gmcSourceDirs :: [FilePath], diff --git a/ghc-mod.cabal b/ghc-mod.cabal index 9fc8b57..2c15b66 100644 --- a/ghc-mod.cabal +++ b/ghc-mod.cabal @@ -121,7 +121,7 @@ Library , bytestring , cereal >= 0.4 , containers - , cabal-helper >= 0.3.1.0 + , cabal-helper >= 0.3.2.0 , deepseq , directory , filepath