----------------------------------------------------------------------------- -- | -- Module : Main -- Copyright : (c) David Himmelstrup 2005 -- License : BSD-like -- -- Maintainer : lemmih@gmail.com -- Stability : provisional -- Portability : portable -- -- Entry point to the default cabal-install front-end. ----------------------------------------------------------------------------- module Main where import Hackage.Types (Action (..), Option(..)) import Hackage.Setup (parseGlobalArgs, parsePackageArgs, configFromOptions) import Hackage.Config (defaultConfigFile, loadConfig, findCompiler , message, showConfig) import Hackage.List (list) import Hackage.Install (install) import Hackage.Info (info) import Hackage.Update (update) import Hackage.Fetch (fetch) import Hackage.Clean (clean) import Distribution.Verbosity (verbose) import System.Environment (getArgs) -- | Entry point -- main :: IO () main = do rawArgs <- getArgs (action, flags, args) <- parseGlobalArgs rawArgs configFile <- case [f | OptConfigFile f <- flags] of [] -> defaultConfigFile fs -> return (last fs) conf0 <- loadConfig configFile let config = configFromOptions conf0 flags message config verbose "Configuration:" message config verbose (showConfig config) let runCmd f = do (globalArgs, pkgs) <- parsePackageArgs action args (comp, conf) <- findCompiler config f config comp conf globalArgs pkgs case action of InstallCmd -> runCmd install InfoCmd -> runCmd info ListCmd -> list config args UpdateCmd -> update config CleanCmd -> clean config FetchCmd -> runCmd fetch _ -> error "Unhandled command."