@@ -28,6 +28,8 @@ import System.IO (IOMode (WriteMode), hPutStrLn,
28 withBinaryFile)
28 withBinaryFile)
29import System.Process (rawSystem, readProcess, runProcess,
29import System.Process (rawSystem, readProcess, runProcess,
30 waitForProcess)
30 waitForProcess)
31+import Stackage.Select (select)
32+import Stackage.CheckCabalVersion (checkCabalVersion)
32defaultBuildSettings :: BuildSettings
34defaultBuildSettings :: BuildSettings
33defaultBuildSettings = BuildSettings
35defaultBuildSettings = BuildSettings
@@ -39,7 +41,6 @@ defaultBuildSettings = BuildSettings
39 , extraArgs = ["-fnetwork23"]
41 , extraArgs = ["-fnetwork23"]
40 , haskellPlatformCabal = "haskell-platform/haskell-platform.cabal"
42 , haskellPlatformCabal = "haskell-platform/haskell-platform.cabal"
41 , requireHaskellPlatform = True
43 , requireHaskellPlatform = True
42− , cleanBeforeBuild = True
43 , excludedPackages = empty
44 , excludedPackages = empty
44 , testWorkerThreads = 4
45 , testWorkerThreads = 4
45 , flags = Set.fromList $ words "blaze_html_0_5"
46 , flags = Set.fromList $ words "blaze_html_0_5"
@@ -48,49 +49,31 @@ defaultBuildSettings = BuildSettings
49build :: BuildSettings -> IO ()
50build :: BuildSettings -> IO ()
50build settings' = do
51build settings' = do
51− ii <- getInstallInfo settings'
52+ putStrLn "Checking Cabal version"
53+ libVersion <- checkCabalVersion
53− let root' = sandboxRoot settings'
55+ bp <- select settings'
54− initPkgDb <- if cleanBeforeBuild settings'
56− putStrLn "Wiping out old sandbox folder"
61− b <- doesDirectoryExist root'
62− when b (putStrLn "Re-using existing sandbox")
64− createDirectoryIfMissing True root'
65− root <- canonicalizePath root'
66− let settings = settings' { sandboxRoot = root }
68− when initPkgDb $ do
57+ putStrLn "Checking build plan"
69− ec1 <- rawSystem "ghc-pkg" ["init", packageDir settings]
70− unless (ec1 == ExitSuccess) $ do
71− putStrLn "Unable to create package database via ghc-pkg init"
73− checkPlan settings ii
58+ checkPlan bp
74− putStrLn "No mismatches, starting the sandboxed build."
59+ putStrLn "No mismatches, starting the sandboxed build."
76− versionString <- readProcess "cabal" ["--version"] ""
61+ putStrLn "Wiping out old sandbox folder"
77− libVersion <-
62+ rm_r $ sandboxRoot settings'
78− case map words $ lines versionString of
63+ rm_r "logs"
79− [_,["using","version",libVersion,"of","the","Cabal","library"]] -> return libVersion
64+ settings <- fixBuildSettings settings'
80− _ -> error "Did not understand cabal --version output"
82− case (simpleParse libVersion, simpleParse ">= 1.16") of
66+ putStrLn "Creating new package database"
83− (Nothing, _) -> error $ "Invalid Cabal library version: " ++ libVersion
67+ ec1 <- rawSystem "ghc-pkg" ["init", packageDir settings]
84− (_, Nothing) -> assert False $ return ()
68+ unless (ec1 == ExitSuccess) $ do
85− (Just v, Just vr)
69+ putStrLn "Unable to create package database via ghc-pkg init"
86− | v `withinRange` vr -> return ()
70+ exitWith ec1
87− | otherwise -> error $ "Unsupported Cabal version: " ++ libVersion
89 menv <- fmap Just $ getModifiedEnv settings
72 menv <- fmap Just $ getModifiedEnv settings
90 let runCabal args handle = runProcess "cabal" args Nothing menv Nothing (Just handle) (Just handle)
73 let runCabal args handle = runProcess "cabal" args Nothing menv Nothing (Just handle) (Just handle)
92 -- First install build tools so they can be used below.
75 -- First install build tools so they can be used below.
93− case iiBuildTools ii of
76+ case bpTools bp of
94 [] -> putStrLn "No build tools required"
77 [] -> putStrLn "No build tools required"
95 tools -> do
78 tools -> do
96 putStrLn $ "Installing the following build tools: " ++ unwords tools
79 putStrLn $ "Installing the following build tools: " ++ unwords tools
@@ -103,7 +86,7 @@ build settings' = do
104 [ extraBuildArgs settings
87 [ extraBuildArgs settings
105 , extraArgs settings
88 , extraArgs settings
106− , iiBuildTools ii
89+ , tools
108 hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args))
91 hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args))
109 runCabal args handle
92 runCabal args handle
@@ -122,7 +105,7 @@ build settings' = do
123 [ extraBuildArgs settings
106 [ extraBuildArgs settings
124 , extraArgs settings
107 , extraArgs settings
125− , iiPackageList ii
108+ , bpPackageList bp
127 hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args))
110 hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args))
128 runCabal args handle
111 runCabal args handle
@@ -132,10 +115,10 @@ build settings' = do
132 exitWith ec
115 exitWith ec
134 putStrLn "Sandbox built, beginning individual test suites"
117 putStrLn "Sandbox built, beginning individual test suites"
135− runTestSuites settings ii
118+ runTestSuites settings $ bpPackages bp
137 putStrLn "All test suites that were expected to pass did pass, building tarballs."
120 putStrLn "All test suites that were expected to pass did pass, building tarballs."
138− makeTarballs ii
121+ makeTarballs bp
140-- | Get all of the build tools required.
123-- | Get all of the build tools required.
141iiBuildTools :: InstallInfo -> [String]
124iiBuildTools :: InstallInfo -> [String]