Copyright | (c) David Himmelstrup 2005 Bjorn Bringert 2007 Duncan Coutts 2008 |
---|---|
License | BSD-like |
Maintainer | cabal-devel@gmail.com |
Stability | provisional |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Top level interface to dependency resolution.
Synopsis
- data DepResolverParams
- chooseSolver :: Verbosity -> PreSolver -> CompilerInfo -> IO Solver
- resolveDependencies :: Platform -> CompilerInfo -> PkgConfigDb -> Solver -> DepResolverParams -> Progress String String SolverInstallPlan
- data Progress step fail done
- foldProgress :: (step -> a -> a) -> (fail -> a) -> (done -> a) -> Progress step fail done -> a
- resolveWithoutDependencies :: DepResolverParams -> Either [ResolveNoDepsError] [UnresolvedSourcePackage]
- data PackageProperty
- data PackageConstraint = PackageConstraint ConstraintScope PackageProperty
- scopeToplevel :: PackageName -> ConstraintScope
- data PackagesPreferenceDefault
- data PackagePreference
- basicInstallPolicy :: InstalledPackageIndex -> SourcePackageDb -> [PackageSpecifier UnresolvedSourcePackage] -> DepResolverParams
- standardInstallPolicy :: InstalledPackageIndex -> SourcePackageDb -> [PackageSpecifier UnresolvedSourcePackage] -> DepResolverParams
- data PackageSpecifier pkg
- upgradeDependencies :: DepResolverParams -> DepResolverParams
- reinstallTargets :: DepResolverParams -> DepResolverParams
- addConstraints :: [LabeledPackageConstraint] -> DepResolverParams -> DepResolverParams
- addPreferences :: [PackagePreference] -> DepResolverParams -> DepResolverParams
- setPreferenceDefault :: PackagesPreferenceDefault -> DepResolverParams -> DepResolverParams
- setReorderGoals :: ReorderGoals -> DepResolverParams -> DepResolverParams
- setCountConflicts :: CountConflicts -> DepResolverParams -> DepResolverParams
- setFineGrainedConflicts :: FineGrainedConflicts -> DepResolverParams -> DepResolverParams
- setMinimizeConflictSet :: MinimizeConflictSet -> DepResolverParams -> DepResolverParams
- setIndependentGoals :: IndependentGoals -> DepResolverParams -> DepResolverParams
- setAvoidReinstalls :: AvoidReinstalls -> DepResolverParams -> DepResolverParams
- setShadowPkgs :: ShadowPkgs -> DepResolverParams -> DepResolverParams
- setStrongFlags :: StrongFlags -> DepResolverParams -> DepResolverParams
- setAllowBootLibInstalls :: AllowBootLibInstalls -> DepResolverParams -> DepResolverParams
- setOnlyConstrained :: OnlyConstrained -> DepResolverParams -> DepResolverParams
- setMaxBackjumps :: Maybe Int -> DepResolverParams -> DepResolverParams
- setEnableBackjumping :: EnableBackjumping -> DepResolverParams -> DepResolverParams
- setSolveExecutables :: SolveExecutables -> DepResolverParams -> DepResolverParams
- setGoalOrder :: Maybe (Variable QPN -> Variable QPN -> Ordering) -> DepResolverParams -> DepResolverParams
- setSolverVerbosity :: Verbosity -> DepResolverParams -> DepResolverParams
- removeLowerBounds :: AllowOlder -> DepResolverParams -> DepResolverParams
- removeUpperBounds :: AllowNewer -> DepResolverParams -> DepResolverParams
- addDefaultSetupDependencies :: (UnresolvedSourcePackage -> Maybe [Dependency]) -> DepResolverParams -> DepResolverParams
- addSetupCabalMinVersionConstraint :: Version -> DepResolverParams -> DepResolverParams
- addSetupCabalMaxVersionConstraint :: Version -> DepResolverParams -> DepResolverParams
The main package dependency resolver
data DepResolverParams Source #
The set of parameters to the dependency resolver. These parameters are relatively low level but many kinds of high level policies can be implemented in terms of adjustments to the parameters.
chooseSolver :: Verbosity -> PreSolver -> CompilerInfo -> IO Solver Source #
resolveDependencies :: Platform -> CompilerInfo -> PkgConfigDb -> Solver -> DepResolverParams -> Progress String String SolverInstallPlan Source #
Run the dependency solver.
Since this is potentially an expensive operation, the result is wrapped in a
a Progress
structure that can be unfolded to provide progress information,
logging messages and the final result or an error.
data Progress step fail done #
A type to represent the unfolding of an expensive long running calculation that may fail. We may get intermediate steps before the final result which may be used to indicate progress and/or logging messages.
Instances
Monoid fail => Alternative (Progress step fail) | |
Applicative (Progress step fail) | |
Defined in Distribution.Solver.Types.Progress pure :: a -> Progress step fail a # (<*>) :: Progress step fail (a -> b) -> Progress step fail a -> Progress step fail b # liftA2 :: (a -> b -> c) -> Progress step fail a -> Progress step fail b -> Progress step fail c # (*>) :: Progress step fail a -> Progress step fail b -> Progress step fail b # (<*) :: Progress step fail a -> Progress step fail b -> Progress step fail a # | |
Functor (Progress step fail) | |
Monad (Progress step fail) | |
foldProgress :: (step -> a -> a) -> (fail -> a) -> (done -> a) -> Progress step fail done -> a #
Alternate, simple resolver that does not do dependencies recursively
resolveWithoutDependencies :: DepResolverParams -> Either [ResolveNoDepsError] [UnresolvedSourcePackage] Source #
A simplistic method of resolving a list of target package names to available packages.
Specifically, it does not consider package dependencies at all. Unlike
resolveDependencies
, no attempt is made to ensure that the selected
packages have dependencies that are satisfiable or consistent with
each other.
It is suitable for tasks such as selecting packages to download for user inspection. It is not suitable for selecting packages to install.
Note: if no installed package index is available, it is OK to pass mempty
.
It simply means preferences for installed packages will be ignored.
Constructing resolver policies
data PackageProperty #
A package property is a logical predicate on packages.
PackagePropertyVersion VersionRange | |
PackagePropertyInstalled | |
PackagePropertySource | |
PackagePropertyFlags FlagAssignment | |
PackagePropertyStanzas [OptionalStanza] |
Instances
data PackageConstraint #
A package constraint consists of a scope plus a property that must hold for all packages within that scope.
Instances
Show PackageConstraint | |
Defined in Distribution.Solver.Types.PackageConstraint showsPrec :: Int -> PackageConstraint -> ShowS # show :: PackageConstraint -> String # showList :: [PackageConstraint] -> ShowS # | |
Eq PackageConstraint | |
Defined in Distribution.Solver.Types.PackageConstraint (==) :: PackageConstraint -> PackageConstraint -> Bool # (/=) :: PackageConstraint -> PackageConstraint -> Bool # |
scopeToplevel :: PackageName -> ConstraintScope #
Constructor for a common use case: the constraint applies to the package with the specified name when that package is a top-level dependency in the default namespace.
data PackagesPreferenceDefault Source #
Global policy for all packages to say if we prefer package versions that are already installed locally or if we just prefer the latest available.
PreferAllLatest | Always prefer the latest version irrespective of any existing installed version.
|
PreferAllOldest | Always prefer the oldest version irrespective of any existing installed version or packages explicitly requested.
|
PreferAllInstalled | Always prefer the installed versions over ones that would need to be installed. Secondarily, prefer latest versions (eg the latest installed version or if there are none then the latest source version). |
PreferLatestForSelected | Prefer the latest version for packages that are explicitly requested but prefers the installed version for any other packages.
|
Instances
Show PackagesPreferenceDefault Source # | |
Defined in Distribution.Client.Dependency.Types showsPrec :: Int -> PackagesPreferenceDefault -> ShowS # show :: PackagesPreferenceDefault -> String # showList :: [PackagesPreferenceDefault] -> ShowS # |
data PackagePreference Source #
A package selection preference for a particular package.
Preferences are soft constraints that the dependency resolver should try to respect where possible. It is not specified if preferences on some packages are more important than others.
PackageVersionPreference PackageName VersionRange | A suggested constraint on the version number. |
PackageInstalledPreference PackageName InstalledPreference | If we prefer versions of packages that are already installed. |
PackageStanzasPreference PackageName [OptionalStanza] | If we would prefer to enable these optional stanzas (i.e. test suites and/or benchmarks) |
Standard policy
basicInstallPolicy :: InstalledPackageIndex -> SourcePackageDb -> [PackageSpecifier UnresolvedSourcePackage] -> DepResolverParams Source #
A basic solver policy on which all others are built.
standardInstallPolicy :: InstalledPackageIndex -> SourcePackageDb -> [PackageSpecifier UnresolvedSourcePackage] -> DepResolverParams Source #
The policy used by all the standard commands, install, fetch, freeze etc (but not the v2-build and related commands).
It extends the basicInstallPolicy
with a policy on setup deps.
data PackageSpecifier pkg Source #
A fully or partially resolved reference to a package.
NamedPackage PackageName [PackageProperty] | A partially specified reference to a package (either source or installed). It is specified by package name and optionally some required properties. Use a dependency resolver to pick a specific package satisfying these properties. |
SpecificSourcePackage pkg | A fully specified source package. |
Instances
Extra policy options
Policy utils
setPreferenceDefault :: PackagesPreferenceDefault -> DepResolverParams -> DepResolverParams Source #
setGoalOrder :: Maybe (Variable QPN -> Variable QPN -> Ordering) -> DepResolverParams -> DepResolverParams Source #
removeLowerBounds :: AllowOlder -> DepResolverParams -> DepResolverParams Source #
Dual of removeUpperBounds
removeUpperBounds :: AllowNewer -> DepResolverParams -> DepResolverParams Source #
Remove upper bounds in dependencies using the policy specified by the
AllowNewer
argument (allsomenone).
Note: It's important to apply removeUpperBounds
after
addSourcePackages
. Otherwise, the packages inserted by
addSourcePackages
won't have upper bounds in dependencies relaxed.
addDefaultSetupDependencies :: (UnresolvedSourcePackage -> Maybe [Dependency]) -> DepResolverParams -> DepResolverParams Source #
Supply defaults for packages without explicit Setup dependencies
Note: It's important to apply addDefaultSetupDepends
after
addSourcePackages
. Otherwise, the packages inserted by
addSourcePackages
won't have upper bounds in dependencies relaxed.
addSetupCabalMinVersionConstraint :: Version -> DepResolverParams -> DepResolverParams Source #
If a package has a custom setup then we need to add a setup-depends on Cabal.
addSetupCabalMaxVersionConstraint :: Version -> DepResolverParams -> DepResolverParams Source #
Variant of addSetupCabalMinVersionConstraint
which sets an
upper bound on setup.Cabal
labeled with ConstraintSetupCabalMaxVersion
.