Implement install_docs (#442)
[hadrian.git] / src / Settings.hs
index 57ce81a..e40f20d 100644 (file)
@@ -1,74 +1,68 @@
 module Settings (
-    getArgs, getPackages, getLibraryWays, getRtsWays, flavour, knownPackages,
-    findKnownPackage, getPkgData, getPkgDataList, isLibrary, getPackagePath,
-    getContextDirectory, getBuildPath, stagePackages
+    getArgs, getLibraryWays, getRtsWays, flavour, knownPackages,
+    findPackageByName, getPkgData, getPkgDataList, isLibrary, stagePackages,
+    programContext, integerLibraryName, getDestDir
     ) where
 
-import Base
-import CmdLineFlag
+import CommandLine
 import Expression
 import Flavour
-import GHC
-import Oracles.PackageData
 import {-# SOURCE #-} Settings.Default
+import Settings.Flavours.Development
+import Settings.Flavours.Performance
+import Settings.Flavours.Profiled
 import Settings.Flavours.Quick
 import Settings.Flavours.Quickest
-import Settings.Path
+import Settings.Flavours.QuickCross
 import UserSettings
 
-getArgs :: Expr [String]
-getArgs = fromDiffExpr $ args flavour
+getArgs :: Args
+getArgs = expr flavour >>= args
 
-getLibraryWays :: Expr [Way]
-getLibraryWays = fromDiffExpr $ libraryWays flavour
+getLibraryWays :: Ways
+getLibraryWays = expr flavour >>= libraryWays
 
-getRtsWays :: Expr [Way]
-getRtsWays = fromDiffExpr $ rtsWays flavour
-
-getPackages :: Expr [Package]
-getPackages = fromDiffExpr $ packages flavour
+getRtsWays :: Ways
+getRtsWays = expr flavour >>= rtsWays
 
 stagePackages :: Stage -> Action [Package]
-stagePackages stage = interpretInContext (stageContext stage) getPackages
-
-getPackagePath :: Expr FilePath
-getPackagePath = pkgPath <$> getPackage
-
-getContextDirectory :: Expr FilePath
-getContextDirectory = stageDirectory <$> getStage
-
-getBuildPath :: Expr FilePath
-getBuildPath = buildPath <$> getContext
-
-getPkgData :: (FilePath -> PackageData) -> Expr String
-getPkgData key = lift . pkgData . key =<< getBuildPath
-
-getPkgDataList :: (FilePath -> PackageDataList) -> Expr [String]
-getPkgDataList key = lift . pkgDataList . key =<< getBuildPath
+stagePackages stage = do
+    f <- flavour
+    packages f stage
 
 hadrianFlavours :: [Flavour]
-hadrianFlavours = [defaultFlavour, quickFlavour, quickestFlavour]
-
-flavour :: Flavour
-flavour = fromMaybe unknownFlavour $ find ((== flavourName) . name) flavours
-  where
-    unknownFlavour = error $ "Unknown build flavour: " ++ flavourName
-    flavours       = hadrianFlavours ++ userFlavours
-    flavourName    = fromMaybe "default" cmdFlavour
+hadrianFlavours =
+    [ defaultFlavour, developmentFlavour Stage1, developmentFlavour Stage2
+    , performanceFlavour, profiledFlavour, quickFlavour, quickestFlavour
+    , quickCrossFlavour ]
+
+flavour :: Action Flavour
+flavour = do
+    flavourName <- fromMaybe "default" <$> cmdFlavour
+    let unknownFlavour = error $ "Unknown build flavour: " ++ flavourName
+        flavours       = hadrianFlavours ++ userFlavours
+    return $ fromMaybe unknownFlavour $ find ((== flavourName) . name) flavours
+
+integerLibraryName :: Action String
+integerLibraryName = pkgName <$> (integerLibrary =<< flavour)
+
+programContext :: Stage -> Package -> Action Context
+programContext stage pkg = do
+    profiled <- ghcProfiled <$> flavour
+    return $ if pkg == ghc && profiled && stage > Stage0
+             then Context stage pkg profiling
+             else vanillaContext stage pkg
 
 -- TODO: switch to Set Package as the order of packages should not matter?
 -- Otherwise we have to keep remembering to sort packages from time to time.
 knownPackages :: [Package]
-knownPackages = sort $ defaultKnownPackages ++ userKnownPackages
+knownPackages = sort $ ghcPackages ++ userPackages
 
--- TODO: Speed up?
+-- TODO: Speed up? Switch to Set?
 -- Note: this is slow but we keep it simple as there are just ~50 packages
-findKnownPackage :: PackageName -> Maybe Package
-findKnownPackage name = find (\pkg -> pkgName pkg == name) knownPackages
+findPackageByName :: PackageName -> Maybe Package
+findPackageByName name = find (\pkg -> pkgName pkg == name) knownPackages
 
--- TODO: add src-hc-args = -H32m -O
--- TODO: GhcStage2HcOpts=-O2 unless GhcUnregisterised
--- TODO: compiler/stage1/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas
--- TODO: compiler/main/GhcMake_HC_OPTS        += -auto-all
--- TODO: compiler/prelude/PrimOp_HC_OPTS  += -fforce-recomp
--- TODO: is GhcHcOpts=-Rghc-timing needed?
+-- | Install's DESTDIR setting.
+getDestDir :: Action FilePath
+getDestDir = fromMaybe "" <$> cmdInstallDestDir