diff options
Diffstat (limited to 'hadrian/src/Hadrian/Oracles/Cabal.hs')
-rw-r--r-- | hadrian/src/Hadrian/Oracles/Cabal.hs | 41 |
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 |