1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237 |
- <!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> when the distro
- configuration uses a different path for
- <filename><libexecdir></filename>
- By default, <filename><libexecdir></filename> is
- <filename>$prefix/libexec</filename>.
- However, this default can be changed (e.g.
- <filename>${libdir}</filename>).
- </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
- -->
|