rpm 4.12 and weak dependencies

Jerry James loganjerry at gmail.com
Thu Oct 9 15:29:51 UTC 2014

On Thu, Oct 9, 2014 at 1:48 AM, Jan Zelený <jzeleny at redhat.com> wrote:
> Good idea! Thanks and done ...

In addition, http://rpm.org/wiki/PackagerDocs/Dependencies terminates
rather abruptly, with "or B Supplements".  That should at least be "or
B Supplements A."  Actually, there are a few other wording mistakes in
that section; e.g., "They come *it* two different levels...".  Also
some text carries ambiguous meanings; e.g., what exactly does "fulfill
them" mean?  May I suggest the following text for the "Weak
dependencies" section?

In addition to the strong dependencies created by Requires, there are
4 dependency types that are ignored by rpm itself. Their purpose is to
be used by dependency solvers to make choices about what packages to
install. They come in two levels of strength:

- Weak: The dependency solver shall attempt to process the dependency
as though it were strong.  If an error or warning would result, the
dependency is instead ignored.
- Very weak: The dependency solver shall ignore the dependency.
However, the dependency may be used to display matching packages to
the user as an option.

The dependency solver may offer to treat both weak and very weak
dependencies as weak, or it may offer to treat both weak and very weak
dependencies as very weak.

There are two dependency types at each level of strength.  One is a
forward relation, similar to Requires; the other is a reverse
relation.  The reverse relation indicates that the target package has
additional functionality or capabilities when the declaring package is
also installed.

[Insert existing table here]

So installing a package containing Recommends: foo should cause the
dependency solver to also select a package that is named foo or that
Provides: foo, if one exists and its selection does not lead to
unresolvable dependencies.

On the other hand, if a package that is named foo or that Provides:
foo is selected, and a package bar containing "Supplements: foo"
exists, then bar is also selected as long as doing so does not lead to
unresolvable dependencies.

In other words, if you have packages A and B and you want to declare a
weak relation between them A -> B, you can either declare "Recommends:
B" in A's spec file, or declare "Supplements: A" in B's spec file.

HTH.  Regards,
Jerry James

More information about the devel mailing list