summaryrefslogtreecommitdiff
path: root/Coolbal/Configure.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Coolbal/Configure.hs')
-rw-r--r--Coolbal/Configure.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/Coolbal/Configure.hs b/Coolbal/Configure.hs
new file mode 100644
index 0000000..92865e7
--- /dev/null
+++ b/Coolbal/Configure.hs
@@ -0,0 +1,41 @@
+module Coolbal.Configure (configure) where
+
+import Distribution.PackageDescription.Configuration (finalizePD)
+import Distribution.PackageDescription.Parsec (readGenericPackageDescription)
+import Distribution.Simple.Compiler (compilerInfo)
+import qualified Distribution.Simple.Configure as Cabal (configure)
+import qualified Distribution.Simple.GHC as GHC (configure)
+import Distribution.Simple.Program.Db (restoreProgramDb, emptyProgramDb)
+import Distribution.Simple.Program.Builtin (builtinPrograms)
+import Distribution.Simple.Setup (defaultConfigFlags)
+import Distribution.Types.ComponentRequestedSpec (ComponentRequestedSpec(..))
+import Distribution.Types.Flag (mkFlagAssignment)
+import Distribution.Types.HookedBuildInfo (emptyHookedBuildInfo)
+import Distribution.Types.LocalBuildInfo (hostPlatform)
+import Distribution.Types.PackageDescription (PackageDescription)
+import qualified Distribution.Verbosity as V
+import System.Exit (exitFailure)
+import System.IO (hPutStrLn, stderr)
+
+
+configure :: FilePath -> IO PackageDescription
+configure fname = do
+ gpd <- readGenericPackageDescription V.normal fname
+ -- print gpd
+ (compiler, mplatform, programdb) <- GHC.configure V.normal Nothing Nothing (restoreProgramDb builtinPrograms emptyProgramDb)
+ platform <- maybe (hostPlatform <$> Cabal.configure (gpd, emptyHookedBuildInfo) (defaultConfigFlags programdb)) return mplatform
+ let mpd = finalizePD (mkFlagAssignment [])
+ (ComponentRequestedSpec { testsRequested = False, benchmarksRequested = False })
+ (const True) -- is a dependency available in the package set?
+ platform
+ (compilerInfo compiler)
+ []
+ gpd
+ case mpd of
+ Left deps -> do
+ hPutStrLn stderr "Configuration failed due to the following packages:"
+ mapM_ (\d -> hPutStrLn stderr ("- " ++ show d)) deps
+ exitFailure
+ Right (pd, _flags) -> do
+ -- putStrLn ("Configured with flags: " ++ show flags)
+ return pd