Skip to content

Commit 5495daf

Browse files
sebrightezyang
authored andcommitted
Add a constraint scope to constrain a given package in any setup script.
I used the new constraint scope to enforce the minimum Cabal version in setup scripts that lack a 'custom-setup' stanza. It isn't exposed to users yet.
1 parent 3003d06 commit 5495daf

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

cabal-install/Distribution/Client/Dependency.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -492,16 +492,14 @@ addDefaultSetupDependencies defaultSetupDeps params =
492492
pkgdesc = PD.packageDescription gpkgdesc
493493

494494
-- | If a package has a custom setup then we need to add a setup-depends
495-
-- on Cabal. For now it's easier to add this unconditionally. Once
496-
-- qualified constraints land we can turn this into a custom setup
497-
-- only constraint.
495+
-- on Cabal.
498496
--
499497
addSetupCabalMinVersionConstraint :: Version
500498
-> DepResolverParams -> DepResolverParams
501499
addSetupCabalMinVersionConstraint minVersion =
502500
addConstraints
503501
[ LabeledPackageConstraint
504-
(PackageConstraint (scopeToplevel cabalPkgname)
502+
(PackageConstraint (ScopeAnySetupQualifier cabalPkgname)
505503
(PackagePropertyVersion $ orLaterVersion minVersion))
506504
ConstraintSetupCabalMinVersion
507505
]

cabal-install/Distribution/Solver/Types/PackageConstraint.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ import qualified Text.PrettyPrint as Disp
3838
data ConstraintScope
3939
-- | The package with the specified name and qualifier.
4040
= ScopeQualified Qualifier PackageName
41+
-- | The package with the specified name when it has a
42+
-- setup qualifier.
43+
| ScopeAnySetupQualifier PackageName
4144
-- | The package with the specified name regardless of
4245
-- qualifier.
4346
| ScopeAnyQualifier PackageName
@@ -52,11 +55,13 @@ scopeToplevel = ScopeQualified QualToplevel
5255
-- | Returns the package name associated with a constraint scope.
5356
scopeToPackageName :: ConstraintScope -> PackageName
5457
scopeToPackageName (ScopeQualified _ pn) = pn
58+
scopeToPackageName (ScopeAnySetupQualifier pn) = pn
5559
scopeToPackageName (ScopeAnyQualifier pn) = pn
5660

5761
-- | Pretty-prints a constraint scope.
5862
dispConstraintScope :: ConstraintScope -> Disp.Doc
5963
dispConstraintScope (ScopeQualified q pn) = dispQualifier q <<>> disp pn
64+
dispConstraintScope (ScopeAnySetupQualifier pn) = Disp.text "setup." <<>> disp pn
6065
dispConstraintScope (ScopeAnyQualifier pn) = Disp.text "any." <<>> disp pn
6166

6267
-- | A package property is a logical predicate on packages.

0 commit comments

Comments
 (0)