Skip to content

Commit 10cc108

Browse files
committed
add packagedbs to the toolchain
1 parent 7651c91 commit 10cc108

File tree

12 files changed

+112
-77
lines changed

12 files changed

+112
-77
lines changed

cabal-install-solver/src/Distribution/Solver/Types/Toolchain.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ data Toolchain = Toolchain
2323
{ toolchainPlatform :: Platform
2424
, toolchainCompiler :: Compiler
2525
, toolchainProgramDb :: ProgramDb
26+
, toolchainPackageDBs :: PackageDBStackCWD
2627
}
2728
deriving (Show, Generic, Typeable)
2829

cabal-install/src/Distribution/Client/CmdInstall.hs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import Distribution.Client.NixStyleOptions
6767
)
6868
import Distribution.Client.ProjectConfig
6969
( ProjectPackageLocation (..)
70+
, ProjectConfigToolchain (..)
7071
, fetchAndReadSourcePackages
7172
, projectConfigWithBuilderRepoContext
7273
, resolveBuildTimeSettings
@@ -410,12 +411,15 @@ installAction flags@NixStyleFlags{extraFlags, configFlags, installFlags, project
410411
}
411412
, projectConfigShared =
412413
ProjectConfigShared
413-
{ projectConfigHcFlavor
414-
, projectConfigHcPath
415-
, projectConfigHcPkg
414+
{ projectConfigToolchain =
415+
ProjectConfigToolchain
416+
{ projectConfigHcFlavor
417+
, projectConfigHcPath
418+
, projectConfigHcPkg
419+
, projectConfigPackageDBs
420+
}
416421
, projectConfigStoreDir
417422
, projectConfigProgPathExtra
418-
, projectConfigPackageDBs
419423
}
420424
, projectConfigLocalPackages =
421425
PackageConfig

cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ import Distribution.Compat.Directory (listDirectory)
118118

119119
import Distribution.Client.ProjectBuilding.PackageFileMonitor
120120
import Distribution.System (Platform(..))
121-
import Distribution.Simple.Configure (interpretPackageDbFlags)
122121

123122
-- | Each unpacked package is processed in the following phases:
124123
--
@@ -752,7 +751,7 @@ buildAndInstallUnpackedPackage
752751
"registerPkg: elab does NOT require registration for "
753752
++ prettyShow uid
754753
| otherwise = do
755-
let packageDbStack = interpretPackageDbFlags False (elabPackageDbs pkg) ++ [storePackageDB storeDirLayout toolchainCompiler]
754+
let packageDbStack = elabPackageDbs pkg ++ [storePackageDB storeDirLayout toolchainCompiler]
756755
assert (elabRegisterPackageDBStack pkg == packageDbStack) (return ())
757756
_ <-
758757
runRegister

cabal-install/src/Distribution/Client/ProjectConfig.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module Distribution.Client.ProjectConfig
1010
, ProjectConfigToParse (..)
1111
, ProjectConfigBuildOnly (..)
1212
, ProjectConfigShared (..)
13+
, ProjectConfigToolchain (..)
1314
, ProjectConfigProvenance (..)
1415
, PackageConfig (..)
1516
, MapLast (..)
@@ -252,6 +253,7 @@ import Distribution.Deprecated.ProjectParseUtils (ProjectParseError (..), Projec
252253
import Distribution.Simple.Program.Db (prependProgramSearchPath)
253254
import Distribution.Solver.Types.ProjectConfigPath
254255

256+
255257
----------------------------------------
256258
-- Resolving configuration to settings
257259
--

cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ parseProjectSkeleton cacheDir httpTransport verbosity projectDir source (Project
382382
modifiesCompiler :: ProjectConfig -> Bool
383383
modifiesCompiler pc = isSet projectConfigHcFlavor || isSet projectConfigHcPath || isSet projectConfigHcPkg
384384
where
385-
isSet f = f (projectConfigShared pc) /= NoFlag
385+
isSet f = f (projectConfigToolchain $ projectConfigShared pc) /= NoFlag
386386

387387
sanityWalkPCS :: Bool -> ProjectConfigSkeleton -> ProjectParseResult ProjectConfigSkeleton
388388
sanityWalkPCS underConditional t@(CondNode d (listToMaybe -> c) comps)
@@ -704,6 +704,7 @@ convertLegacyAllPackageFlags
704704
convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags projectFlags projectConfigMultiRepl =
705705
ProjectConfigShared{..}
706706
where
707+
projectConfigToolchain = ProjectConfigToolchain {..}
707708
projectConfigPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigPackageDBs_
708709
projectConfigBuildPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigBuildPackageDBs_
709710
projectConfigHookHashes = mempty -- :: Map FilePath HookAccept
@@ -723,10 +724,8 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
723724
, configHcFlavor = projectConfigHcFlavor
724725
, configHcPath = projectConfigHcPath
725726
, configHcPkg = projectConfigHcPkg
726-
, -- configProgramPathExtra = projectConfigProgPathExtra DELETE ME
727-
configInstallDirs = projectConfigInstallDirs
728-
, -- configUserInstall = projectConfigUserInstall,
729-
configPackageDBs = projectConfigPackageDBs_
727+
, configInstallDirs = projectConfigInstallDirs
728+
, configPackageDBs = projectConfigPackageDBs_
730729
} = configFlags
731730

732731
CommonSetupFlags
@@ -966,10 +965,7 @@ convertToLegacySharedConfig
966965
ProjectConfig
967966
{ projectConfigBuildOnly = ProjectConfigBuildOnly{..}
968967
, projectConfigShared = ProjectConfigShared{..}
969-
, projectConfigAllPackages =
970-
PackageConfig
971-
{ packageConfigDocumentation
972-
}
968+
, projectConfigAllPackages = PackageConfig{..}
973969
} =
974970
LegacySharedConfig
975971
{ legacyGlobalFlags = globalFlags
@@ -981,6 +977,7 @@ convertToLegacySharedConfig
981977
, legacyMultiRepl = projectConfigMultiRepl
982978
}
983979
where
980+
ProjectConfigToolchain{..} = projectConfigToolchain
984981
globalFlags =
985982
GlobalFlags
986983
{ globalVersion = mempty
@@ -1089,6 +1086,8 @@ convertToLegacyAllPackageConfig
10891086
, legacyBenchmarkFlags = mempty
10901087
}
10911088
where
1089+
ProjectConfigToolchain{..} = projectConfigToolchain
1090+
10921091
commonFlags =
10931092
mempty
10941093

cabal-install/src/Distribution/Client/ProjectConfig/Types.hs

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ module Distribution.Client.ProjectConfig.Types
88
, ProjectConfigToParse (..)
99
, ProjectConfigBuildOnly (..)
1010
, ProjectConfigShared (..)
11+
, ProjectConfigToolchain(..)
1112
, ProjectConfigProvenance (..)
1213
, PackageConfig (..)
13-
1414
-- * Resolving configuration
1515
, SolverSettings (..)
1616
, BuildTimeSettings (..)
@@ -69,8 +69,8 @@ import Distribution.Simple.Compiler
6969
, CompilerFlavor
7070
, DebugInfoLevel (..)
7171
, OptimisationLevel (..)
72-
, PackageDBCWD
7372
, ProfDetailLevel
73+
, PackageDBCWD
7474
)
7575
import Distribution.Simple.InstallDirs
7676
( InstallDirs
@@ -181,6 +181,18 @@ data ProjectConfigBuildOnly = ProjectConfigBuildOnly
181181
}
182182
deriving (Eq, Show, Generic)
183183

184+
data ProjectConfigToolchain = ProjectConfigToolchain
185+
{ projectConfigHcFlavor :: Flag CompilerFlavor
186+
, projectConfigHcPath :: Flag FilePath
187+
, projectConfigHcPkg :: Flag FilePath
188+
, projectConfigPackageDBs :: [Maybe PackageDBCWD]
189+
, projectConfigBuildHcFlavor :: Flag CompilerFlavor
190+
, projectConfigBuildHcPath :: Flag FilePath
191+
, projectConfigBuildHcPkg :: Flag FilePath
192+
, projectConfigBuildPackageDBs :: [Maybe PackageDBCWD]
193+
}
194+
deriving (Eq, Show, Generic)
195+
184196
-- | Project configuration that is shared between all packages in the project.
185197
-- In particular this includes configuration that affects the solver.
186198
data ProjectConfigShared = ProjectConfigShared
@@ -189,15 +201,8 @@ data ProjectConfigShared = ProjectConfigShared
189201
, projectConfigProjectDir :: Flag FilePath
190202
, projectConfigProjectFile :: Flag FilePath
191203
, projectConfigIgnoreProject :: Flag Bool
192-
, projectConfigHcFlavor :: Flag CompilerFlavor
193-
, projectConfigHcPath :: Flag FilePath
194-
, projectConfigHcPkg :: Flag FilePath
195-
, projectConfigPackageDBs :: [Maybe PackageDBCWD]
196-
, projectConfigBuildHcFlavor :: Flag CompilerFlavor
197-
, projectConfigBuildHcPath :: Flag FilePath
198-
, projectConfigBuildHcPkg :: Flag FilePath
199-
, projectConfigBuildPackageDBs :: [Maybe PackageDBCWD]
200204
, projectConfigHaddockIndex :: Flag PathTemplate
205+
, projectConfigToolchain :: ProjectConfigToolchain
201206
, -- Only makes sense for manual mode, not --local mode
202207
-- too much control!
203208
-- projectConfigUserInstall :: Flag Bool,
@@ -329,12 +334,14 @@ data PackageConfig = PackageConfig
329334

330335
instance Binary ProjectConfig
331336
instance Binary ProjectConfigBuildOnly
337+
instance Binary ProjectConfigToolchain
332338
instance Binary ProjectConfigShared
333339
instance Binary ProjectConfigProvenance
334340
instance Binary PackageConfig
335341

336342
instance Structured ProjectConfig
337343
instance Structured ProjectConfigBuildOnly
344+
instance Structured ProjectConfigToolchain
338345
instance Structured ProjectConfigShared
339346
instance Structured ProjectConfigProvenance
340347
instance Structured PackageConfig
@@ -385,6 +392,13 @@ instance Monoid ProjectConfigBuildOnly where
385392
instance Semigroup ProjectConfigBuildOnly where
386393
(<>) = gmappend
387394

395+
instance Monoid ProjectConfigToolchain where
396+
mempty = gmempty
397+
mappend = (<>)
398+
399+
instance Semigroup ProjectConfigToolchain where
400+
(<>) = gmappend
401+
388402
instance Monoid ProjectConfigShared where
389403
mempty = gmempty
390404
mappend = (<>)

cabal-install/src/Distribution/Client/ProjectPlanning.hs

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ rebuildProjectConfig
388388
return
389389
( configPath
390390
, distProjectFile ""
391-
, toolchainCacheKey
391+
, projectConfigToolchain (projectConfigShared cliConfig)
392392
, progsearchpath
393393
, packageConfigProgramPaths
394394
, packageConfigProgramPathExtra
@@ -433,15 +433,6 @@ rebuildProjectConfig
433433

434434
return (projectConfig <> cliConfig, localPackages)
435435
where
436-
toolchainCacheKey =
437-
( projectConfigBuildHcFlavor (projectConfigShared cliConfig)
438-
, projectConfigBuildHcPath (projectConfigShared cliConfig)
439-
, projectConfigBuildHcPkg (projectConfigShared cliConfig)
440-
, projectConfigHcFlavor (projectConfigShared cliConfig)
441-
, projectConfigHcPath (projectConfigShared cliConfig)
442-
, projectConfigHcPkg (projectConfigShared cliConfig)
443-
)
444-
445436
PackageConfig{packageConfigProgramPaths, packageConfigProgramPathExtra} =
446437
projectConfigLocalPackages cliConfig
447438

@@ -491,22 +482,24 @@ configureToolchains
491482
}
492483
ProjectConfig
493484
{ projectConfigShared =
494-
ProjectConfigShared
495-
{ projectConfigHcFlavor
496-
, projectConfigHcPath
497-
, projectConfigHcPkg
498-
, projectConfigBuildHcFlavor
499-
, projectConfigBuildHcPath
500-
, projectConfigBuildHcPkg
485+
ProjectConfigShared {
486+
projectConfigToolchain = ProjectConfigToolchain
487+
{ projectConfigHcFlavor
488+
, projectConfigHcPath
489+
, projectConfigHcPkg
490+
, projectConfigPackageDBs
491+
, projectConfigBuildHcFlavor
492+
, projectConfigBuildHcPath
493+
, projectConfigBuildHcPkg
494+
, projectConfigBuildPackageDBs
495+
}
501496
}
502497
, projectConfigLocalPackages =
503498
projectConfigLocalPackages@PackageConfig
504499
{ packageConfigProgramPaths
505500
, packageConfigProgramPathExtra
506501
}
507502
} = do
508-
let fileMonitorCompiler = newFileMonitor $ distProjectCacheFile "compiler"
509-
510503
progsearchpath <- liftIO $ getSystemSearchPath
511504

512505
rerunIfChanged
@@ -523,9 +516,9 @@ configureToolchains
523516
defdb <- liftIO $ resolveProgramDb verbosity projectConfigLocalPackages
524517

525518
buildToolchain <- do
526-
(toolchainCompiler, toolchainPlatform, toolchainProgramDb) <-
519+
(toolchainCompiler, toolchainPlatform, toolchainProgramDb) <-
527520
liftIO $ Cabal.configCompilerEx buildHcFlavor buildHcPath buildHcPkg defdb verbosity
528-
521+
let toolchainPackageDBs = Cabal.interpretPackageDbFlags False projectConfigBuildPackageDBs
529522
-- Note that we added the user-supplied program locations and args
530523
-- for /all/ programs, not just those for the compiler prog and
531524
-- compiler-related utils. In principle we don't know which programs
@@ -538,6 +531,7 @@ configureToolchains
538531
hostToolchain <- do
539532
(toolchainCompiler, toolchainPlatform, toolchainProgramDb) <-
540533
liftIO $ Cabal.configCompilerEx hostHcFlavor hostHcPath hostHcPkg defdb verbosity
534+
let toolchainPackageDBs = Cabal.interpretPackageDbFlags False projectConfigPackageDBs
541535

542536
-- Note that we added the user-supplied program locations and args
543537
-- for /all/ programs, not just those for the compiler prog and
@@ -550,6 +544,8 @@ configureToolchains
550544

551545
return $ Staged (\case Build -> buildToolchain; Host -> hostToolchain)
552546
where
547+
fileMonitorCompiler = newFileMonitor $ distProjectCacheFile "compiler"
548+
553549
hostHcFlavor = flagToMaybe projectConfigHcFlavor
554550
hostHcPath = flagToMaybe projectConfigHcPath
555551
hostHcPkg = flagToMaybe projectConfigHcPkg
@@ -793,7 +789,7 @@ rebuildInstallPlan
793789
(solverSettingIndexState solverSettings)
794790
(solverSettingActiveRepos solverSettings)
795791

796-
ipis <- for toolchains (\t -> getInstalledPackages verbosity t corePackageDbs)
792+
ipis <- for toolchains (getInstalledPackages verbosity)
797793
pkgConfigDbs <- for toolchains (getPkgConfigDb verbosity . toolchainProgramDb)
798794

799795
-- TODO: [code cleanup] it'd be better if the Compiler contained the
@@ -821,9 +817,11 @@ rebuildInstallPlan
821817
dieWithException verbosity $ PhaseRunSolverErr msg
822818
Right plan -> return (plan, ipis, pkgConfigDbs, tis, ar)
823819
where
824-
corePackageDbs :: PackageDBStackCWD
825-
corePackageDbs =
826-
Cabal.interpretPackageDbFlags False (projectConfigPackageDBs projectConfigShared)
820+
-- corePackageDbs :: Staged PackageDBStackCWD
821+
-- corePackageDbs =
822+
-- Cabal.interpretPackageDbFlags False <$> Staged (\case
823+
-- Host -> projectConfigPackageDBs projectConfigShared
824+
-- Build -> projectConfigBuildPackageDBs projectConfigShared)
827825

828826
withRepoCtx :: (RepoContext -> IO a) -> IO a
829827
withRepoCtx =
@@ -1037,25 +1035,25 @@ programsMonitorFiles progdb =
10371035
getInstalledPackages
10381036
:: Verbosity
10391037
-> Toolchain
1040-
-> PackageDBStackCWD
10411038
-> Rebuild InstalledPackageIndex
1042-
getInstalledPackages verbosity Toolchain{toolchainCompiler, toolchainPlatform, toolchainProgramDb} packagedbs = do
1039+
getInstalledPackages verbosity Toolchain{..} = do
10431040
monitorFiles
10441041
. map monitorFileOrDirectory
10451042
=<< liftIO
10461043
( IndexUtils.getInstalledPackagesMonitorFiles
10471044
verbosity
10481045
toolchainCompiler
10491046
Nothing -- use ambient working directory
1050-
(coercePackageDBStack packagedbs)
1047+
(coercePackageDBStack toolchainPackageDBs)
10511048
toolchainProgramDb
10521049
toolchainPlatform
10531050
)
10541051
liftIO $
1055-
IndexUtils.getInstalledPackages
1056-
verbosity
1052+
Cabal.getInstalledPackages
1053+
(lessVerbose verbosity)
10571054
toolchainCompiler
1058-
packagedbs
1055+
Nothing
1056+
(coercePackageDBStack toolchainPackageDBs)
10591057
toolchainProgramDb
10601058

10611059
{-
@@ -2141,6 +2139,7 @@ elaborateInstallPlan
21412139
elabCompiler = toolchainCompiler (getStage toolchains stage)
21422140
elabPlatform = toolchainPlatform (getStage toolchains stage)
21432141
elabProgramDb = toolchainProgramDb (getStage toolchains stage)
2142+
elabPackageDbs = toolchainPackageDBs (getStage toolchains stage)
21442143

21452144
elabPkgDescription = case PD.finalizePD
21462145
flags
@@ -2209,7 +2208,7 @@ elaborateInstallPlan
22092208
if shouldBuildInplaceOnly pkg
22102209
then BuildInplaceOnly OnDisk
22112210
else BuildAndInstall
2212-
elabPackageDbs = projectConfigPackageDBs sharedPackageConfig
2211+
22132212
elabBuildPackageDBStack = buildAndRegisterDbs
22142213
elabRegisterPackageDBStack = buildAndRegisterDbs
22152214

@@ -2225,7 +2224,7 @@ elaborateInstallPlan
22252224
inplacePackageDbs = corePackageDbs ++ [distPackageDB (compilerId elabCompiler)]
22262225

22272226
corePackageDbs =
2228-
Cabal.interpretPackageDbFlags False (projectConfigPackageDBs sharedPackageConfig)
2227+
Cabal.interpretPackageDbFlags False (projectConfigPackageDBs (projectConfigToolchain sharedPackageConfig))
22292228
++ [storePackageDB storeDirLayout elabCompiler]
22302229

22312230
elabInplaceBuildPackageDBStack = inplacePackageDbs
@@ -4377,7 +4376,7 @@ packageHashConfigInputs sharedConfig pkg =
43774376
, pkgHashExtraIncludeDirs = elabExtraIncludeDirs
43784377
, pkgHashProgPrefix = elabProgPrefix
43794378
, pkgHashProgSuffix = elabProgSuffix
4380-
, pkgHashPackageDbs = elabPackageDbs
4379+
, pkgHashPackageDbs = map Just elabPackageDbs
43814380
, pkgHashDocumentation = elabBuildHaddocks
43824381
, pkgHashHaddockHoogle = elabHaddockHoogle
43834382
, pkgHashHaddockHtml = elabHaddockHtml

0 commit comments

Comments
 (0)