cabal-dev-0.7.3.1: src/Distribution/Dev/Ghci.hs
module Distribution.Dev.Ghci
( actions )
where
import Distribution.Dev.Command ( CommandActions(..), CommandResult(..) )
import Distribution.Dev.Flags ( Config, getVerbosity, getSandbox )
import Distribution.Dev.InitPkgDb ( initPkgDb )
import Distribution.Dev.Sandbox ( pkgConf, Sandbox, KnownVersion, resolveSandbox )
import Distribution.Simple.Program ( Program( programFindVersion
)
, ConfiguredProgram( programDefaultArgs )
, emptyProgramConfiguration
, findProgramVersion
, runProgram
, requireProgram
, simpleProgram
, programVersion
, programLocation
, locationPath
)
import Distribution.Simple.Utils ( debug )
import Distribution.Text ( display )
import System.Console.GetOpt ( OptDescr )
import System.FilePath ((</>))
actions :: CommandActions
actions = CommandActions
{ cmdDesc = "Run ghci with the proper package database."
, cmdRun = \cfg _ args -> invokeGhci cfg args
, cmdOpts = [] :: [OptDescr ()]
, cmdPassFlags = True
}
ghciArgs :: Sandbox KnownVersion -> [String]
ghciArgs sandbox = [ "-package-conf", pkgConf sandbox
, "-no-user-package-conf"
]
configureGhci :: Config -> IO ConfiguredProgram
configureGhci cfg = do (ghci, _) <- requireProgram (getVerbosity cfg) ghciProgram emptyProgramConfiguration
sandbox <- initPkgDb (getVerbosity cfg) =<< (resolveSandbox cfg)
return ghci { programDefaultArgs = ghciArgs sandbox }
-- XXX This invocation pattern is repeated in at least two places (see InvokeCabal)
invokeGhci :: Config -> [String] -> IO CommandResult
invokeGhci cfg args = do let v = getVerbosity cfg
ghci <- configureGhci cfg
debug v $ concat [ "Using ghci "
, maybe "(unknown version)" display $ programVersion ghci
, " at "
, show (locationPath $ programLocation ghci)
]
runProgram v ghci args
return CommandOk
ghciProgram :: Program
ghciProgram = (simpleProgram "ghci") {
programFindVersion = findProgramVersion "--numeric-version" id
}