@@ -459,11 +459,7 @@ configureCompiler
459459 , projectConfigHcPath
460460 , projectConfigHcPkg
461461 }
462- , projectConfigLocalPackages =
463- PackageConfig
464- { packageConfigProgramPaths
465- , packageConfigProgramPathExtra
466- }
462+ , projectConfigLocalPackages
467463 } = do
468464 let fileMonitorCompiler = newFileMonitor $ distProjectCacheFile " compiler"
469465
@@ -475,35 +471,26 @@ configureCompiler
475471 , hcPath
476472 , hcPkg
477473 , progsearchpath
478- , packageConfigProgramPaths
479- , packageConfigProgramPathExtra
474+ , projectConfigLocalPackages
480475 )
481476 $ do
482477 liftIO $ info verbosity " Compiler settings changed, reconfiguring..."
483- let extraPath = fromNubList packageConfigProgramPathExtra
484- progdb <- liftIO $ prependProgramSearchPath verbosity extraPath [] defaultProgramDb
485- let progdb' = userSpecifyPaths (Map. toList (getMapLast packageConfigProgramPaths)) progdb
486- (comp, plat, progdb'') <-
487- liftIO $
488- Cabal. configCompilerEx
489- hcFlavor
490- hcPath
491- hcPkg
492- progdb'
493- verbosity
478+ progdb <- liftIO $ resolveProgramDb verbosity projectConfigLocalPackages
479+ (comp, plat, progdb') <-
480+ liftIO $ Cabal. configCompilerEx hcFlavor hcPath hcPkg progdb verbosity
494481
495482 -- Note that we added the user-supplied program locations and args
496483 -- for /all/ programs, not just those for the compiler prog and
497484 -- compiler-related utils. In principle we don't know which programs
498485 -- the compiler will configure (and it does vary between compilers).
499486 -- We do know however that the compiler will only configure the
500487 -- programs it cares about, and those are the ones we monitor here.
501- monitorFiles (programsMonitorFiles progdb'' )
488+ monitorFiles (programsMonitorFiles progdb')
502489
503490 -- Configure the unconfigured programs in the program database,
504491 -- as we can't serialise unconfigured programs.
505492 -- See also #2241 and #9840.
506- finalProgDb <- liftIO $ configureAllKnownPrograms verbosity progdb''
493+ finalProgDb <- liftIO $ configureAllKnownPrograms verbosity progdb'
507494
508495 return (comp, plat, finalProgDb)
509496 where
@@ -555,9 +542,14 @@ rebuildInstallPlan
555542 { cabalStoreDirLayout
556543 } = \ projectConfig localPackages mbInstalledPackages ->
557544 runRebuild distProjectRootDirectory $ do
558- progsearchpath <- liftIO $ getSystemSearchPath
545+ progsearchpath <- liftIO getSystemSearchPath
559546 let projectConfigMonitored = projectConfig{projectConfigBuildOnly = mempty }
560547
548+ progdb <- liftIO $ resolveProgramDb verbosity (projectConfigLocalPackages projectConfig)
549+ monitorFiles (programsMonitorFiles progdb)
550+
551+ pkgConfigDB <- getPkgConfigDb verbosity distDirLayout progdb
552+
561553 -- The overall improved plan is cached
562554 rerunIfChanged
563555 verbosity
@@ -578,15 +570,15 @@ rebuildInstallPlan
578570 $ do
579571 compilerEtc <- phaseConfigureCompiler projectConfig
580572 _ <- phaseConfigurePrograms projectConfig compilerEtc
581- (solverPlan, pkgConfigDB, totalIndexState, activeRepos) <-
573+ (solverPlan, totalIndexState, activeRepos) <-
582574 phaseRunSolver
583575 projectConfig
584576 compilerEtc
577+ pkgConfigDB
585578 localPackages
586579 (fromMaybe mempty mbInstalledPackages)
587- ( elaboratedPlan
588- , elaboratedShared
589- ) <-
580+
581+ (elaboratedPlan, elaboratedShared) <-
590582 phaseElaboratePlan
591583 projectConfig
592584 compilerEtc
@@ -620,7 +612,8 @@ rebuildInstallPlan
620612 phaseConfigureCompiler
621613 :: ProjectConfig
622614 -> Rebuild (Compiler , Platform , ProgramDb )
623- phaseConfigureCompiler = configureCompiler verbosity distDirLayout
615+ phaseConfigureCompiler projectConfig =
616+ configureCompiler verbosity distDirLayout projectConfig
624617
625618 -- Configuring other programs.
626619 --
@@ -660,15 +653,17 @@ rebuildInstallPlan
660653 phaseRunSolver
661654 :: ProjectConfig
662655 -> (Compiler , Platform , ProgramDb )
656+ -> PkgConfigDb
663657 -> [PackageSpecifier UnresolvedSourcePackage ]
664658 -> InstalledPackageIndex
665- -> Rebuild (SolverInstallPlan , PkgConfigDb , IndexUtils. TotalIndexState , IndexUtils. ActiveRepos )
659+ -> Rebuild (SolverInstallPlan , IndexUtils. TotalIndexState , IndexUtils. ActiveRepos )
666660 phaseRunSolver
667661 projectConfig@ ProjectConfig
668662 { projectConfigShared
669663 , projectConfigBuildOnly
670664 }
671665 (compiler, platform, progdb)
666+ pkgConfigDB
672667 localPackages
673668 installedPackages =
674669 rerunIfChanged
@@ -695,7 +690,6 @@ rebuildInstallPlan
695690 withRepoCtx
696691 (solverSettingIndexState solverSettings)
697692 (solverSettingActiveRepos solverSettings)
698- pkgConfigDB <- getPkgConfigDb verbosity progdb
699693
700694 -- TODO: [code cleanup] it'd be better if the Compiler contained the
701695 -- ConfiguredPrograms that it needs, rather than relying on the progdb
@@ -720,7 +714,7 @@ rebuildInstallPlan
720714 Left msg -> do
721715 reportPlanningFailure projectConfig compiler platform localPackages
722716 dieWithException verbosity $ PhaseRunSolverErr msg
723- Right plan -> return (plan, pkgConfigDB, tis, ar)
717+ Right plan -> return (plan, tis, ar)
724718 where
725719 corePackageDbs :: [PackageDB ]
726720 corePackageDbs =
@@ -1008,13 +1002,23 @@ getSourcePackages verbosity withRepoCtx idxState activeRepos = do
10081002 $ repos
10091003 return sourcePkgDbWithTIS
10101004
1011- getPkgConfigDb :: Verbosity -> ProgramDb -> Rebuild PkgConfigDb
1012- getPkgConfigDb verbosity progdb = do
1013- dirs <- liftIO $ getPkgConfigDbDirs verbosity progdb
1014- -- Just monitor the dirs so we'll notice new .pc files.
1015- -- Alternatively we could monitor all the .pc files too.
1016- traverse_ monitorDirectoryStatus dirs
1017- liftIO $ readPkgConfigDb verbosity progdb
1005+ getPkgConfigDb :: Verbosity -> DistDirLayout -> ProgramDb -> Rebuild PkgConfigDb
1006+ getPkgConfigDb verbosity distDirLayout progdb = do
1007+ mpkgConfig <- liftIO $ needProgram verbosity pkgConfigProgram progdb
1008+ case mpkgConfig of
1009+ Nothing -> do
1010+ liftIO $ info verbosity " Cannot find pkg-config program. Cabal will continue without solving for pkg-config constraints."
1011+ return NoPkgConfigDb
1012+ Just (pkgConfig, progdb') -> do
1013+ dirs <- liftIO $ getPkgConfigDbDirs verbosity progdb'
1014+ rerunIfChanged verbosity fileMonitorPkgConfigDb (pkgConfig, dirs) $ do
1015+ -- By monitoring the dirs, we'll notice new .pc files. We do not monitor changes in the .pc files themselves.
1016+ traverse_ monitorDirectoryStatus dirs
1017+ liftIO $ do
1018+ info verbosity " Querying pkg-config database..."
1019+ readPkgConfigDb verbosity progdb'
1020+ where
1021+ fileMonitorPkgConfigDb = newFileMonitor $ distProjectCacheFile distDirLayout " pkg-config-db"
10181022
10191023-- | Select the config values to monitor for changes package source hashes.
10201024packageLocationsSignature
0 commit comments