blob: 52af0adf7ce4d5174e4bc5cc9ac5071b3e007f33 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
module Main (main) where
import Development.Shake
import Hadrian.Expression
import Hadrian.Utilities
import qualified Base
import qualified CommandLine
import qualified Environment
import qualified Rules
import qualified Rules.Clean
import qualified Rules.Documentation
import qualified Rules.Install
import qualified Rules.SourceDist
import qualified Rules.Selftest
import qualified Rules.Test
import qualified UserSettings
main :: IO ()
main = do
-- Provide access to command line arguments and some user settings through
-- Shake's type-indexed map 'shakeExtra'.
argsMap <- CommandLine.cmdLineArgsMap
let extra = insertExtra UserSettings.buildProgressColour
$ insertExtra UserSettings.successColour
$ insertExtra UserSettings.userBuildRoot
$ insertExtra (VerboseCommand UserSettings.verboseCommand) argsMap
BuildRoot buildRoot = UserSettings.userBuildRoot
rebuild = [ (RebuildLater, buildRoot -/- "stage0//*")
| CommandLine.lookupFreeze1 argsMap ]
options :: ShakeOptions
options = shakeOptions
{ shakeChange = ChangeModtimeAndDigest
, shakeFiles = buildRoot -/- Base.shakeFilesDir
, shakeProgress = progressSimple
, shakeRebuild = rebuild
, shakeTimings = True
, shakeExtra = extra }
rules :: Rules ()
rules = do
Rules.buildRules
Rules.Documentation.documentationRules
Rules.Clean.cleanRules
Rules.Install.installRules
Rules.oracleRules
Rules.Selftest.selftestRules
Rules.SourceDist.sourceDistRules
Rules.Test.testRules
Rules.topLevelTargets
shakeArgsWith options CommandLine.optDescrs $ \_ targets -> do
Environment.setupEnvironment
return . Just $ if null targets
then rules
else want targets >> withoutActions rules
|