Skip to content

Commit 1c536a3

Browse files
committed
Add --build-package-db.
1 parent 8b3bd34 commit 1c536a3

File tree

5 files changed

+31
-6
lines changed

5 files changed

+31
-6
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ instance Semigroup SavedConfig where
576576
, configBuildHcFlavor = combine configBuildHcFlavor
577577
, configBuildHcPath = combine configBuildHcPath
578578
, configBuildHcPkg = combine configBuildHcPkg
579+
, configBuildPackageDBs = lastNonEmpty configBuildPackageDBs
579580
}
580581
where
581582
combine = combine' savedConfigureExFlags

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

+2
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,7 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
705705
ProjectConfigShared{..}
706706
where
707707
projectConfigPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigPackageDBs_
708+
projectConfigBuildPackageDBs = (fmap . fmap) (interpretPackageDB Nothing) projectConfigBuildPackageDBs_
708709
projectConfigHookHashes = mempty -- :: Map FilePath HookAccept
709710
projectConfigDistDir = fmap getSymbolicPath projectConfigAbsoluteDistDir
710711

@@ -744,6 +745,7 @@ convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags
744745
, configBuildHcFlavor = projectConfigBuildHcFlavor
745746
, configBuildHcPath = projectConfigBuildHcPath
746747
, configBuildHcPkg = projectConfigBuildHcPkg
748+
, configBuildPackageDBs = projectConfigBuildPackageDBs_
747749
} = configExFlags
748750

749751
InstallFlags

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

+1
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ data ProjectConfigShared = ProjectConfigShared
202202

203203
projectConfigInstallDirs :: InstallDirs (Flag PathTemplate)
204204
, projectConfigPackageDBs :: [Maybe PackageDBCWD]
205+
, projectConfigBuildPackageDBs :: [Maybe PackageDBCWD]
205206
, -- configuration used both by the solver and other phases
206207
projectConfigRemoteRepos :: NubList RemoteRepo
207208
-- ^ Available Hackage servers.

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

+13-6
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,7 @@ rebuildInstallPlan
796796
getInstalledPackages
797797
verbosity
798798
(hostToolchain toolchains)
799-
corePackageDbs
799+
(corePackageDbs Host)
800800
-- this is an aweful hack, however `getInstalledPackages` is
801801
-- terribly invovled everywhere so we'll have to do with this
802802
-- for now. FIXME!
@@ -805,7 +805,7 @@ rebuildInstallPlan
805805
getInstalledPackages
806806
verbosity
807807
(buildToolchain toolchains)
808-
corePackageDbs
808+
(corePackageDbs Build)
809809

810810
(sourcePkgDb, tis, ar) <-
811811
getSourcePackages
@@ -840,9 +840,13 @@ rebuildInstallPlan
840840
dieWithException verbosity $ PhaseRunSolverErr msg
841841
Right plan -> return (plan, pkgConfigDB, tis, ar)
842842
where
843-
corePackageDbs :: PackageDBStackCWD
844-
corePackageDbs =
845-
Cabal.interpretPackageDbFlags False (projectConfigPackageDBs projectConfigShared)
843+
corePackageDbs :: Stage -> PackageDBStackCWD
844+
corePackageDbs stage =
845+
Cabal.interpretPackageDbFlags False (packageDBs stage)
846+
847+
packageDBs Host = projectConfigPackageDBs projectConfigShared
848+
packageDBs Build = projectConfigBuildPackageDBs projectConfigShared
849+
846850

847851
withRepoCtx :: (RepoContext -> IO a) -> IO a
848852
withRepoCtx =
@@ -2323,7 +2327,10 @@ elaborateInstallPlan
23232327

23242328
inplacePackageDbs stage = corePackageDbs stage ++ [distPackageDB (compilerId (toolchainCompiler (toolchainFor stage toolchains)))]
23252329

2326-
corePackageDbs stage = storePackageDBStack (toolchainCompiler (toolchainFor stage toolchains)) (projectConfigPackageDBs sharedPackageConfig)
2330+
corePackageDbs stage = storePackageDBStack (toolchainCompiler (toolchainFor stage toolchains)) (packageDBs stage)
2331+
2332+
packageDBs Host = projectConfigPackageDBs sharedPackageConfig
2333+
packageDBs Build = projectConfigBuildPackageDBs sharedPackageConfig
23272334

23282335
elabInplaceBuildPackageDBStack = inplacePackageDbs stage
23292336
elabInplaceRegisterPackageDBStack = inplacePackageDbs stage

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

+14
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,7 @@ data ConfigExFlags = ConfigExFlags
923923
, configBuildHcFlavor :: Flag CompilerFlavor
924924
, configBuildHcPath :: Flag FilePath
925925
, configBuildHcPkg :: Flag FilePath
926+
, configBuildPackageDBs :: [Maybe PackageDB]
926927
}
927928
deriving (Eq, Show, Generic)
928929

@@ -1075,6 +1076,19 @@ configureExOptions _showOrParseArgs src =
10751076
configBuildHcPkg
10761077
(\v flags -> flags{configBuildHcPkg = v})
10771078
(reqArgFlag "PATH")
1079+
, option
1080+
""
1081+
["build-package-db"]
1082+
( "Append the given package database to the list of package"
1083+
++ " databases used (to satisfy dependencies and register into)."
1084+
++ " May be a specific file, 'global' or 'user'. The initial list"
1085+
++ " is ['global'], ['global', 'user'], or ['global', $sandbox],"
1086+
++ " depending on context. Use 'clear' to reset the list to empty."
1087+
++ " See the user guide for details."
1088+
)
1089+
configBuildPackageDBs
1090+
(\v flags -> flags{configBuildPackageDBs = v})
1091+
(reqArg' "DB" readPackageDbList showPackageDbList)
10781092
]
10791093

10801094
writeGhcEnvironmentFilesPolicyParser :: ReadE (Flag WriteGhcEnvironmentFilesPolicy)

0 commit comments

Comments
 (0)