@@ -68,6 +68,7 @@ import qualified Distribution.Package as C hiding
68
68
)
69
69
import qualified Distribution.PackageDescription as C
70
70
import qualified Distribution.PackageDescription.Check as C
71
+ import Distribution.Parsec
71
72
import qualified Distribution.Simple.PackageIndex as C.PackageIndex
72
73
import Distribution.Simple.Setup (BooleanFlag (.. ))
73
74
import qualified Distribution.System as C
@@ -80,6 +81,7 @@ import Language.Haskell.Extension (Extension (..), Language (..))
80
81
-- cabal-install
81
82
import Distribution.Client.Dependency
82
83
import qualified Distribution.Client.SolverInstallPlan as CI.SolverInstallPlan
84
+ import Distribution.Client.Targets
83
85
import Distribution.Client.Types
84
86
85
87
import Distribution.Solver.Types.ComponentDeps (ComponentDeps )
@@ -794,6 +796,7 @@ exResolve
794
796
-> SolveExecutables
795
797
-> Maybe (Variable P. QPN -> Variable P. QPN -> Ordering )
796
798
-> [ExConstraint ]
799
+ -> [String ]
797
800
-> [ExPreference ]
798
801
-> C. Verbosity
799
802
-> EnableAllTests
@@ -817,6 +820,7 @@ exResolve
817
820
solveExes
818
821
goalOrder
819
822
constraints
823
+ userConstraints
820
824
prefs
821
825
verbosity
822
826
enableAllTests =
@@ -847,23 +851,24 @@ exResolve
847
851
| otherwise = []
848
852
targets' = fmap (\ p -> NamedPackage (C. mkPackageName p) [] ) targets
849
853
params =
850
- addConstraints (fmap toConstraint constraints) $
851
- addConstraints (fmap toLpc enableTests) $
852
- addPreferences (fmap toPref prefs) $
853
- setCountConflicts countConflicts $
854
- setFineGrainedConflicts fineGrainedConflicts $
855
- setMinimizeConflictSet minimizeConflictSet $
856
- setIndependentGoals indepGoals $
857
- (if asBool prefOldest then setPreferenceDefault PreferAllOldest else id ) $
858
- setReorderGoals reorder $
859
- setMaxBackjumps mbj $
860
- setAllowBootLibInstalls allowBootLibInstalls $
861
- setOnlyConstrained onlyConstrained $
862
- setEnableBackjumping enableBj $
863
- setSolveExecutables solveExes $
864
- setGoalOrder goalOrder $
865
- setSolverVerbosity verbosity $
866
- standardInstallPolicy instIdx avaiIdx targets'
854
+ addConstraints (map parseConstraint userConstraints) $
855
+ addConstraints (fmap toConstraint constraints) $
856
+ addConstraints (fmap toLpc enableTests) $
857
+ addPreferences (fmap toPref prefs) $
858
+ setCountConflicts countConflicts $
859
+ setFineGrainedConflicts fineGrainedConflicts $
860
+ setMinimizeConflictSet minimizeConflictSet $
861
+ setIndependentGoals indepGoals $
862
+ (if asBool prefOldest then setPreferenceDefault PreferAllOldest else id ) $
863
+ setReorderGoals reorder $
864
+ setMaxBackjumps mbj $
865
+ setAllowBootLibInstalls allowBootLibInstalls $
866
+ setOnlyConstrained onlyConstrained $
867
+ setEnableBackjumping enableBj $
868
+ setSolveExecutables solveExes $
869
+ setGoalOrder goalOrder $
870
+ setSolverVerbosity verbosity $
871
+ standardInstallPolicy instIdx avaiIdx targets'
867
872
toLpc pc = LabeledPackageConstraint pc ConstraintSourceUnknown
868
873
869
874
toConstraint (ExVersionConstraint scope v) =
@@ -873,6 +878,12 @@ exResolve
873
878
toConstraint (ExStanzaConstraint scope stanzas) =
874
879
toLpc $ PackageConstraint scope (PackagePropertyStanzas stanzas)
875
880
881
+ parseConstraint :: String -> LabeledPackageConstraint
882
+ parseConstraint str =
883
+ case explicitEitherParsec parsec str of
884
+ Left err -> error (" Bad user constraint: " ++ err)
885
+ Right user_constraint -> toLpc (userToPackageConstraint user_constraint)
886
+
876
887
toPref (ExPkgPref n v) = PackageVersionPreference (C. mkPackageName n) v
877
888
toPref (ExStanzaPref n stanzas) = PackageStanzasPreference (C. mkPackageName n) stanzas
878
889
0 commit comments