Implement install_docs (#442)
[hadrian.git] / src / Settings.hs
index 52c36ad..e40f20d 100644 (file)
@@ -1,21 +1,19 @@
 module Settings (
-    getArgs, getPackages, getLibraryWays, getRtsWays, flavour, knownPackages,
-    findKnownPackage, getPkgData, getPkgDataList, isLibrary, stagePackages,
-    builderPath, getBuilderPath, isSpecified, latestBuildStage, programPath,
-    programContext, integerLibraryName, getDestDir, stage1Only, buildDll0
+    getArgs, getLibraryWays, getRtsWays, flavour, knownPackages,
+    findPackageByName, getPkgData, getPkgDataList, isLibrary, stagePackages,
+    programContext, integerLibraryName, getDestDir
     ) where
 
-import Context
 import CommandLine
 import Expression
 import Flavour
-import GHC
 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.Flavours.QuickCross
 import UserSettings
 
 getArgs :: Args
@@ -27,16 +25,16 @@ getLibraryWays = expr flavour >>= libraryWays
 getRtsWays :: Ways
 getRtsWays = expr flavour >>= rtsWays
 
-getPackages :: Packages
-getPackages = expr flavour >>= packages
-
 stagePackages :: Stage -> Action [Package]
-stagePackages stage = interpretInContext (stageContext stage) getPackages
+stagePackages stage = do
+    f <- flavour
+    packages f stage
 
 hadrianFlavours :: [Flavour]
 hadrianFlavours =
     [ defaultFlavour, developmentFlavour Stage1, developmentFlavour Stage2
-    , performanceFlavour, profiledFlavour, quickFlavour, quickestFlavour ]
+    , performanceFlavour, profiledFlavour, quickFlavour, quickestFlavour
+    , quickCrossFlavour ]
 
 flavour :: Action Flavour
 flavour = do
@@ -58,50 +56,12 @@ programContext stage pkg = do
 -- 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? 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
-
--- | Determine the location of a 'Builder'.
-builderPath :: Builder -> Action FilePath
-builderPath builder = case builderProvenance builder of
-    Nothing      -> systemBuilderPath builder
-    Just context -> do
-        maybePath <- programPath context
-        let msg = error $ show builder ++ " is never built by Hadrian."
-        return $ fromMaybe msg maybePath
-
-getBuilderPath :: Builder -> Expr FilePath
-getBuilderPath = expr . builderPath
-
--- | Was the path to a given 'Builder' specified in configuration files?
-isSpecified :: Builder -> Action Bool
-isSpecified = fmap (not . null) . builderPath
-
--- | Determine the latest 'Stage' in which a given 'Package' is built. Returns
--- Nothing if the package is never built.
-latestBuildStage :: Package -> Action (Maybe Stage)
-latestBuildStage pkg = do
-    stages <- filterM (fmap (pkg `elem`) . stagePackages) [Stage0 ..]
-    return $ if null stages then Nothing else Just $ maximum stages
-
--- | The 'FilePath' to a program executable in a given 'Context'.
-programPath :: Context -> Action (Maybe FilePath)
-programPath context@Context {..} = do
-    maybeLatest <- latestBuildStage package
-    path        <- buildPath context
-    return $ do
-        install <- (\l -> l == stage || package == ghc) <$> maybeLatest
-        let installPath = if install then inplaceInstallPath package else path
-        return $ installPath -/- programName context <.> exe
-
--- TODO: Set this from command line
--- | Stage1Only flag.
-stage1Only :: Bool
-stage1Only = defaultStage1Only
+findPackageByName :: PackageName -> Maybe Package
+findPackageByName name = find (\pkg -> pkgName pkg == name) knownPackages
 
 -- | Install's DESTDIR setting.
 getDestDir :: Action FilePath