@@ -1,14 +1,18 @@
11module Stackage.Build
22 ( build
3+ , defaultBuildSettings
4+ , BuildSettings (..)
35 ) where
46
57import Distribution.Text (simpleParse)
68import Control.Monad (unless)
9+import Stackage.Types
710import Stackage.CheckPlan
811import Stackage.InstallInfo
912import Stackage.Tarballs
1013import Stackage.Test
1114import Stackage.Util
15+import Stackage.Config
1216import System.Exit (ExitCode (ExitSuccess), exitWith)
1317import System.IO (IOMode (WriteMode), withBinaryFile)
1418import System.Process (runProcess, waitForProcess, rawSystem, readProcess)
@@ -16,27 +20,35 @@ import System.Directory (createDirectoryIfMissing, canonicalizePat
1620import Distribution.Version (thisVersion, withinRange)
1721import Control.Exception (assert)
1822
19−build :: FilePath
20− -> ([String] -> [String]) -- ^ extra build rgs
21− -> IO ()
22−build root' extraBuildArgs = do
23+defaultBuildSettings :: BuildSettings
24+defaultBuildSettings = BuildSettings
25+ { sandboxRoot = "sandbox"
26+ , extraBuildArgs = []
27+ , extraCore = defaultExtraCore
28+ , expectedFailures = defaultExpectedFailures
29+ , stablePackages = defaultStablePackages
30+ , extraArgs = ["-fnetwork23"]
31+ }
32+
33+build :: BuildSettings -> IO ()
34+build settings' = do
2335 putStrLn "Creating a build plan"
24− ii <- getInstallInfo
36+ ii <- getInstallInfo settings'
2537
2638 putStrLn "Wiping out old sandbox folder"
39+ let root' = sandboxRoot settings'
2740 rm_r root'
2841 rm_r "logs"
2942 createDirectoryIfMissing True root'
3043 root <- canonicalizePath root'
44+ let settings = settings' { sandboxRoot = root }
3145
32− ec1 <- rawSystem "ghc-pkg" ["init", packageDir root]
46+ ec1 <- rawSystem "ghc-pkg" ["init", packageDir settings]
3347 unless (ec1 == ExitSuccess) $ do
3448 putStrLn "Unable to create package database via ghc-pkg init"
3549 exitWith ec1
3650
37− let extraArgs = ("-fnetwork23":)
38−
39− checkPlan (addCabalArgs root . extraArgs) ii
51+ checkPlan settings ii
4052 putStrLn "No mismatches, starting the sandboxed build."
4153
4254 versionString <- readProcess "cabal" ["--version"] ""
@@ -53,13 +65,16 @@ build root' extraBuildArgs = do
5365 | otherwise -> error $ "Unsupported Cabal version: " ++ libVersion
5466
5567 ph <- withBinaryFile "build.log" WriteMode $ \handle ->
56− let args = addCabalArgs root
68+ let args = addCabalArgs settings
5769 $ "install"
5870 : ("--cabal-lib-version=" ++ libVersion)
5971 : "--build-log=logs/$pkg.log"
60− : "--enable-shared"
6172 : "-j"
62− : (extraBuildArgs . extraArgs) (iiPackageList ii)
73+ : concat
74+ [ extraBuildArgs settings
75+ , extraArgs settings
76+ , iiPackageList ii
77+ ]
6378 in runProcess "cabal" args Nothing Nothing Nothing (Just handle) (Just handle)
6479 ec <- waitForProcess ph
6580 unless (ec == ExitSuccess) $ do
@@ -67,7 +82,7 @@ build root' extraBuildArgs = do
6782 exitWith ec
6883
6984 putStrLn "Sandbox built, beginning individual test suites"
70− runTestSuites root ii
85+ runTestSuites settings ii
7186
7287 putStrLn "All test suites that were expected to pass did pass, building tarballs."
7388 makeTarballs ii