pass extra arguments to cabal, for devel and builc

This commit is contained in:
Luite Stegeman 2012-10-15 20:42:55 +02:00
parent 19d4834378
commit 639204b6f0

View File

@ -36,27 +36,30 @@ cabalCommand mopt
| optCabalPgm mopt == CabalDev = "cabal-dev" | optCabalPgm mopt == CabalDev = "cabal-dev"
| otherwise = "cabal" | otherwise = "cabal"
data CabalPgm = Cabal | CabalDev deriving Eq data CabalPgm = Cabal | CabalDev deriving (Show, Eq)
data Options = Options data Options = Options
{ optCabalPgm :: CabalPgm { optCabalPgm :: CabalPgm
, optVerbose :: Bool , optVerbose :: Bool
, optCommand :: Command , optCommand :: Command
} }
deriving (Show, Eq)
data Command = Init data Command = Init
| Configure | Configure
| Build | Build { _buildExtraArgs :: [String] }
| Touch | Touch
| Devel { _develDisableApi :: Bool | Devel { _develDisableApi :: Bool
, _develSuccessHook :: Maybe String , _develSuccessHook :: Maybe String
, _develFailHook :: Maybe String , _develFailHook :: Maybe String
, _develRescan :: Int , _develRescan :: Int
, _develExtraArgs :: [String]
} }
| Test | Test
| AddHandler | AddHandler
| Keter { _keterNoRebuild :: Bool } | Keter { _keterNoRebuild :: Bool }
| Version | Version
deriving (Show, Eq)
main :: IO () main :: IO ()
main = do main = do
@ -65,10 +68,10 @@ main = do
case optCommand o of case optCommand o of
Init -> scaffold Init -> scaffold
Configure -> cabal ["configure"] Configure -> cabal ["configure"]
Build -> touch' >> cabal ["build"] -- fixme passthrough remaining args Build es -> touch' >> cabal ("build":es)
Touch -> touch' Touch -> touch'
(Devel da s f r) -> devel (DevelOpts (optCabalPgm o == CabalDev) da (optVerbose o) r s f) [] -- fixme, passthrough remaining args Devel da s f r es -> devel (DevelOpts (optCabalPgm o == CabalDev) da (optVerbose o) r s f) es
(Keter noRebuild) -> keter (cabalCommand o) noRebuild Keter noRebuild -> keter (cabalCommand o) noRebuild
Version -> do putStrLn ("yesod-core version:" ++ yesodVersion) Version -> do putStrLn ("yesod-core version:" ++ yesodVersion)
putStrLn ("yesod version:" ++ showVersion Paths_yesod.version) putStrLn ("yesod version:" ++ showVersion Paths_yesod.version)
AddHandler -> addHandler AddHandler -> addHandler
@ -88,7 +91,7 @@ optParser = Options
(progDesc "Scaffold a new site")) (progDesc "Scaffold a new site"))
<> command "configure" (info (pure Configure) <> command "configure" (info (pure Configure)
(progDesc "Configure a project for building")) (progDesc "Configure a project for building"))
<> command "build" (info (pure Build) <> command "build" (info (Build <$> extraCabalArgs)
(progDesc $ "Build project (performs TH dependency analysis)" ++ windowsWarning)) (progDesc $ "Build project (performs TH dependency analysis)" ++ windowsWarning))
<> command "touch" (info (pure Touch) <> command "touch" (info (pure Touch)
(progDesc $ "Touch any files with altered TH dependencies but do not build" ++ windowsWarning)) (progDesc $ "Touch any files with altered TH dependencies but do not build" ++ windowsWarning))
@ -110,12 +113,18 @@ keterOptions = Keter <$> switch ( long "nobuild" <> short 'n' <> help "Skip rebu
develOptions :: Parser Command develOptions :: Parser Command
develOptions = Devel <$> switch ( long "disable-api" <> short 'd' develOptions = Devel <$> switch ( long "disable-api" <> short 'd'
<> help "Disable fast GHC API rebuilding") <> help "Disable fast GHC API rebuilding")
<*> optStr ( long "success-hook" <> short 's' <*> optStr ( long "success-hook" <> short 's' <> metavar "COMMAND"
<> help "Run command after rebuild succeeds") <> help "Run COMMAND after rebuild succeeds")
<*> optStr ( long "failure-hook" <> short 'f' <*> optStr ( long "failure-hook" <> short 'f' <> metavar "COMMAND"
<> help "Run command when rebuild fails") <> help "Run COMMAND when rebuild fails")
<*> option ( long "event-timeout" <> short 't' <> value (-1) <> metavar "N" <*> option ( long "event-timeout" <> short 't' <> value (-1) <> metavar "N"
<> help "Force rescan of files every N seconds" ) <> help "Force rescan of files every N seconds" )
<*> extraCabalArgs
extraCabalArgs :: Parser [String]
extraCabalArgs = many (strOption ( long "extra-cabal-arg" <> short 'e' <> metavar "ARG"
<> help "pass extra argument ARG to cabal")
)
-- | Optional @String@ argument -- | Optional @String@ argument
optStr :: Mod OptionFields (Maybe String) -> Parser (Maybe String) optStr :: Mod OptionFields (Maybe String) -> Parser (Maybe String)