@@ -459,11 +459,7 @@ configureCompiler
459
459
, projectConfigHcPath
460
460
, projectConfigHcPkg
461
461
}
462
- , projectConfigLocalPackages =
463
- PackageConfig
464
- { packageConfigProgramPaths
465
- , packageConfigProgramPathExtra
466
- }
462
+ , projectConfigLocalPackages
467
463
} = do
468
464
let fileMonitorCompiler = newFileMonitor $ distProjectCacheFile " compiler"
469
465
@@ -475,35 +471,26 @@ configureCompiler
475
471
, hcPath
476
472
, hcPkg
477
473
, progsearchpath
478
- , packageConfigProgramPaths
479
- , packageConfigProgramPathExtra
474
+ , projectConfigLocalPackages
480
475
)
481
476
$ do
482
477
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
494
481
495
482
-- Note that we added the user-supplied program locations and args
496
483
-- for /all/ programs, not just those for the compiler prog and
497
484
-- compiler-related utils. In principle we don't know which programs
498
485
-- the compiler will configure (and it does vary between compilers).
499
486
-- We do know however that the compiler will only configure the
500
487
-- programs it cares about, and those are the ones we monitor here.
501
- monitorFiles (programsMonitorFiles progdb'' )
488
+ monitorFiles (programsMonitorFiles progdb')
502
489
503
490
-- Configure the unconfigured programs in the program database,
504
491
-- as we can't serialise unconfigured programs.
505
492
-- See also #2241 and #9840.
506
- finalProgDb <- liftIO $ configureAllKnownPrograms verbosity progdb''
493
+ finalProgDb <- liftIO $ configureAllKnownPrograms verbosity progdb'
507
494
508
495
return (comp, plat, finalProgDb)
509
496
where
@@ -555,9 +542,14 @@ rebuildInstallPlan
555
542
{ cabalStoreDirLayout
556
543
} = \ projectConfig localPackages mbInstalledPackages ->
557
544
runRebuild distProjectRootDirectory $ do
558
- progsearchpath <- liftIO $ getSystemSearchPath
545
+ progsearchpath <- liftIO getSystemSearchPath
559
546
let projectConfigMonitored = projectConfig{projectConfigBuildOnly = mempty }
560
547
548
+ progdb <- liftIO $ resolveProgramDb verbosity (projectConfigLocalPackages projectConfig)
549
+ monitorFiles (programsMonitorFiles progdb)
550
+
551
+ pkgConfigDB <- getPkgConfigDb verbosity distDirLayout progdb
552
+
561
553
-- The overall improved plan is cached
562
554
rerunIfChanged
563
555
verbosity
@@ -578,15 +570,15 @@ rebuildInstallPlan
578
570
$ do
579
571
compilerEtc <- phaseConfigureCompiler projectConfig
580
572
_ <- phaseConfigurePrograms projectConfig compilerEtc
581
- (solverPlan, pkgConfigDB, totalIndexState, activeRepos) <-
573
+ (solverPlan, totalIndexState, activeRepos) <-
582
574
phaseRunSolver
583
575
projectConfig
584
576
compilerEtc
577
+ pkgConfigDB
585
578
localPackages
586
579
(fromMaybe mempty mbInstalledPackages)
587
- ( elaboratedPlan
588
- , elaboratedShared
589
- ) <-
580
+
581
+ (elaboratedPlan, elaboratedShared) <-
590
582
phaseElaboratePlan
591
583
projectConfig
592
584
compilerEtc
@@ -620,7 +612,8 @@ rebuildInstallPlan
620
612
phaseConfigureCompiler
621
613
:: ProjectConfig
622
614
-> Rebuild (Compiler , Platform , ProgramDb )
623
- phaseConfigureCompiler = configureCompiler verbosity distDirLayout
615
+ phaseConfigureCompiler projectConfig =
616
+ configureCompiler verbosity distDirLayout projectConfig
624
617
625
618
-- Configuring other programs.
626
619
--
@@ -660,15 +653,17 @@ rebuildInstallPlan
660
653
phaseRunSolver
661
654
:: ProjectConfig
662
655
-> (Compiler , Platform , ProgramDb )
656
+ -> PkgConfigDb
663
657
-> [PackageSpecifier UnresolvedSourcePackage ]
664
658
-> InstalledPackageIndex
665
- -> Rebuild (SolverInstallPlan , PkgConfigDb , IndexUtils. TotalIndexState , IndexUtils. ActiveRepos )
659
+ -> Rebuild (SolverInstallPlan , IndexUtils. TotalIndexState , IndexUtils. ActiveRepos )
666
660
phaseRunSolver
667
661
projectConfig@ ProjectConfig
668
662
{ projectConfigShared
669
663
, projectConfigBuildOnly
670
664
}
671
665
(compiler, platform, progdb)
666
+ pkgConfigDB
672
667
localPackages
673
668
installedPackages =
674
669
rerunIfChanged
@@ -695,7 +690,6 @@ rebuildInstallPlan
695
690
withRepoCtx
696
691
(solverSettingIndexState solverSettings)
697
692
(solverSettingActiveRepos solverSettings)
698
- pkgConfigDB <- getPkgConfigDb verbosity progdb
699
693
700
694
-- TODO: [code cleanup] it'd be better if the Compiler contained the
701
695
-- ConfiguredPrograms that it needs, rather than relying on the progdb
@@ -720,7 +714,7 @@ rebuildInstallPlan
720
714
Left msg -> do
721
715
reportPlanningFailure projectConfig compiler platform localPackages
722
716
dieWithException verbosity $ PhaseRunSolverErr msg
723
- Right plan -> return (plan, pkgConfigDB, tis, ar)
717
+ Right plan -> return (plan, tis, ar)
724
718
where
725
719
corePackageDbs :: [PackageDB ]
726
720
corePackageDbs =
@@ -1008,13 +1002,23 @@ getSourcePackages verbosity withRepoCtx idxState activeRepos = do
1008
1002
$ repos
1009
1003
return sourcePkgDbWithTIS
1010
1004
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"
1018
1022
1019
1023
-- | Select the config values to monitor for changes package source hashes.
1020
1024
packageLocationsSignature
0 commit comments