A recipe might build successfully even though some of its
build-time dependencies are missing from
DEPENDS
.
Following are the two most common ways in which that can happen:
The build-time dependency just happens to already exist in
the staging sysroot
(STAGING_DIR_HOST
)
by the time the recipe is built.
This situation occurs when the build-time dependency is
built earlier during recipe processing.
The component built by the recipe conditionally enables functionality depending on whether it can find the build-time dependency in the staging sysroot. If the build-time dependency is missing, the corresponding functionality is disabled. This condition is known as a "floating dependency".
Because dealing with the second case is more complex, focus will
be on the first case.
The
build-deps
QA check checks that every library the component linked against is
declared as a build-time dependency.
If that is not the case, then the first situation described in the
previous list exists, and build-deps
reports
a missing build-time dependency.
Another, more manual, way to check a recipe for missing build-time
dependencies of the first type is to build with an empty staging
sysroot.
This method can also find missing build-time dependencies
that are not in the form of libraries, which the
build-deps
QA check is unable to find.
An easy way to empty the staging sysroots is to simply remove
TMPDIR
,
which is usually
${
BUILDDIR
}/tmp
,
as it includes the staging sysroots.
Another, faster method to empty the staging sysroots is to use the
scripts/wipe-sysroot
script,
which removes just the staging sysroots and keeps everything else
in TMPDIR
.
scripts/
directory appears in
PATH
after running the build environment
initialization script (i.e.
oe-init-build-env
or
oe-init-build-env-memres
),
which results in the ability to to run
wipe-sysroot
immediately.