summaryrefslogtreecommitdiff
path: root/hadrian/src/Hadrian/Oracles/Cabal.hs
diff options
context:
space:
mode:
Diffstat (limited to 'hadrian/src/Hadrian/Oracles/Cabal.hs')
-rw-r--r--hadrian/src/Hadrian/Oracles/Cabal.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/hadrian/src/Hadrian/Oracles/Cabal.hs b/hadrian/src/Hadrian/Oracles/Cabal.hs
new file mode 100644
index 0000000000..4c52162729
--- /dev/null
+++ b/hadrian/src/Hadrian/Oracles/Cabal.hs
@@ -0,0 +1,41 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module : Hadrian.Oracles.Cabal
+-- Copyright : (c) Andrey Mokhov 2014-2018
+-- License : MIT (see the file LICENSE)
+-- Maintainer : andrey.mokhov@gmail.com
+-- Stability : experimental
+--
+-- This module defines oracles for reading and parsing Cabal files, as well as
+-- for configuring Haskell packages.
+-----------------------------------------------------------------------------
+module Hadrian.Oracles.Cabal (
+ readPackageData, readContextData, configurePackageGHC
+ ) where
+
+import Development.Shake
+import Distribution.Simple (Compiler)
+import Distribution.System (Platform)
+
+import Context.Type
+import Hadrian.Haskell.Cabal.Type
+import Hadrian.Oracles.Cabal.Type
+import Hadrian.Package
+import Stage
+
+-- | Read and parse a Cabal file, caching and tracking the result.
+readPackageData :: Package -> Action PackageData
+readPackageData = askOracle . PackageDataKey
+
+-- | Read and parse a Cabal file recording the obtained 'ContextData', caching
+-- and tracking the result. Note that unlike 'readPackageData' this function
+-- resolves all Cabal configuration flags and associated conditionals.
+readContextData :: Context -> Action ContextData
+readContextData = askOracle . ContextDataKey
+
+-- | Configure a 'Package' using the GHC corresponding to a given 'Stage',
+-- caching and tracking the result.
+configurePackageGHC :: Package -> Stage -> Action (Compiler, Platform)
+configurePackageGHC pkg stage = do
+ PackageConfiguration res <- askOracle $ PackageConfigurationKey (pkg, stage)
+ return res