summaryrefslogtreecommitdiffstats
path: root/import-layers/yocto-poky/documentation/ref-manual/ref-qa-checks.xml
diff options
context:
space:
mode:
Diffstat (limited to 'import-layers/yocto-poky/documentation/ref-manual/ref-qa-checks.xml')
-rw-r--r--import-layers/yocto-poky/documentation/ref-manual/ref-qa-checks.xml1237
1 files changed, 1237 insertions, 0 deletions
diff --git a/import-layers/yocto-poky/documentation/ref-manual/ref-qa-checks.xml b/import-layers/yocto-poky/documentation/ref-manual/ref-qa-checks.xml
new file mode 100644
index 000000000..4fcf1db61
--- /dev/null
+++ b/import-layers/yocto-poky/documentation/ref-manual/ref-qa-checks.xml
@@ -0,0 +1,1237 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
+[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
+
+<chapter id='ref-qa-checks'>
+<title>QA Error and Warning Messages</title>
+
+<section id='qa-introduction'>
+ <title>Introduction</title>
+
+ <para>
+ When building a recipe, the OpenEmbedded build system performs
+ various QA checks on the output to ensure that common issues are
+ detected and reported.
+ Sometimes when you create a new recipe to build new software,
+ it will build with no problems.
+ When this is not the case, or when you have QA issues building any
+ software, it could take a little time to resolve them.
+ </para>
+
+ <para>
+ While it is tempting to ignore a QA message or even to
+ disable QA checks, it is best to try and resolve any
+ reported QA issues.
+ This chapter provides a list of the QA messages and brief explanations
+ of the issues you could encounter so that you can properly resolve
+ problems.
+ </para>
+
+ <para>
+ The next section provides a list of all QA error and warning
+ messages based on a default configuration.
+ Each entry provides the message or error form along with an
+ explanation.
+ <note>
+ <title>Notes</title>
+ <itemizedlist>
+ <listitem><para>
+ At the end of each message, the name of the associated
+ QA test (as listed in the
+ "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
+ section) appears within square brackets.
+ </para></listitem>
+ <listitem><para>
+ As mentioned, this list of error and warning messages is for
+ QA checks only.
+ The list does not cover all possible build errors or
+ warnings you could encounter.
+ </para></listitem>
+ <listitem><para>
+ Because some QA checks are disabled by default, this list
+ does not include all possible QA check errors and warnings.
+ </para></listitem>
+ </itemizedlist>
+ </note>
+ </para>
+</section>
+
+<section id='qa-errors-and-warnings'>
+ <title>Errors and Warnings</title>
+
+<!--
+This section uses the <para><code> construct to enable permalinks for the
+various QA issue and warning messages. The file templates/qa-code-permalinks.xsl
+is used to locate the construct and generate the permalink. This solution
+leverages the fact that right now this section in the ref-manual is the only
+place is all the YP docs that uses the <para><code> construct. If, in the
+future, that construct were to appear in the ref-manual, a generic permalink
+would be generated for the text between <code></code>. If a better solution
+can be found then it should be implemented. I can't find one at the moment.
+-->
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-libexec'>
+ <code>
+ &lt;packagename&gt;: &lt;path&gt; is using libexec please relocate to &lt;libexecdir&gt; [libexec]
+ </code>
+ </para>
+
+ <para>
+ The specified package contains files in
+ <filename>/usr/libexec</filename> when the distro
+ configuration uses a different path for
+ <filename>&lt;libexecdir&gt;</filename>
+ By default, <filename>&lt;libexecdir&gt;</filename> is
+ <filename>$prefix/libexec</filename>.
+ However, this default can be changed (e.g.
+ <filename>${libdir}</filename>).
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-rpaths'>
+ <code>
+ package &lt;packagename&gt; contains bad RPATH &lt;rpath&gt; in file &lt;file&gt; [rpaths]
+ </code>
+ </para>
+
+ <para>
+ The specified binary produced by the recipe contains dynamic
+ library load paths (rpaths) that contain build system paths
+ such as
+ <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>,
+ which are incorrect for the target and could potentially
+ be a security issue.
+ Check for bad <filename>-rpath</filename> options being
+ passed to the linker in your
+ <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
+ log.
+ Depending on the build system used by the software being
+ built, there might be a configure option to disable rpath
+ usage completely within the build of the software.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-useless-rpaths'>
+ <code>
+ &lt;packagename&gt;: &lt;file&gt; contains probably-redundant RPATH &lt;rpath&gt; [useless-rpaths]
+ </code>
+ </para>
+
+ <para>
+ The specified binary produced by the recipe contains dynamic
+ library load paths (rpaths) that on a standard system are
+ searched by default by the linker (e.g.
+ <filename>/lib</filename> and <filename>/usr/lib</filename>).
+ While these paths will not cause any breakage, they do waste
+ space and are unnecessary.
+ Depending on the build system used by the software being
+ built, there might be a configure option to disable rpath
+ usage completely within the build of the software.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-file-rdeps'>
+ <code>
+ &lt;packagename&gt; requires &lt;files&gt;, but no providers in its RDEPENDS [file-rdeps]
+ </code>
+ </para>
+
+ <para>
+ A file-level dependency has been identified from the
+ specified package on the specified files, but there is
+ no explicit corresponding entry in
+ <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>.
+ If particular files are required at runtime then
+ <filename>RDEPENDS</filename> should be declared in the
+ recipe to ensure the packages providing them are built.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-build-deps'>
+ <code>
+ &lt;packagename1&gt; rdepends on &lt;packagename2&gt;, but it isn't a build dependency? [build-deps]
+ </code>
+ </para>
+
+ <para>
+ A runtime dependency exists between the two specified
+ packages, but there is nothing explicit within the recipe
+ to enable the OpenEmbedded build system to ensure that
+ dependency is satisfied.
+ This condition is usually triggered by an
+ <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
+ value being added at the packaging stage rather than up
+ front, which is usually automatic based on the contents of
+ the package.
+ In most cases, you should change the recipe to add an
+ explicit <filename>RDEPENDS</filename> for the dependency.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-dev-so'>
+ <code>
+ non -dev/-dbg/nativesdk- package contains symlink .so: &lt;packagename&gt; path '&lt;path&gt;' [dev-so]
+ </code>
+ </para>
+
+ <para>
+ Symlink <filename>.so</filename> files are for development
+ only, and should therefore go into the
+ <filename>-dev</filename> package.
+ This situation might occur if you add
+ <filename>*.so*</filename> rather than
+ <filename>*.so.*</filename> to a non-dev package.
+ Change
+ <link linkend='var-FILES'><filename>FILES</filename></link>
+ (and possibly
+ <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>)
+ such that the specified <filename>.so</filename> file goes
+ into an appropriate <filename>-dev</filename> package.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-staticdev'>
+ <code>
+ non -staticdev package contains static .a library: &lt;packagename&gt; path '&lt;path&gt;' [staticdev]
+ </code>
+ </para>
+
+ <para>
+ Static <filename>.a</filename> library files should go into
+ a <filename>-staticdev</filename> package.
+ Change
+ <link linkend='var-FILES'><filename>FILES</filename></link>
+ (and possibly
+ <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>)
+ such that the specified <filename>.a</filename> file goes
+ into an appropriate <filename>-staticdev</filename> package.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-libdir'>
+ <code>
+ &lt;packagename&gt;: found library in wrong location [libdir]
+ </code>
+ </para>
+
+ <para>
+ The specified file may have been installed into an incorrect
+ (possibly hardcoded) installation path.
+ For example, this test will catch recipes that install
+ <filename>/lib/bar.so</filename> when
+ <filename>${base_libdir}</filename> is "lib32".
+ Another example is when recipes install
+ <filename>/usr/lib64/foo.so</filename> when
+ <filename>${libdir}</filename> is "/usr/lib".
+ False positives occasionally exist.
+ For these cases add "libdir" to
+ <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
+ for the package.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-debug-files'>
+ <code>
+ non debug package contains .debug directory: &lt;packagename&gt; path &lt;path&gt; [debug-files]
+ </code>
+ </para>
+
+ <para>
+ The specified package contains a
+ <filename>.debug</filename> directory, which should not
+ appear in anything but the <filename>-dbg</filename>
+ package.
+ This situation might occur if you add a path which contains
+ a <filename>.debug</filename> directory and do not
+ explicitly add the <filename>.debug</filename> directory
+ to the <filename>-dbg</filename> package.
+ If this is the case, add the <filename>.debug</filename>
+ directory explicitly to
+ <filename>FILES_${PN}-dbg</filename>.
+ See
+ <link linkend='var-FILES'><filename>FILES</filename></link>
+ for additional information on <filename>FILES</filename>.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-arch'>
+ <code>
+ Architecture did not match (&lt;machine_arch&gt; to &lt;file_arch&gt;) on &lt;file&gt; [arch]
+ </code>
+ </para>
+
+ <para>
+ By default, the OpenEmbedded build system checks the
+ Executable and Linkable Format (ELF) type, bit size, and
+ endianness of any binaries to ensure they match the
+ target architecture.
+ This test fails if any binaries do not match the type since
+ there would be an incompatibility.
+ The test could indicate that the wrong compiler or compiler
+ options have been used.
+ Sometimes software, like bootloaders, might need to
+ bypass this check.
+ If the file you receive the error for is firmware
+ that is not intended to be executed within the target
+ operating system or is intended to run on a separate
+ processor within the device, you can add "arch" to
+ <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
+ for the package.
+ Another option is to check the
+ <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
+ log and verify that the compiler options being used
+ are correct.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-arch-bit-size-no-match'>
+ <code>
+ Bit size did not match (&lt;machine_bits&gt; to &lt;file_bits&gt;) &lt;recipe&gt; on &lt;file&gt; [arch]
+ </code>
+ </para>
+
+ <para>
+ By default, the OpenEmbedded build system checks
+ the Executable and Linkable Format (ELF) type,
+ bit size, and endianness of any binaries to ensure
+ they match the target architecture.
+ This test fails if any binaries do not match the type since
+ there would be an incompatibility.
+ The test could indicate that the wrong compiler or compiler
+ options have been used.
+ Sometimes software, like bootloaders, might need to
+ bypass this check.
+ If the file you receive the error for is firmware that
+ is not intended to be executed within the target
+ operating system or is intended to run on a separate
+ processor within the device, you can add "arch" to
+ <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
+ for the package.
+ Another option is to check the
+ <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
+ log and verify that the compiler options being used are
+ correct.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-arch-endianness-no-match'>
+ <code>
+ Endianness did not match (&lt;machine_endianness&gt; to &lt;file_endianness&gt;) on &lt;file&gt; [arch]
+ </code>
+ </para>
+
+ <para>
+ By default, the OpenEmbedded build system checks
+ the Executable and Linkable Format (ELF) type, bit
+ size, and endianness of any binaries to ensure they
+ match the target architecture.
+ This test fails if any binaries do not match the type since
+ there would be an incompatibility.
+ The test could indicate that the wrong compiler or compiler
+ options have been used.
+ Sometimes software, like bootloaders, might need to
+ bypass this check.
+ If the file you receive the error for is firmware
+ that is not intended to be executed within the target
+ operating system or is intended to run on a separate
+ processor within the device, you can add "arch" to
+ <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>
+ for the package.
+ Another option is to check the
+ <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
+ log and verify that the compiler options being used
+ are correct.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-textrel'>
+ <code>
+ ELF binary '&lt;file&gt;' has relocations in .text [textrel]
+ </code>
+ </para>
+
+ <para>
+ The specified ELF binary contains relocations in its
+ <filename>.text</filename> sections.
+ This situation can result in a performance impact
+ at runtime.
+ </para>
+
+ <para>
+ Typically, the way to solve this performance issue is to
+ add "-fPIC" or "-fpic" to the compiler command-line
+ options.
+ For example, given software that reads
+ <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
+ when you build it, you could add the following to your
+ recipe:
+ <literallayout class='monospaced'>
+ CFLAGS_append = " -fPIC "
+ </literallayout>
+ </para>
+
+ <para>
+ For more information on text relocations at runtime, see
+ <ulink url='http://www.akkadia.org/drepper/textrelocs.html'></ulink>.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-ldflags'>
+ <code>
+ No GNU_HASH in the elf binary: '&lt;file&gt;' [ldflags]
+ </code>
+ </para>
+
+ <para>
+ This indicates that binaries produced when building the
+ recipe have not been linked with the
+ <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
+ options provided by the build system.
+ Check to be sure that the <filename>LDFLAGS</filename>
+ variable is being passed to the linker command.
+ A common workaround for this situation is to pass in
+ <filename>LDFLAGS</filename> using
+ <link linkend='var-TARGET_CC_ARCH'><filename>TARGET_CC_ARCH</filename></link>
+ within the recipe as follows:
+ <literallayout class='monospaced'>
+ TARGET_CC_ARCH += "${LDFLAGS}"
+ </literallayout>
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-xorg-driver-abi'>
+ <code>
+ Package &lt;packagename&gt; contains Xorg driver (&lt;driver&gt;) but no xorg-abi- dependencies [xorg-driver-abi]
+ </code>
+ </para>
+
+ <para>
+ The specified package contains an Xorg driver, but does not
+ have a corresponding ABI package dependency.
+ The xserver-xorg recipe provides driver ABI names.
+ All drivers should depend on the ABI versions that they have
+ been built against.
+ Driver recipes that include
+ <filename>xorg-driver-input.inc</filename> or
+ <filename>xorg-driver-video.inc</filename> will
+ automatically get these versions.
+ Consequently, you should only need to explicitly add
+ dependencies to binary driver recipes.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-infodir'>
+ <code>
+ The /usr/share/info/dir file is not meant to be shipped in a particular package. [infodir]
+ </code>
+ </para>
+
+ <para>
+ The <filename>/usr/share/info/dir</filename> should not be
+ packaged.
+ Add the following line to your
+ <link linkend='ref-tasks-install'><filename>do_install</filename></link>
+ task or to your <filename>do_install_append</filename>
+ within the recipe as follows:
+ <literallayout class='monospaced'>
+ rm ${D}${infodir}/dir
+ </literallayout>
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-symlink-to-sysroot'>
+ <code>
+ Symlink &lt;path&gt; in &lt;packagename&gt; points to TMPDIR [symlink-to-sysroot]
+ </code>
+ </para>
+
+ <para>
+ The specified symlink points into
+ <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
+ on the host.
+ Such symlinks will work on the host.
+ However, they are clearly invalid when running on
+ the target.
+ You should either correct the symlink to use a relative
+ path or remove the symlink.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-la'>
+ <code>
+ &lt;file&gt; failed sanity test (workdir) in path &lt;path&gt; [la]
+ </code>
+ </para>
+
+ <para>
+ The specified <filename>.la</filename> file contains
+ <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
+ paths.
+ Any <filename>.la</filename> file containing these paths
+ is incorrect since <filename>libtool</filename> adds the
+ correct sysroot prefix when using the files automatically
+ itself.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-pkgconfig'>
+ <code>
+ &lt;file&gt; failed sanity test (tmpdir) in path &lt;path&gt; [pkgconfig]
+ </code>
+ </para>
+
+ <para>
+ The specified <filename>.pc</filename> file contains
+ <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link><filename>/</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
+ paths.
+ Any <filename>.pc</filename> file containing these paths is
+ incorrect since <filename>pkg-config</filename> itself adds
+ the correct sysroot prefix when the files are accessed.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-debug-deps'>
+ <code>
+ &lt;packagename&gt; rdepends on &lt;debug_packagename&gt; [debug-deps]
+ </code>
+ </para>
+
+ <para>
+ A dependency exists between the specified non-dbg package
+ (i.e. a package whose name does not end in
+ <filename>-dbg</filename>) and a package that is a
+ <filename>dbg</filename> package.
+ The <filename>dbg</filename> packages contain
+ debug symbols and are brought in using several
+ different methods:
+ <itemizedlist>
+ <listitem><para>
+ Using the <filename>dbg-pkgs</filename>
+ <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
+ value.
+ </para></listitem>
+ <listitem><para>
+ Using
+ <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>.
+ </para></listitem>
+ <listitem><para>
+ As a dependency of another
+ <filename>dbg</filename> package that was brought
+ in using one of the above methods.
+ </para></listitem>
+ </itemizedlist>
+ The dependency might have been automatically added
+ because the <filename>dbg</filename> package erroneously
+ contains files that it should not contain (e.g. a
+ non-symlink <filename>.so</filename> file) or it might
+ have been added manually (e.g. by adding to
+ <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>).
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-dev-deps'>
+ <code>
+ &lt;packagename&gt; rdepends on &lt;dev_packagename&gt; [dev-deps]
+ </code>
+ </para>
+
+ <para>
+ A dependency exists between the specified non-dev package
+ (a package whose name does not end in
+ <filename>-dev</filename>) and a package that is a
+ <filename>dev</filename> package.
+ The <filename>dev</filename> packages contain development
+ headers and are usually brought in using several different
+ methods:
+ <itemizedlist>
+ <listitem><para>
+ Using the <filename>dev-pkgs</filename>
+ <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
+ value.
+ </para></listitem>
+ <listitem><para>
+ Using
+ <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>.
+ </para></listitem>
+ <listitem><para>
+ As a dependency of another
+ <filename>dev</filename> package that was brought
+ in using one of the above methods.
+ </para></listitem>
+ </itemizedlist>
+ The dependency might have been automatically added (because
+ the <filename>dev</filename> package erroneously contains
+ files that it should not have (e.g. a non-symlink
+ <filename>.so</filename> file) or it might have been added
+ manually (e.g. by adding to
+ <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>).
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-dep-cmp'>
+ <code>
+ &lt;var&gt;_&lt;packagename&gt; is invalid: &lt;comparison&gt; (&lt;value&gt;) only comparisons &lt;, =, &gt;, &lt;=, and &gt;= are allowed [dep-cmp]
+ </code>
+ </para>
+
+ <para>
+ If you are adding a versioned dependency relationship to one
+ of the dependency variables
+ (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
+ <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
+ <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
+ <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
+ <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
+ or
+ <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>),
+ you must only use the named comparison operators.
+ Change the versioned dependency values you are adding
+ to match those listed in the message.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-compile-host-path'>
+ <code>
+ &lt;recipename&gt;: The compile log indicates that host include and/or library paths were used. Please check the log '&lt;logfile&gt;' for more information. [compile-host-path]
+ </code>
+ </para>
+
+ <para>
+ The log for the
+ <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
+ task indicates that paths on the host were searched
+ for files, which is not appropriate when cross-compiling.
+ Look for "is unsafe for cross-compilation" or "CROSS COMPILE
+ Badness" in the specified log file.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-install-host-path'>
+ <code>
+ &lt;recipename&gt;: The install log indicates that host include and/or library paths were used. Please check the log '&lt;logfile&gt;' for more information. [install-host-path]
+ </code>
+ </para>
+
+ <para>
+ The log for the
+ <link linkend='ref-tasks-install'><filename>do_install</filename></link>
+ task indicates that paths on the host were searched
+ for files, which is not appropriate when cross-compiling.
+ Look for "is unsafe for cross-compilation"
+ or "CROSS COMPILE Badness" in the specified log file.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-autoconf-log'>
+ <code>
+ This autoconf log indicates errors, it looked at host include and/or library paths while determining system capabilities. Rerun configure task after fixing this. The path was '&lt;path&gt;'
+ </code>
+ </para>
+
+ <para>
+ The log for the
+ <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
+ task indicates that paths on the host were searched
+ for files, which is not appropriate when cross-compiling.
+ Look for "is unsafe for cross-compilation" or
+ "CROSS COMPILE Badness" in the specified log file.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-pkgname'>
+ <code>
+ &lt;packagename&gt; doesn't match the [a-z0-9.+-]+ regex [pkgname]
+ </code>
+ </para>
+
+ <para>
+ The convention within the OpenEmbedded build system
+ (sometimes enforced by the package manager itself) is to
+ require that package names are all lower case
+ and to allow a restricted set of characters.
+ If your recipe name does not match this, or you add
+ packages to
+ <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
+ that do not conform to the convention, then you
+ will receive this error.
+ Rename your recipe.
+ Or, if you have added a non-conforming package name to
+ <filename>PACKAGES</filename>, change the package name
+ appropriately.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-unknown-configure-option'>
+ <code>
+ &lt;recipe&gt;: configure was passed unrecognized options: &lt;options&gt; [unknown-configure-option]
+ </code>
+ </para>
+
+ <para>
+ The configure script is reporting that the specified
+ options are unrecognized.
+ This situation could be because the options
+ were previously valid but have been removed from the
+ configure script.
+ Or, there was a mistake when the options were added
+ and there is another option that should be used instead.
+ If you are unsure, consult the upstream build
+ documentation, the
+ <filename>./configure --help</filename> output,
+ and the upstream change log or release notes.
+ Once you have worked out what the appropriate
+ change is, you can update
+ <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
+ or the individual
+ <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
+ option values accordingly.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-pn-overrides'>
+ <code>
+ Recipe &lt;recipefile&gt; has PN of "&lt;recipename&gt;" which is in OVERRIDES, this can result in unexpected behavior. [pn-overrides]
+ </code>
+ </para>
+
+ <para>
+ The specified recipe has a name
+ (<link linkend='var-PN'><filename>PN</filename></link>)
+ value that appears in
+ <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
+ If a recipe is named such that its <filename>PN</filename>
+ value matches something already in
+ <filename>OVERRIDES</filename> (e.g. <filename>PN</filename>
+ happens to be the same as
+ <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
+ or
+ <link linkend='var-DISTRO'><filename>DISTRO</filename></link>),
+ it can have unexpected consequences.
+ For example, assignments such as
+ <filename>FILES_${PN} = "xyz"</filename> effectively
+ turn into <filename>FILES = "xyz"</filename>.
+ Rename your recipe (or if <filename>PN</filename> is being
+ set explicitly, change the <filename>PN</filename> value) so
+ that the conflict does not occur.
+ See
+ <link linkend='var-FILES'><filename>FILES</filename></link>
+ for additional information.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-pkgvarcheck'>
+ <code>
+ &lt;recipefile&gt;: Variable &lt;variable&gt; is set as not being package specific, please fix this. [pkgvarcheck]
+ </code>
+ </para>
+
+ <para>
+ Certain variables
+ (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
+ <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
+ <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
+ <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
+ <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
+ <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
+ <link linkend='var-FILES'><filename>FILES</filename></link>,
+ <filename>pkg_preinst</filename>,
+ <filename>pkg_postinst</filename>,
+ <filename>pkg_prerm</filename>,
+ <filename>pkg_postrm</filename>, and
+ <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>)
+ should always be set specific to a package (i.e. they
+ should be set with a package name override such as
+ <filename>RDEPENDS_${PN} = "value"</filename> rather than
+ <filename>RDEPENDS = "value"</filename>).
+ If you receive this error, correct any assignments to these
+ variables within your recipe.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-already-stripped'>
+ <code>
+ File '&lt;file&gt;' from &lt;recipename&gt; was already stripped, this will prevent future debugging! [already-stripped]
+ </code>
+ </para>
+
+ <para>
+ Produced binaries have already been stripped prior to the
+ build system extracting debug symbols.
+ It is common for upstream software projects to default to
+ stripping debug symbols for output binaries.
+ In order for debugging to work on the target using
+ <filename>-dbg</filename> packages, this stripping must be
+ disabled.
+ </para>
+
+ <para>
+ Depending on the build system used by the software being
+ built, disabling this stripping could be as easy as
+ specifying an additional configure option.
+ If not, disabling stripping might involve patching
+ the build scripts.
+ In the latter case, look for references to "strip" or
+ "STRIP", or the "-s" or "-S" command-line options being
+ specified on the linker command line (possibly
+ through the compiler command line if preceded with "-Wl,").
+ <note>
+ Disabling stripping here does not mean that the final
+ packaged binaries will be unstripped.
+ Once the OpenEmbedded build system splits out debug
+ symbols to the <filename>-dbg</filename> package,
+ it will then strip the symbols from the binaries.
+ </note>
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-packages-list'>
+ <code>
+ &lt;packagename&gt; is listed in PACKAGES multiple times, this leads to packaging errors. [packages-list]
+ </code>
+ </para>
+
+ <para>
+ Package names must appear only once in the
+ <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
+ variable.
+ You might receive this error if you are attempting to add a
+ package to <filename>PACKAGES</filename> that is
+ already in the variable's value.
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-files-invalid'>
+ <code>
+ FILES variable for package &lt;packagename&gt; contains '//' which is invalid. Attempting to fix this but you should correct the metadata. [files-invalid]
+ </code>
+ </para>
+
+ <para>
+ The string "//" is invalid in a Unix path.
+ Correct all occurrences where this string appears in a
+ <link linkend='var-FILES'><filename>FILES</filename></link>
+ variable so that there is only a single "/".
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-installed-vs-shipped'>
+ <code>
+ &lt;recipename&gt;: Files/directories were installed but not shipped [installed-vs-shipped]
+ </code>
+ </para>
+
+ <para>
+ Files have been installed within the
+ <link linkend='ref-tasks-install'><filename>do_install</filename></link>
+ task but have not been included in any package by way of the
+ <link linkend='var-FILES'><filename>FILES</filename></link>
+ variable.
+ Files that do not appear in any package cannot be present in
+ an image later on in the build process.
+ You need to do one of the following:
+ <itemizedlist>
+ <listitem><para>
+ Add the files to <filename>FILES</filename> for the
+ package you want them to appear in (e.g.
+ <filename>FILES_${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename> for the main
+ package).
+ </para></listitem>
+ <listitem><para>
+ Delete the files at the end of the
+ <filename>do_install</filename> task if the files
+ are not needed in any package.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ &nbsp;
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para id='qa-issue-old-and-new-package-and-version-names'>
+ <code>
+ &lt;oldpackage&gt;-&lt;oldpkgversion&gt; was registered as shlib provider for &lt;library&gt;, changing it to &lt;newpackage&gt;-&lt;newpkgversion&gt; because it was built later
+ </code>
+ </para>
+
+ <para>
+ This message means that both
+ <filename>&lt;oldpackage&gt;</filename> and
+ <filename>&lt;newpackage&gt;</filename> provide the specified
+ shared library.
+ You can expect this message when a recipe has been renamed.
+ However, if that is not the case, the message might indicate
+ that a private version of a library is being erroneously
+ picked up as the provider for a common library.
+ If that is the case, you should add the library's
+ <filename>.so</filename> file name to
+ <link linkend='var-PRIVATE_LIBS'><filename>PRIVATE_LIBS</filename></link>
+ in the recipe that provides
+ the private version of the library.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+<!--
+Here are some messages that might be documented in the future.
+Right now we are not documenting them because the QA checks are not
+enabled by default:
+
+ <para>
+ <itemizedlist>
+ <listitem><para>
+ <literallayout class='monospaced'>
+ Desktop file issue: &lt;error&gt; [desktop]
+ </literallayout>
+ NEED A DESCRIPTION AND SOLUTION
+ </para></listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem><para>
+ <literallayout class='monospaced'>
+ &lt;packagename&gt;: &lt;file&gt;, installed in the base_prefix, requires a shared library under exec_prefix (&lt;exec_prefix&t;g) [unsafe-references-in-binaries]
+ </literallayout>
+ NEED A DESCRIPTION AND SOLUTION
+ </para></listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem><para>
+ <literallayout class='monospaced'>
+ &lt;packagename&gt;: Found a reference to &lt;exec_prefix&gt;/ in &lt;path&gt; - Shell scripts in base_bindir and base_sbindir should not reference anything in exec_prefix [unsafe-references-in-scripts]
+ </literallayout>
+ NEED A DESCRIPTION AND SOLUTION
+ </para></listitem>
+ </itemizedlist>
+ </para>
+-->
+</section>
+
+<section id='configuring-and-disabling-qa-checks'>
+ <title>Configuring and Disabling QA Checks</title>
+
+ <para>
+ You can configure the QA checks globally so that specific check
+ failures either raise a warning or an error message, using the
+ <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link> and
+ <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
+ variables, respectively.
+ You can also disable checks within a particular recipe using
+ <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>.
+ For information on how to work with the QA checks, see the
+ "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
+ section.
+ <note><title>Tip</title>
+ Please keep in mind that the QA checks exist in order to
+ detect real or potential problems in the packaged output.
+ So exercise caution when disabling these checks.
+ </note>
+ </para>
+</section>
+</chapter>
+<!--
+vim: expandtab tw=80 ts=4
+-->
OpenPOWER on IntegriCloud