Defining CompilerOptions.

This commit is contained in:
Kazu Yamamoto
2013-09-19 15:58:50 +09:00
parent 76795b31f2
commit 97da4e9be1
5 changed files with 38 additions and 30 deletions

View File

@@ -61,36 +61,39 @@ data Build = CabalPkg | SingleFile deriving Eq
-- file or GHC session according to the 'Cradle' and 'Options'
-- provided.
initializeFlagsWithCradle :: GhcMonad m => Options -> Cradle -> [GHCOption] -> Bool -> m LogReader
initializeFlagsWithCradle opt cradle ghcOptions logging
initializeFlagsWithCradle opt cradle ghcopts logging
| cabal = withCabal |||> withoutCabal
| otherwise = withoutCabal
where
cabal = isJust $ cradleCabalFile cradle
withCabal = do
(gopts,idirs,depPkgs) <- liftIO $ fromCabalFile ghcOptions cradle
initSession CabalPkg opt gopts idirs (Just depPkgs) logging
compOpts <- liftIO $ fromCabalFile ghcopts cradle
initSession CabalPkg opt compOpts logging
withoutCabal =
initSession SingleFile opt ghcOptions importDirs Nothing logging
initSession SingleFile opt compOpts logging
where
compOpts = CompilerOptions ghcopts importDirs []
----------------------------------------------------------------
initSession :: GhcMonad m => Build
-> Options
-> [GHCOption]
-> [IncludeDir]
-> Maybe [Package]
-> CompilerOptions
-> Bool
-> m LogReader
initSession build opt cmdOpts idirs mDepPkgs logging = do
initSession build opt compOpts logging = do
dflags0 <- getSessionDynFlags
(dflags1,readLog) <- setupDynamicFlags dflags0
_ <- setSessionDynFlags dflags1
return readLog
where
cmdOpts = ghcOptions compOpts
idirs = includeDirs compOpts
depPkgs = depPackages compOpts
ls = lineSeparator opt
setupDynamicFlags df0 = do
df1 <- modifyFlagsWithOpts df0 cmdOpts
let df2 = modifyFlags df1 idirs mDepPkgs (expandSplice opt) build
let df2 = modifyFlags df1 idirs depPkgs (expandSplice opt) build
df3 <- modifyFlagsWithOpts df2 $ ghcOpts opt
liftIO $ setLogger logging df3 ls
@@ -107,14 +110,14 @@ initializeFlags opt = do
----------------------------------------------------------------
-- FIXME removing Options
modifyFlags :: DynFlags -> [IncludeDir] -> Maybe [Package] -> Bool -> Build -> DynFlags
modifyFlags d0 idirs mDepPkgs splice build
modifyFlags :: DynFlags -> [IncludeDir] -> [Package] -> Bool -> Build -> DynFlags
modifyFlags d0 idirs pepPkgs splice build
| splice = setSplice d4
| otherwise = d4
where
d1 = d0 { importPaths = idirs }
d2 = setFastOrNot d1 Fast
d3 = maybe d2 (Gap.addDevPkgs d2) mDepPkgs
d3 = Gap.addDevPkgs d2 pepPkgs
d4 | build == CabalPkg = Gap.setCabalPkg d3
| otherwise = d3