diff options
author | Patrick Williams <patrick@stwcx.xyz> | 2015-09-15 22:41:29 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2015-09-15 22:41:29 +0300 |
commit | 21f9b84b4b729fbd7acbd465e7a3f726e4d20f91 (patch) | |
tree | eb2d091d427ca0813b445509d59cc8e27e8ad25f /yocto-poky/documentation/ref-manual/ref-qa-checks.xml | |
parent | 101cef31e2bf54c678501155cd2106251acbd076 (diff) | |
parent | c124f4f2e04dca16a428a76c89677328bc7bf908 (diff) | |
download | openbmc-21f9b84b4b729fbd7acbd465e7a3f726e4d20f91.tar.xz |
Merge commit 'c124f4f2e04dca16a428a76c89677328bc7bf908' as 'yocto-poky'
Diffstat (limited to 'yocto-poky/documentation/ref-manual/ref-qa-checks.xml')
-rw-r--r-- | yocto-poky/documentation/ref-manual/ref-qa-checks.xml | 1235 |
1 files changed, 1235 insertions, 0 deletions
diff --git a/yocto-poky/documentation/ref-manual/ref-qa-checks.xml b/yocto-poky/documentation/ref-manual/ref-qa-checks.xml new file mode 100644 index 000000000..38689b992 --- /dev/null +++ b/yocto-poky/documentation/ref-manual/ref-qa-checks.xml @@ -0,0 +1,1235 @@ +<!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> + <packagename>: <path> is using libexec please relocate to <libexecdir> [libexec] + </code> + </para> + + <para> + The specified package contains files in + <filename>/usr/libexec</filename>. + By default, <filename>libexecdir</filename> is set to + "${libdir}/${BPN}" rather than to "/usr/libexec". + Thus, installing to <filename>/usr/libexec</filename> + is likely not desirable. + </para> + + <para> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-rpaths'> + <code> + package <packagename> contains bad RPATH <rpath> in file <file> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-useless-rpaths'> + <code> + <packagename>: <file> contains probably-redundant RPATH <rpath> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-file-rdeps'> + <code> + <packagename> requires <files>, 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-build-deps'> + <code> + <packagename1> rdepends on <packagename2>, 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-dev-so'> + <code> + non -dev/-dbg/nativesdk- package contains symlink .so: <packagename> path '<path>' [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-staticdev'> + <code> + non -staticdev package contains static .a library: <packagename> path '<path>' [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-libdir'> + <code> + <packagename>: 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-debug-files'> + <code> + non debug package contains .debug directory: <packagename> path <path> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-arch'> + <code> + Architecture did not match (<machine_arch> to <file_arch>) on <file> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-arch-bit-size-no-match'> + <code> + Bit size did not match (<machine_bits> to <file_bits>) <recipe> on <file> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-arch-endianness-no-match'> + <code> + Endianness did not match (<machine_endianness> to <file_endianness>) on <file> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-textrel'> + <code> + ELF binary '<file>' 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-ldflags'> + <code> + No GNU_HASH in the elf binary: '<file>' [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-xorg-driver-abi'> + <code> + Package <packagename> contains Xorg driver (<driver>) 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> + + </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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-symlink-to-sysroot'> + <code> + Symlink <path> in <packagename> 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-la'> + <code> + <file> failed sanity test (workdir) in path <path> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-pkgconfig'> + <code> + <file> failed sanity test (tmpdir) in path <path> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-debug-deps'> + <code> + <packagename> rdepends on <debug_packagename> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-dev-deps'> + <code> + <packagename> rdepends on <dev_packagename> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-dep-cmp'> + <code> + <var>_<packagename> is invalid: <comparison> (<value>) only comparisons <, =, >, <=, and >= 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-compile-host-path'> + <code> + <recipename>: The compile log indicates that host include and/or library paths were used. Please check the log '<logfile>' 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-install-host-path'> + <code> + <recipename>: The install log indicates that host include and/or library paths were used. Please check the log '<logfile>' 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> + + </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 '<path>' + </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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-pkgname'> + <code> + <packagename> 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-unknown-configure-option'> + <code> + <recipe>: configure was passed unrecognized options: <options> [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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-pn-overrides'> + <code> + Recipe <recipefile> has PN of "<recipename>" 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-pkgvarcheck'> + <code> + <recipefile>: Variable <variable> 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-already-stripped'> + <code> + File '<file>' from <recipename> 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-packages-list'> + <code> + <packagename> 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-files-invalid'> + <code> + FILES variable for package <packagename> 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-installed-vs-shipped'> + <code> + <recipename>: 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> + + </para> + </listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem> + <para id='qa-issue-old-and-new-package-and-version-names'> + <code> + <oldpackage>-<oldpkgversion> was registered as shlib provider for <library>, changing it to <newpackage>-<newpkgversion> because it was built later + </code> + </para> + + <para> + This message means that both + <filename><oldpackage></filename> and + <filename><newpackage></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: <error> [desktop] + </literallayout> + NEED A DESCRIPTION AND SOLUTION + </para></listitem> + </itemizedlist> + </para> + + <para> + <itemizedlist> + <listitem><para> + <literallayout class='monospaced'> + <packagename>: <file>, installed in the base_prefix, requires a shared library under exec_prefix (<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'> + <packagename>: Found a reference to <exec_prefix>/ in <path> - 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 +--> |