@@ -461,11 +461,7 @@ configureCompiler
461
461
, projectConfigHcPath
462
462
, projectConfigHcPkg
463
463
}
464
- , projectConfigLocalPackages =
465
- PackageConfig
466
- { packageConfigProgramPaths
467
- , packageConfigProgramPathExtra
468
- }
464
+ , projectConfigLocalPackages
469
465
} = do
470
466
let fileMonitorCompiler = newFileMonitor $ distProjectCacheFile " compiler"
471
467
@@ -477,35 +473,26 @@ configureCompiler
477
473
, hcPath
478
474
, hcPkg
479
475
, progsearchpath
480
- , packageConfigProgramPaths
481
- , packageConfigProgramPathExtra
476
+ , projectConfigLocalPackages
482
477
)
483
478
$ do
484
479
liftIO $ info verbosity " Compiler settings changed, reconfiguring..."
485
- let extraPath = fromNubList packageConfigProgramPathExtra
486
- progdb <- liftIO $ prependProgramSearchPath verbosity extraPath [] defaultProgramDb
487
- let progdb' = userSpecifyPaths (Map. toList (getMapLast packageConfigProgramPaths)) progdb
488
- (comp, plat, progdb'') <-
489
- liftIO $
490
- Cabal. configCompilerEx
491
- hcFlavor
492
- hcPath
493
- hcPkg
494
- progdb'
495
- verbosity
480
+ progdb <- liftIO $ resolveProgramDb verbosity projectConfigLocalPackages
481
+ (comp, plat, progdb') <-
482
+ liftIO $ Cabal. configCompilerEx hcFlavor hcPath hcPkg progdb verbosity
496
483
497
484
-- Note that we added the user-supplied program locations and args
498
485
-- for /all/ programs, not just those for the compiler prog and
499
486
-- compiler-related utils. In principle we don't know which programs
500
487
-- the compiler will configure (and it does vary between compilers).
501
488
-- We do know however that the compiler will only configure the
502
489
-- programs it cares about, and those are the ones we monitor here.
503
- monitorFiles (programsMonitorFiles progdb'' )
490
+ monitorFiles (programsMonitorFiles progdb')
504
491
505
492
-- Configure the unconfigured programs in the program database,
506
493
-- as we can't serialise unconfigured programs.
507
494
-- See also #2241 and #9840.
508
- finalProgDb <- liftIO $ configureAllKnownPrograms verbosity progdb''
495
+ finalProgDb <- liftIO $ configureAllKnownPrograms verbosity progdb'
509
496
510
497
return (comp, plat, finalProgDb)
511
498
where
@@ -557,9 +544,14 @@ rebuildInstallPlan
557
544
{ cabalStoreDirLayout
558
545
} = \ projectConfig localPackages mbInstalledPackages ->
559
546
runRebuild distProjectRootDirectory $ do
560
- progsearchpath <- liftIO $ getSystemSearchPath
547
+ progsearchpath <- liftIO getSystemSearchPath
561
548
let projectConfigMonitored = projectConfig{projectConfigBuildOnly = mempty }
562
549
550
+ progdb <- liftIO $ resolveProgramDb verbosity (projectConfigLocalPackages projectConfig)
551
+ monitorFiles (programsMonitorFiles progdb)
552
+
553
+ pkgConfigDB <- getPkgConfigDb verbosity distDirLayout progdb
554
+
563
555
-- The overall improved plan is cached
564
556
rerunIfChanged
565
557
verbosity
@@ -580,15 +572,15 @@ rebuildInstallPlan
580
572
$ do
581
573
compilerEtc <- phaseConfigureCompiler projectConfig
582
574
_ <- phaseConfigurePrograms projectConfig compilerEtc
583
- (solverPlan, pkgConfigDB, totalIndexState, activeRepos) <-
575
+ (solverPlan, totalIndexState, activeRepos) <-
584
576
phaseRunSolver
585
577
projectConfig
586
578
compilerEtc
579
+ pkgConfigDB
587
580
localPackages
588
581
(fromMaybe mempty mbInstalledPackages)
589
- ( elaboratedPlan
590
- , elaboratedShared
591
- ) <-
582
+
583
+ (elaboratedPlan, elaboratedShared) <-
592
584
phaseElaboratePlan
593
585
projectConfig
594
586
compilerEtc
@@ -622,7 +614,8 @@ rebuildInstallPlan
622
614
phaseConfigureCompiler
623
615
:: ProjectConfig
624
616
-> Rebuild (Compiler , Platform , ProgramDb )
625
- phaseConfigureCompiler = configureCompiler verbosity distDirLayout
617
+ phaseConfigureCompiler projectConfig =
618
+ configureCompiler verbosity distDirLayout projectConfig
626
619
627
620
-- Configuring other programs.
628
621
--
@@ -662,15 +655,17 @@ rebuildInstallPlan
662
655
phaseRunSolver
663
656
:: ProjectConfig
664
657
-> (Compiler , Platform , ProgramDb )
658
+ -> PkgConfigDb
665
659
-> [PackageSpecifier UnresolvedSourcePackage ]
666
660
-> InstalledPackageIndex
667
- -> Rebuild (SolverInstallPlan , PkgConfigDb , IndexUtils. TotalIndexState , IndexUtils. ActiveRepos )
661
+ -> Rebuild (SolverInstallPlan , IndexUtils. TotalIndexState , IndexUtils. ActiveRepos )
668
662
phaseRunSolver
669
663
projectConfig@ ProjectConfig
670
664
{ projectConfigShared
671
665
, projectConfigBuildOnly
672
666
}
673
667
(compiler, platform, progdb)
668
+ pkgConfigDB
674
669
localPackages
675
670
installedPackages =
676
671
rerunIfChanged
@@ -697,7 +692,6 @@ rebuildInstallPlan
697
692
withRepoCtx
698
693
(solverSettingIndexState solverSettings)
699
694
(solverSettingActiveRepos solverSettings)
700
- pkgConfigDB <- getPkgConfigDb verbosity progdb
701
695
702
696
-- TODO: [code cleanup] it'd be better if the Compiler contained the
703
697
-- ConfiguredPrograms that it needs, rather than relying on the progdb
@@ -722,7 +716,7 @@ rebuildInstallPlan
722
716
Left msg -> do
723
717
reportPlanningFailure projectConfig compiler platform localPackages
724
718
dieWithException verbosity $ PhaseRunSolverErr msg
725
- Right plan -> return (plan, pkgConfigDB, tis, ar)
719
+ Right plan -> return (plan, tis, ar)
726
720
where
727
721
corePackageDbs :: [PackageDB ]
728
722
corePackageDbs =
@@ -1010,13 +1004,23 @@ getSourcePackages verbosity withRepoCtx idxState activeRepos = do
1010
1004
$ repos
1011
1005
return sourcePkgDbWithTIS
1012
1006
1013
- getPkgConfigDb :: Verbosity -> ProgramDb -> Rebuild PkgConfigDb
1014
- getPkgConfigDb verbosity progdb = do
1015
- dirs <- liftIO $ getPkgConfigDbDirs verbosity progdb
1016
- -- Just monitor the dirs so we'll notice new .pc files.
1017
- -- Alternatively we could monitor all the .pc files too.
1018
- traverse_ monitorDirectoryStatus dirs
1019
- liftIO $ readPkgConfigDb verbosity progdb
1007
+ getPkgConfigDb :: Verbosity -> DistDirLayout -> ProgramDb -> Rebuild PkgConfigDb
1008
+ getPkgConfigDb verbosity distDirLayout progdb = do
1009
+ mpkgConfig <- liftIO $ needProgram verbosity pkgConfigProgram progdb
1010
+ case mpkgConfig of
1011
+ Nothing -> do
1012
+ liftIO $ info verbosity " Cannot find pkg-config program. Cabal will continue without solving for pkg-config constraints."
1013
+ return NoPkgConfigDb
1014
+ Just (pkgConfig, progdb') -> do
1015
+ dirs <- liftIO $ getPkgConfigDbDirs verbosity progdb'
1016
+ rerunIfChanged verbosity fileMonitorPkgConfigDb (pkgConfig, dirs) $ do
1017
+ -- By monitoring the dirs, we'll notice new .pc files. We do not monitor changes in the .pc files themselves.
1018
+ traverse_ monitorDirectoryStatus dirs
1019
+ liftIO $ do
1020
+ info verbosity " Querying pkg-config database..."
1021
+ readPkgConfigDb verbosity progdb'
1022
+ where
1023
+ fileMonitorPkgConfigDb = newFileMonitor $ distProjectCacheFile distDirLayout " pkg-config-db"
1020
1024
1021
1025
-- | Select the config values to monitor for changes package source hashes.
1022
1026
packageLocationsSignature
0 commit comments