Move the Config oracle to the library
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Mon, 7 Aug 2017 00:58:05 +0000 (01:58 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Mon, 7 Aug 2017 00:58:05 +0000 (01:58 +0100)
See #347

28 files changed:
hadrian.cabal
src/Expression.hs
src/Hadrian/Oracles/Config.hs [moved from src/Oracles/Config.hs with 56% similarity]
src/Oracles/Flag.hs [moved from src/Oracles/Config/Flag.hs with 97% similarity]
src/Oracles/Setting.hs [moved from src/Oracles/Config/Setting.hs with 95% similarity]
src/Rules/Data.hs
src/Rules/Generate.hs
src/Rules/Gmp.hs
src/Rules/Install.hs
src/Rules/Oracles.hs
src/Rules/Program.hs
src/Rules/Selftest.hs
src/Rules/SourceDist.hs
src/Rules/Test.hs
src/Rules/Wrappers.hs
src/Settings.hs
src/Settings/Builders/Common.hs
src/Settings/Default.hs
src/Settings/Flavours/Quick.hs
src/Settings/Packages/Compiler.hs
src/Settings/Packages/Ghc.hs
src/Settings/Packages/GhcPrim.hs
src/Settings/Packages/IntegerGmp.hs
src/Settings/Packages/Rts.hs
src/Settings/Packages/RunGhc.hs
src/Settings/Path.hs
src/Util.hs
src/Way.hs

index 93a755c..3df1b59 100644 (file)
@@ -28,13 +28,13 @@ executable hadrian
                        , GHC
                        , Hadrian.Expression
                        , Hadrian.Oracles.ArgsHash
+                       , Hadrian.Oracles.Config
                        , Hadrian.Oracles.DirectoryContents
                        , Hadrian.Oracles.Path
                        , Hadrian.Target
                        , Hadrian.Utilities
-                       , Oracles.Config
-                       , Oracles.Config.Flag
-                       , Oracles.Config.Setting
+                       , Oracles.Flag
+                       , Oracles.Setting
                        , Oracles.Dependencies
                        , Oracles.ModuleFiles
                        , Oracles.PackageData
index c33074d..58eb62b 100644 (file)
@@ -40,7 +40,7 @@ import Stage
 import Target hiding (builder, inputs, outputs)
 import Way
 
-import Oracles.Config.Setting
+import Oracles.Setting
 
 -- | @Expr a@ is a computation that produces a value of type @Action a@ and can
 -- read parameters of the current build 'Target'.
similarity index 56%
rename from src/Oracles/Config.hs
rename to src/Hadrian/Oracles/Config.hs
index 81a6f9f..0b12616 100644 (file)
@@ -1,25 +1,32 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Oracles.Config (askConfig, unsafeAskConfig, configOracle) where
+module Hadrian.Oracles.Config (askConfig, unsafeAskConfig, configOracle) where
 
+import Control.Monad
 import qualified Data.HashMap.Strict as Map
+import Data.Maybe
+import Development.Shake
+import Development.Shake.Classes
 import Development.Shake.Config
 
-import Base
+import Hadrian.Utilities
 
 newtype ConfigKey = ConfigKey String
     deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
 
+-- | Lookup a configuration setting raising an error if the key is not found.
 unsafeAskConfig :: String -> Action String
 unsafeAskConfig key = (fromMaybe $ error msg) <$> askConfig key
   where
     msg = "Key " ++ quote key ++ " not found in configuration files."
 
+-- | Lookup a configuration setting.
 askConfig :: String -> Action (Maybe String)
 askConfig = askOracle . ConfigKey
 
--- Oracle for configuration files
-configOracle :: Rules ()
-configOracle = void $ do
+-- | This oracle reads and parses a configuration file consisting of key-value
+-- pairs @key = value@ and answers 'askConfig' queries tracking the results.
+configOracle :: FilePath -> Rules ()
+configOracle configFile = void $ do
     cfg <- newCache $ \() -> do
         need [configFile]
         putLoud $ "Reading " ++ configFile ++ "..."
similarity index 97%
rename from src/Oracles/Config/Flag.hs
rename to src/Oracles/Flag.hs
index 05359eb..59b6954 100644 (file)
@@ -1,11 +1,12 @@
-module Oracles.Config.Flag (
+module Oracles.Flag (
     Flag (..), flag, crossCompiling, platformSupportsSharedLibs,
     ghcWithSMP, ghcWithNativeCodeGen, supportsSplitObjects
     ) where
 
+import Hadrian.Oracles.Config
+
 import Base
-import Oracles.Config
-import Oracles.Config.Setting
+import Oracles.Setting
 
 data Flag = ArSupportsAtFile
           | CrossCompiling
similarity index 95%
rename from src/Oracles/Config/Setting.hs
rename to src/Oracles/Setting.hs
index 6b9254d..d6589f8 100644 (file)
@@ -1,4 +1,4 @@
-module Oracles.Config.Setting (
+module Oracles.Setting (
     Setting (..), SettingList (..), setting, settingList,
     anyTargetPlatform, anyTargetOs, anyTargetArch, anyHostOs,
     ghcWithInterpreter, ghcEnableTablesNextToCode, useLibFFIForAdjustors,
@@ -6,8 +6,9 @@ module Oracles.Config.Setting (
     relocatableBuild, installDocDir, installGhcLibDir
     ) where
 
+import Hadrian.Oracles.Config
+
 import Base
-import Oracles.Config
 import Stage
 
 -- TODO: Reduce the variety of similar flags (e.g. CPP and non-CPP versions).
@@ -202,8 +203,9 @@ relocatableBuild = windowsHost
 
 installDocDir :: Action String
 installDocDir = do
-  version <- setting ProjectVersion
-  (-/- ("doc/ghc-" ++ version)) <$> setting InstallDataRootDir
+    version <- setting ProjectVersion
+    dataDir <- setting InstallDataRootDir
+    return $ dataDir -/- ("doc/ghc-" ++ version)
 
 -- ref: mk/install.mk:101
 -- TODO: CroosCompilePrefix
@@ -211,9 +213,9 @@ installDocDir = do
 -- subdirectory with the version number included.
 installGhcLibDir :: Action String
 installGhcLibDir = do
-  r <- relocatableBuild
-  libdir <- setting InstallLibDir
-  if r then return libdir
-       else do
-         v <- setting ProjectVersion
-         return $ libdir -/- ("ghc-" ++ v)
+    rBuild <- relocatableBuild
+    libdir <- setting InstallLibDir
+    if rBuild then return libdir
+         else do
+             version <- setting ProjectVersion
+             return $ libdir -/- ("ghc-" ++ version)
index 787297f..d914ba0 100644 (file)
@@ -4,8 +4,8 @@ import Base
 import Context
 import Expression
 import GHC
-import Oracles.Config.Setting
 import Oracles.Dependencies
+import Oracles.Setting
 import Rules.Generate
 import Settings.Path
 import Target
index 0f20489..ec394a1 100644 (file)
@@ -10,9 +10,9 @@ import Context hiding (package)
 import Expression
 import Flavour
 import GHC
-import Oracles.Config.Flag
-import Oracles.Config.Setting
+import Oracles.Flag
 import Oracles.ModuleFiles
+import Oracles.Setting
 import Rules.Libffi
 import Settings
 import Settings.Path
index 39fb53a..02ef819 100644 (file)
@@ -5,7 +5,7 @@ import Hadrian.Utilities
 import Base
 import Builder
 import GHC
-import Oracles.Config.Setting
+import Oracles.Setting
 import Package
 import Settings.Packages.IntegerGmp
 import Settings.Path
index 6f5ec57..ac92533 100644 (file)
@@ -2,24 +2,23 @@
 module Rules.Install (installRules) where
 
 import Hadrian.Oracles.DirectoryContents
+import qualified System.Directory as IO
 
 import Base
-import Expression hiding (builder)
-import Target
 import Context
-import Settings
-import Settings.Path
-import Util
+import Expression hiding (builder)
 import GHC
+import Oracles.Dependencies
+import Oracles.Setting
 import Rules
 import Rules.Generate
 import Rules.Libffi
 import Rules.Wrappers
+import Settings
 import Settings.Packages.Rts
-import Oracles.Config.Setting
-import Oracles.Dependencies
-
-import qualified System.Directory as IO
+import Settings.Path
+import Target
+import Util
 
 {- | Install the built binaries etc. to the @destDir ++ prefix@.
 
index a7cbef5..d73221c 100644 (file)
@@ -1,11 +1,11 @@
 module Rules.Oracles (oracleRules) where
 
 import qualified Hadrian.Oracles.ArgsHash
+import qualified Hadrian.Oracles.Config
 import qualified Hadrian.Oracles.DirectoryContents
 import qualified Hadrian.Oracles.Path
 
 import Base
-import qualified Oracles.Config
 import qualified Oracles.Dependencies
 import qualified Oracles.ModuleFiles
 import qualified Oracles.PackageData
@@ -15,9 +15,9 @@ import Settings
 oracleRules :: Rules ()
 oracleRules = do
     Hadrian.Oracles.ArgsHash.argsHashOracle trackArgument getArgs
+    Hadrian.Oracles.Config.configOracle configFile
     Hadrian.Oracles.DirectoryContents.directoryContentsOracle
     Hadrian.Oracles.Path.pathOracle
-    Oracles.Config.configOracle
     Oracles.Dependencies.dependenciesOracles
     Oracles.ModuleFiles.moduleFilesOracle
     Oracles.PackageData.packageDataOracle
index 47b66ff..2bb2de9 100644 (file)
@@ -6,10 +6,10 @@ import Base
 import Context
 import Expression hiding (stage, way)
 import GHC
-import Oracles.Config.Setting
 import Oracles.Dependencies
 import Oracles.ModuleFiles
 import Oracles.PackageData
+import Oracles.Setting
 import Rules.Wrappers
 import Settings
 import Settings.Path
index 3dd4783..1334bda 100644 (file)
@@ -9,8 +9,8 @@ import Test.QuickCheck
 import Base
 import Expression
 import GHC
-import Oracles.Config.Setting
 import Oracles.ModuleFiles
+import Oracles.Setting
 import Settings
 import Settings.Builders.Ar
 import Target
index 879ae34..1a10ba0 100644 (file)
@@ -4,7 +4,7 @@ import Hadrian.Oracles.DirectoryContents
 
 import Base
 import Builder
-import Oracles.Config.Setting
+import Oracles.Setting
 import Rules.Clean
 import UserSettings
 import Util
index 192eb0c..9899c03 100644 (file)
@@ -7,8 +7,8 @@ import Builder
 import Expression
 import Flavour
 import GHC
-import Oracles.Config.Flag
-import Oracles.Config.Setting
+import Oracles.Flag
+import Oracles.Setting
 import Settings
 import Settings.Path
 import Target
index 86b71a0..6cfa964 100644 (file)
@@ -5,7 +5,7 @@ module Rules.Wrappers (
 import Base
 import Expression
 import GHC
-import Oracles.Config.Setting
+import Oracles.Setting
 import Settings
 import Settings.Install
 import Settings.Path
index 79138b2..6dc1b31 100644 (file)
@@ -6,6 +6,7 @@ module Settings (
     integerLibraryName, destDir, pkgConfInstallPath, stage1Only
     ) where
 
+import Hadrian.Oracles.Config
 import Hadrian.Oracles.Path
 
 import Base
@@ -14,7 +15,6 @@ import CmdLineFlag
 import Expression
 import Flavour
 import GHC
-import Oracles.Config
 import Oracles.PackageData
 import {-# SOURCE #-} Settings.Default
 import Settings.Flavours.Development
index eb9b046..e7bea57 100644 (file)
@@ -2,9 +2,9 @@ module Settings.Builders.Common (
     module Base,
     module Expression,
     module GHC,
-    module Oracles.Config.Flag,
-    module Oracles.Config.Setting,
+    module Oracles.Flag,
     module Oracles.PackageData,
+    module Oracles.Setting,
     module Settings,
     module Settings.Path,
     module UserSettings,
@@ -14,9 +14,9 @@ module Settings.Builders.Common (
 import Base
 import Expression
 import GHC
-import Oracles.Config.Flag
-import Oracles.Config.Setting
+import Oracles.Flag
 import Oracles.PackageData
+import Oracles.Setting
 import Settings
 import Settings.Path
 import UserSettings
index bc5159d..810c02d 100644 (file)
@@ -8,9 +8,9 @@ import CmdLineFlag
 import Expression
 import Flavour
 import GHC
-import Oracles.Config.Flag
-import Oracles.Config.Setting
+import Oracles.Flag
 import Oracles.PackageData
+import Oracles.Setting
 import Settings
 import Settings.Builders.Alex
 import Settings.Builders.Ar
index 1a50a57..15f3f6c 100644 (file)
@@ -2,7 +2,7 @@ module Settings.Flavours.Quick (quickFlavour) where
 
 import Flavour
 import Expression
-import Oracles.Config.Flag (platformSupportsSharedLibs)
+import Oracles.Flag
 import {-# SOURCE #-} Settings.Default
 
 quickFlavour :: Flavour
index 7b2d069..fefc2f1 100644 (file)
@@ -4,8 +4,8 @@ import Base
 import Expression
 import Flavour
 import GHC
-import Oracles.Config.Flag
-import Oracles.Config.Setting
+import Oracles.Flag
+import Oracles.Setting
 import Settings
 
 compilerPackageArgs :: Args
index b14d511..716e4e7 100644 (file)
@@ -2,7 +2,7 @@ module Settings.Packages.Ghc (ghcPackageArgs) where
 
 import GHC
 import Expression
-import Oracles.Config.Setting
+import Oracles.Setting
 import Settings.Path
 
 ghcPackageArgs :: Args
index 1ae0718..73ecf03 100644 (file)
@@ -1,7 +1,7 @@
 module Settings.Packages.GhcPrim (ghcPrimPackageArgs) where
 
 import GHC
-import Oracles.Config.Flag
+import Oracles.Flag
 import Expression
 
 ghcPrimPackageArgs :: Args
index 377100c..964d2f6 100644 (file)
@@ -3,7 +3,7 @@ module Settings.Packages.IntegerGmp (integerGmpPackageArgs, gmpBuildPath) where
 import Base
 import Expression
 import GHC
-import Oracles.Config.Setting
+import Oracles.Setting
 import Settings.Path
 
 -- TODO: Is this needed?
index e32e301..27c8790 100644 (file)
@@ -5,8 +5,8 @@ import Hadrian.Utilities
 import Base
 import Expression
 import GHC
-import Oracles.Config.Flag
-import Oracles.Config.Setting
+import Oracles.Flag
+import Oracles.Setting
 import Settings
 import Settings.Path
 
index 0e3a391..0df9e32 100644 (file)
@@ -1,7 +1,7 @@
 module Settings.Packages.RunGhc (runGhcPackageArgs) where
 
 import GHC
-import Oracles.Config.Setting
+import Oracles.Setting
 import Expression
 
 runGhcPackageArgs :: Args
index 90f7703..a764bcb 100644 (file)
@@ -16,7 +16,7 @@ import Context
 import Expression hiding (stage)
 import GHC
 import Oracles.PackageData
-import Oracles.Config.Setting
+import Oracles.Setting
 import UserSettings
 
 -- | Path to the directory containing the Shake database and other auxiliary
index 82747a9..f6ab1dd 100644 (file)
@@ -20,7 +20,7 @@ import CmdLineFlag
 import Context
 import Expression hiding (builder, inputs, outputs, way, stage, package)
 import GHC
-import Oracles.Config.Setting
+import Oracles.Setting
 import Settings
 import Settings.Path
 import Settings.Builders.Ar
index 71d3972..4121cdb 100644 (file)
@@ -14,7 +14,7 @@ import qualified Data.IntSet as Set
 import Hadrian.Utilities
 
 import Base
-import Oracles.Config.Setting
+import Oracles.Setting
 
 -- Note: order of constructors is important for compatibility with the old build
 -- system, e.g. we want "thr_p", not "p_thr" (see instance Show Way).