diff --git a/Cabal/tests/PackageTests.hs b/Cabal/tests/PackageTests.hs index e065f0f9d7cf54f2aee1253e6caa47bc7c794f75..c7c7b3b473ded6472f08e3f77a5b6104ec633b2f 100644 --- a/Cabal/tests/PackageTests.hs +++ b/Cabal/tests/PackageTests.hs @@ -39,6 +39,7 @@ import PackageTests.ReexportedModules.Check import Distribution.Simple.Configure ( ConfigStateFileError(..), findDistPrefOrDefault, getConfigStateFile ) +import Distribution.Simple.Compiler (PackageDB(..)) import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..)) import Distribution.Simple.Program.Types (programPath) import Distribution.Simple.Program.Builtin @@ -52,6 +53,9 @@ import Distribution.Version (Version(Version)) import Control.Exception (try, throw) import Distribution.Compat.Environment ( setEnv ) +#if !MIN_VERSION_base(4,8,0) +import Data.Functor ((<$>)) +#endif import System.Directory ( canonicalizePath, setCurrentDirectory ) import System.FilePath ((</>)) @@ -141,8 +145,9 @@ main = do (ghc, _) <- requireProgram normal ghcProgram (withPrograms lbi) (ghcPkg, _) <- requireProgram normal ghcPkgProgram (withPrograms lbi) (haddock, _) <- requireProgram normal haddockProgram (withPrograms lbi) + packageDBStack' <- mapM canonicalizePackageDB $ withPackageDB lbi let haddockPath = programPath haddock - dbFile = distPref_ </> "package.conf.inplace" + inplaceDBFile = distPref_ </> "package.conf.inplace" config = SuiteConfig { cabalDistPref = distPref_ , ghcPath = programPath ghc @@ -150,11 +155,12 @@ main = do , inplaceSpec = PackageSpec { directory = [] , configOpts = - [ "--package-db=" ++ dbFile + [ "--package-db=" ++ inplaceDBFile , "--constraint=Cabal == " ++ display cabalVersion ] , distPref = Nothing } + , packageDBStack = packageDBStack' } putStrLn $ "Cabal test suite - testing cabal version " ++ display cabalVersion putStrLn $ "Using ghc: " ++ ghcPath config @@ -177,3 +183,7 @@ getPersistBuildConfig_ filename = do Left (ConfigStateFileBadVersion _ _ (Left err)) -> throw err Left err -> throw err Right lbi -> return lbi + +canonicalizePackageDB :: PackageDB -> IO PackageDB +canonicalizePackageDB (SpecificPackageDB path) = SpecificPackageDB <$> canonicalizePath path +canonicalizePackageDB x = return x diff --git a/Cabal/tests/PackageTests/PackageTester.hs b/Cabal/tests/PackageTests/PackageTester.hs index 5b91e349341103daaf69062d2c1c9675e3325e69..f721bc04935a0245bb5f86707cbe6c6dfbcc7958 100644 --- a/Cabal/tests/PackageTests/PackageTester.hs +++ b/Cabal/tests/PackageTests/PackageTester.hs @@ -47,6 +47,7 @@ import Test.Tasty.HUnit (Assertion, assertFailure) import Distribution.Compat.CreatePipe (createPipe) import Distribution.Simple.BuildPaths (exeExtension) +import Distribution.Simple.Compiler (PackageDBStack, PackageDB(..)) import Distribution.Simple.Program.Run (getEffectiveEnvironment) import Distribution.Simple.Utils (printRawCommandAndArgsAndEnv) import Distribution.ReadE (readEOrFail) @@ -63,6 +64,7 @@ data SuiteConfig = SuiteConfig , ghcPkgPath :: FilePath , cabalDistPref :: FilePath , inplaceSpec :: PackageSpec + , packageDBStack :: PackageDBStack } data Success = Failure @@ -107,9 +109,20 @@ doCabalConfigure config spec = do cleanResult@(_, _, _) <- cabal config spec [] ["clean"] requireSuccess cleanResult res <- cabal config spec [] - (["configure", "--user", "-w", ghcPath config] ++ configOpts spec) + -- Use the package dbs from when we configured cabal rather than any + -- defaults. + (["configure", "--user", "-w", ghcPath config, "--package-db=clear"] + ++ packageDBParams (packageDBStack config) + ++ configOpts spec) return $ recordRun res ConfigureSuccess nullResult +packageDBParams :: PackageDBStack -> [String] +packageDBParams = map (("--package-db=" ++) . convert) where + convert :: PackageDB -> String + convert GlobalPackageDB = "global" + convert UserPackageDB = "user" + convert (SpecificPackageDB path) = path + doCabalBuild :: SuiteConfig -> PackageSpec -> IO Result doCabalBuild config spec = do configResult <- doCabalConfigure config spec