on 4de7dfd help sign in
stackage/app/stackage.hs
53 lines 2.2 kB history raw
1{-# LANGUAGE RecordWildCards #-}
2import Stackage.Types
3import Stackage.Build (build, defaultBuildSettings)
4import Stackage.Init (stackageInit)
5import System.Environment (getArgs, getProgName)
6import Data.Set (fromList)
7import System.IO (hFlush, stdout)
9data BuildArgs = BuildArgs
10 { noClean :: Bool
11 , excluded :: [String]
12 , noPlatform :: Bool
13 }
15parseBuildArgs :: [String] -> IO BuildArgs
16parseBuildArgs =
17 loop $ BuildArgs False [] False
18 where
19 loop x [] = return x
20 loop x ("--no-clean":rest) = loop x { noClean = True } rest
21 loop x ("--exclude":y:rest) = loop x { excluded = y : excluded x } rest
22 loop x ("--no-platform":rest) = loop x { noPlatform = True } rest
23 loop _ (y:_) = error $ "Did not understand argument: " ++ y
25main :: IO ()
26main = do
27 args <- getArgs
28 case args of
29 "build":rest -> do
30 BuildArgs {..} <- parseBuildArgs rest
31 build defaultBuildSettings
32 { cleanBeforeBuild = not noClean
33 , excludedPackages = fromList $ map PackageName excluded
34 , requireHaskellPlatform = not noPlatform
35 }
36 ["init"] -> do
37 putStrLn "Note: init isn't really ready for prime time use."
38 putStrLn "Using it may make it impossible to build stackage."
39 putStr "Are you sure you want continue (y/n)? "
40 hFlush stdout
41 x <- getLine
42 case x of
43 c:_ | c `elem` "yY" -> stackageInit
44 _ -> putStrLn "Probably a good decision, exiting."
45 ["update"] -> stackageInit >> error "FIXME update"
46 _ -> do
47 pn <- getProgName
48 putStrLn $ "Usage: " ++ pn ++ " <command>"
49 putStrLn "Available commands:"
50 putStrLn " update Download updated Stackage databases. Automatically calls init."
51 putStrLn " init Initialize your cabal file to use Stackage"
52 putStrLn " build [--no-clean] [--no-platform] [--exclude package...]"
53 putStrLn " Build the package databases (maintainers only)"