Skip to content

Commit e72a225

Browse files
patrickdocgbaz
authored andcommitted
Apply command line flags to install packages (#8637) (#8779)
* Apply command line flags to install packages (#8637) * remove expectBroken on NonIgnoredConfigs test --------- Co-authored-by: gbaz <[email protected]> (cherry picked from commit 76670eb)
1 parent bc7a1f1 commit e72a225

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

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

+18-5
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import Distribution.Client.Types
3939
, SourcePackageDb(..) )
4040
import qualified Distribution.Client.InstallPlan as InstallPlan
4141
import Distribution.Package
42-
( Package(..), PackageName, unPackageName )
42+
( Package(..), PackageName, mkPackageName, unPackageName )
4343
import Distribution.Types.PackageId
4444
( PackageIdentifier(..) )
4545
import Distribution.Client.ProjectConfig
@@ -53,6 +53,7 @@ import Distribution.Client.ProjectFlags (ProjectFlags (..))
5353
import Distribution.Client.ProjectConfig.Types
5454
( ProjectConfig(..), ProjectConfigShared(..)
5555
, ProjectConfigBuildOnly(..), PackageConfig(..)
56+
, MapMappend(..)
5657
, getMapLast, getMapMappend, projectConfigLogsDir
5758
, projectConfigStoreDir, projectConfigBuildOnly
5859
, projectConfigConfigFile )
@@ -430,12 +431,24 @@ installAction flags@NixStyleFlags { extraFlags = clientInstallFlags', .. } targe
430431
configFlags' = disableTestsBenchsByDefault configFlags
431432
verbosity = fromFlagOrDefault normal (configVerbosity configFlags')
432433
ignoreProject = flagIgnoreProject projectFlags
433-
cliConfig = commandLineFlagsToProjectConfig
434-
globalFlags
435-
flags { configFlags = configFlags' }
436-
clientInstallFlags'
434+
baseCliConfig = commandLineFlagsToProjectConfig
435+
globalFlags
436+
flags { configFlags = configFlags' }
437+
clientInstallFlags'
438+
cliConfig = addLocalConfigToTargets baseCliConfig targetStrings
437439
globalConfigFlag = projectConfigConfigFile (projectConfigShared cliConfig)
438440

441+
-- | Treat all direct targets of install command as local packages: #8637
442+
addLocalConfigToTargets :: ProjectConfig -> [String] -> ProjectConfig
443+
addLocalConfigToTargets config targetStrings
444+
= config {
445+
projectConfigSpecificPackage = projectConfigSpecificPackage config
446+
<> MapMappend (Map.fromList targetPackageConfigs)
447+
}
448+
where
449+
localConfig = projectConfigLocalPackages config
450+
targetPackageConfigs = map (\x -> (mkPackageName x, localConfig)) targetStrings
451+
439452
-- | Verify that invalid config options were not passed to the install command.
440453
--
441454
-- If an invalid configuration is found the command will @die'@.

cabal-testsuite/PackageTests/LinkerOptions/NonignoredConfigs/cabal.test.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ linkConfigFlags Dynamic =
5050
lrun :: [Linking]
5151
lrun = [Static, Dynamic, Static, Dynamic]
5252

53-
main = cabalTest . expectBroken 8744 $ do
53+
main = cabalTest $ do
5454
-- Skip if on Windows, since my default Chocolatey Windows setup (and the CI
5555
-- server setup at the time, presumably) lacks support for dynamic builds
5656
-- since the base package appears to be static only, lacking e.g. ‘.dyn_o’

changelog.d/issue-8637

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
synopsis: Apply command line flags to install packages
2+
packages: cabal-install
3+
prs: #8779
4+
issues: #8637
5+
6+
description: {
7+
8+
- Command line flags usually only apply to "local" packages (packages specified
9+
in the cabal.project). This change causes the v2-install command to ignore
10+
that distinction to better match the expected behavior for packages specified
11+
directly in the command.
12+
13+
}

0 commit comments

Comments
 (0)