| <chapter id='dependency-resolution-package-modeling'> |
| <title>Package Modeling</title> |
| |
| <sect1 id='dependency-resolution-package-modeling-constraint-satisfaction'> |
| <title>Constraint Satisfaction</title> |
| <sect2 id='dedependency-resolution-package-modeling-constraint-satisfaction-constraint-types'> |
| <title>Constraint Types</title> |
| <para> |
| Dependency resolution involves satisfaction of |
| many constraints: |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para>Persistent configuration parameters, like those that come from |
| make.profile, make.conf, and the /etc/portage directory.</para> |
| </listitem> |
| <listitem> |
| <para>Current command parameters, which may include options, atoms, or sets.</para> |
| </listitem> |
| <listitem> |
| <para><link linkend='dependency-resolution-package-modeling-constraint-satisfaction-package-dependencies'> |
| Package Dependencies</link></para> |
| </listitem> |
| </itemizedlist> |
| </sect2> |
| |
| <sect2 id='dependency-resolution-package-modeling-constraint-satisfaction-package-dependencies'> |
| <title>Package Dependencies</title> |
| <para> |
| Common types of package dependencies: |
| </para> |
| <itemizedlist> |
| <listitem> |
| <para>Files required for building or installing. Downloads may |
| be necessary to satisfy these.</para> |
| </listitem> |
| <listitem> |
| <para>Other packages required to be installed for |
| buildtime or runtime.</para> |
| </listitem> |
| <listitem> |
| <para>Blockers that prevent conflicting packages from being installed |
| simultaneously.</para> |
| </listitem> |
| </itemizedlist> |
| </sect2> |
| </sect1> |
| |
| <sect1 id='dependency-resolution-package-modeling-conflicts'> |
| <title>Conflicts</title> |
| <sect2 id='dependency-resolution-package-modeling-blocker-conflicts'> |
| <title>Blocker Conflicts</title> |
| <para> |
| If one package blocks another package, the two packages |
| conflict such that they cannot be installed simultaneously. |
| These conflicts are often due to file collisions. In some |
| cases, packages that block each other can be temporarily |
| installed simultaneously. In order to resolve file collisions |
| that occur between two blocking packages that are installed |
| simultaneously, the overlapping files must be removed from |
| the contents list of the package which was installed first. |
| </para> |
| <para> |
| Some cases may exist such that temporary simultaneous installation |
| of blocking packages will cause some sort of problem. However, |
| this type of solution will only be chosen for blockers that can not |
| be satisfied in any other way, such as by <link |
| linkend='dependency-resolution-task-scheduling-conflict-avoidance'> |
| simple adjustment of merge order.</link> In addition, this type of |
| solution will not be chosen if a blocking package will overwrite |
| files belonging to packages from the system set, or packages that are |
| runtime dependencies of Portage itself. These constraints serve to |
| limit the probability that a chosen solution will cause an unforeseen |
| problem. |
| </para> |
| </sect2> |
| <sect2 id='dependency-resolution-package-modeling-slot-conflicts'> |
| <title>Slot Conflicts</title> |
| <para> |
| If two different packages that occupy the same slot are chosen |
| to satisfy dependencies, a slot conflict occurs. The two packages |
| cannot be installed simultaneously and therefore the respective |
| dependencies will not be satisfied simultaneously. |
| </para> |
| </sect2> |
| <sect2 id='dependency-resolution-package-modeling-indirect-conflicts'> |
| <title>Indirect Conflicts</title> |
| <para> |
| If the dependencies of two parent packages cannot be installed |
| simultaneously, it creates an indirect conflict between the parent |
| packages since their respective dependencies cannot be satisfied |
| simultaneously. |
| </para> |
| </sect2> |
| </sect1> |
| |
| <sect1 id='dependency-resolution-package-modeling-dependency-neglection'> |
| <title>Dependency Neglection</title> |
| <para> |
| In order to significantly reduce the resources consumed by |
| the modeling process, the dependencies of |
| installed packages may be neglected. |
| </para> |
| <para> |
| If a more complete dependency calculation is desired, |
| there is a --complete-graph option which will ensure that the |
| dependencies of installed packages are properly considered. |
| </para> |
| </sect1> |
| |
| </chapter> |