diff --git a/Cabal/Distribution/Simple/Build.hs b/Cabal/Distribution/Simple/Build.hs index a15138061f5f4be951c0fdf0a12865cdbb535ab1..dad2b9da83238ef72abe79c3e55d3fcbc0d85771 100644 --- a/Cabal/Distribution/Simple/Build.hs +++ b/Cabal/Distribution/Simple/Build.hs @@ -75,6 +75,7 @@ import qualified Distribution.InstalledPackageInfo as IPI import qualified Distribution.ModuleName as ModuleName import Distribution.ModuleName (ModuleName) +import Distribution.Simple.Program (ghcPkgProgram) import Distribution.Simple.Setup ( BuildFlags(..), ReplFlags(..), fromFlag ) import Distribution.Simple.BuildTarget @@ -91,6 +92,7 @@ import Distribution.Simple.LocalBuildInfo , inplacePackageId, LibraryName(..) ) import Distribution.Simple.Program.Types import Distribution.Simple.Program.Db +import qualified Distribution.Simple.Program.HcPkg as HcPkg import Distribution.Simple.BuildPaths ( autogenModulesDir, autogenModuleName, cppHeaderName, exeExtension ) import Distribution.Simple.Register @@ -116,7 +118,7 @@ import Control.Monad import System.FilePath ( (</>), (<.>) ) import System.Directory - ( getCurrentDirectory ) + ( getCurrentDirectory, removeDirectoryRecursive, doesDirectoryExist ) -- ----------------------------------------------------------------------------- -- |Build the libraries and executables in this package. @@ -141,7 +143,8 @@ build pkg_descr lbi flags suffixes = do -- Only bother with this message if we're building the whole package setupMessage verbosity "Building" (packageId pkg_descr) - internalPackageDB <- createInternalPackageDB distPref + let Just ghcPkgProg = lookupProgram ghcPkgProgram (withPrograms lbi) + internalPackageDB <- createInternalPackageDB verbosity ghcPkgProg distPref withComponentsInBuildOrder pkg_descr lbi componentsToBuild $ \comp clbi -> let bi = componentBuildInfo comp @@ -177,7 +180,8 @@ repl pkg_descr lbi flags suffixes args = do initialBuildSteps distPref pkg_descr lbi verbosity - internalPackageDB <- createInternalPackageDB distPref + let Just ghcPkgProg = lookupProgram ghcPkgProgram (withPrograms lbi) + internalPackageDB <- createInternalPackageDB verbosity ghcPkgProg distPref let lbiForComponent comp lbi' = lbi' { withPackageDB = withPackageDB lbi ++ [internalPackageDB], @@ -435,11 +439,13 @@ benchmarkExeV10asExe Benchmark{} _ = error "benchmarkExeV10asExe: wrong kind" -- | Initialize a new package db file for libraries defined -- internally to the package. -createInternalPackageDB :: FilePath -> IO PackageDB -createInternalPackageDB distPref = do - let dbFile = distPref </> "package.conf.inplace" - packageDB = SpecificPackageDB dbFile - writeFile dbFile "[]" +createInternalPackageDB :: Verbosity -> ConfiguredProgram -> FilePath -> IO PackageDB +createInternalPackageDB verbosity ghcPkgProg distPref = do + let dbDir = distPref </> "package.conf.inplace" + packageDB = SpecificPackageDB dbDir + exists <- doesDirectoryExist dbDir + when exists $ removeDirectoryRecursive dbDir + HcPkg.init verbosity ghcPkgProg dbDir return packageDB addInternalBuildTools :: PackageDescription -> LocalBuildInfo -> BuildInfo