.. SPDX-License-Identifier: CC-BY-SA-2.0-UK

*****************************
QA Error and Warning Messages
*****************************

.. _qa-introduction:

Introduction
============

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.

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.

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::

   -  At the end of each message, the name of the associated QA test (as
      listed in the ":ref:`insane.bbclass <ref-classes-insane>`"
      section) appears within square brackets.

   -  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.

   -  Because some QA checks are disabled by default, this list does not
      include all possible QA check errors and warnings.

.. _qa-errors-and-warnings:

Errors and Warnings
===================

.. _qa-check-libexec:

-  ``<packagename>: <path> is using libexec please relocate to <libexecdir> [libexec]``

   The specified package contains files in ``/usr/libexec`` when the
   distro configuration uses a different path for ``<libexecdir>`` By
   default, ``<libexecdir>`` is ``$prefix/libexec``. However, this
   default can be changed (e.g. ``${libdir}``).

    
.. _qa-check-rpaths:

-  ``package <packagename> contains bad RPATH <rpath> in file <file> [rpaths]``

   The specified binary produced by the recipe contains dynamic library
   load paths (rpaths) that contain build system paths such as
   :term:`TMPDIR`, which are incorrect for the target and
   could potentially be a security issue. Check for bad ``-rpath``
   options being passed to the linker in your
   :ref:`ref-tasks-compile` 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.

    
.. _qa-check-useless-rpaths:

-  ``<packagename>: <file> contains probably-redundant RPATH <rpath> [useless-rpaths]``

   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. ``/lib`` and ``/usr/lib``). 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.

    
.. _qa-check-file-rdeps:

-  ``<packagename> requires <files>, but no providers in its RDEPENDS [file-rdeps]``

   A file-level dependency has been identified from the specified
   package on the specified files, but there is no explicit
   corresponding entry in :term:`RDEPENDS`. If
   particular files are required at runtime then :term:`RDEPENDS` should be
   declared in the recipe to ensure the packages providing them are
   built.

    
.. _qa-check-build-deps:

-  ``<packagename1> rdepends on <packagename2>, but it isn't a build dependency? [build-deps]``

   There is a runtime dependency 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
   :term:`RDEPENDS` 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 :term:`RDEPENDS` for the dependency.

    
.. _qa-check-dev-so:

-  ``non -dev/-dbg/nativesdk- package contains symlink .so: <packagename> path '<path>' [dev-so]``

   Symlink ``.so`` files are for development only, and should therefore
   go into the ``-dev`` package. This situation might occur if you add
   ``*.so*`` rather than ``*.so.*`` to a non-dev package. Change
   :term:`FILES` (and possibly
   :term:`PACKAGES`) such that the specified ``.so``
   file goes into an appropriate ``-dev`` package.

    
.. _qa-check-staticdev:

-  ``non -staticdev package contains static .a library: <packagename> path '<path>' [staticdev]``

   Static ``.a`` library files should go into a ``-staticdev`` package.
   Change :term:`FILES` (and possibly
   :term:`PACKAGES`) such that the specified ``.a`` file
   goes into an appropriate ``-staticdev`` package.

    
.. _qa-check-libdir:

-  ``<packagename>: found library in wrong location [libdir]``

   The specified file may have been installed into an incorrect
   (possibly hardcoded) installation path. For example, this test will
   catch recipes that install ``/lib/bar.so`` when ``${base_libdir}`` is
   "lib32". Another example is when recipes install
   ``/usr/lib64/foo.so`` when ``${libdir}`` is "/usr/lib". False
   positives occasionally exist. For these cases add "libdir" to
   :term:`INSANE_SKIP` for the package.

    
.. _qa-check-debug-files:

-  ``non debug package contains .debug directory: <packagename> path <path> [debug-files]``

   The specified package contains a ``.debug`` directory, which should
   not appear in anything but the ``-dbg`` package. This situation might
   occur if you add a path which contains a ``.debug`` directory and do
   not explicitly add the ``.debug`` directory to the ``-dbg`` package.
   If this is the case, add the ``.debug`` directory explicitly to
   ``FILES:${PN}-dbg``. See :term:`FILES` for additional
   information on :term:`FILES`.

    
.. _qa-check-arch:

-  ``Architecture did not match (<file_arch>, expected <machine_arch>) in <file> [arch]``

   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
   :term:`INSANE_SKIP` for the package. Another
   option is to check the :ref:`ref-tasks-compile` log
   and verify that the compiler options being used are correct.

    

-  ``Bit size did not match (<file_bits>, expected <machine_bits>) in <file> [arch]``

   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
   :term:`INSANE_SKIP` for the package. Another
   option is to check the :ref:`ref-tasks-compile` log
   and verify that the compiler options being used are correct.

    

-  ``Endianness did not match (<file_endianness>, expected <machine_endianness>) in <file> [arch]``

   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
   :term:`INSANE_SKIP` for the package. Another
   option is to check the :ref:`ref-tasks-compile` log
   and verify that the compiler options being used are correct.

    
.. _qa-check-textrel:

-  ``ELF binary '<file>' has relocations in .text [textrel]``

   The specified ELF binary contains relocations in its ``.text``
   sections. This situation can result in a performance impact at
   runtime.

   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 :term:`CFLAGS` when you build it,
   you could add the following to your recipe::

      CFLAGS:append = " -fPIC "

   For more information on text relocations at runtime, see
   https://www.akkadia.org/drepper/textrelocs.html.

    
.. _qa-check-ldflags:

-  ``File '<file>' in package '<package>' doesn't have GNU_HASH (didn't pass LDFLAGS?) [ldflags]``

   This indicates that binaries produced when building the recipe have
   not been linked with the :term:`LDFLAGS` options
   provided by the build system. Check to be sure that the :term:`LDFLAGS`
   variable is being passed to the linker command. A common workaround
   for this situation is to pass in :term:`LDFLAGS` using
   :term:`TARGET_CC_ARCH` within the recipe as
   follows::

      TARGET_CC_ARCH += "${LDFLAGS}"

    
.. _qa-check-xorg-driver-abi:

-  ``Package <packagename> contains Xorg driver (<driver>) but no xorg-abi- dependencies [xorg-driver-abi]``

   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 ``xorg-driver-input.inc`` or ``xorg-driver-video.inc`` will
   automatically get these versions. Consequently, you should only need
   to explicitly add dependencies to binary driver recipes.

    
.. _qa-check-infodir:

-  ``The /usr/share/info/dir file is not meant to be shipped in a particular package. [infodir]``

   The ``/usr/share/info/dir`` should not be packaged. Add the following
   line to your :ref:`ref-tasks-install` task or to your
   ``do_install:append`` within the recipe as follows::

      rm ${D}${infodir}/dir
   

.. _qa-check-symlink-to-sysroot:

-  ``Symlink <path> in <packagename> points to TMPDIR [symlink-to-sysroot]``

   The specified symlink points into :term:`TMPDIR` 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.

    
.. _qa-check-la:

-  ``<file> failed sanity test (workdir) in path <path> [la]``

   The specified ``.la`` file contains :term:`TMPDIR`
   paths. Any ``.la`` file containing these paths is incorrect since
   ``libtool`` adds the correct sysroot prefix when using the files
   automatically itself.

    
.. _qa-check-pkgconfig:

-  ``<file> failed sanity test (tmpdir) in path <path> [pkgconfig]``

   The specified ``.pc`` file contains
   :term:`TMPDIR`\ ``/``\ :term:`WORKDIR`
   paths. Any ``.pc`` file containing these paths is incorrect since
   ``pkg-config`` itself adds the correct sysroot prefix when the files
   are accessed.

    
.. _qa-check-debug-deps:

-  ``<packagename> rdepends on <debug_packagename> [debug-deps]``

   There is a dependency between the specified non-dbg package (i.e. a
   package whose name does not end in ``-dbg``) and a package that is a
   ``dbg`` package. The ``dbg`` packages contain debug symbols and are
   brought in using several different methods:

   -  Using the ``dbg-pkgs``
      :term:`IMAGE_FEATURES` value.

   -  Using :term:`IMAGE_INSTALL`.

   -  As a dependency of another ``dbg`` package that was brought in
      using one of the above methods.

   The dependency might have been automatically added because the
   ``dbg`` package erroneously contains files that it should not contain
   (e.g. a non-symlink ``.so`` file) or it might have been added
   manually (e.g. by adding to :term:`RDEPENDS`).

    
.. _qa-check-dev-deps:

-  ``<packagename> rdepends on <dev_packagename> [dev-deps]``

   There is a dependency between the specified non-dev package (a package
   whose name does not end in ``-dev``) and a package that is a ``dev``
   package. The ``dev`` packages contain development headers and are
   usually brought in using several different methods:

   -  Using the ``dev-pkgs``
      :term:`IMAGE_FEATURES` value.

   -  Using :term:`IMAGE_INSTALL`.

   -  As a dependency of another ``dev`` package that was brought in
      using one of the above methods.

   The dependency might have been automatically added (because the
   ``dev`` package erroneously contains files that it should not have
   (e.g. a non-symlink ``.so`` file) or it might have been added
   manually (e.g. by adding to :term:`RDEPENDS`).

    
.. _qa-check-dep-cmp:

-  ``<var>:<packagename> is invalid: <comparison> (<value>)   only comparisons <, =, >, <=, and >= are allowed [dep-cmp]``

   If you are adding a versioned dependency relationship to one of the
   dependency variables (:term:`RDEPENDS`,
   :term:`RRECOMMENDS`,
   :term:`RSUGGESTS`,
   :term:`RPROVIDES`,
   :term:`RREPLACES`, or
   :term:`RCONFLICTS`), you must only use the named
   comparison operators. Change the versioned dependency values you are
   adding to match those listed in the message.

    
.. _qa-check-compile-host-path:

-  ``<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]``

   The log for the :ref:`ref-tasks-compile` 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.

    
.. _qa-check-install-host-path:

-  ``<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]``

   The log for the :ref:`ref-tasks-install` 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.

    
.. _qa-check-configure-unsafe:

-  ``This autoconf log indicates errors, it looked at host include and/or library paths while determining system capabilities. Rerun configure task after fixing this. [configure-unsafe]``

   The log for the :ref:`ref-tasks-configure` 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.

    
.. _qa-check-pkgname:

-  ``<packagename> doesn't match the [a-z0-9.+-]+ regex [pkgname]``

   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
   :term:`PACKAGES` 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 :term:`PACKAGES`,
   change the package name appropriately.

    
.. _qa-check-unknown-configure-option:

-  ``<recipe>: configure was passed unrecognized options: <options> [unknown-configure-option]``

   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 ``./configure --help`` output, and
   the upstream change log or release notes. Once you have worked out
   what the appropriate change is, you can update
   :term:`EXTRA_OECONF`,
   :term:`PACKAGECONFIG_CONFARGS`, or the
   individual :term:`PACKAGECONFIG` option values
   accordingly.

    
.. _qa-check-pn-overrides:

-  ``Recipe <recipefile> has PN of "<recipename>" which is in OVERRIDES, this can result in unexpected behavior. [pn-overrides]``

   The specified recipe has a name (:term:`PN`) value that
   appears in :term:`OVERRIDES`. If a recipe is named
   such that its :term:`PN` value matches something already in :term:`OVERRIDES`
   (e.g. :term:`PN` happens to be the same as :term:`MACHINE`
   or :term:`DISTRO`), it can have unexpected
   consequences. For example, assignments such as
   ``FILES:${PN} = "xyz"`` effectively turn into ``FILES = "xyz"``.
   Rename your recipe (or if :term:`PN` is being set explicitly, change the
   :term:`PN` value) so that the conflict does not occur. See
   :term:`FILES` for additional information.

    
.. _qa-check-pkgvarcheck:

-  ``<recipefile>: Variable <variable> is set as not being package specific, please fix this. [pkgvarcheck]``

   Certain variables (:term:`RDEPENDS`,
   :term:`RRECOMMENDS`,
   :term:`RSUGGESTS`,
   :term:`RCONFLICTS`,
   :term:`RPROVIDES`,
   :term:`RREPLACES`, :term:`FILES`,
   ``pkg_preinst``, ``pkg_postinst``, ``pkg_prerm``, ``pkg_postrm``, and
   :term:`ALLOW_EMPTY`) should always be set specific
   to a package (i.e. they should be set with a package name override
   such as ``RDEPENDS:${PN} = "value"`` rather than
   ``RDEPENDS = "value"``). If you receive this error, correct any
   assignments to these variables within your recipe.


- ``recipe uses DEPENDS:${PN}, should use DEPENDS [pkgvarcheck]``

   This check looks for instances of setting ``DEPENDS:${PN}``
   which is erroneous (:term:`DEPENDS` is a recipe-wide variable and thus
   it is not correct to specify it for a particular package, nor will such
   an assignment actually work.) Set :term:`DEPENDS` instead.


.. _qa-check-already-stripped:

-  ``File '<file>' from <recipename> was already stripped, this will prevent future debugging! [already-stripped]``

   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 ``-dbg`` packages,
   this stripping must be disabled.

   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 ``-dbg`` package, it will then
      strip the symbols from the binaries.

    
.. _qa-check-packages-list:

-  ``<packagename> is listed in PACKAGES multiple times, this leads to packaging errors. [packages-list]``

   Package names must appear only once in the
   :term:`PACKAGES` variable. You might receive this
   error if you are attempting to add a package to :term:`PACKAGES` that is
   already in the variable's value.

    
.. _qa-check-files-invalid:

-  ``FILES variable for package <packagename> contains '//' which is invalid. Attempting to fix this but you should correct the metadata. [files-invalid]``

   The string "//" is invalid in a Unix path. Correct all occurrences
   where this string appears in a :term:`FILES` variable so
   that there is only a single "/".

    
.. _qa-check-installed-vs-shipped:

-  ``<recipename>: Files/directories were installed but not shipped in any package [installed-vs-shipped]``

   Files have been installed within the
   :ref:`ref-tasks-install` task but have not been
   included in any package by way of the :term:`FILES`
   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:

   -  Add the files to :term:`FILES` for the package you want them to appear
      in (e.g. ``FILES:${``\ :term:`PN`\ ``}`` for the main
      package).

   -  Delete the files at the end of the ``do_install`` task if the
      files are not needed in any package.

    

-  ``<oldpackage>-<oldpkgversion> was registered as shlib provider for <library>, changing it to <newpackage>-<newpkgversion> because it was built later``

   This message means that both ``<oldpackage>`` and ``<newpackage>``
   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 ``.so`` filename to
   :term:`PRIVATE_LIBS` in the recipe that provides
   the private version of the library.


.. _qa-check-unlisted-pkg-lics:

-  ``LICENSE:<packagename> includes licenses (<licenses>) that are not listed in LICENSE [unlisted-pkg-lics]``

   The :term:`LICENSE` of the recipe should be a superset
   of all the licenses of all packages produced by this recipe. In other
   words, any license in ``LICENSE:*`` should also appear in
   :term:`LICENSE`.


.. _qa-check-configure-gettext:

-  ``AM_GNU_GETTEXT used but no inherit gettext [configure-gettext]``

    If a recipe is building something that uses automake and the automake
    files contain an ``AM_GNU_GETTEXT`` directive then this check will fail
    if there is no ``inherit gettext`` statement in the recipe to ensure
    that gettext is available during the build. Add ``inherit gettext`` to
    remove the warning.


.. _qa-check-mime:

- ``package contains mime types but does not inherit mime: <packagename> path '<file>' [mime]``

   The specified package contains mime type files (``.xml`` files in
   ``${datadir}/mime/packages``) and yet does not inherit the mime
   class which will ensure that these get properly installed. Either
   add ``inherit mime`` to the recipe or remove the files at the
   ``do_install`` step if they are not needed.


.. _qa-check-mime-xdg:

- ``package contains desktop file with key 'MimeType' but does not inhert mime-xdg: <packagename> path '<file>' [mime-xdg]``

    The specified package contains a .desktop file with a 'MimeType' key
    present, but does not inherit the mime-xdg class that is required in
    order for that to be activated. Either add ``inherit mime`` to the
    recipe or remove the files at the ``do_install`` step if they are not
    needed.


.. _qa-check-src-uri-bad:

- ``<recipename>: SRC_URI uses unstable GitHub archives [src-uri-bad]``

    GitHub provides "archive" tarballs, however these can be re-generated
    on the fly and thus the file's signature will not necessarily match that
    in the SRC_URI checksums in future leading to build failures. It is
    recommended that you use an official release tarball or switch to
    pulling the corresponding revision in the actual git repository instead.


- ``SRC_URI uses PN not BPN [src-uri-bad]``

    If some part of :term:`SRC_URI` needs to reference the recipe name, it should do
    so using ${:term:`BPN`} rather than ${:term:`PN`} as the latter will change
    for different variants of the same recipe e.g. when :term:`BBCLASSEXTEND`
    or multilib are being used. This check will fail if a reference to ``${PN}``
    is found within the :term:`SRC_URI` value - change it to ``${BPN}`` instead.


.. _qa-check-unhandled-features-check:

- ``<recipename>: recipe doesn't inherit features_check [unhandled-features-check]``

    This check ensures that if one of the variables that the :ref:`features_check <ref-classes-features_check>`
    class supports (e.g. :term:`REQUIRED_DISTRO_FEATURES`) is used, then the recipe
    inherits ``features_check`` in order for the requirement to actually work. If
    you are seeing this message, either add ``inherit features_check`` to your recipe
    or remove the reference to the variable if it is not needed.


.. _qa-check-missing-update-alternatives:

- ``<recipename>: recipe defines ALTERNATIVE:<packagename> but doesn't inherit update-alternatives. This might fail during do_rootfs later! [missing-update-alternatives]``

    This check ensures that if a recipe sets the :term:`ALTERNATIVE` variable that the
    recipe also inherits :ref:`update-alternatives <ref-classes-update-alternatives>` such
    that the alternative will be correctly set up. If you are seeing this message, either
    add ``inherit update-alternatives`` to your recipe or remove the reference to the variable
    if it is not needed.


.. _qa-check-shebang-size:

- ``<packagename>: <file> maximum shebang size exceeded, the maximum size is 128. [shebang-size]``

    This check ensures that the shebang line (``#!`` in the first line) for a script
    is not longer than 128 characters, which can cause an error at runtime depending
    on the operating system. If you are seeing this message then the specified script
    may need to be patched to have a shorter in order to avoid runtime problems.


.. _qa-check-perllocalpod:

- ``<packagename> contains perllocal.pod (<files>), should not be installed [perllocalpod]``

    ``perllocal.pod`` is an index file of locally installed modules and so shouldn't be
    installed by any distribution packages. The :ref:`cpan <ref-classes-cpan>` class
    already sets ``NO_PERLLOCAL`` to stop this file being generated by most Perl recipes,
    but if a recipe is using ``MakeMaker`` directly then they might not be doing this
    correctly. This check ensures that perllocal.pod is not in any package in order to
    avoid multiple packages shipping this file and thus their packages conflicting
    if installed together.


.. _qa-check-usrmerge:

- ``<packagename> package is not obeying usrmerge distro feature. /<path> should be relocated to /usr. [usrmerge]``

    If ``usrmerge`` is in :term:`DISTRO_FEATURES`, this check will ensure that no package
    installs files to root (``/bin``, ``/sbin``, ``/lib``, ``/lib64``) directories. If you are seeing this
    message, it indicates that the ``do_install`` step (or perhaps the build process that
    ``do_install`` is calling into, e.g. ``make install`` is using hardcoded paths instead
    of the variables set up for this (``bindir``, ``sbindir``, etc.), and should be
    changed so that it does.


.. _qa-check-patch-fuzz:

- ``Fuzz detected: <patch output> [patch-fuzz]``

    This check looks for evidence of "fuzz" when applying patches within the ``do_patch``
    task. Patch fuzz is a situation when the ``patch`` tool ignores some of the context
    lines in order to apply the patch. Consider this example:

    Patch to be applied::

        --- filename
        +++ filename
         context line 1
         context line 2
         context line 3
        +newly added line
         context line 4
         context line 5
         context line 6

    Original source code::

        different context line 1
        different context line 2
        context line 3
        context line 4
        different context line 5
        different context line 6

    Outcome (after applying patch with fuzz)::

        different context line 1
        different context line 2
        context line 3
        newly added line
        context line 4
        different context line 5
        different context line 6

    Chances are, the newly added line was actually added in a completely
    wrong location, or it was already in the original source and was added
    for the second time. This is especially possible if the context line 3
    and 4 are blank or have only generic things in them, such as ``#endif`` or ``}``.
    Depending on the patched code, it is entirely possible for an incorrectly
    patched file to still compile without errors.

    *How to eliminate patch fuzz warnings*

    Use the ``devtool`` command as explained by the warning. First, unpack the
    source into devtool workspace::

            devtool modify <recipe>

    This will apply all of the patches, and create new commits out of them in
    the workspace - with the patch context updated.

    Then, replace the patches in the recipe layer::

            devtool finish --force-patch-refresh <recipe> <layer_path>

    The patch updates then need be reviewed (preferably with a side-by-side diff
    tool) to ensure they are indeed doing the right thing i.e.:

    #. they are applied in the correct location within the file;
    #. they do not introduce duplicate lines, or otherwise do things that
       are no longer necessary.

    To confirm these things, you can also review the patched source code in
    devtool's workspace, typically in ``<build_dir>/workspace/sources/<recipe>/``

    Once the review is done, you can create and publish a layer commit with
    the patch updates that modify the context. Devtool may also refresh
    other things in the patches, those can be discarded.



Configuring and Disabling QA Checks
===================================

You can configure the QA checks globally so that specific check failures
either raise a warning or an error message, using the
:term:`WARN_QA` and :term:`ERROR_QA`
variables, respectively. You can also disable checks within a particular
recipe using :term:`INSANE_SKIP`. For information on
how to work with the QA checks, see the
":ref:`insane.bbclass <ref-classes-insane>`" section.

.. note::

   Please keep in mind that the QA checks are meant to detect real
   or potential problems in the packaged output. So exercise caution
   when disabling these checks.
