Automatic dependency resolution is one of the most useful featuresprovided by emerge
.
Dependency means say component A is dependent on component B. If component B changes, then A should change accordingly. Here, a component can be a class, a function, an interface, a method or even a field. Dependencies in DBMS is a relation between two or more attributes. It has the following types in DBMS − Functional Dependency; Fully-Functional Dependency. Dependencies: Restrict which artifacts are passed to a specific job by providing a list of jobs to fetch artifacts from. Environment: Name of an environment to which the job deploys. Also available: environment:name, environment:url, environment:onstop, environment:autostopin, and environment:action. Except: Limit when jobs are not created. Overview of Schema Object Dependencies. Some types of schema objects can reference other objects in their definitions. For example, a view is defined by a query that references tables or other views, and the body of a subprogram can include SQL statements that reference other objects. To specify the packages your project depends on, you must list them as 'dependencies' or 'devDependencies' in your package's package.json file. When you (or another user) run npm install, npm will download dependencies and devDependencies that are listed in package.json that meet the semantic version requirements listed for each.
Dependency types
CHOST vs CBUILD
In order to avoid ambiguity, we use the following terms to indicate differentsystems when cross-compiling:
- CBUILD
- The system on which the build is performed. Dependencies that apply to the CBUILD system can be executed during build time. When cross-compiling, they are not installed into the system being built.
- CHOST
- The system on which the package is going to be executed. When cross-compiling, dependencies applying to CHOST can not be executed.
When not cross-compiling, CBUILD and CHOST have the same value and both classesof dependencies are merged.
Build Dependencies
Build dependencies are used to specify any dependencies that are requiredto unpack, patch, compile, test or install the package (but seeImplicit System Dependency forexemptions).
Starting with EAPI 7, build dependencies are split into two variables:BDEPEND
and DEPEND
. BDEPEND
specifies dependenciesapplicable to CBUILD, i.e. programs that need to be executed during the build,e.g. virtual/pkgconfig
. DEPEND
specifies dependencies for CHOST,i.e. packages that need to be found on built system, e.g. libraries and headers.
In earlier EAPIs, all build dependencies are placed in DEPEND
.
Runtime Dependencies
The RDEPEND
ebuild variable should specify any dependencies which arerequired at runtime. This includes libraries (when dynamically linked), any datapackages and (for interpreted languages) the relevant interpreter.
Note that when installing from a binary package, only RDEPEND
will bechecked. It is therefore necessary to include items even if they are also listedin DEPEND
.
Items which are in RDEPEND
but not DEPEND
could in theory be mergedafter the target package. Portage does not currently do this.
Post Dependencies
The PDEPEND
variable specifies runtime dependencies that do not strictlyrequire being satisfied immediately. They can be merged afterthe package. This variable is used purely to resolve circular dependencies,while in general case RDEPEND
should be used instead.
Dependency Syntax
Basic Dependency Syntax
A basic DEPEND
specification might look like the following:
Each package dependency specification is the full category and name ofa package. Dependency specifications are separated by arbitrary whitespace —convention is to have one specification per line for readability purposes.When specifying names, the category part should be treated as mandatory. Windows 10 threshold 1 iso download.
Version Dependencies
Sometimes a particular version of a package is needed. Where this is known, itshould be specified. A simple example:
This states that at least version 0.9.7d of openssl
is required.
Version Specifiers
Available version specifiers are:
Specifier | Meaning |
---|---|
>=app-misc/foo-1.23 | Version 1.23 or later is required. |
>app-misc/foo-1.23 | A version strictly later than 1.23 is required. |
~app-misc/foo-1.23 | Version 1.23 (or any 1.23-r* ) is required. |
=app-misc/foo-1.23 | Exactly version 1.23 is required. If at all possible, use the ~ form to simplify revision bumps. |
<=app-misc/foo-1.23 | Version 1.23 or older is required. |
<app-misc/foo-1.23 | A version strictly before 1.23 is required. |
Ranged Dependencies
To specify 'version 2.x (not 1.x or 3.x)' of a package, it is necessary to usethe asterisk postfix. This is most commonly seen in situations like:
Note that the equals sign is mandatory, and that there is no dot before theasterisk. Also note that when selecting all versions in a specificSLOT
, SLOT
dependencies should be used (see below).
Blockers
When two packages (package slots, versions) can not be installedsimultaneously, blockers can be used to expose such a conflictto the package manager.
There are two kinds of blockers: weak blockers and strongblockers.
A weak blocker is defined using the following syntax:
The package manager will try to resolve this conflict automatically.The package blocked by a weak blocker can be uninstalled afterinstalling the package blocking it. However, it exempts the commonfiles from file collision checks. Weak blockers are usually usedto solve file collisions between packages and are meaningful onlyin RDEPEND
.
More specifically, installation of the newer package may overwrite anycolliding files that belong to the older package that is explicitly blocked.When such file collisions occur, the colliding files cease to belong to theolder package, and they remain installed after the older package is eventuallyuninstalled. The older package is uninstalled only after any newer blockingpackages have been merged on top of it.
DEPEND
do not work correctly.While Portage seemingly queues the package for removal, it does notexempt their contents from file collision checks. Always include yourweak blockers in RDEPEND
!If it is strictly necessary to resolve the blocker before the packageis built (installed), a strong blocker must be used instead. In this case,temporary simultaneous installation of the conflicting packages is not allowed.Strong blockers are expressed using the following syntax:
Strong blockers apply accordingly to the dependency type defining them.Blockers defined in RDEPEND
are enforced as long as the packageis installed (but do not prevent building binary packages). Blockersdefined purely in DEPEND
are enforced only for buildingthe package from source, and may not apply once the package is installedor when it is installed from a binary package.
Specific versions can also be blocked:
Blockers can be optional based upon USE
flags as per normaldependencies.
Blockers added to older ebuilds should not be expected to be retroactive. Ifthe user already has the ebuild installed, any changes to the ebuild should notbe expected to make any difference. This means that you should add theblockers to whichever ebuild is the newest (even if it means that logically itwould seem backwards). For example, certain versions of portage don't likesome versions of bash, but the blocker was put into bash because that was thenewer package that caused the issues.
SLOT Dependencies
To depend on a specific SLOT
, :SLOT
should be appended tothe package name, where 'SLOT' is the SLOT
of the package wanted:
To depend on a specific version or version-range within a SLOT we use:
Slot Operators
In EAPI=5
and higher, you can use slot operators appended to the packagename to declare whether or not your package should be rebuilt after the versionssatisfying its runtime dependencies are updated to versions with a different slotor sub-slot:
:=
means that any slot is acceptable, and that your package should be rebuilt if the version best matching the runtime dependency is updated to a version with a different slot or subslot;:*
means that any slot is acceptable, and explicitly declares that changes in the slot or sub-slot can be ignored;:SLOT=
means that only the 'SLOT' slot is acceptable, and that your package should be rebuilt if the version matching the runtime dependency is updated to another version with this slot but with a different subslot;:SLOT
means that only the 'SLOT' slot is acceptable, and that changes in the sub-slot can be ignored (like in previous EAPIs).:SLOT/SUBSLOT
means a dependency on a specific slot and sub-slot pair, which can be useful for packages installing pre-built binaries that require a library with a particular soname version corresponding to the sub-slot.
For example:
USE-Conditional Dependencies
To depend upon a certain package if and only if a given USE
flag is set:
It is also possible to depend upon a certain package if a given USE
flag isnot set:
This should not be used for disabling a certain USE
flag on a givenarchitecture. In order to do this, the architecture team should add the USE
flag to their use.mask
file in the profiles/arch
directory of the Gentoo repository.
This can be nested:
Any of Many Dependencies
To depend on either foo
or bar
:
To depend on either foo
or bar
if the baz
USE
flag is set:
Any of Many Versus USE
Say fnord
can be built against either foo
or bar
. Then a USE
flag is not necessary if and only if all of the following hold:
fnord
is merged on a system which hasfoo
and notbar
installed.foo
is then unmerged, andbar
is installed.fnord
must continue to work correctly.- A binary package of
fnord
made on a system withfoo
and notbar
can be taken and installed on a system withbar
and notfoo
.
Built with USE Dependencies
Available specifiers are:
Specifier | Meaning |
---|---|
app-misc/foo[bar] | foo must have bar enabled. |
app-misc/foo[bar,baz] | foo must have both bar and baz enabled. |
app-misc/foo[-bar,baz] | foo must have bar disabled and baz enabled. |
There are also shortcuts for conditional situations:
Compact form | Equivalent expanded form |
---|---|
app-misc/foo[bar?] | bar? ( app-misc/foo[bar] ) !bar? ( app-misc/foo ) |
app-misc/foo[!bar?] | bar? ( app-misc/foo ) !bar? ( app-misc/foo[-bar] ) |
app-misc/foo[bar=] | bar? ( app-misc/foo[bar] ) !bar? ( app-misc/foo[-bar] ) |
app-misc/foo[!bar=] | bar? ( app-misc/foo[-bar] ) !bar? ( app-misc/foo[bar] ) |
Use dependency defaults
If a dependency is introducing or removing a USE
flag in a new packageversion, a (+)
or (-)
may be added to the use-dependencyspecification to define a default value in case the flag does not exist in thetarget package. The (+)
indicates that the missing flag is assumed to beenabled, (-)
the opposite.
For example, the following will treat all boost
versions without thethreads
flag as having it enabled, and all gcc
versions withoutthe openmp
as having it disabled:
Tips for Checking Dependencies
It is important to ensure that all the dependencies are complete for yourpackage:
- Look at installed binaries/libraries
- Use a tool like
scanelf -n
(from app-misc/pax-utils) orobjdump -p
(from sys-devel/binutils) to listDT_NEEDED
entries - Look in
configure.ac
- Look for checks for packages in here. Things to look out for are pkg-config checks or
AM_*
functions that check for a specific version. - Look at included
.spec
files - A good indication of dependencies is to look at the included
.spec
files for relevant deps. However, do not trust them to be the definitive complete list of dependencies. - Look at the application/library website
- Check the application website for possible dependencies that they suggest are needed
- Read the
README
andINSTALL
for the package - They usually also contain useful information about building and installing packages
- Remember non-binary dependencies such as pkg-config, doc generation programs, etc.
- Usually the build process requires some dependencies such as intltool, libtool, pkg-config, doxygen, scrollkeeper, gtk-doc, etc. Make sure those are clearly stated.
Implicit System Dependency
All packages have an implicit compile-time and runtime dependency upon theentire @system
set. It is therefore not necessary, nor advisable, tospecify dependencies upon toolchain packages like gcc
, libc
andso on, except where specific versions or packages (for example, glibc
over uclibc
) are required. Note that this rule also needs considerationfor packages like flex
, zlib
and libtool
, which aren't inthe @system
set for every profile. For example, the embedded profiledoesn't have zlib
in @system
, the libtool
ABI mightchange and break building order and flex
might get removed from the@system
set in future.
However, packages which are included in the @system
set, or aredependencies of @system
set packages, should generally includea complete dependency list (excluding bootstrap packages). This makesemerge -e @system
possible when installing from a stage 1 or stage 2tarball.
Test Dependencies
Packages often have optional dependencies that are needed only when runningtests. These should be specified in DEPEND behind a USE flag. Often, the'test' USE flag is used for this purpose.
Since testing will likely fail when test dependencies are not installed, thetest phase should be disabled in this case. This may be accomplished via USEconditionals in the RESTRICT variable.
If other optional features must be enabled/disabled when testing, REQUIRED_USEmay be set to express this.
Circular Dependencies
Circular dependencies occur if one or more of package's (possibly indirect)dependencies depend on the package itself. This creates a dependency cycle whereeach of the packages must technically be installed before the other.For example, if package A depends on B, B depends on C and C depends on A, thenthe package manager cannot install A before C, and C before A.
There are three kinds of circular dependencies:
- Circular dependencies that occur if only one of the packages strictly needs to be installed before the other. For example,
dev-python/certifi
strictly requiresdev-python/setuptools
to build but the latter package requires the former for some runtime functionality. As a result,dev-python/certifi
can be installed later than the other package.PDEPEND
is used to express this and automatically resolve the circular dependency. - Circular dependencies that occur if the cycle applies only to some combination of USE flags on one of the packages. For example, running tests in
dev-python/setuptools
requires a number of packages which requiredev-python/setuptools
to be installed first. This kind of circular dependency can be resolved by the user by adjusting USE flags on one of the packages, e.g. by disabling tests ondev-python/setuptools
, and reenabling them once the dependency is initially installed. - Circular dependencies that cannot be resolved using the regular means. For example,
dev-util/cmake
used to depend ondev-libs/jsoncpp
, while the latter package used the former to build. Resolving this kind of dependency usually requires bundling one of the dependencies conditionally, or providing an alternate bootstrap path.
English[edit]
Etymology[edit]
dependent + -cy
Pronunciation[edit]
- (UK)IPA(key): /dɪˈpɛndənsi/
Noun[edit]
dependency (countable and uncountable, pluraldependencies)
- A state of dependence; a refusal to exercise initiative.
- Frank's sullen dependency was driving his father nuts.
- Something dependent on, or subordinate to, something else:
- In the United States' governmental structure, the military is conceived as a dependency under the executive branch.
- A colony, or a territorysubject to rule by an externalpower.
- Synonyms:colony, protectorate, province, dominion
- A dependence on a habit-formingsubstance such as a drug or alcohol.
- Synonym:addiction
- (computing) Reliance on the functionality provided by some other, externalcomponent.
- This library has dependencies on a lot of other libraries. We have to compile all of those other libraries first.
- (computing) An external component whose functionality is relied on.
- One of this library's dependencies is very finicky. It can be hard to get it to compile on some systems.
Derived terms[edit]
Related terms[edit]
- dependee, depender
Translations[edit]
|
|
Dependencies C++
Dependencies Vs Devdependencies
|
|
|
|
|
|
Spring Boot Dependencies
|
|