Move integerLibrary to flavour
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Sun, 8 Jan 2017 01:28:06 +0000 (01:28 +0000)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Sun, 8 Jan 2017 01:28:06 +0000 (01:28 +0000)
See #179

src/Flavour.hs
src/Rules/Generators/ConfigHs.hs
src/Settings.hs
src/Settings/Default.hs
src/Settings/Packages/Base.hs
src/UserSettings.hs

index ad658c4..b195767 100644 (file)
@@ -1,18 +1,19 @@
-module Flavour (Flavour (..)) where\r
-\r
-import Expression\r
-\r
--- TODO: Merge {libraryWays, rtsWays}, and {dynamicGhcPrograms, ghcProfiled...}.\r
--- | 'Flavour' is a collection of build settings that fully define a GHC build.\r
-data Flavour = Flavour\r
-    { name               :: String    -- ^ Flavour name, to set from command line.\r
-    , args               :: Args      -- ^ Use these command line arguments.\r
-    , packages           :: Packages  -- ^ Build these packages.\r
-    , libraryWays        :: Ways      -- ^ Build libraries these ways.\r
-    , rtsWays            :: Ways      -- ^ Build RTS these ways.\r
-    , splitObjects       :: Predicate -- ^ Build split objects.\r
-    , buildHaddock       :: Predicate -- ^ Build Haddock and documentation.\r
-    , dynamicGhcPrograms :: Bool      -- ^ Build dynamic GHC programs.\r
-    , ghciWithDebugger   :: Bool      -- ^ Enable GHCi debugger.\r
-    , ghcProfiled        :: Bool      -- ^ Build profiled GHC.\r
-    , ghcDebugged        :: Bool }    -- ^ Build GHC with debug information.\r
+module Flavour (Flavour (..)) where
+
+import Expression
+
+-- TODO: Merge {libraryWays, rtsWays}, and {dynamicGhcPrograms, ghcProfiled...}.
+-- | 'Flavour' is a collection of build settings that fully define a GHC build.
+data Flavour = Flavour
+    { name               :: String    -- ^ Flavour name, to set from command line.
+    , args               :: Args      -- ^ Use these command line arguments.
+    , packages           :: Packages  -- ^ Build these packages.
+    , integerLibrary     :: Package   -- ^ Either 'integerGmp' or 'integerSimple'.
+    , libraryWays        :: Ways      -- ^ Build libraries these ways.
+    , rtsWays            :: Ways      -- ^ Build RTS these ways.
+    , splitObjects       :: Predicate -- ^ Build split objects.
+    , buildHaddock       :: Predicate -- ^ Build Haddock and documentation.
+    , dynamicGhcPrograms :: Bool      -- ^ Build dynamic GHC programs.
+    , ghciWithDebugger   :: Bool      -- ^ Enable GHCi debugger.
+    , ghcProfiled        :: Bool      -- ^ Build profiled GHC.
+    , ghcDebugged        :: Bool }    -- ^ Build GHC with debug information.
index c5ad0cc..ffe0cfc 100644 (file)
@@ -8,7 +8,6 @@ import Oracles.Config.Flag
 import Oracles.Config.Setting
 import Rules.Generators.Common
 import Settings
-import UserSettings
 
 generateConfigHs :: Expr String
 generateConfigHs = do
@@ -21,10 +20,10 @@ generateConfigHs = do
     cProjectPatchLevel1 <- getSetting ProjectPatchLevel1
     cProjectPatchLevel2 <- getSetting ProjectPatchLevel2
     cBooterVersion      <- getSetting GhcVersion
-    let cIntegerLibraryType | integerLibrary == integerGmp    = "IntegerGMP"
-                            | integerLibrary == integerSimple = "IntegerSimple"
-                            | otherwise = error $ "Unknown integer library: "
-                                          ++ show integerLibrary ++ "."
+    let cIntegerLibraryType
+            | integerLibrary flavour == integerGmp    = "IntegerGMP"
+            | integerLibrary flavour == integerSimple = "IntegerSimple"
+            | otherwise = error $ "Unknown integer library: " ++ integerLibraryName
     cSupportsSplitObjs         <- yesNo supportsSplitObjects
     cGhcWithInterpreter        <- yesNo ghcWithInterpreter
     cGhcWithNativeCodeGen      <- yesNo ghcWithNativeCodeGen
@@ -72,7 +71,7 @@ generateConfigHs = do
         , "cStage                :: String"
         , "cStage                = show (STAGE :: Int)"
         , "cIntegerLibrary       :: String"
-        , "cIntegerLibrary       = " ++ show (pkgNameString integerLibrary)
+        , "cIntegerLibrary       = " ++ show integerLibraryName
         , "cIntegerLibraryType   :: IntegerLibrary"
         , "cIntegerLibraryType   = " ++ cIntegerLibraryType
         , "cSupportsSplitObjs    :: String"
index c455e0b..09b58f8 100644 (file)
@@ -2,7 +2,8 @@ module Settings (
     getArgs, getPackages, getLibraryWays, getRtsWays, flavour, knownPackages,
     findKnownPackage, getPkgData, getPkgDataList, isLibrary, getPackagePath,
     getContextDirectory, getBuildPath, stagePackages, builderPath,
-    getBuilderPath, isSpecified, latestBuildStage, programPath, programContext
+    getBuilderPath, isSpecified, latestBuildStage, programPath, programContext,
+    integerLibraryName
     ) where
 
 import Base
@@ -62,6 +63,9 @@ flavour = fromMaybe unknownFlavour $ find ((== flavourName) . name) flavours
     flavours       = hadrianFlavours ++ userFlavours
     flavourName    = fromMaybe "default" cmdFlavour
 
+integerLibraryName :: String
+integerLibraryName = pkgNameString $ integerLibrary flavour
+
 programContext :: Stage -> Package -> Context
 programContext stage pkg
     | pkg == ghc && ghcProfiled flavour = Context stage pkg profiling
index 92089ab..103c432 100644 (file)
@@ -37,7 +37,6 @@ import Settings.Packages.Haddock
 import Settings.Packages.IntegerGmp
 import Settings.Packages.Rts
 import Settings.Packages.RunGhc
-import UserSettings
 
 -- | All default command line arguments.
 defaultArgs :: Args
@@ -100,7 +99,7 @@ stage1Packages = do
                        , haskeline
                        , hpcBin
                        , hsc2hs
-                       , integerLibrary
+                       , integerLibrary flavour
                        , pretty
                        , process
                        , rts
@@ -147,6 +146,7 @@ defaultFlavour = Flavour
     { name               = "default"
     , args               = defaultArgs
     , packages           = defaultPackages
+    , integerLibrary     = integerGmp
     , libraryWays        = defaultLibraryWays
     , rtsWays            = defaultRtsWays
     , splitObjects       = defaultSplitObjects
index dce49e7..219c9d4 100644 (file)
@@ -1,11 +1,10 @@
 module Settings.Packages.Base (basePackageArgs) where
 
-import Base
 import GHC
 import Predicate
-import UserSettings
+import Settings
 
 basePackageArgs :: Args
 basePackageArgs = package base ? mconcat
-    [ builder GhcCabal ? arg ("--flags=" ++ takeFileName (pkgPath integerLibrary))
+    [ builder GhcCabal ? arg ("--flags=" ++ integerLibraryName)
     , builder Cc ? arg "-O2" ] -- Fix the 'unknown symbol stat' issue, see #259.
index b952363..e16cf49 100644 (file)
@@ -3,7 +3,7 @@
 -- If you don't copy the file your changes will be tracked by git and you can
 -- accidentally commit them.
 module UserSettings (
-    buildRootPath, userFlavours, userKnownPackages, integerLibrary, validating,
+    buildRootPath, userFlavours, userKnownPackages, validating,
     turnWarningsIntoErrors, verboseCommands, putBuild, putSuccess
     ) where
 
@@ -11,7 +11,6 @@ import System.Console.ANSI
 
 import Base
 import Flavour
-import GHC
 import Predicate
 
 -- See doc/user-settings.md for instructions.
@@ -30,10 +29,6 @@ userFlavours = []
 userKnownPackages :: [Package]
 userKnownPackages = []
 
--- | Choose the integer library: 'integerGmp' or 'integerSimple'.
-integerLibrary :: Package
-integerLibrary = integerGmp
-
 -- | User defined flags. Note the following type semantics:
 -- * @Bool@: a plain Boolean flag whose value is known at compile time.
 -- * @Action Bool@: a flag whose value can depend on the build environment.