Skip to content

Commit b32cfbc

Browse files
author
Rob Henderson
authored
Merge pull request #4228 from robjhen/issue-3502-part3
Qualified constraints (issue #3502) part 2
2 parents b6f17f3 + f79a07a commit b32cfbc

File tree

19 files changed

+110
-97
lines changed

19 files changed

+110
-97
lines changed

cabal-install/Distribution/Client/CmdFreeze.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ projectFreezeConstraints plan =
150150
versionConstraints :: Map PackageName [(UserConstraint, ConstraintSource)]
151151
versionConstraints =
152152
Map.mapWithKey
153-
(\p v -> [(UserConstraint UserUnqualified p (PackagePropertyVersion v),
153+
(\p v -> [(UserConstraint UserToplevel p (PackagePropertyVersion v),
154154
ConstraintSourceFreeze)])
155155
versionRanges
156156

@@ -168,7 +168,7 @@ projectFreezeConstraints plan =
168168
flagConstraints :: Map PackageName [(UserConstraint, ConstraintSource)]
169169
flagConstraints =
170170
Map.mapWithKey
171-
(\p f -> [(UserConstraint UserUnqualified p (PackagePropertyFlags f),
171+
(\p f -> [(UserConstraint UserToplevel p (PackagePropertyFlags f),
172172
ConstraintSourceFreeze)])
173173
flagAssignments
174174

cabal-install/Distribution/Client/Configure.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,15 +336,15 @@ planLocalPackage verbosity comp platform configFlags configExFlags
336336
. addConstraints
337337
-- package flags from the config file or command line
338338
[ let pc = PackageConstraint
339-
(unqualified $ packageName pkg)
339+
(scopeToplevel $ packageName pkg)
340340
(PackagePropertyFlags $ configConfigurationsFlags configFlags)
341341
in LabeledPackageConstraint pc ConstraintSourceConfigFlagOrTarget
342342
]
343343

344344
. addConstraints
345345
-- '--enable-tests' and '--enable-benchmarks' constraints from
346346
-- the config file or command line
347-
[ let pc = PackageConstraint (unqualified $ packageName pkg) .
347+
[ let pc = PackageConstraint (scopeToplevel $ packageName pkg) .
348348
PackagePropertyStanzas $
349349
[ TestStanzas | testsEnabled ] ++
350350
[ BenchStanzas | benchmarksEnabled ]

cabal-install/Distribution/Client/Dependency.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module Distribution.Client.Dependency (
2525
-- * Constructing resolver policies
2626
PackageProperty(..),
2727
PackageConstraint(..),
28-
unqualified,
28+
scopeToplevel,
2929
PackagesPreferenceDefault(..),
3030
PackagePreference(..),
3131

@@ -361,7 +361,7 @@ dontUpgradeNonUpgradeablePackages params =
361361
where
362362
extraConstraints =
363363
[ LabeledPackageConstraint
364-
(PackageConstraint (unqualified pkgname) PackagePropertyInstalled)
364+
(PackageConstraint (scopeToplevel pkgname) PackagePropertyInstalled)
365365
ConstraintSourceNonUpgradeablePackage
366366
| Set.notMember (mkPackageName "base") (depResolverTargets params)
367367
-- If you change this enumeration, make sure to update the list in
@@ -492,7 +492,7 @@ addSetupCabalMinVersionConstraint :: Version
492492
addSetupCabalMinVersionConstraint minVersion =
493493
addConstraints
494494
[ LabeledPackageConstraint
495-
(PackageConstraint (unqualified cabalPkgname)
495+
(PackageConstraint (scopeToplevel cabalPkgname)
496496
(PackagePropertyVersion $ orLaterVersion minVersion))
497497
ConstraintSetupCabalMinVersion
498498
]
@@ -600,7 +600,7 @@ applySandboxInstallPolicy
600600

601601
. addConstraints
602602
[ let pc = PackageConstraint
603-
(unqualified $ packageName pkg)
603+
(scopeToplevel $ packageName pkg)
604604
(PackagePropertyVersion $ thisVersion (packageVersion pkg))
605605
in LabeledPackageConstraint pc ConstraintSourceModifiedAddSourceDep
606606
| pkg <- modifiedDeps ]
@@ -946,9 +946,9 @@ resolveWithoutDependencies (DepResolverParams targets constraints
946946
Map.findWithDefault anyVersion pkgname packageVersionConstraintMap
947947
packageVersionConstraintMap =
948948
let pcs = map unlabelPackageConstraint constraints
949-
in Map.fromList [ (name, range)
949+
in Map.fromList [ (scopeToPackageName scope, range)
950950
| PackageConstraint
951-
(Q _ name) (PackagePropertyVersion range) <- pcs ]
951+
scope (PackagePropertyVersion range) <- pcs ]
952952

953953
packagePreferences :: PackageName -> PackagePreferences
954954
packagePreferences = interpretPackagesPreference targets defpref prefs

cabal-install/Distribution/Client/Freeze.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ planPackages verbosity comp platform mSandboxPkgInfo freezeFlags
183183

184184
. addConstraints
185185
[ let pkg = pkgSpecifierTarget pkgSpecifier
186-
pc = PackageConstraint (unqualified pkg)
186+
pc = PackageConstraint (scopeToplevel pkg)
187187
(PackagePropertyStanzas stanzas)
188188
in LabeledPackageConstraint pc ConstraintSourceFreeze
189189
| pkgSpecifier <- pkgSpecifiers ]
@@ -251,7 +251,7 @@ freezePackages verbosity globalFlags pkgs = do
251251
(pkgIdToConstraint $ packageId pkg, ConstraintSourceUserConfig userPackageEnvironmentFile)
252252
where
253253
pkgIdToConstraint pkgId =
254-
UserConstraint UserUnqualified (packageName pkgId)
254+
UserConstraint UserToplevel (packageName pkgId)
255255
(PackagePropertyVersion $ thisVersion (packageVersion pkgId))
256256
createPkgEnv config = mempty { pkgEnvSavedConfig = config }
257257
showPkgEnv = BS.Char8.pack . showPackageEnvironment

cabal-install/Distribution/Client/Install.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ planPackages comp platform mSandboxPkgInfo solver
410410
--FIXME: this just applies all flags to all targets which
411411
-- is silly. We should check if the flags are appropriate
412412
[ let pc = PackageConstraint
413-
(unqualified $ pkgSpecifierTarget pkgSpecifier)
413+
(scopeToplevel $ pkgSpecifierTarget pkgSpecifier)
414414
(PackagePropertyFlags flags)
415415
in LabeledPackageConstraint pc ConstraintSourceConfigFlagOrTarget
416416
| let flags = configConfigurationsFlags configFlags
@@ -419,7 +419,7 @@ planPackages comp platform mSandboxPkgInfo solver
419419

420420
. addConstraints
421421
[ let pc = PackageConstraint
422-
(unqualified $ pkgSpecifierTarget pkgSpecifier)
422+
(scopeToplevel $ pkgSpecifierTarget pkgSpecifier)
423423
(PackagePropertyStanzas stanzas)
424424
in LabeledPackageConstraint pc ConstraintSourceConfigFlagOrTarget
425425
| pkgSpecifier <- pkgSpecifiers ]

cabal-install/Distribution/Client/ProjectPlanning.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,7 @@ planPackages comp platform solver SolverSettings{..}
985985
. addConstraints
986986
-- enable stanza constraints where the user asked to enable
987987
[ LabeledPackageConstraint
988-
(PackageConstraint (unqualified pkgname)
988+
(PackageConstraint (scopeToplevel pkgname)
989989
(PackagePropertyStanzas stanzas))
990990
ConstraintSourceConfigFlagOrTarget
991991
| pkg <- localPackages
@@ -1000,7 +1000,7 @@ planPackages comp platform solver SolverSettings{..}
10001000
--TODO: [nice to have] should have checked at some point that the
10011001
-- package in question actually has these flags.
10021002
[ LabeledPackageConstraint
1003-
(PackageConstraint (unqualified pkgname)
1003+
(PackageConstraint (scopeToplevel pkgname)
10041004
(PackagePropertyFlags flags))
10051005
ConstraintSourceConfigFlagOrTarget
10061006
| (pkgname, flags) <- Map.toList solverSettingFlagAssignments ]
@@ -1011,7 +1011,7 @@ planPackages comp platform solver SolverSettings{..}
10111011
-- former we just apply all these flags to all local targets which
10121012
-- is silly. We should check if the flags are appropriate.
10131013
[ LabeledPackageConstraint
1014-
(PackageConstraint (unqualified pkgname)
1014+
(PackageConstraint (scopeToplevel pkgname)
10151015
(PackagePropertyFlags flags))
10161016
ConstraintSourceConfigFlagOrTarget
10171017
| let flags = solverSettingFlagAssignment

cabal-install/Distribution/Client/Targets.hs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -201,13 +201,13 @@ pkgSpecifierConstraints :: Package pkg
201201
pkgSpecifierConstraints (NamedPackage name props) = map toLpc props
202202
where
203203
toLpc prop = LabeledPackageConstraint
204-
(PackageConstraint (unqualified name) prop)
204+
(PackageConstraint (scopeToplevel name) prop)
205205
ConstraintSourceUserTarget
206206
pkgSpecifierConstraints (SpecificSourcePackage pkg) =
207207
[LabeledPackageConstraint pc ConstraintSourceUserTarget]
208208
where
209209
pc = PackageConstraint
210-
(unqualified $ packageName pkg)
210+
(scopeToplevel $ packageName pkg)
211211
(PackagePropertyVersion $ thisVersion (packageVersion pkg))
212212

213213
-- ------------------------------------------------------------
@@ -690,7 +690,7 @@ extraPackageNameEnv names = PackageNameEnv pkgNameLookup
690690
-- command line.
691691
data UserQualifier =
692692
-- | Top-level dependency.
693-
UserUnqualified
693+
UserToplevel
694694

695695
-- | Setup dependency.
696696
| UserSetup PackageName
@@ -702,9 +702,9 @@ data UserQualifier =
702702
instance Binary UserQualifier
703703

704704
fromUserQualifier :: UserQualifier -> Qualifier
705-
fromUserQualifier UserUnqualified = Unqualified
706-
fromUserQualifier (UserSetup name) = Setup name
707-
fromUserQualifier (UserExe name1 name2) = Exe name1 name2
705+
fromUserQualifier UserToplevel = QualToplevel
706+
fromUserQualifier (UserSetup name) = QualSetup name
707+
fromUserQualifier (UserExe name1 name2) = QualExe name1 name2
708708

709709
-- | Version of 'PackageConstraint' that the user can specify on
710710
-- the command line.
@@ -718,7 +718,7 @@ userConstraintPackageName (UserConstraint _ name _) = name
718718

719719
userToPackageConstraint :: UserConstraint -> PackageConstraint
720720
userToPackageConstraint (UserConstraint qual name prop) =
721-
PackageConstraint (Q path name) prop
721+
PackageConstraint (ScopeQualified $ Q path name) prop
722722
where
723723
path = PackagePath DefaultNamespace (fromUserQualifier qual)
724724

@@ -729,8 +729,9 @@ readUserConstraint str =
729729
Just c -> Right c
730730
where
731731
msgCannotParse =
732-
"expected a package name followed by a constraint, which is "
733-
++ "either a version range, 'installed', 'source' or flags"
732+
"expected a (possibly qualified) package name followed by a " ++
733+
"constraint, which is either a version range, 'installed', " ++
734+
"'source', 'test', 'bench', or flags"
734735

735736
instance Text UserConstraint where
736737
disp (UserConstraint qual name prop) =
@@ -740,7 +741,7 @@ instance Text UserConstraint where
740741
parse = do
741742
-- Qualified name
742743
pn <- parse
743-
(qual, name) <- return (UserUnqualified, pn)
744+
(qual, name) <- return (UserToplevel, pn)
744745
+++
745746
do _ <- Parse.string ":setup."
746747
pn2 <- parse

cabal-install/Distribution/Solver/Modular.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import Distribution.Solver.Modular.Solver
3131
( SolverConfig(..), solve )
3232
import Distribution.Solver.Types.LabeledPackageConstraint
3333
import Distribution.Solver.Types.PackageConstraint
34-
import Distribution.Solver.Types.PackagePath
3534
import Distribution.Solver.Types.DependencyResolver
3635
import Distribution.System
3736
( Platform(..) )
@@ -60,4 +59,4 @@ modularResolver sc (Platform arch os) cinfo iidx sidx pkgConfigDB pprefs pcs pns
6059

6160
-- Helper function to extract the PN from a constraint.
6261
pcName :: PackageConstraint -> PN
63-
pcName (PackageConstraint (Q _ pn) _) = pn
62+
pcName (PackageConstraint scope _) = scopeToPackageName scope

cabal-install/Distribution/Solver/Modular/Builder.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,4 +272,4 @@ buildTree idx (IndependentGoals ind) igs =
272272
topLevelGoal qpn = OpenGoal (Simple (Dep False {- not exe -} qpn (Constrained [])) ()) UserGoal
273273

274274
qpns | ind = makeIndependent igs
275-
| otherwise = L.map (Q (PackagePath DefaultNamespace Unqualified)) igs
275+
| otherwise = L.map (Q (PackagePath DefaultNamespace QualToplevel)) igs

cabal-install/Distribution/Solver/Modular/ConfiguredConversion.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ convConfId (PI (Q (PackagePath _ q) pn) (I v loc)) =
5959
case loc of
6060
Inst pi -> Left (PreExistingId sourceId pi)
6161
_otherwise
62-
| Exe _ pn' <- q
62+
| QualExe _ pn' <- q
6363
-- NB: the dependencies of the executable are also
6464
-- qualified. So the way to tell if this is an executable
6565
-- dependency is to make sure the qualifier is pointing

cabal-install/Distribution/Solver/Modular/Dependency.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,9 @@ qualifyDeps QO{..} (Q pp@(PackagePath ns q) pn) = go
244244
goD (Lang lang) _ = Lang lang
245245
goD (Pkg pkn vr) _ = Pkg pkn vr
246246
goD (Dep is_exe dep ci) comp
247-
| is_exe = Dep is_exe (Q (PackagePath ns (Exe pn dep)) dep) (fmap (Q pp) ci)
248-
| qBase dep = Dep is_exe (Q (PackagePath ns (Base pn)) dep) (fmap (Q pp) ci)
249-
| qSetup comp = Dep is_exe (Q (PackagePath ns (Setup pn)) dep) (fmap (Q pp) ci)
247+
| is_exe = Dep is_exe (Q (PackagePath ns (QualExe pn dep)) dep) (fmap (Q pp) ci)
248+
| qBase dep = Dep is_exe (Q (PackagePath ns (QualBase pn)) dep) (fmap (Q pp) ci)
249+
| qSetup comp = Dep is_exe (Q (PackagePath ns (QualSetup pn)) dep) (fmap (Q pp) ci)
250250
| otherwise = Dep is_exe (Q (PackagePath ns inheritedQ) dep) (fmap (Q pp) ci)
251251

252252
-- If P has a setup dependency on Q, and Q has a regular dependency on R, then
@@ -258,10 +258,10 @@ qualifyDeps QO{..} (Q pp@(PackagePath ns q) pn) = go
258258
-- a detailed discussion.
259259
inheritedQ :: Qualifier
260260
inheritedQ = case q of
261-
Setup _ -> q
262-
Exe _ _ -> q
263-
Unqualified -> q
264-
Base _ -> Unqualified
261+
QualSetup _ -> q
262+
QualExe _ _ -> q
263+
QualToplevel -> q
264+
QualBase _ -> QualToplevel
265265

266266
-- Should we qualify this goal with the 'Base' package path?
267267
qBase :: PN -> Bool

cabal-install/Distribution/Solver/Modular/Package.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,22 +88,22 @@ instI _ = False
8888
primaryPP :: PackagePath -> Bool
8989
primaryPP (PackagePath _ns q) = go q
9090
where
91-
go Unqualified = True
92-
go (Base _) = True
93-
go (Setup _) = False
94-
go (Exe _ _) = False
91+
go QualToplevel = True
92+
go (QualBase _) = True
93+
go (QualSetup _) = False
94+
go (QualExe _ _) = False
9595

9696
-- | Is the package a dependency of a setup script. This is used to
9797
-- establish whether or not certain constraints should apply to this
9898
-- dependency (grep 'setupPP' to see the use sites).
9999
--
100100
setupPP :: PackagePath -> Bool
101-
setupPP (PackagePath _ns (Setup _)) = True
101+
setupPP (PackagePath _ns (QualSetup _)) = True
102102
setupPP (PackagePath _ns _) = False
103103

104104
-- | Create artificial parents for each of the package names, making
105105
-- them all independent.
106106
makeIndependent :: [PN] -> [QPN]
107107
makeIndependent ps = [ Q pp pn | (pn, i) <- zip ps [0::Int ..]
108-
, let pp = PackagePath (Independent i) Unqualified
108+
, let pp = PackagePath (Independent i) QualToplevel
109109
]

cabal-install/Distribution/Solver/Modular/Preference.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@ deferSetupChoices = trav go
348348
go x = x
349349

350350
noSetup :: Goal QPN -> Bool
351-
noSetup (Goal (P (Q (PackagePath _ns (Setup _)) _)) _) = False
352-
noSetup _ = True
351+
noSetup (Goal (P (Q (PackagePath _ns (QualSetup _)) _)) _) = False
352+
noSetup _ = True
353353

354354
-- | Transformation that tries to avoid making weak flag choices early.
355355
-- Weak flags are trivial flags (not influencing dependencies) or such

cabal-install/Distribution/Solver/Modular/Solver.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,5 +231,5 @@ _removeGR = trav go
231231

232232
dummy :: QGoalReason
233233
dummy = PDependency
234-
$ PI (Q (PackagePath DefaultNamespace Unqualified) (mkPackageName "$"))
234+
$ PI (Q (PackagePath DefaultNamespace QualToplevel) (mkPackageName "$"))
235235
(I (mkVersion [1]) InRepo)

0 commit comments

Comments
 (0)