Dpkg::Deps - parse and manipulate dependencies of Debian packages
The Dpkg::Deps module provides one generic Dpkg::Deps::parse() function
to turn a dependency line in a set of Dpkg::Deps::{Simple,AND,OR,Union}
objects depending on the case.
It also provides some constants:
- @pkg_dep_fields
-
List of fields that contains dependency-like information in a binary
Debian package. The fields that express real dependencies are sorted from
the stronger to the weaker.
- @src_dep_fields
-
List of fields that contains dependencies-like information in a binary
Debian package.
- %dep_field_type
-
Associate to each field a type, either "normal" for a real dependency field
(Pre-Depends, Depends, ...) or "union" for other relation fields sharing
the same syntax (Conflicts, Breaks, etc.).
- Dpkg::Deps::arch_is_superset(\@p, \@q)
-
Returns true if the arch list @p is a superset of arch list @q.
The arguments can also be undef in case there's no explicit architecture
restriction.
- Dpkg::Deps::version_implies($rel_p, $v_p, $rel_q, $v_q)
-
($rel_p, $v_p) and ($rel_q, $v_q) express two dependencies as (relation,
version). The relation variable can have the following values: '=', '<<',
'<=', '>=', '>>'.
This functions returns 1 if the "p" dependency implies the "q"
dependency. It returns 0 if the "p" dependency implies that "q" is
not satisfied. It returns undef when there's no implication.
- Dpkg::Deps::parse($line, %options)
-
This function parse the dependency line and returns an object, either a
Dpkg::Deps::AND or a Dpkg::Deps::Union. Various options can alter the
behaviour of that function.
- use_arch (defaults to 1)
-
Take into account the architecture restriction part of the dependencies.
Set to 0 to completely ignore that information.
- host_arch (defaults to the current architecture)
-
Define the host architecture. Needed only if the reduce_arch option is
set to 1. By default it uses Dpkg::Arch::get_host_arch() to identify
the proper architecture.
- reduce_arch (defaults to 0)
-
If set to 1, ignore dependencies that do not concern the current host
architecture. This implicitely strips off the architecture restriction
list so that the resulting dependencies are directly applicable to the
current architecture.
- union (defaults to 0)
-
If set to 1, returns a Dpkg::Deps::Union instead of a Dpkg::Deps::AND. Use
this when parsing non-dependency fields like Conflicts (see
%dep_field_type).
- Dpkg::Deps::compare($a, $b)
-
This functions is used to order AND and Union dependencies prior to
dumping.
There are several kind of dependencies. A Dpkg::Deps::Simple dependency
represents a single dependency statement (it relates to one package only).
Dpkg::Deps::Multiple dependencies are built on top of this object
and combine several dependencies in a different manners. Dpkg::Deps::AND
represents the logical "AND" between dependencies while Dpkg::Deps::OR
represents the logical "OR". Dpkg::Deps::Multiple objects can contain
Dpkg::Deps::Simple object as well as other Dpkg::Deps::Multiple objects.
In practice, the code is only meant to handle the realistic cases which,
given Debian's dependencies structure, imply those restrictions: AND can
contain Simple or OR objects, OR can only contain Simple objects.
Dpkg::Deps::KnowFacts is a special object that is used while evaluating
dependencies and while trying to simplify them. It represents a set of
installed packages along with the virtual packages that they might
provide.
- $dep->is_empty()
-
Returns true if the dependency is empty and doesn't contain any useful
information. This is true when a Dpkg::Deps::Simple object has not yet
been initialized or when a (descendant of) Dpkg::Deps::Multiple contains
an empty list of dependencies.
- $dep->get_deps()
-
Return a list of sub-dependencies. For Dpkg::Deps::Simple it returns
itself.
- $dep->dump()
-
Return a string representing the dependency.
- $dep->implies($other_dep)
-
Returns 1 when $dep implies $other_dep. Returns 0 when $dep implies
NOT($other_dep). Returns undef when there's no implication. $dep and
$other_dep do not need to be of the same type.
- $dep->sort()
-
Sort alphabetically the internal list of dependencies. It's a no-op for
Dpkg::Deps::Simple objects.
- $dep->arch_is_concerned($arch)
-
Returns true if the dependency applies to the indicated architecture. For
multiple dependencies, it returns true if at least one of the
sub-dependencies apply to this architecture.
- $dep->reduce_arch($arch)
-
Simplify the dependency to contain only information relevant to the given
architecture. A Dpkg::Deps::Simple object can be left empty after this
operation. For Dpkg::Deps::Multiple objects, the non-relevant
sub-dependencies are simply removed.
This trims off the architecture restriction list of Dpkg::Deps::Simple
objects.
- $dep->get_evaluation($facts)
-
Evaluates the dependency given a list of installed packages and a list of
virtual packages provided. Those lists are part of the
Dpkg::Deps::KnownFacts object given as parameters.
Returns 1 when it's true, 0 when it's false, undef when some information
is lacking to conclude.
- $dep->simplify_deps($facts, @assumed_deps)
-
Simplify the dependency as much as possible given the list of facts (see
object Dpkg::Deps::KnownFacts) and a list of other dependencies that we
know to be true.
Such an object has four interesting properties:
- package
-
The package name (can be undef if the dependency has not been initialized
or if the simplification of the dependency lead to its removal).
- relation
-
The relational operator: "=", "<<", "<=", ">=" or ">>". It can be
undefined if the dependency had no version restriction. In that case the
following field is also undefined.
- version
-
The version.
- arches
-
The list of architectures where this dependency is applicable. It's
undefined when there's no restriction, otherwise it's an
array ref. It can contain an exclusion list, in that case each
architecture is prefixed with an exclamation mark.
- $simple_dep->parse("dpkg-dev (>= 1.14.8) [!hurd-i386]")
-
Parse the dependency and modify internal properties to match the parsed
dependency.
- $simple_dep->merge_union($other_dep)
-
Returns true if $simple_dep could be modified to represent the union of
both dependencies. Otherwise returns false.
This the base class for Dpkg::Deps::{AND,OR,Union}. It contains the
- $mul->add($dep)
-
Add a new dependency object at the end of the list.
This object represents a list of dependencies who must be met at the same
time.
- $and->dump()
-
The dump method uses ", " to join the list of sub-dependencies.
This object represents a list of dependencies of which only one must be met
for the dependency to be true.
- $or->dump()
-
The dump method uses " | " to join the list of sub-dependencies.
This object represents a list of relationships.
- $union->dump()
-
The dump method uses ", " to join the list of relationships.
- $union->implies($other_dep)
=item $union->get_evaluation($other_dep)
-
Those methods are not meaningful for this object and always return undef.
- $union->simplify_deps($facts)
-
The simplication is done to generate an union of all the relationships.
It uses $simple_dep->merge_union($other_dep) to get the its job done.
This object represents a list of installed packages and a list of virtual
packages provided (by the set of installed packages).
- my $facts = Dpkg::Deps::KnownFacts->new();
-
Create a new object.
- $facts->add_installed_package($package, $version)
-
Record that the given version of the package is installed. If $version is
undefined we know that the package is installed but we don't know which
version it is.
- $facts->add_provided_package($virtual, $relation, $version, $by)
-
Record that the "$by" package provides the $virtual package. $relation
and $version correspond to the associated relation given in the Provides
field. This might be used in the future for versioned provides.
- my ($check, $param) = $facts->check_package($package)
-
$check is one when the package is found. For a real package, $param
contains the version. For a virtual package, $param contains an array
reference containing the list of packages that provide it (each package is
listed as [ $provider, $relation, $version ]).