Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Glasgow Haskell Compiler
Packages
Cabal
Commits
95eea01a
Commit
95eea01a
authored
Mar 29, 2011
by
Duncan Coutts
Browse files
Add support for source constraints to the solver
parent
27f9895c
Changes
3
Hide whitespace changes
Inline
Side-by-side
cabal-install/Distribution/Client/Dependency/TopDown.hs
View file @
95eea01a
...
...
@@ -320,6 +320,17 @@ addTopLevelConstraints (PackageConstraintInstalled pkg:deps) cs =
ConflictsWith
conflicts
->
Fail
(
TopLevelInstallConstraintConflict
pkg
conflicts
)
addTopLevelConstraints
(
PackageConstraintSource
pkg
:
deps
)
cs
=
case
addTopLevelSourceConstraint
pkg
cs
of
Satisfiable
cs'
pkgids
->
foldr
(
Step
.
Exclude
)
(
addTopLevelConstraints
deps
cs'
)
pkgids
Unsatisfiable
->
Fail
(
TopLevelInstallConstraintUnsatisfiable
pkg
)
ConflictsWith
conflicts
->
Fail
(
TopLevelInstallConstraintConflict
pkg
conflicts
)
-- | Add exclusion on available packages that cannot be configured.
--
...
...
@@ -675,6 +686,7 @@ addPackageDependencyConstraint pkgid dep@(Dependency pkgname verrange)
constraint
ver
installed
=
ver
`
withinRange
`
verrange
&&
case
installedConstraint
of
InstalledConstraint
->
installed
SourceConstraint
->
not
installed
NoInstalledConstraint
->
True
reason
=
ExcludedByPackageDependency
pkgid
dep
installedConstraint
...
...
@@ -700,6 +712,17 @@ addTopLevelInstalledConstraint pkgname =
reason
=
ExcludedByTopLevelDependency
(
Dependency
pkgname
anyVersion
)
InstalledConstraint
addTopLevelSourceConstraint
::
PackageName
->
Constraints
->
Satisfiable
Constraints
[
PackageId
]
ExclusionReason
addTopLevelSourceConstraint
pkgname
=
Constraints
.
constrain
pkgname
constraint
reason
where
constraint
_ver
installed
=
not
installed
reason
=
ExcludedByTopLevelDependency
(
Dependency
pkgname
anyVersion
)
SourceConstraint
-- ------------------------------------------------------------
-- * Reasons for constraints
-- ------------------------------------------------------------
...
...
cabal-install/Distribution/Client/Dependency/TopDown/Types.hs
View file @
95eea01a
...
...
@@ -70,18 +70,21 @@ instance Package UnconfiguredPackage where
instance
Package
SemiConfiguredPackage
where
packageId
(
SemiConfiguredPackage
p
_
_
)
=
packageId
p
instance
(
Package
installed
,
Package
availabl
e
)
=>
Package
(
InstalledOrSource
installed
availabl
e
)
where
instance
(
Package
installed
,
Package
sourc
e
)
=>
Package
(
InstalledOrSource
installed
sourc
e
)
where
packageId
(
InstalledOnly
p
)
=
packageId
p
packageId
(
SourceOnly
p
)
=
packageId
p
packageId
(
InstalledAndSource
p
_
)
=
packageId
p
-- | We can have constraints on selecting just installed packages.
-- | We can have constraints on selecting just installed or just source
-- packages.
--
-- In particular, installed packages can only depend on other installed
-- packages while packages that are not yet installed but which we plan to
-- install can depend on installed or other not-yet-installed packages.
--
data
InstalledConstraint
=
InstalledConstraint
|
NoInstalledConstraint
deriving
Eq
data
InstalledConstraint
=
NoInstalledConstraint
|
InstalledConstraint
|
SourceConstraint
deriving
(
Eq
,
Show
)
cabal-install/Distribution/Client/Dependency/Types.hs
View file @
95eea01a
...
...
@@ -65,6 +65,7 @@ type DependencyResolver = Platform
data
PackageConstraint
=
PackageConstraintVersion
PackageName
VersionRange
|
PackageConstraintInstalled
PackageName
|
PackageConstraintSource
PackageName
|
PackageConstraintFlags
PackageName
FlagAssignment
deriving
(
Show
,
Eq
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment