@@ -1,14 +1,18 @@
1module Stackage.Build
1module Stackage.Build
3+ , defaultBuildSettings
5import Distribution.Text (simpleParse)
7import Distribution.Text (simpleParse)
6import Control.Monad (unless)
8import Control.Monad (unless)
7import Stackage.CheckPlan
10import Stackage.CheckPlan
8import Stackage.InstallInfo
11import Stackage.InstallInfo
9import Stackage.Tarballs
12import Stackage.Tarballs
10import Stackage.Test
13import Stackage.Test
11import Stackage.Util
14import Stackage.Util
15+import Stackage.Config
12import System.Exit (ExitCode (ExitSuccess), exitWith)
16import System.Exit (ExitCode (ExitSuccess), exitWith)
13import System.IO (IOMode (WriteMode), withBinaryFile)
17import System.IO (IOMode (WriteMode), withBinaryFile)
14import System.Process (runProcess, waitForProcess, rawSystem, readProcess)
18import System.Process (runProcess, waitForProcess, rawSystem, readProcess)
@@ -16,27 +20,35 @@ import System.Directory (createDirectoryIfMissing, canonicalizePat
16import Distribution.Version (thisVersion, withinRange)
20import Distribution.Version (thisVersion, withinRange)
17import Control.Exception (assert)
21import Control.Exception (assert)
19−build :: FilePath
23+defaultBuildSettings :: BuildSettings
20− -> ([String] -> [String]) -- ^ extra build rgs
24+defaultBuildSettings = BuildSettings
21− -> IO ()
25+ { sandboxRoot = "sandbox"
22−build root' extraBuildArgs = do
26+ , extraBuildArgs = []
27+ , extraCore = defaultExtraCore
28+ , expectedFailures = defaultExpectedFailures
29+ , stablePackages = defaultStablePackages
30+ , extraArgs = ["-fnetwork23"]
33+build :: BuildSettings -> IO ()
23 putStrLn "Creating a build plan"
35 putStrLn "Creating a build plan"
24− ii <- getInstallInfo
36+ ii <- getInstallInfo settings'
26 putStrLn "Wiping out old sandbox folder"
38 putStrLn "Wiping out old sandbox folder"
39+ let root' = sandboxRoot settings'
27 rm_r root'
40 rm_r root'
28 rm_r "logs"
41 rm_r "logs"
29 createDirectoryIfMissing True root'
42 createDirectoryIfMissing True root'
30 root <- canonicalizePath root'
43 root <- canonicalizePath root'
44+ let settings = settings' { sandboxRoot = root }
32− ec1 <- rawSystem "ghc-pkg" ["init", packageDir root]
46+ ec1 <- rawSystem "ghc-pkg" ["init", packageDir settings]
33 unless (ec1 == ExitSuccess) $ do
47 unless (ec1 == ExitSuccess) $ do
34 putStrLn "Unable to create package database via ghc-pkg init"
48 putStrLn "Unable to create package database via ghc-pkg init"
35 exitWith ec1
49 exitWith ec1
37− let extraArgs = ("-fnetwork23":)
39− checkPlan (addCabalArgs root . extraArgs) ii
51+ checkPlan settings ii
40 putStrLn "No mismatches, starting the sandboxed build."
52 putStrLn "No mismatches, starting the sandboxed build."
42 versionString <- readProcess "cabal" ["--version"] ""
54 versionString <- readProcess "cabal" ["--version"] ""
@@ -53,13 +65,16 @@ build root' extraBuildArgs = do
53 | otherwise -> error $ "Unsupported Cabal version: " ++ libVersion
65 | otherwise -> error $ "Unsupported Cabal version: " ++ libVersion
55 ph <- withBinaryFile "build.log" WriteMode $ \handle ->
67 ph <- withBinaryFile "build.log" WriteMode $ \handle ->
56− let args = addCabalArgs root
68+ let args = addCabalArgs settings
57 $ "install"
69 $ "install"
58 : ("--cabal-lib-version=" ++ libVersion)
70 : ("--cabal-lib-version=" ++ libVersion)
59 : "--build-log=logs/$pkg.log"
71 : "--build-log=logs/$pkg.log"
74+ [ extraBuildArgs settings
62− : (extraBuildArgs . extraArgs) (iiPackageList ii)
76+ , iiPackageList ii
63 in runProcess "cabal" args Nothing Nothing Nothing (Just handle) (Just handle)
78 in runProcess "cabal" args Nothing Nothing Nothing (Just handle) (Just handle)
64 ec <- waitForProcess ph
79 ec <- waitForProcess ph
65 unless (ec == ExitSuccess) $ do
80 unless (ec == ExitSuccess) $ do
@@ -67,7 +82,7 @@ build root' extraBuildArgs = do
67 exitWith ec
82 exitWith ec
69 putStrLn "Sandbox built, beginning individual test suites"
84 putStrLn "Sandbox built, beginning individual test suites"
70− runTestSuites root ii
85+ runTestSuites settings ii
72 putStrLn "All test suites that were expected to pass did pass, building tarballs."
87 putStrLn "All test suites that were expected to pass did pass, building tarballs."
73 makeTarballs ii
88 makeTarballs ii