{-# LANGUAGE DeriveDataTypeable #-}
module Maker where
import System.Console.CmdArgs
data Method = Debug | Release | Profile
deriving (Data,Typeable,Show,Eq)
data Maker
= Wipe
| Test {threads :: Int, extra :: [String]}
| Build {threads :: Int, method :: Method, files :: [FilePath]}
deriving (Data,Typeable,Show,Eq)
threadsMsg = text "Number of threads to use" & flag "j" & typ "NUM"
wipe = mode $ Wipe &= prog "maker" & text "Clean all build objects"
test = mode $ Test
{threads = def &= threadsMsg
,extra = def &= typ "ANY" & args & unknownFlags
} &= text "Run the test suite"
build = mode $ Build
{threads = def &= threadsMsg
,method = enum Release
[Debug &= text "Debug build"
,Release &= text "Release build"
,Profile &= text "Profile build"]
,files = def &= args
} &= text "Build the project" & defMode
modes = [build,wipe,test]
main = print =<< cmdArgs "Maker v1.0" modes