@@ -38,9 +38,39 @@ parseSelectArgs =
38 loop x ("--build-plan":y:rest) = loop x { buildPlanDest = y } rest
38 loop x ("--build-plan":y:rest) = loop x { buildPlanDest = y } rest
39 loop _ (y:_) = error $ "Did not understand argument: " ++ y
39 loop _ (y:_) = error $ "Did not understand argument: " ++ y
41+data BuildArgs = BuildArgs
43+ , buildPlanSrc :: FilePath
44+ , extraArgs' :: [String] -> [String]
47+parseBuildArgs :: [String] -> IO BuildArgs
50+ { sandbox = sandboxRoot defaultBuildSettings
51+ , buildPlanSrc = defaultBuildPlan
56+ loop x ("--sandbox":y:rest) = loop x { sandbox = y } rest
57+ loop x ("--build-plan":y:rest) = loop x { buildPlanSrc = y } rest
58+ loop x ("--arg":y:rest) = loop x { extraArgs' = extraArgs' x . (y:) } rest
59+ loop _ (y:_) = error $ "Did not understand argument: " ++ y
41defaultBuildPlan :: FilePath
61defaultBuildPlan :: FilePath
42defaultBuildPlan = "build-plan.txt"
62defaultBuildPlan = "build-plan.txt"
64+withBuildSettings :: [String] -> (BuildSettings -> BuildPlan -> IO a) -> IO a
65+withBuildSettings args f = do
66+ BuildArgs {..} <- parseBuildArgs args
67+ bp <- readBuildPlan buildPlanSrc
68+ let settings = defaultBuildSettings
69+ { sandboxRoot = sandbox
70+ , extraArgs = extraArgs' $ extraArgs defaultBuildSettings
44main :: IO ()
74main :: IO ()
46 args <- getArgs
76 args <- getArgs
@@ -57,13 +87,10 @@ main = do
57 else const $ Right ()
87 else const $ Right ()
59 writeBuildPlan buildPlanDest bp
89 writeBuildPlan buildPlanDest bp
60− ["check"] -> checkHelper defaultBuildPlan
90+ ("check":rest) -> withBuildSettings rest $ const checkPlan
61− ["check", fp] -> checkHelper fp
91+ ("build":rest) -> withBuildSettings rest build
62− ["build"] -> buildHelper defaultBuildPlan
92+ ("test":rest) -> withBuildSettings rest runTestSuites
63− ["build", fp] -> buildHelper fp
93+ ("tarballs":rest) -> withBuildSettings rest $ const makeTarballs
64− ["test"] -> testHelper defaultBuildPlan
65− ["test", fp] -> testHelper fp
66− ["tarballs"] -> tbHelper defaultBuildPlan
67 ["init"] -> do
94 ["init"] -> do
68 putStrLn "Note: init isn't really ready for prime time use."
95 putStrLn "Note: init isn't really ready for prime time use."
69 putStrLn "Using it may make it impossible to build stackage."
96 putStrLn "Using it may make it impossible to build stackage."
@@ -81,11 +108,6 @@ main = do
81 --putStrLn " update Download updated Stackage databases. Automatically calls init."
108 --putStrLn " update Download updated Stackage databases. Automatically calls init."
82 --putStrLn " init Initialize your cabal file to use Stackage"
109 --putStrLn " init Initialize your cabal file to use Stackage"
83 putStrLn " select [--no-clean] [--no-platform] [--exclude package...] [--only-permissive] [--allow package] [--build-plan file]"
110 putStrLn " select [--no-clean] [--no-platform] [--exclude package...] [--only-permissive] [--allow package] [--build-plan file]"
84− putStrLn " check [build plan file]"
111+ putStrLn " check [--build-plan file] [--sandbox rootdir] [--arg cabal-arg]"
85− putStrLn " build [build plan file]"
112+ putStrLn " build [--build-plan file] [--sandbox rootdir] [--arg cabal-arg]"
86− putStrLn " test [build plan file]"
113+ putStrLn " test [--build-plan file] [--sandbox rootdir] [--arg cabal-arg]"
88− checkHelper fp = readBuildPlan fp >>= checkPlan
89− buildHelper fp = readBuildPlan fp >>= build defaultBuildSettings
90− testHelper fp = readBuildPlan fp >>= runTestSuites defaultBuildSettings
91− tbHelper fp = readBuildPlan fp >>= makeTarballs