Refactor builder path manipulation
[hadrian.git] / src / Settings / Builders / GhcCabal.hs
index 7a3b3a0..7a0669a 100644 (file)
@@ -1,39 +1,33 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 module Settings.Builders.GhcCabal (
-    ghcCabalBuilderArgs, ghcCabalHsColourBuilderArgs, bootPackageDatabaseArgs,
-    PackageDatabaseKey (..), buildDll0
+    ghcCabalBuilderArgs, ghcCabalHsColourBuilderArgs, buildDll0
     ) where
 
-import Base
 import Context
 import Flavour
-import GHC
-import Oracles.Config.Flag
-import Oracles.Config.Setting
-import Oracles.WindowsPath
-import Predicate
-import Settings
+import Rules.Actions
 import Settings.Builders.Common
-import Settings.Paths
 
 ghcCabalBuilderArgs :: Args
-ghcCabalBuilderArgs = builder GhcCabal ? mconcat
-    [ arg "configure"
-    , arg =<< getPackagePath
-    , arg =<< getContextDirectory
-    , dll0Args
-    , withStaged $ Ghc CompileHs
-    , withStaged GhcPkg
-    , bootPackageDatabaseArgs
-    , libraryArgs
-    , with HsColour
-    , configureArgs
-    , packageConstraints
-    , withStaged $ Cc CompileC
-    , notStage0 ? with Ld
-    , with Ar
-    , with Alex
-    , with Happy ]
+ghcCabalBuilderArgs = builder GhcCabal ? do
+    verbosity <- lift $ getVerbosity
+    mconcat [ arg "configure"
+            , arg =<< getPackagePath
+            , arg =<< getContextDirectory
+            , dll0Args
+            , withStaged $ Ghc CompileHs
+            , withStaged GhcPkg
+            , bootPackageDatabaseArgs
+            , libraryArgs
+            , with HsColour
+            , configureArgs
+            , packageConstraints
+            , withStaged $ Cc CompileC
+            , notStage0 ? with Ld
+            , with Ar
+            , with Alex
+            , with Happy
+            , verbosity < Chatty ? append [ "-v0", "--configure-option=--quiet"
+                , "--configure-option=--disable-option-checking"  ] ]
 
 ghcCabalHsColourBuilderArgs :: Args
 ghcCabalHsColourBuilderArgs = builder GhcCabalHsColour ? do
@@ -61,13 +55,14 @@ libraryArgs = do
              else "--disable-shared" ]
 
 -- TODO: LD_OPTS?
--- TODO: WARNING: unrecognized options: --with-compiler, --with-gmp-libraries, --with-cc
 configureArgs :: Args
 configureArgs = do
+    top <- getTopDirectory
     let conf key = appendSubD $ "--configure-option=" ++ key
         cFlags   = mconcat [ cArgs
                            , remove ["-Werror"]
-                           , argStagedSettingList ConfCcArgs ]
+                           , argStagedSettingList ConfCcArgs
+                           , arg $ "-I" ++ top -/- generatedPath ]
         ldFlags  = ldArgs  <> (argStagedSettingList ConfGccLinkerArgs)
         cppFlags = cppArgs <> (argStagedSettingList ConfCppArgs)
     mconcat
@@ -82,21 +77,6 @@ configureArgs = do
         , crossCompiling ? (conf "--host" $ argSetting TargetPlatformFull)
         , conf "--with-cc" $ argStagedBuilderPath (Cc CompileC) ]
 
-newtype PackageDatabaseKey = PackageDatabaseKey Stage
-    deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
-
-initialisePackageDatabase :: Stage -> Action ()
-initialisePackageDatabase = askOracle . PackageDatabaseKey
-
-bootPackageDatabaseArgs :: Args
-bootPackageDatabaseArgs = do
-    stage <- getStage
-    lift $ initialisePackageDatabase stage
-    stage0 ? do
-        path   <- getTopDirectory
-        prefix <- ifM (builder Ghc) (return "-package-db ") (return "--package-db=")
-        arg $ prefix ++ path -/- packageDbDirectory Stage0
-
 packageConstraints :: Args
 packageConstraints = stage0 ? do
     constraints <- lift . readFileLines $ bootPackageConstraints
@@ -119,7 +99,7 @@ withBuilderKey b = case b of
 
 -- Expression 'with Alex' appends "--with-alex=/path/to/alex" and needs Alex.
 with :: Builder -> Args
-with b = specified b ? do
+with b = isSpecified b ? do
     top  <- getTopDirectory
     path <- getBuilderPath b
     lift $ needBuilder b