Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Glasgow Haskell Compiler
GHC
Commits
d3ef19d2
Commit
d3ef19d2
authored
Aug 07, 2017
by
Andrey Mokhov
Browse files
Move the Config oracle to the library
See
#347
parent
5dd20f0d
Changes
28
Hide whitespace changes
Inline
Side-by-side
hadrian.cabal
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Expression.hs
View file @
d3ef19d2
...
...
@@ -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'.
...
...
src/Oracles/Config.hs
→
src/
Hadrian/
Oracles/Config.hs
View file @
d3ef19d2
{-# 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
++
"..."
...
...
src/Oracles/
Config/
Flag.hs
→
src/Oracles/Flag.hs
View file @
d3ef19d2
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
...
...
src/Oracles/
Config/
Setting.hs
→
src/Oracles/Setting.hs
View file @
d3ef19d2
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
)
r
Build
<-
relocatableBuild
libdir
<-
setting
InstallLibDir
if
r
Build
then
return
libdir
else
do
version
<-
setting
ProjectVersion
return
$
libdir
-/-
(
"ghc-"
++
v
ersion
)
src/Rules/Data.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Rules/Generate.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Rules/Gmp.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Rules/Install.hs
View file @
d3ef19d2
...
...
@@ -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@.
...
...
src/Rules/Oracles.hs
View file @
d3ef19d2
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
src/Rules/Program.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Rules/Selftest.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Rules/SourceDist.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Rules/Test.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Rules/Wrappers.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Settings.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Settings/Builders/Common.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Settings/Default.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Settings/Flavours/Quick.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
src/Settings/Packages/Compiler.hs
View file @
d3ef19d2
...
...
@@ -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
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment