summaryrefslogtreecommitdiff
path: root/src/Main.hs
diff options
context:
space:
mode:
authorAndrey Mokhov <andrey.mokhov@gmail.com>2017-11-06 22:59:37 +0000
committerAndrey Mokhov <andrey.mokhov@gmail.com>2017-11-06 22:59:37 +0000
commit7b0b9f603bb1215e2b7af23c2404d637b95a4988 (patch)
treeca118c1b14bc4429e827e0caf925dbc3ab77d1cd /src/Main.hs
downloadhaskell-7b0b9f603bb1215e2b7af23c2404d637b95a4988.tar.gz
Squashed 'hadrian/' content from commit 438dc57
git-subtree-dir: hadrian git-subtree-split: 438dc576e7b84c473a09d1d7ec7798a30303bc4e
Diffstat (limited to 'src/Main.hs')
-rw-r--r--src/Main.hs59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/Main.hs b/src/Main.hs
new file mode 100644
index 0000000000..52af0adf7c
--- /dev/null
+++ b/src/Main.hs
@@ -0,0 +1,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