@@ -54,6 +54,7 @@ module Distribution.Client.Dependency (
54
54
setStrongFlags ,
55
55
setMaxBackjumps ,
56
56
setEnableBackjumping ,
57
+ setGoalOrder ,
57
58
addSourcePackages ,
58
59
hideInstalledPackagesSpecificByUnitId ,
59
60
hideInstalledPackagesSpecificBySourcePackageId ,
@@ -119,6 +120,7 @@ import Distribution.Solver.Types.InstalledPreference
119
120
import Distribution.Solver.Types.LabeledPackageConstraint
120
121
import Distribution.Solver.Types.OptionalStanza
121
122
import Distribution.Solver.Types.PackageConstraint
123
+ import Distribution.Solver.Types.PackagePath
122
124
import Distribution.Solver.Types.PackagePreferences
123
125
import qualified Distribution.Solver.Types.PackageIndex as PackageIndex
124
126
import Distribution.Solver.Types.PkgConfigDb (PkgConfigDb )
@@ -128,6 +130,7 @@ import Distribution.Solver.Types.Settings
128
130
import Distribution.Solver.Types.SolverId
129
131
import Distribution.Solver.Types.SolverPackage
130
132
import Distribution.Solver.Types.SourcePackage
133
+ import Distribution.Solver.Types.Variable
131
134
132
135
import Data.List
133
136
( foldl' , sort , sortBy , nubBy , maximumBy , intercalate , nub )
@@ -161,7 +164,8 @@ data DepResolverParams = DepResolverParams {
161
164
depResolverShadowPkgs :: ShadowPkgs ,
162
165
depResolverStrongFlags :: StrongFlags ,
163
166
depResolverMaxBackjumps :: Maybe Int ,
164
- depResolverEnableBackjumping :: EnableBackjumping
167
+ depResolverEnableBackjumping :: EnableBackjumping ,
168
+ depResolverGoalOrder :: Maybe (Variable QPN -> Variable QPN -> Ordering )
165
169
}
166
170
167
171
showDepResolverParams :: DepResolverParams -> String
@@ -233,7 +237,8 @@ basicDepResolverParams installedPkgIndex sourcePkgIndex =
233
237
depResolverShadowPkgs = ShadowPkgs False ,
234
238
depResolverStrongFlags = StrongFlags False ,
235
239
depResolverMaxBackjumps = Nothing ,
236
- depResolverEnableBackjumping = EnableBackjumping True
240
+ depResolverEnableBackjumping = EnableBackjumping True ,
241
+ depResolverGoalOrder = Nothing
237
242
}
238
243
239
244
addTargets :: [PackageName ]
@@ -308,6 +313,14 @@ setEnableBackjumping b params =
308
313
depResolverEnableBackjumping = b
309
314
}
310
315
316
+ setGoalOrder :: Maybe (Variable QPN -> Variable QPN -> Ordering )
317
+ -> DepResolverParams
318
+ -> DepResolverParams
319
+ setGoalOrder order params =
320
+ params {
321
+ depResolverGoalOrder = order
322
+ }
323
+
311
324
-- | Some packages are specific to a given compiler version and should never be
312
325
-- upgraded.
313
326
dontUpgradeNonUpgradeablePackages :: DepResolverParams -> DepResolverParams
@@ -607,7 +620,7 @@ resolveDependencies platform comp pkgConfigDB solver params =
607
620
Step (showDepResolverParams finalparams)
608
621
$ fmap (validateSolverResult platform comp indGoals)
609
622
$ runSolver solver (SolverConfig reorderGoals indGoals noReinstalls
610
- shadowing strFlags maxBkjumps enableBj)
623
+ shadowing strFlags maxBkjumps enableBj order )
611
624
platform comp installedPkgIndex sourcePkgIndex
612
625
pkgConfigDB preferences constraints targets
613
626
where
@@ -623,7 +636,8 @@ resolveDependencies platform comp pkgConfigDB solver params =
623
636
shadowing
624
637
strFlags
625
638
maxBkjumps
626
- enableBj) = dontUpgradeNonUpgradeablePackages
639
+ enableBj
640
+ order) = dontUpgradeNonUpgradeablePackages
627
641
-- TODO:
628
642
-- The modular solver can properly deal with broken
629
643
-- packages and won't select them. So the
@@ -858,7 +872,7 @@ resolveWithoutDependencies :: DepResolverParams
858
872
resolveWithoutDependencies (DepResolverParams targets constraints
859
873
prefs defpref installedPkgIndex sourcePkgIndex
860
874
_reorderGoals _indGoals _avoidReinstalls
861
- _shadowing _strFlags _maxBjumps _enableBj) =
875
+ _shadowing _strFlags _maxBjumps _enableBj _order ) =
862
876
collectEithers (map selectPackage targets)
863
877
where
864
878
selectPackage :: PackageName -> Either ResolveNoDepsError UnresolvedSourcePackage
0 commit comments