packages feed

cabal-install-0.4.0: Main.hs

-----------------------------------------------------------------------------
-- |
-- 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."