<!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; ] >

<!-- Dummy chapter -->
<chapter id='ref-variables-glos'>

<title>Variables Glossary</title>

<para>
    This chapter lists common variables used in the OpenEmbedded build system and gives an overview
    of their function and contents.
</para>

<glossary id='ref-variables-glossary'>


    <para>
       <link linkend='var-ABIEXTENSION'>A</link>
       <link linkend='var-B'>B</link>
       <link linkend='var-CACHE'>C</link>
       <link linkend='var-D'>D</link>
       <link linkend='var-EFI_PROVIDER'>E</link>
       <link linkend='var-FEATURE_PACKAGES'>F</link>
       <link linkend='var-GCCPIE'>G</link>
       <link linkend='var-HOMEPAGE'>H</link>
       <link linkend='var-ICECC_DISABLED'>I</link>
<!--               <link linkend='var-glossary-j'>J</link> -->
       <link linkend='var-KARCH'>K</link>
       <link linkend='var-LABELS'>L</link>
       <link linkend='var-MACHINE'>M</link>
       <link linkend='var-NATIVELSBSTRING'>N</link>
       <link linkend='var-OBJCOPY'>O</link>
       <link linkend='var-P'>P</link>
<!--               <link linkend='var-glossary-q'>Q</link> -->
       <link linkend='var-RANLIB'>R</link>
       <link linkend='var-S'>S</link>
       <link linkend='var-T'>T</link>
       <link linkend='var-UBOOT_CONFIG'>U</link>
       <link linkend='var-VOLATILE_LOG_DIR'>V</link>
       <link linkend='var-WARN_QA'>W</link>
       <link linkend='var-XSERVER'>X</link>
<!--               <link linkend='var-glossary-y'>Y</link> -->
<!--               <link linkend='var-glossary-z'>Z</link>-->
    </para>

    <glossdiv id='var-glossary-a'><title>A</title>

        <glossentry id='var-ABIEXTENSION'><glossterm>ABIEXTENSION</glossterm>
            <info>
                ABIEXTENSION[doc] = "Extension to the Application Binary Interface (ABI) field of the GNU canonical architecture name (e.g. "eabi")."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Extension to the Application Binary Interface (ABI)
                    field of the GNU canonical architecture name
                    (e.g. "eabi").
                </para>

                <para>
                   ABI extensions are set in the machine include files.
                   For example, the
                   <filename>meta/conf/machine/include/arm/arch-arm.inc</filename>
                   file sets the following extension:
                   <literallayout class='monospaced'>
     ABIEXTENSION = "eabi"
                   </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ALLOW_EMPTY'><glossterm>ALLOW_EMPTY</glossterm>
            <info>
                ALLOW_EMPTY[doc] = "Specifies whether to produce an output package even if it is empty."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                   Specifies whether to produce an output package even if it is
                   empty.
                   By default, BitBake does not produce empty packages.
                   This default behavior can cause issues when there is an
                   <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link> or
                   some other hard runtime requirement on the existence of the package.
                </para>

                <para>
                   Like all package-controlling variables, you must always use them in
                   conjunction with a package name override, as in:
                   <literallayout class='monospaced'>
     ALLOW_EMPTY_${PN} = "1"
     ALLOW_EMPTY_${PN}-dev = "1"
     ALLOW_EMPTY_${PN}-staticdev = "1"
                   </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ALTERNATIVE'><glossterm>ALTERNATIVE</glossterm>
            <info>
                ALTERNATIVE[doc] = "Lists commands in a package that need an alternative binary naming scheme."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists commands in a package that need an alternative
                    binary naming scheme.
                    Sometimes the same command is provided in multiple packages.
                    When this occurs, the OpenEmbedded build system needs to
                    use the alternatives system to create a different binary
                    naming scheme so the commands can co-exist.
                </para>

                <para>
                    To use the variable, list out the package's commands
                    that also exist as part of another package.
                    For example, if the <filename>busybox</filename> package
                    has four commands that also exist as part of another
                    package, you identify them as follows:
                    <literallayout class='monospaced'>
     ALTERNATIVE_busybox = "sh sed test bracket"
                    </literallayout>
                    For more information on the alternatives system, see the
                    "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ALTERNATIVE_LINK_NAME'><glossterm>ALTERNATIVE_LINK_NAME</glossterm>
            <info>
                ALTERNATIVE_LINK_NAME[doc] = "Used by the alternatives system to map duplicated commands to actual locations."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Used by the alternatives system to map duplicated commands
                    to actual locations.
                    For example, if the <filename>bracket</filename> command
                    provided by the <filename>busybox</filename> package is
                    duplicated through another package, you must use the
                    <filename>ALTERNATIVE_LINK_NAME</filename> variable to
                    specify the actual location:
                    <literallayout class='monospaced'>
     ALTERNATIVE_LINK_NAME[bracket] = "/usr/bin/["
                    </literallayout>
                </para>

                <para>
                    In this example, the binary for the
                    <filename>bracket</filename> command (i.e.
                    <filename>[</filename>) from the
                    <filename>busybox</filename> package resides in
                    <filename>/usr/bin/</filename>.
                    <note>
                        If <filename>ALTERNATIVE_LINK_NAME</filename> is not
                        defined, it defaults to
                        <filename>${bindir}/<replaceable>name</replaceable></filename>.
                    </note>
                </para>

                <para>
                    For more information on the alternatives system, see the
                    "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ALTERNATIVE_PRIORITY'><glossterm>ALTERNATIVE_PRIORITY</glossterm>
            <info>
                ALTERNATIVE_PRIORITY[doc] = "Used by the alternatives system to create default priorities for duplicated commands."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Used by the alternatives system to create default
                    priorities for duplicated commands.
                    You can use the variable to create a single default
                    regardless of the command name or package, a default for
                    specific duplicated commands regardless of the package, or
                    a default for specific commands tied to particular packages.
                    Here are the available syntax forms:
                    <literallayout class='monospaced'>
     ALTERNATIVE_PRIORITY = "<replaceable>priority</replaceable>"
     ALTERNATIVE_PRIORITY[<replaceable>name</replaceable>] = "<replaceable>priority</replaceable>"
     ALTERNATIVE_PRIORITY_<replaceable>pkg</replaceable>[<replaceable>name</replaceable>] = "<replaceable>priority</replaceable>"
                    </literallayout>
                </para>

                <para>
                    For more information on the alternatives system, see the
                    "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ALTERNATIVE_TARGET'><glossterm>ALTERNATIVE_TARGET</glossterm>
            <info>
                ALTERNATIVE_TARGET[doc] = "Used by the alternatives system to create default link locations for duplicated commands."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Used by the alternatives system to create default link
                    locations for duplicated commands.
                    You can use the variable to create a single default
                    location for all duplicated commands regardless of the
                    command name or package, a default for
                    specific duplicated commands regardless of the package, or
                    a default for specific commands tied to particular packages.
                    Here are the available syntax forms:
                    <literallayout class='monospaced'>
     ALTERNATIVE_TARGET = "<replaceable>target</replaceable>"
     ALTERNATIVE_TARGET[<replaceable>name</replaceable>] = "<replaceable>target</replaceable>"
     ALTERNATIVE_TARGET_<replaceable>pkg</replaceable>[<replaceable>name</replaceable>] = "<replaceable>target</replaceable>"
                    </literallayout>
                    <note>
                        <para>
                            If <filename>ALTERNATIVE_TARGET</filename> is not
                            defined, it inherits the value from the
                            <link linkend='var-ALTERNATIVE_LINK_NAME'><filename>ALTERNATIVE_LINK_NAME</filename></link>
                            variable.
                        </para>

                        <para>
                            If <filename>ALTERNATIVE_LINK_NAME</filename> and
                            <filename>ALTERNATIVE_TARGET</filename> are the
                            same, the target for
                            <filename>ALTERNATIVE_TARGET</filename>
                            has "<filename>.{BPN}</filename>" appended to it.
                        </para>

                        <para>
                            Finally, if the file referenced has not been
                            renamed, the alternatives system will rename it to
                            avoid the need to rename alternative files in the
                            <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                            task while
                            retaining support for the command if necessary.
                        </para>
                    </note>
                </para>

                <para>
                    For more information on the alternatives system, see the
                    "<link linkend='ref-classes-update-alternatives'><filename>update-alternatives.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-APPEND'><glossterm>APPEND</glossterm>
            <info>
                APPEND[doc] = "An override list of append strings for target specified using LABELS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An override list of append strings for each target
                    specified with
                    <link linkend='var-LABELS'><filename>LABELS</filename></link>.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
                    class for more information on how this variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AR'><glossterm>AR</glossterm>
            <info>
                AR[doc] = "Minimal command and arguments to run 'ar'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments used to run
                    <filename>ar</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ARCHIVER_MODE'><glossterm>ARCHIVER_MODE</glossterm>
            <info>
                ARCHIVER_MODE[doc] = "Controls archive creation used when releasing source files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When used with the
                    <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
                    class, determines the type of information used to create
                    a released archive.
                    You can use this variable to create archives of patched
                    source, original source, configured source, and so forth
                    by employing the following variable flags (varflags):
                    <literallayout class='monospaced'>
     ARCHIVER_MODE[src] = "original"                 # Uses original (unpacked) source
                                                     # files.

     ARCHIVER_MODE[src] = "patched"                  # Uses patched source files. This is
                                                     # the default.

     ARCHIVER_MODE[src] = "configured"               # Uses configured source files.

     ARCHIVER_MODE[diff] = "1"                       # Uses patches between do_unpack and
                                                     # do_patch.

     ARCHIVER_MODE[diff-exclude] ?= "<replaceable>file</replaceable> <replaceable>file</replaceable> ..."  # Lists files and directories to
                                                     # exclude from diff.

     ARCHIVER_MODE[dumpdata] = "1"                   # Uses environment data.

     ARCHIVER_MODE[recipe] = "1"                     # Uses recipe and include files.

     ARCHIVER_MODE[srpm] = "1"                       # Uses RPM package files.
                    </literallayout>
                    For information on how the variable works, see the
                    <filename>meta/classes/archiver.bbclass</filename> file
                    in the
                    <link linkend='source-directory'>Source Directory</link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AS'><glossterm>AS</glossterm>
            <info>
                AS[doc] = "Minimal command and arguments to run the assembler."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Minimal command and arguments needed to run the
                    assembler.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ASSUME_PROVIDED'><glossterm>ASSUME_PROVIDED</glossterm>
            <info>
                ASSUME_PROVIDED[doc] = "Lists recipe names (PN values) BitBake does not attempt to build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists recipe names
                    (<link linkend='var-PN'><filename>PN</filename></link>
                    values) BitBake does not attempt to build.
                    Instead, BitBake assumes these recipes have already been
                    built.
                </para>

                <para>
                    In OpenEmbedded-Core, <filename>ASSUME_PROVIDED</filename>
                    mostly specifies native tools that should not be built.
                    An example is <filename>git-native</filename>, which when
                    specified, allows for the Git binary from the host to be
                    used rather than building <filename>git-native</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ASSUME_SHLIBS'><glossterm>ASSUME_SHLIBS</glossterm>
            <info>
                ASSUME_SHLIBS[doc] = "Provides additional shlibs provider mapping information, which adds to or overwrites the information provided automatically by the system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Provides additional <filename>shlibs</filename> provider
                    mapping information, which adds to or overwrites the
                    information provided automatically by the system.
                    Separate multiple entries using spaces.
                </para>

                <para>
                    As an example, use the following form to add an
                    <filename>shlib</filename> provider of
                    <replaceable>shlibname</replaceable> in
                    <replaceable>packagename</replaceable> with the optional
                    <replaceable>version</replaceable>:
                    <literallayout class='monospaced'>
     <replaceable>shlibname:packagename</replaceable>[_<replaceable>version</replaceable>]
                    </literallayout>
                </para>

                <para>
                    Here is an example that adds a shared library named
                    <filename>libEGL.so.1</filename> as being provided by
                    the <filename>libegl-implementation</filename> package:
                    <literallayout class='monospaced'>
     ASSUME_SHLIBS = "libEGL.so.1:libegl-implementation"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AUTHOR'><glossterm>AUTHOR</glossterm>
            <info>
                AUTHOR[doc] = "Email address used to contact the original author or authors in order to send patches and forward bugs."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The email address used to contact the original author
                    or authors in order to send patches and forward bugs.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AUTO_LIBNAME_PKGS'><glossterm>AUTO_LIBNAME_PKGS</glossterm>
            <info>
                AUTO_LIBNAME_PKGS[doc] = "Specifies which packages should be checked for libraries and renamed according to Debian library package naming."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When the
                    <link linkend='ref-classes-debian'><filename>debian</filename></link>
                    class is inherited, which is the default behavior,
                    <filename>AUTO_LIBNAME_PKGS</filename> specifies which
                    packages should be checked for libraries and renamed
                    according to Debian library package naming.
                </para>

                <para>
                    The default value is "${PACKAGES}", which causes the
                    debian class to act on all packages that are
                    explicitly generated by the recipe.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AUTO_SYSLINUXMENU'><glossterm>AUTO_SYSLINUXMENU</glossterm>
            <info>
                AUTO_SYSLINUXMENU[doc] = "Enables creating an automatic menu for the syslinux bootloader."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Enables creating an automatic menu for the syslinux
                    bootloader.
                    You must set this variable in your recipe.
                    The
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class checks this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AUTOREV'><glossterm>AUTOREV</glossterm>
            <info>
                AUTOREV[doc] = "When SRCREV is set to the value of this variable, it specifies to use the latest source revision in the repository."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When
                    <filename><link linkend='var-SRCREV'>SRCREV</link></filename>
                    is set to the value of this variable, it specifies to use
                    the latest source revision in the repository.
                    Here is an example:
                    <literallayout class='monospaced'>
     SRCREV = "${AUTOREV}"
                    </literallayout>
                </para>

                <para>
                    If you use the previous statement to retrieve the latest
                    version of software, you need to be sure
                    <link linkend='var-PV'><filename>PV</filename></link>
                    contains
                    <filename>${</filename><link linkend='var-SRCPV'><filename>SRCPV</filename></link><filename>}</filename>.
                    For example, suppose you have a kernel recipe that
                    inherits the
                    <link linkend='ref-classes-kernel'>kernel</link> class
                    and you use the previous statement.
                    In this example, <filename>${SRCPV}</filename> does not
                    automatically get into <filename>PV</filename>.
                    Consequently, you need to change <filename>PV</filename>
                    in your recipe so that it does contain
                    <filename>${SRCPV}</filename>.
                </para>

                <para>
                    For more information see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#automatically-incrementing-a-binary-package-revision-number'>Automatically Incrementing a Binary Package Revision Number</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AVAILABLE_LICENSES'><glossterm>AVAILABLE_LICENSES</glossterm>
            <info>
                AVAILABLE_LICENSES[doc] = "List of licenses found in the directories specified by COMMON_LICENSE_DIR and LICENSE_PATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->

                    List of licenses found in the directories specified
                    by <link linkend='var-COMMON_LICENSE_DIR'><filename>COMMON_LICENSE_DIR</filename></link>
                    and <link linkend='var-LICENSE_PATH'><filename>LICENSE_PATH</filename></link>.

                    <note>
                        It is assumed that all changes
                        to <filename>COMMON_LICENSE_DIR</filename>
                        and <filename>LICENSE_PATH</filename> have been done
                        before <filename>AVAILABLE_LICENSES</filename> is
                        defined
                        (in <link linkend='ref-classes-license'>license.bbclass</link>).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-AVAILTUNES'><glossterm>AVAILTUNES</glossterm>
            <info>
                AVAILTUNES[doc] = "The list of defined CPU and Application Binary Interface (ABI) tunings (i.e.  "tunes") available for use by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of defined CPU and Application Binary Interface
                    (ABI) tunings (i.e.  "tunes") available for use by the
                    OpenEmbedded build system.
                </para>

                <para>
                    The list simply presents the tunes that are available.
                    Not all tunes may be compatible with a particular
                    machine configuration, or with each other in a
                    <ulink url='&YOCTO_DOCS_DEV_URL;#combining-multiple-versions-library-files-into-one-image'>Multilib</ulink>
                    configuration.
                </para>

                <para>
                    To add a tune to the list, be sure to append it with
                    spaces using the "+=" BitBake operator.
                    Do not simply replace the list by using the "=" operator.
                    See the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#basic-syntax'>Basic Syntax</ulink>"
                    section in the BitBake User Manual for more information.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-b'><title>B</title>

        <glossentry id='var-B'><glossterm>B</glossterm>
            <info>
                B[doc] = "The Build Directory. The OpenEmbedded build system places generated objects into the Build Directory during a recipe's build process."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory within the
                    <link linkend='build-directory'>Build Directory</link>
                    in which the OpenEmbedded build system places generated
                    objects during a recipe's build process.
                    By default, this directory is the same as the <link linkend='var-S'><filename>S</filename></link>
                    directory, which is defined as:
                    <literallayout class='monospaced'>
     S = "${WORKDIR}/${BP}"
                    </literallayout>
                </para>

                <para>
                    You can separate the (<filename>S</filename>) directory
                    and the directory pointed to by the <filename>B</filename>
                    variable.
                    Most Autotools-based recipes support separating these
                    directories.
                    The build system defaults to using separate directories for
                    <filename>gcc</filename> and some kernel recipes.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BAD_RECOMMENDATIONS'><glossterm>BAD_RECOMMENDATIONS</glossterm>
            <info>
                BAD_RECOMMENDATIONS[doc] = "A list of packages not to install despite being recommended by a recipe. Support for this variable exists only when using the IPK packaging backend."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists "recommended-only" packages to not install.
                    Recommended-only packages are packages installed only
                    through the
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
                    variable.
                    You can prevent any of these "recommended" packages from
                    being installed by listing them with the
                    <filename>BAD_RECOMMENDATIONS</filename> variable:
                    <literallayout class='monospaced'>
     BAD_RECOMMENDATIONS = "<replaceable>package_name</replaceable> <replaceable>package_name</replaceable> <replaceable>package_name</replaceable> ..."
                    </literallayout>
                </para>

                <para>
                    You can set this variable globally in your
                    <filename>local.conf</filename> file or you can attach it to
                    a specific image recipe by using the recipe name override:
                    <literallayout class='monospaced'>
     BAD_RECOMMENDATIONS_pn-<replaceable>target_image</replaceable> = "<replaceable>package_name</replaceable>"
                    </literallayout>
                </para>

                <para>
                    It is important to realize that if you choose to not install
                    packages using this variable and some other packages are
                    dependent on them (i.e. listed in a recipe's
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    variable), the OpenEmbedded build system ignores your
                    request and will install the packages to avoid dependency
                    errors.
                </para>

                <para>
                    Support for this variable exists only when using the
                    IPK and RPM packaging backend.
                    Support does not exist for DEB.
                </para>

                <para>
                    See the
                    <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
                    and the
                    <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
                    variables for related information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BASE_LIB'><glossterm>BASE_LIB</glossterm>
            <info>
                BASE_LIB[doc] = "The library directory name for the CPU or Application Binary Interface (ABI) tune."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The library directory name for the CPU or Application
                    Binary Interface (ABI) tune.
                    The <filename>BASE_LIB</filename> applies only in the
                    Multilib context.
                    See the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#combining-multiple-versions-library-files-into-one-image'>Combining Multiple Versions of Library Files into One Image</ulink>"
                    section in the Yocto Project Development Tasks Manual for
                    information on Multilib.
                </para>

                <para>
                    The <filename>BASE_LIB</filename> variable is defined in
                    the machine include files in the
                    <link linkend='source-directory'>Source Directory</link>.
                    If Multilib is not being used, the value defaults to "lib".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BASE_WORKDIR'><glossterm>BASE_WORKDIR</glossterm>
            <info>
                BASE_WORKDIR[doc] = "Points to the base of the work directory for all recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the base of the work directory for all recipes.
                    The default value is "${TMPDIR}/work".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_ALLOWED_NETWORKS'><glossterm>BB_ALLOWED_NETWORKS</glossterm>
            <info>
                BB_ALLOWED_NETWORKS[doc] = "A list of hosts that the fetcher is allowed to use to obtain the required source code."
            </info>
            <glossdef>
                <para>
                    Specifies a space-delimited list of hosts that the fetcher
                    is allowed to use to obtain the required source code.
                    Following are considerations surrounding this variable:
                    <itemizedlist>
                        <listitem><para>
                            This host list is only used if
                            <filename>BB_NO_NETWORK</filename> is either not
                            set or set to "0".
                            </para></listitem>
                        <listitem><para>
                            Limited support for wildcard matching against the
                            beginning of host names exists.
                            For example, the following setting matches
                            <filename>git.gnu.org</filename>,
                            <filename>ftp.gnu.org</filename>, and
                            <filename>foo.git.gnu.org</filename>.
                            <literallayout class='monospaced'>
     BB_ALLOWED_NETWORKS = "*.gnu.org"
                            </literallayout>
                            <note><title>Important</title>
                                <para>The use of the "<filename>*</filename>"
                                character only works at the beginning of
                                a host name and it must be isolated from
                                the remainder of the host name.
                                You cannot use the wildcard character in any
                                other location of the name or combined with
                                the front part of the name.</para>

                                <para>For example,
                                <filename>*.foo.bar</filename> is supported,
                                while <filename>*aa.foo.bar</filename> is not.
                                </para>
                            </note>
                            </para></listitem>
                        <listitem><para>
                            Mirrors not in the host list are skipped and
                            logged in debug.
                            </para></listitem>
                        <listitem><para>
                            Attempts to access networks not in the host list
                            cause a failure.
                            </para></listitem>
                    </itemizedlist>
                    Using <filename>BB_ALLOWED_NETWORKS</filename> in
                    conjunction with
                    <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
                    is very useful.
                    Adding the host you want to use to
                    <filename>PREMIRRORS</filename> results in the source code
                    being fetched from an allowed location and avoids raising
                    an error when a host that is not allowed is in a
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                    statement.
                    This is because the fetcher does not attempt to use the
                    host listed in <filename>SRC_URI</filename> after a
                    successful fetch from the
                    <filename>PREMIRRORS</filename> occurs.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_DANGLINGAPPENDS_WARNONLY'><glossterm>BB_DANGLINGAPPENDS_WARNONLY</glossterm>
            <info>
                BB_DANGLINGAPPENDS_WARNONLY[doc] = "Defines how BitBake handles situations where an append file (.bbappend) has no corresponding recipe file (.bb)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines how BitBake handles situations where an append
                    file (<filename>.bbappend</filename>) has no
                    corresponding recipe file (<filename>.bb</filename>).
                    This condition often occurs when layers get out of sync
                    (e.g. <filename>oe-core</filename> bumps a
                    recipe version and the old recipe no longer exists and the
                    other layer has not been updated to the new version
                    of the recipe yet).
                </para>

                <para>
                    The default fatal behavior is safest because it is
                    the sane reaction given something is out of sync.
                    It is important to realize when your changes are no longer
                    being applied.
                </para>

                <para>
                    You can change the default behavior by setting this
                    variable to "1", "yes", or "true"
                    in your <filename>local.conf</filename> file, which is
                    located in the
                    <link linkend='build-directory'>Build Directory</link>:
                    Here is an example:
                    <literallayout class='monospaced'>
     BB_DANGLINGAPPENDS_WARNONLY = "1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_DISKMON_DIRS'><glossterm>BB_DISKMON_DIRS</glossterm>
            <info>
                BB_DISKMON_DIRS[doc] = "Monitors disk space and available inodes during the build and allows you to control the build based on these parameters."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Monitors disk space and available inodes during the build
                    and allows you to control the build based on these
                    parameters.
                </para>

                <para>
                    Disk space monitoring is disabled by default.
                    To enable monitoring, add the <filename>BB_DISKMON_DIRS</filename>
                    variable to your <filename>conf/local.conf</filename> file found in the
                    <link linkend='build-directory'>Build Directory</link>.
                    Use the following form:
                    <literallayout class='monospaced'>
     BB_DISKMON_DIRS = "<replaceable>action</replaceable>,<replaceable>dir</replaceable>,<replaceable>threshold</replaceable> [...]"

     where:

        <replaceable>action</replaceable> is:
           ABORT:     Immediately abort the build when
                      a threshold is broken.
           STOPTASKS: Stop the build after the currently
                      executing tasks have finished when
                      a threshold is broken.
           WARN:      Issue a warning but continue the
                      build when a threshold is broken.
                      Subsequent warnings are issued as
                      defined by the BB_DISKMON_WARNINTERVAL
                      variable, which must be defined in
                      the conf/local.conf file.

        <replaceable>dir</replaceable> is:
           Any directory you choose. You can specify one or
           more directories to monitor by separating the
           groupings with a space.  If two directories are
           on the same device, only the first directory
           is monitored.

        <replaceable>threshold</replaceable> is:
           Either the minimum available disk space,
           the minimum number of free inodes, or
           both.  You must specify at least one.  To
           omit one or the other, simply omit the value.
           Specify the threshold using G, M, K for Gbytes,
           Mbytes, and Kbytes, respectively. If you do
           not specify G, M, or K, Kbytes is assumed by
           default.  Do not use GB, MB, or KB.
                    </literallayout>
                </para>

                <para>
                    Here are some examples:
                    <literallayout class='monospaced'>
     BB_DISKMON_DIRS = "ABORT,${TMPDIR},1G,100K WARN,${SSTATE_DIR},1G,100K"
     BB_DISKMON_DIRS = "STOPTASKS,${TMPDIR},1G"
     BB_DISKMON_DIRS = "ABORT,${TMPDIR},,100K"
                    </literallayout>
                    The first example works only if you also provide
                    the <link linkend='var-BB_DISKMON_WARNINTERVAL'><filename>BB_DISKMON_WARNINTERVAL</filename></link> variable
                    in the <filename>conf/local.conf</filename>.
                    This example causes the build system to immediately
                    abort when either the disk space in <filename>${TMPDIR}</filename> drops
                    below 1 Gbyte or the available free inodes drops below
                    100 Kbytes.
                    Because two directories are provided with the variable, the
                    build system also issue a
                    warning when the disk space in the
                    <filename>${SSTATE_DIR}</filename> directory drops
                    below 1 Gbyte or the number of free inodes drops
                    below 100 Kbytes.
                    Subsequent warnings are issued during intervals as
                    defined by the <filename>BB_DISKMON_WARNINTERVAL</filename>
                    variable.
                </para>

                <para>
                    The second example stops the build after all currently
                    executing tasks complete when the minimum disk space
                    in the <filename>${<link linkend='var-TMPDIR'>TMPDIR</link>}</filename>
                    directory drops below 1 Gbyte.
                    No disk monitoring occurs for the free inodes in this case.
                </para>

                <para>
                    The final example immediately aborts the build when the
                    number of free inodes in the <filename>${TMPDIR}</filename> directory
                    drops below 100 Kbytes.
                    No disk space monitoring for the directory itself occurs
                    in this case.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_DISKMON_WARNINTERVAL'><glossterm>BB_DISKMON_WARNINTERVAL</glossterm>
            <info>
                BB_DISKMON_WARNINTERVAL[doc] = "Defines the disk space and free inode warning intervals. To set these intervals, define the variable in the conf/local.conf file in the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the disk space and free inode warning intervals.
                    To set these intervals, define the variable in your
                    <filename>conf/local.conf</filename> file in the
                    <link linkend='build-directory'>Build Directory</link>.
                </para>

                <para>
                    If you are going to use the
                    <filename>BB_DISKMON_WARNINTERVAL</filename> variable, you must
                    also use the
                    <link linkend='var-BB_DISKMON_DIRS'><filename>BB_DISKMON_DIRS</filename></link> variable
                    and define its action as "WARN".
                    During the build, subsequent warnings are issued each time
                    disk space or number of free inodes further reduces by
                    the respective interval.
                </para>

                <para>
                    If you do not provide a <filename>BB_DISKMON_WARNINTERVAL</filename>
                    variable and you do use <filename>BB_DISKMON_DIRS</filename> with
                    the "WARN" action, the disk monitoring interval defaults to
                    the following:
                    <literallayout class='monospaced'>
     BB_DISKMON_WARNINTERVAL = "50M,5K"
                    </literallayout>
                </para>

                <para>
                    When specifying the variable in your configuration file,
                    use the following form:
                    <literallayout class='monospaced'>
     BB_DISKMON_WARNINTERVAL = "<replaceable>disk_space_interval</replaceable>,<replaceable>disk_inode_interval</replaceable>"

     where:

        <replaceable>disk_space_interval</replaceable> is:
           An interval of memory expressed in either
           G, M, or K for Gbytes, Mbytes, or Kbytes,
           respectively. You cannot use GB, MB, or KB.

        <replaceable>disk_inode_interval</replaceable> is:
           An interval of free inodes expressed in either
           G, M, or K for Gbytes, Mbytes, or Kbytes,
           respectively. You cannot use GB, MB, or KB.
                    </literallayout>
                </para>

                <para>
                    Here is an example:
                    <literallayout class='monospaced'>
     BB_DISKMON_DIRS = "WARN,${SSTATE_DIR},1G,100K"
     BB_DISKMON_WARNINTERVAL = "50M,5K"
                    </literallayout>
                    These variables cause the OpenEmbedded build system to
                    issue subsequent warnings each time the available
                    disk space further reduces by 50 Mbytes or the number
                    of free inodes further reduces by 5 Kbytes in the
                    <filename>${SSTATE_DIR}</filename> directory.
                    Subsequent warnings based on the interval occur each time
                    a respective interval is reached beyond the initial warning
                    (i.e. 1 Gbytes and 100 Kbytes).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_GENERATE_MIRROR_TARBALLS'><glossterm>BB_GENERATE_MIRROR_TARBALLS</glossterm>
            <info>
                BB_GENERATE_MIRROR_TARBALLS[doc] = "Causes tarballs of the source control repositories to be placed in the DL_DIR directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Causes tarballs of the source control repositories
                    (e.g. Git repositories), including metadata, to be placed
                    in the
                    <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>
                    directory.
                </para>

                <para>
                    For performance reasons, creating and placing tarballs of
                    these repositories is not the default action by the
                    OpenEmbedded build system.
                    <literallayout class='monospaced'>
     BB_GENERATE_MIRROR_TARBALLS = "1"
                    </literallayout>
                    Set this variable in your <filename>local.conf</filename>
                    file in the
                    <link linkend='build-directory'>Build Directory</link>.
                </para>

                <para>
                    Once you have the tarballs containing your source files,
                    you can clean up your <filename>DL_DIR</filename>
                    directory by deleting any Git or other source control
                    work directories.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_NUMBER_THREADS'><glossterm>BB_NUMBER_THREADS</glossterm>
            <info>
                BB_NUMBER_THREADS[doc] = "The maximum number of tasks BitBake should run in parallel at any one time. This variable is automatically configured to be equal to the number of build system cores."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The maximum number of tasks BitBake should run in parallel
                    at any one time.
                    The OpenEmbedded build system automatically configures
                    this variable to be equal to the number of cores on the
                    build system.
                    For example, a system with a dual core processor that
                    also uses hyper-threading causes the
                    <filename>BB_NUMBER_THREADS</filename> variable to default
                    to "4".
                </para>

                <para>
                    For single socket systems (i.e. one CPU), you should not
                    have to override this variable to gain optimal parallelism
                    during builds.
                    However, if you have very large systems that employ
                    multiple physical CPUs, you might want to make sure the
                    <filename>BB_NUMBER_THREADS</filename> variable is not
                    set higher than "20".
                </para>

                <para>
                    For more information on speeding up builds, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#speeding-up-a-build'>Speeding Up a Build</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SERVER_TIMEOUT'><glossterm>BB_SERVER_TIMEOUT</glossterm>
            <info>
                BB_SERVER_TIMEOUT [doc] = "Specifies the time (in seconds) after which to unload the BitBake server due to inactivity."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the time (in seconds) after which to unload the
                    BitBake server due to inactivity.
                    Set <filename>BB_SERVER_TIMEOUT</filename> to determine how
                    long the BitBake server stays resident between invocations.
                </para>

                <para>
                    For example, the following statement in your
                    <filename>local.conf</filename> file instructs the server
                    to be unloaded after 20 seconds of inactivity:
                    <literallayout class='monospaced'>
     BB_SERVER_TIMEOUT = "20"
                    </literallayout>
                    If you want the server to never be unloaded, set
                    <filename>BB_SERVER_TIMEOUT</filename> to "-1".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBCLASSEXTEND'><glossterm>BBCLASSEXTEND</glossterm>
            <info>
                BBCLASSEXTEND[doc] = "Allows you to extend a recipe so that it builds variants of the software. Common variants for recipes are 'native', 'cross', 'nativesdk', and multilibs."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Allows you to extend a recipe so that it builds variants of the software.
                    Common variants for recipes exist such as "natives" like <filename>quilt-native</filename>,
                    which is a copy of Quilt built to run on the build system;
                    "crosses" such as <filename>gcc-cross</filename>,
                    which is a compiler built to run on the build machine but produces binaries
                    that run on the target <link linkend='var-MACHINE'><filename>MACHINE</filename></link>;
                    "nativesdk", which targets the SDK machine instead of <filename>MACHINE</filename>;
                    and "mulitlibs" in the form "<filename>multilib:</filename><replaceable>multilib_name</replaceable>".
                </para>

                <para>
                    To build a different variant of the recipe with a minimal amount of code, it usually
                    is as simple as adding the following to your recipe:
                    <literallayout class='monospaced'>
     BBCLASSEXTEND =+ "native nativesdk"
     BBCLASSEXTEND =+ "multilib:<replaceable>multilib_name</replaceable>"
                    </literallayout>
                    <note>
                        <para>
                        Internally, the <filename>BBCLASSEXTEND</filename>
                        mechanism generates recipe variants by rewriting
                        variable values and applying overrides such as
                        <filename>_class-native</filename>.
                        For example, to generate a native version of a recipe,
                        a
                        <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                        on "foo" is rewritten to a <filename>DEPENDS</filename>
                        on "foo-native".
                        </para>

                        <para>
                        Even when using <filename>BBCLASSEXTEND</filename>, the
                        recipe is only parsed once.
                        Parsing once adds some limitations.
                        For example, it is not possible to
                        include a different file depending on the variant,
                        since <filename>include</filename> statements are
                        processed when the recipe is parsed.
                        </para>
                    </note>
                </para>
             </glossdef>
        </glossentry>

        <glossentry id='var-BBFILE_COLLECTIONS'><glossterm>BBFILE_COLLECTIONS</glossterm>
            <info>
                BBFILE_COLLECTIONS[doc] = "Lists the names of configured layers. These names are used to find the other BBFILE_* variables."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists the names of configured layers.
                    These names are used to find the other <filename>BBFILE_*</filename>
                    variables.
                    Typically, each layer will append its name to this variable in its
                    <filename>conf/layer.conf</filename> file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBFILE_PATTERN'><glossterm>BBFILE_PATTERN</glossterm>
            <info>
                BBFILE_PATTERN[doc] = "Variable that expands to match files from BBFILES in a particular layer. This variable is used in the layer.conf file and must be suffixed with the name of a layer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Variable that expands to match files from
                    <link linkend='var-BBFILES'><filename>BBFILES</filename></link>
                    in a particular layer.
                    This variable is used in the <filename>conf/layer.conf</filename> file and must
                    be suffixed with the name of the specific layer (e.g.
                    <filename>BBFILE_PATTERN_emenlow</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBFILE_PRIORITY'><glossterm>BBFILE_PRIORITY</glossterm>
            <info>
                BBFILE_PRIORITY[doc] = "Assigns the priority for recipe files in each layer. Setting this variable allows you to prioritize a layer against other layers that contain the same recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Assigns the priority for recipe files in each layer.
                </para>

                <para>
                    This variable is useful in situations where the same recipe appears in
                    more than one layer.
                    Setting this variable allows you to prioritize a
                    layer against other layers that contain the same recipe - effectively
                    letting you control the precedence for the multiple layers.
                    The precedence established through this variable stands regardless of a
                    recipe's version
                    (<link linkend='var-PV'><filename>PV</filename></link> variable).
                    For example, a layer that has a recipe with a higher <filename>PV</filename> value but for
                    which the <filename>BBFILE_PRIORITY</filename> is set to have a lower precedence still has a
                    lower precedence.
                </para>

                <para>
                    A larger value for the <filename>BBFILE_PRIORITY</filename> variable results in a higher
                    precedence.
                    For example, the value 6 has a higher precedence than the value 5.
                    If not specified, the <filename>BBFILE_PRIORITY</filename> variable is set based on layer
                    dependencies (see the
                    <filename><link linkend='var-LAYERDEPENDS'>LAYERDEPENDS</link></filename> variable for
                    more information.
                    The default priority, if unspecified
                    for a layer with no dependencies, is the lowest defined priority + 1
                    (or 1 if no priorities are defined).
                </para>
                <tip>
                    You can use the command <filename>bitbake-layers show-layers</filename> to list
                    all configured layers along with their priorities.
                </tip>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBFILES'><glossterm>BBFILES</glossterm>
            <info>
                BBFILES[doc] = "A space-separated list of recipe files BitBake uses to build software."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list of recipe files BitBake uses to
                    build software.
                </para>

                <para>
                    When specifying recipe files, you can pattern match using
                    Python's
                    <ulink url='https://docs.python.org/3/library/glob.html'><filename>glob</filename></ulink>
                    syntax.
                    For details on the syntax, see the documentation by
                    following the previous link.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBFILES_DYNAMIC'><glossterm>BBFILES_DYNAMIC</glossterm>
            <info>
                BBFILES_DYNAMIC[doc] = "Activates content when identified layers are present."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Activates content when identified layers are present.
                    You identify the layers by the collections that the layers
                    define.
                </para>

                <para>
                    Use the <filename>BBFILES_DYNAMIC</filename> variable to
                    avoid <filename>.bbappend</filename> files whose
                    corresponding <filename>.bb</filename> file is in a layer
                    that attempts to modify other layers through
                    <filename>.bbappend</filename> but does not want to
                    introduce a hard dependency on those other layers.
                </para>

                <para>
                    Use the following form for
                    <filename>BBFILES_DYNAMIC</filename>:
                    <literallayout class='monospaced'>
     <replaceable>collection_name</replaceable>:<replaceable>filename_pattern</replaceable>
                    </literallayout>
                    The following example identifies two collection names and
                    two filename patterns:
                    <literallayout class='monospaced'>
     BBFILES_DYNAMIC += " \
         clang-layer:${LAYERDIR}/bbappends/meta-clang/*/*/*.bbappend \
         core:${LAYERDIR}/bbappends/openembedded-core/meta/*/*/*.bbappend \
     "
                    </literallayout>
                    This next example shows an error message that occurs
                    because invalid entries are found, which cause parsing to
                    abort:
                    <literallayout class='monospaced'>
     ERROR: BBFILES_DYNAMIC entries must be of the form &lt;collection name&gt;:&lt;filename pattern&gt;, not:
         /work/my-layer/bbappends/meta-security-isafw/*/*/*.bbappend
         /work/my-layer/bbappends/openembedded-core/meta/*/*/*.bbappend
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBINCLUDELOGS'><glossterm>BBINCLUDELOGS</glossterm>
            <info>
                BBINCLUDELOGS[doc] = "Variable that controls how BitBake displays logs on build failure."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Variable that controls how BitBake displays logs on build failure.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBINCLUDELOGS_LINES'><glossterm>BBINCLUDELOGS_LINES</glossterm>
            <info>
                BBINCLUDELOGS_LINES[doc] = "Amount of log lines printed on failure."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If
                    <link linkend='var-BBINCLUDELOGS'><filename>BBINCLUDELOGS</filename></link>
                    is set, specifies the maximum number of lines from the
                    task log file to print when reporting a failed task.
                    If you do not set <filename>BBINCLUDELOGS_LINES</filename>,
                    the entire log is printed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBLAYERS'><glossterm>BBLAYERS</glossterm>
            <info>
                BBLAYERS[doc] = "Lists the layers to enable during the build. This variable is defined in the bblayers.conf configuration file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists the layers to enable during the build.
                    This variable is defined in the <filename>bblayers.conf</filename> configuration
                    file in the
                    <link linkend='build-directory'>Build Directory</link>.
                    Here is an example:
                    <literallayout class='monospaced'>
     BBLAYERS = " \
       /home/scottrif/poky/meta \
       /home/scottrif/poky/meta-poky \
       /home/scottrif/poky/meta-yocto-bsp \
       /home/scottrif/poky/meta-mykernel \
       "
                    </literallayout>
                </para>

                <para>
                    This example enables four layers, one of which is a custom, user-defined layer
                    named <filename>meta-mykernel</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBMASK'><glossterm>BBMASK</glossterm>
            <info>
                BBMASK[doc] = "Prevents BitBake from processing specific recipes or recipe append files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Prevents BitBake from processing recipes and recipe
                    append files.
                </para>

                <para>
                    You can use the <filename>BBMASK</filename> variable
                    to "hide" these <filename>.bb</filename> and
                    <filename>.bbappend</filename> files.
                    BitBake ignores any recipe or recipe append files that
                    match any of the expressions.
                    It is as if BitBake does not see them at all.
                    Consequently, matching files are not parsed or otherwise
                    used by BitBake.
                </para>

                <para>
                    The values you provide are passed to Python's regular
                    expression compiler.
                    Consequently, the syntax follows Python's Regular
                    Expression (re) syntax.
                    The expressions are compared against the full paths to
                    the files.
                    For complete syntax information, see Python's
                    documentation at
                    <ulink url='http://docs.python.org/3/library/re.html#re'></ulink>.
                </para>

                <para>
                    The following example uses a complete regular expression
                    to tell BitBake to ignore all recipe and recipe append
                    files in the <filename>meta-ti/recipes-misc/</filename>
                    directory:
                    <literallayout class='monospaced'>
     BBMASK = "meta-ti/recipes-misc/"
                    </literallayout>
                    If you want to mask out multiple directories or recipes,
                    you can specify multiple regular expression fragments.
                    This next example masks out multiple directories and
                    individual recipes:
                    <literallayout class='monospaced'>
     BBMASK += "/meta-ti/recipes-misc/ meta-ti/recipes-ti/packagegroup/"
     BBMASK += "/meta-oe/recipes-support/"
     BBMASK += "/meta-foo/.*/openldap"
     BBMASK += "opencv.*\.bbappend"
     BBMASK += "lzma"
                    </literallayout>
                    <note>
                        When specifying a directory name, use the trailing
                        slash character to ensure you match just that directory
                        name.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBMULTICONFIG'><glossterm>BBMULTICONFIG</glossterm>
            <info>
                BBMULTICONFIG[doc] = "Specifies each additional separate configuration when you are building targets with multiple configurations."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies each additional separate configuration when you
                    are building targets with multiple configurations.
                    Use this variable in your
                    <filename>conf/local.conf</filename> configuration file.
                    Specify a <replaceable>multiconfigname</replaceable> for
                    each configuration file you are using.
                    For example, the following line specifies three
                    configuration files:
                    <literallayout class='monospaced'>
     BBMULTICONFIG = "configA configB configC"
                    </literallayout>
                    Each configuration file you use must reside in the
                    <link linkend='build-directory'>Build Directory</link>
                    <filename>conf/multiconfig</filename> directory
                    (e.g.
                    <replaceable>build_directory</replaceable><filename>/conf/multiconfig/configA.conf</filename>).
                </para>

                <para>
                    For information on how to use
                    <filename>BBMULTICONFIG</filename> in an environment that
                    supports building targets with multiple configurations,
                    see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-building-images-for-multiple-targets-using-multiple-configurations'>Building Images for Multiple Targets Using Multiple Configurations</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBPATH'><glossterm>BBPATH</glossterm>
            <info>
                BBPATH[doc] = "Used by BitBake to locate .bbclass and configuration files. This variable is analogous to the PATH variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Used by BitBake to locate
                    <filename>.bbclass</filename> and configuration files.
                    This variable is analogous to the
                    <filename>PATH</filename> variable.
                    <note>
                        If you run BitBake from a directory outside of the
                        <link linkend='build-directory'>Build Directory</link>,
                        you must be sure to set
                        <filename>BBPATH</filename> to point to the
                        Build Directory.
                        Set the variable as you would any environment variable
                        and then run BitBake:
                        <literallayout class='monospaced'>
     $ BBPATH = "<replaceable>build_directory</replaceable>"
     $ export BBPATH
     $ bitbake <replaceable>target</replaceable>
                        </literallayout>
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBSERVER'><glossterm>BBSERVER</glossterm>
            <info>
                BBSERVER[doc] = "Points to the BitBake remote server."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If defined in the BitBake environment,
                    <filename>BBSERVER</filename> points to the BitBake
                    remote server.
                </para>

                <para>
                    Use the following format to export the variable to the
                    BitBake environment:
                    <literallayout class='monospaced'>
     export BBSERVER=localhost:$port
                    </literallayout>
                </para>

                <para>
                    By default, <filename>BBSERVER</filename> also appears in
                    <ulink url='&YOCTO_DOCS_BB_URL;#var-BB_HASHBASE_WHITELIST'><filename>BB_HASHBASE_WHITELIST</filename></ulink>.
                    Consequently, <filename>BBSERVER</filename> is excluded
                    from checksum and dependency data.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BINCONFIG'><glossterm>BINCONFIG</glossterm>
            <info>
                BINCONFIG[doc] = "When inheriting the binconfig-disabled class, this variable specifies binary configuration scripts to disable in favor of using pkg-config to query the information."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-binconfig-disabled'><filename>binconfig-disabled</filename></link>
                    class, this variable specifies binary configuration
                    scripts to disable in favor of using
                    <filename>pkg-config</filename> to query the information.
                    The <filename>binconfig-disabled</filename> class will
                    modify the specified scripts to return an error so that
                    calls to them can be easily found and replaced.
                </para>

                <para>
                    To add multiple scripts, separate them by spaces.
                    Here is an example from the <filename>libpng</filename>
                    recipe:
                    <literallayout class='monospaced'>
     BINCONFIG = "${bindir}/libpng-config ${bindir}/libpng16-config"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BINCONFIG_GLOB'><glossterm>BINCONFIG_GLOB</glossterm>
            <info>
                BINCONFIG_GLOB[doc] = "When inheriting binconfig.bbclass from a recipe, this variable specifies a wildcard for configuration scripts that need editing."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-binconfig'><filename>binconfig</filename></link>
                    class, this variable specifies a wildcard for
                    configuration scripts that need editing.
                    The scripts are edited to correct any paths that have been
                    set up during compilation so that they are correct for
                    use when installed into the sysroot and called by the
                    build processes of other recipes.
                    <note>
                        The <filename>BINCONFIG_GLOB</filename> variable
                        uses
                        <ulink url='http://tldp.org/LDP/abs/html/globbingref.html'>shell globbing</ulink>,
                        which is recognition and expansion of wildcards during
                        pattern matching.
                        Shell globbing is very similar to
                        <ulink url='https://docs.python.org/2/library/fnmatch.html#module-fnmatch'><filename>fnmatch</filename></ulink>
                        and
                        <ulink url='https://docs.python.org/2/library/glob.html'><filename>glob</filename></ulink>.
                    </note>
                </para>

                <para>
                    For more information on how this variable works, see
                    <filename>meta/classes/binconfig.bbclass</filename> in the
                    <link linkend='source-directory'>Source Directory</link>.
                    You can also find general information on the class in the
                    "<link linkend='ref-classes-binconfig'><filename>binconfig.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BP'><glossterm>BP</glossterm>
            <info>
                BP[doc] = "The base recipe name and version but without any special recipe name suffix (i.e. -native, lib64-, and so forth). BP is comprised of ${BPN}-${PV}"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base recipe name and version but without any special
                    recipe name suffix (i.e. <filename>-native</filename>, <filename>lib64-</filename>,
                    and so forth).
                    <filename>BP</filename> is comprised of the following:
                    <literallayout class="monospaced">
     ${BPN}-${PV}
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BPN'><glossterm>BPN</glossterm>
            <info>
                BPN[doc] = "This variable is a version of the PN variable but removes common suffixes and prefixes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable is a version of the
                    <link linkend='var-PN'><filename>PN</filename></link>
                    variable with common prefixes and suffixes
                    removed, such as <filename>nativesdk-</filename>,
                    <filename>-cross</filename>,
                    <filename>-native</filename>, and multilib's
                    <filename>lib64-</filename> and
                    <filename>lib32-</filename>.
                    The exact lists of prefixes and suffixes removed are
                    specified by the
                    <link linkend='var-MLPREFIX'><filename>MLPREFIX</filename></link>
                    and
                    <link linkend='var-SPECIAL_PKGSUFFIX'><filename>SPECIAL_PKGSUFFIX</filename></link>
                    variables, respectively.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUGTRACKER'><glossterm>BUGTRACKER</glossterm>
            <info>
                BUGTRACKER[doc] = "Specifies a URL for an upstream bug tracking website for a recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a URL for an upstream bug tracking website for
                    a recipe.
                    The OpenEmbedded build system does not use this variable.
                    Rather, the variable is a useful pointer in case a bug
                    in the software being built needs to be manually reported.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_ARCH'><glossterm>BUILD_ARCH</glossterm>
            <info>
                BUILD_ARCH[doc] = "The name of the building architecture (e.g. i686)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the architecture of the build host
                    (e.g. <filename>i686</filename>).
                    The OpenEmbedded build system sets the value of
                    <filename>BUILD_ARCH</filename> from the machine name
                    reported by the <filename>uname</filename> command.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_AS_ARCH'><glossterm>BUILD_AS_ARCH</glossterm>
            <info>
                BUILD_AS_ARCH[doc] = "Specifies the architecture-specific assembler flags for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the architecture-specific assembler flags for
                    the build host. By default, the value of
                    <filename>BUILD_AS_ARCH</filename> is empty.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_CC_ARCH'><glossterm>BUILD_CC_ARCH</glossterm>
            <info>
                BUILD_CC_ARCH[doc] = "Specifies the architecture-specific C compiler flags for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the architecture-specific C compiler flags for
                    the build host. By default, the value of
                    <filename>BUILD_CC_ARCH</filename> is empty.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_CCLD'><glossterm>BUILD_CCLD</glossterm>
            <info>
                BUILD_CCLD[doc] = "Specifies the linker command to be used for the build host when the C compiler is being used as the linker."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the linker command to be used for the build host
                    when the C compiler is being used as the linker. By default,
                    <filename>BUILD_CCLD</filename> points to GCC and passes as
                    arguments the value of
                    <link linkend='var-BUILD_CC_ARCH'><filename>BUILD_CC_ARCH</filename></link>,
                    assuming <filename>BUILD_CC_ARCH</filename> is set.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_CFLAGS'><glossterm>BUILD_CFLAGS</glossterm>
            <info>
                BUILD_CFLAGS[doc] = "Specifies the flags to pass to the C compiler when building for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C compiler when building
                    for the build host.
                    When building in the <filename>-native</filename> context,
                    <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_CPPFLAGS'><glossterm>BUILD_CPPFLAGS</glossterm>
            <info>
                BUILD_CPPFLAGS[doc] = "Specifies the flags to pass to the C preprocessor (i.e. to both the C and the C++ compilers) when building for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C preprocessor
                    (i.e. to both the C and the C++ compilers) when building
                    for the build host.
                    When building in the <filename>-native</filename> context,
                    <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_CXXFLAGS'><glossterm>BUILD_CXXFLAGS</glossterm>
            <info>
                BUILD_CXXFLAGS[doc] = "Specifies the flags to pass to the C++ compiler when building for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C++ compiler when
                    building for the build host.
                    When building in the <filename>-native</filename> context,
                    <link linkend='var-CXXFLAGS'><filename>CXXFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_FC'><glossterm>BUILD_FC</glossterm>
            <info>
                BUILD_FC[doc] = "Specifies the Fortran compiler command for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the Fortran compiler command for the build host.
                    By default, <filename>BUILD_FC</filename> points to
                    Gfortran and passes as arguments the value of
                    <link linkend='var-BUILD_CC_ARCH'><filename>BUILD_CC_ARCH</filename></link>,
                    assuming <filename>BUILD_CC_ARCH</filename> is set.
               </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_LD'><glossterm>BUILD_LD</glossterm>
            <info>
                BUILD_LD[doc] = "Specifies the linker command for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the linker command for the build host. By default,
                    <filename>BUILD_LD</filename> points to the GNU linker (ld)
                    and passes as arguments the value of
                    <link linkend='var-BUILD_LD_ARCH'><filename>BUILD_LD_ARCH</filename></link>,
                    assuming <filename>BUILD_LD_ARCH</filename> is set.
               </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_LD_ARCH'><glossterm>BUILD_LD_ARCH</glossterm>
            <info>
                BUILD_LD_ARCH[doc] = "Specifies architecture-specific linker flags for the build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific linker flags for the build
                    host. By default, the value of
                    <filename>BUILD_LD_ARCH</filename> is empty.
               </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_LDFLAGS'><glossterm>BUILD_LDFLAGS</glossterm>
            <info>
                BUILD_LDFLAGS[doc] = "Specifies the flags to pass to the linker when building for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the linker when building
                    for the build host.
                    When building in the <filename>-native</filename> context,
                    <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_OPTIMIZATION'><glossterm>BUILD_OPTIMIZATION</glossterm>
            <info>
                BUILD_OPTIMIZATION[doc] = "Specifies the optimization flags passed to the C compiler when building for the build host or the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the optimization flags passed to the C compiler
                    when building for the build host or the SDK.
                    The flags are passed through the
                    <link linkend='var-BUILD_CFLAGS'><filename>BUILD_CFLAGS</filename></link>
                    and
                    <link linkend='var-BUILDSDK_CFLAGS'><filename>BUILDSDK_CFLAGS</filename></link>
                    default values.
                </para>

                <para>
                    The default value of the
                    <filename>BUILD_OPTIMIZATION</filename> variable is
                    "-O2 -pipe".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_OS'><glossterm>BUILD_OS</glossterm>
            <info>
                BUILD_OS[doc] = "The operating system (in lower case) of the building architecture (e.g. Linux)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the operating system in use on the build
                    host (e.g. "linux").
                    The OpenEmbedded build system sets the value of
                    <filename>BUILD_OS</filename> from the OS reported by
                    the <filename>uname</filename> command - the first word,
                    converted to lower-case characters.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_PREFIX'><glossterm>BUILD_PREFIX</glossterm>
            <info>
                BUILD_PREFIX[doc] = "The toolchain binary prefix used for native recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The toolchain binary prefix used for native recipes.
                    The OpenEmbedded build system uses the
                    <filename>BUILD_PREFIX</filename> value to set the
                    <link linkend='var-TARGET_PREFIX'><filename>TARGET_PREFIX</filename></link>
                    when building for <filename>native</filename> recipes.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_STRIP'><glossterm>BUILD_STRIP</glossterm>
            <info>
                BUILD_STRIP[doc] = "Specifies the command to be used to strip debugging symbols from binaries produced for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the command to be used to strip debugging symbols
                    from binaries produced for the build host. By default,
                    <filename>BUILD_STRIP</filename> points to
                    <filename>${</filename><link linkend='var-BUILD_PREFIX'><filename>BUILD_PREFIX</filename></link><filename>}strip</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_SYS'><glossterm>BUILD_SYS</glossterm>
            <info>
                BUILD_SYS[doc] = "The toolchain binary prefix used for native recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the system, including the architecture and
                    the operating system, to use when building for the build
                    host (i.e. when building <filename>native</filename>
                    recipes).
                </para>

                <para>
                    The OpenEmbedded build system automatically sets this
                    variable based on
                    <link linkend='var-BUILD_ARCH'><filename>BUILD_ARCH</filename></link>,
                    <link linkend='var-BUILD_VENDOR'><filename>BUILD_VENDOR</filename></link>,
                    and
                    <link linkend='var-BUILD_OS'><filename>BUILD_OS</filename></link>.
                    You do not need to set the <filename>BUILD_SYS</filename>
                    variable yourself.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILD_VENDOR'><glossterm>BUILD_VENDOR</glossterm>
            <info>
         BUILD_VENDOR[doc] = "The vendor name to use when building for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the vendor name to use when building for the
                    build host.
                    The default value is an empty string ("").
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDDIR'><glossterm>BUILDDIR</glossterm>
            <info>
                BUILDDIR[doc] = "Points to the location of the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the location of the
                    <link linkend='build-directory'>Build Directory</link>.
                    You can define this directory indirectly through the
                    <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
                    script by passing in a Build Directory path when you run
                    the script.
                    If you run the script and do not provide a Build Directory
                    path, the <filename>BUILDDIR</filename> defaults to
                    <filename>build</filename> in the current directory.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDHISTORY_COMMIT'><glossterm>BUILDHISTORY_COMMIT</glossterm>
            <info>
                BUILDHISTORY_COMMIT[doc] = "When inheriting the buildhistory class, this variable specifies whether or not to commit the build history output in a local Git repository."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class, this variable specifies whether or not to commit the
                    build history output in a local Git repository.
                    If set to "1", this local repository will be maintained
                    automatically by the
                    <filename>buildhistory</filename>
                    class and a commit will be created on every
                    build for changes to each top-level subdirectory of the
                    build history output (images, packages, and sdk).
                    If you want to track changes to build history over
                    time, you should set this value to "1".
                </para>

                <para>
                    By default, the <filename>buildhistory</filename> class
                    does not commit the build history output in a local
                    Git repository:
                    <literallayout class='monospaced'>
     BUILDHISTORY_COMMIT ?= "0"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDHISTORY_COMMIT_AUTHOR'><glossterm>BUILDHISTORY_COMMIT_AUTHOR</glossterm>
            <info>
                BUILDHISTORY_COMMIT_AUTHOR[doc] = "When inheriting the buildhistory class, this variable specifies the author to use for each Git commit."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class, this variable specifies the author to use for each
                    Git commit.
                    In order for the <filename>BUILDHISTORY_COMMIT_AUTHOR</filename>
                    variable to work, the
                    <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
                    variable must be set to "1".
                </para>

                <para>
                    Git requires that the value you provide for the
                    <filename>BUILDHISTORY_COMMIT_AUTHOR</filename> variable
                    takes the form of "name <replaceable>email@host</replaceable>".
                    Providing an email address or host that is not valid does
                    not produce an error.
                </para>

                <para>
                    By default, the <filename>buildhistory</filename> class
                    sets the variable as follows:
                    <literallayout class='monospaced'>
     BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory &lt;buildhistory@${DISTRO}&gt;"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDHISTORY_DIR'><glossterm>BUILDHISTORY_DIR</glossterm>
            <info>
                BUILDHISTORY_DIR[doc] = "When inheriting the buildhistory class, this variable specifies the directory in which build history information is kept."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class, this variable specifies the directory in which
                    build history information is kept.
                    For more information on how the variable works, see the
                    <filename>buildhistory.class</filename>.
                </para>

                <para>
                    By default, the <filename>buildhistory</filename> class
                    sets the directory as follows:
                    <literallayout class='monospaced'>
     BUILDHISTORY_DIR ?= "${TOPDIR}/buildhistory"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDHISTORY_FEATURES'><glossterm>BUILDHISTORY_FEATURES</glossterm>
            <info>
                BUILDHISTORY_FEATURES[doc] = "When inheriting the buildhistory class, this variable specifies the build history features to be enabled."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class, this variable specifies the build history features
                    to be enabled.
                    For more information on how build history works, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-build-output-quality'>Maintaining Build Output Quality</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>

                <para>
                    You can specify these features in the form of a
                    space-separated list:
                    <itemizedlist>
                        <listitem><para><emphasis>image:</emphasis>
                            Analysis of the contents of images, which
                            includes the list of installed packages among other
                            things.
                            </para></listitem>
                        <listitem><para><emphasis>package:</emphasis>
                            Analysis of the contents of individual packages.
                            </para></listitem>
                        <listitem><para><emphasis>sdk:</emphasis>
                            Analysis of the contents of the software
                            development kit (SDK).
                            </para></listitem>
                        <listitem><para><emphasis>task:</emphasis>
                            Save output file signatures for
                            <ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>shared state</ulink>
                            (sstate) tasks.
                            This saves one file per task and lists the SHA-256
                            checksums for each file staged (i.e. the output of
                            the task).
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    By default, the <filename>buildhistory</filename> class
                    enables the following features:
                    <literallayout class='monospaced'>
     BUILDHISTORY_FEATURES ?= "image package sdk"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDHISTORY_IMAGE_FILES'><glossterm>BUILDHISTORY_IMAGE_FILES</glossterm>
            <info>
                BUILDHISTORY_IMAGE_FILES[doc] = "When inheriting the buildhistory class, this variable specifies a list of paths to files copied from the image contents into the build history directory under an "image-files" directory in the directory for the image, so that you can track the contents of each file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class, this variable specifies a list of paths to files
                    copied from the
                    image contents into the build history directory under
                    an "image-files" directory in the directory for
                    the image, so that you can track the contents of each file.
                    The default is to copy <filename>/etc/passwd</filename>
                    and <filename>/etc/group</filename>, which allows you to
                    monitor for changes in user and group entries.
                    You can modify the list to include any file.
                    Specifying an invalid path does not produce an error.
                    Consequently, you can include files that might
                    not always be present.
                </para>

                <para>
                    By default, the <filename>buildhistory</filename> class
                    provides paths to the following files:
                    <literallayout class='monospaced'>
     BUILDHISTORY_IMAGE_FILES ?= "/etc/passwd /etc/group"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDHISTORY_PUSH_REPO'><glossterm>BUILDHISTORY_PUSH_REPO</glossterm>
            <info>
                BUILDHISTORY_PUSH_REPO[doc] = "When inheriting the buildhistory class, this variable optionally specifies a remote repository to which build history pushes Git changes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class, this variable optionally specifies a remote
                    repository to which build history pushes Git changes.
                    In order for <filename>BUILDHISTORY_PUSH_REPO</filename>
                    to work,
                    <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
                    must be set to "1".
                </para>

                <para>
                    The repository should correspond to a remote
                    address that specifies a repository as understood by
                    Git, or alternatively to a remote name that you have
                    set up manually using <filename>git remote</filename>
                    within the local repository.
                </para>

                <para>
                    By default, the <filename>buildhistory</filename> class
                    sets the variable as follows:
                    <literallayout class='monospaced'>
     BUILDHISTORY_PUSH_REPO ?= ""
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDSDK_CFLAGS'><glossterm>BUILDSDK_CFLAGS</glossterm>
            <info>
                BUILDSDK_CFLAGS[doc] = "Specifies the flags to pass to the C compiler when building for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C compiler when building
                    for the SDK.
                    When building in the <filename>nativesdk-</filename>
                    context,
                    <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDSDK_CPPFLAGS'><glossterm>BUILDSDK_CPPFLAGS</glossterm>
            <info>
                BUILDSDK_CPPFLAGS[doc] = "Specifies the flags to pass to the C pre-processor (i.e. to both the C and the C++ compilers) when building for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C pre-processor
                    (i.e. to both the C and the C++ compilers) when building
                    for the SDK.
                    When building in the <filename>nativesdk-</filename>
                    context,
                    <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDSDK_CXXFLAGS'><glossterm>BUILDSDK_CXXFLAGS</glossterm>
            <info>
                BUILDSDK_CXXFLAGS[doc] = "Specifies the flags to pass to the C++ compiler when building for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C++ compiler when
                    building for the SDK.
                    When building in the <filename>nativesdk-</filename>
                    context,
                    <link linkend='var-CXXFLAGS'><filename>CXXFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDSDK_LDFLAGS'><glossterm>BUILDSDK_LDFLAGS</glossterm>
            <info>
                BUILDSDK_LDFLAGS[doc] = "Specifies the flags to pass to the linker when building for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the linker when building
                    for the SDK.
                    When building in the <filename>nativesdk-</filename>
                    context,
                    <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDSTATS_BASE'><glossterm>BUILDSTATS_BASE</glossterm>
            <info>
                BUILDSTATS_BASE[doc] = "Points to the location of the directory that holds build statistics when you use and enable the buildstats class."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the location of the directory that holds build
                    statistics when you use and enable the
                    <link linkend='ref-classes-buildstats'><filename>buildstats</filename></link>
                    class.
                    The <filename>BUILDSTATS_BASE</filename> directory defaults
                    to
                    <filename>${</filename><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link><filename>}/buildstats/</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUSYBOX_SPLIT_SUID'><glossterm>BUSYBOX_SPLIT_SUID</glossterm>
            <info>
                BUSYBOX_SPLIT_SUID[doc] = "For the BusyBox recipe, specifies whether to split the output executable file into two parts: one for features that require setuid root, and one for the remaining features."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For the BusyBox recipe, specifies whether to split the
                    output executable file into two parts: one for features
                    that require <filename>setuid root</filename>, and one for
                    the remaining features (i.e. those that do not require
                    <filename>setuid root</filename>).
                </para>

                <para>
                    The <filename>BUSYBOX_SPLIT_SUID</filename> variable
                    defaults to "1", which results in splitting the output
                    executable file.
                    Set the variable to "0" to get a single output executable
                    file.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-c'><title>C</title>

        <glossentry id='var-CACHE'><glossterm>CACHE</glossterm>
            <info>
                CACHE[doc]  = "The directory BitBake uses to store a cache of the metadata."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the directory BitBake uses to store a cache
                    of the
                    <link linkend='metadata'>Metadata</link>
                    so it does not need to be parsed every time BitBake is
                    started.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CC'><glossterm>CC</glossterm>
            <info>
                CC[doc] = "Minimum command and arguments to run the C compiler."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments used to run the C
                    compiler.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CFLAGS'><glossterm>CFLAGS</glossterm>
            <info>
                CFLAGS[doc] = "Flags passed to the C compiler for the target system. This variable evaluates to the same as TARGET_CFLAGS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C compiler.
                    This variable is exported to an environment
                    variable and thus made visible to the software being
                    built during the compilation step.
                </para>

                <para>
                    Default initialization for <filename>CFLAGS</filename>
                    varies depending on what is being built:
                    <itemizedlist>
                        <listitem><para>
                            <link linkend='var-TARGET_CFLAGS'><filename>TARGET_CFLAGS</filename></link>
                            when building for the target
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILD_CFLAGS'><filename>BUILD_CFLAGS</filename></link>
                            when building for the build host (i.e.
                            <filename>-native</filename>)
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILDSDK_CFLAGS'><filename>BUILDSDK_CFLAGS</filename></link>
                            when building for an SDK (i.e.
                            <filename>nativesdk-</filename>)
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CLASSOVERRIDE'><glossterm>CLASSOVERRIDE</glossterm>
            <info>
                CLASSOVERRIDE[doc] = "An internal variable specifying the special class override that should currently apply (e.g. "class-target", "class-native", and so forth)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An internal variable specifying the special class override
                    that should currently apply (e.g. "class-target",
                    "class-native", and so forth).
                    The classes that use this variable (e.g.
                    <link linkend='ref-classes-native'><filename>native</filename></link>,
                    <link linkend='ref-classes-nativesdk'><filename>nativesdk</filename></link>,
                    and so forth) set the variable to appropriate values.
                    <note>
                        <filename>CLASSOVERRIDE</filename> gets its default
                        "class-target" value from the
                        <filename>bitbake.conf</filename> file.
                    </note>
                </para>

                <para>
                    As an example, the following override allows you to install
                    extra files, but only when building for the target:
                    <literallayout class='monospaced'>
     do_install_append_class-target() {
         install my-extra-file ${D}${sysconfdir}
     }
                    </literallayout>
                    Here is an example where <filename>FOO</filename>
                    is set to "native" when building for the build host, and
                    to "other" when not building for the build host:
                    <literallayout class='monospaced'>
     FOO_class-native = "native"
     FOO = "other"
                    </literallayout>
                    The underlying mechanism behind
                    <filename>CLASSOVERRIDE</filename> is simply that it is
                    included in the default value of
                    <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CLEANBROKEN'><glossterm>CLEANBROKEN</glossterm>
            <info>
                CLEANBROKEN[doc] = "Prevents the build system from running 'make clean' during the do_configure task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "1" within a recipe,
                    <filename>CLEANBROKEN</filename> specifies that
                    the <filename>make clean</filename> command does
                    not work for the software being built.
                    Consequently, the OpenEmbedded build system will not try
                    to run <filename>make clean</filename> during the
                    <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
                    task, which is the default behavior.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COMBINED_FEATURES'><glossterm>COMBINED_FEATURES</glossterm>
            <info>
                COMBINED_FEATURES[doc] = "A set of features common between MACHINE_FEATURES and DISTRO_FEATURES."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Provides a list of hardware features that are enabled in
                    both
                    <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
                    and
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
                    This select list of features contains features that make
                    sense to be controlled both at the machine and distribution
                    configuration level.
                    For example, the "bluetooth" feature requires hardware
                    support but should also be optional at the distribution
                    level, in case the hardware supports Bluetooth but you
                    do not ever intend to use it.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COMMON_LICENSE_DIR'><glossterm>COMMON_LICENSE_DIR</glossterm>
            <info>
                COMMON_LICENSE_DIR[doc] = "Points to meta/files/common-licenses in the Source Directory, which is where generic license files reside."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to <filename>meta/files/common-licenses</filename>
                    in the
                    <link linkend='source-directory'>Source Directory</link>,
                    which is where generic license files reside.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COMPATIBLE_HOST'><glossterm>COMPATIBLE_HOST</glossterm>
            <info>
                COMPATIBLE_HOST[doc] = "A regular expression that resolves to one or more hosts (when the recipe is native) or one or more targets (when the recipe is non-native) with which a recipe is compatible."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A regular expression that resolves to one or more hosts
                    (when the recipe is native) or one or more targets (when
                    the recipe is non-native) with which a recipe is compatible.
                    The regular expression is matched against
                    <link linkend="var-HOST_SYS"><filename>HOST_SYS</filename></link>.
                    You can use the variable to stop recipes from being built
                    for classes of systems with which the recipes are not
                    compatible.
                    Stopping these builds is particularly useful with kernels.
                    The variable also helps to increase parsing speed
                    since the build system skips parsing recipes not
                    compatible with the current system.
               </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COMPATIBLE_MACHINE'><glossterm>COMPATIBLE_MACHINE</glossterm>
            <info>
                COMPATIBLE_MACHINE[doc] = "A regular expression that resolves to one or more target machines with which a recipe is compatible."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A regular expression that resolves to one or more
                    target machines with which a recipe is compatible.
                    The regular expression is matched against
                    <link linkend="var-MACHINEOVERRIDES"><filename>MACHINEOVERRIDES</filename></link>.
                    You can use the variable to stop recipes from being built
                    for machines with which the recipes are not compatible.
                    Stopping these builds is particularly useful with kernels.
                    The variable also helps to increase parsing speed
                    since the build system skips parsing recipes not
                    compatible with the current machine.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COMPLEMENTARY_GLOB'><glossterm>COMPLEMENTARY_GLOB</glossterm>
            <info>
                COMPLEMENTARY_GLOB[doc] = "Defines wildcards to match when installing a list of complementary packages for all the packages installed in an image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines wildcards to match when installing a list of
                    complementary packages for all the packages explicitly
                    (or implicitly) installed in an image.
                    <note>
                        The <filename>COMPLEMENTARY_GLOB</filename> variable
                        uses Unix filename pattern matching
                        (<ulink url='https://docs.python.org/2/library/fnmatch.html#module-fnmatch'><filename>fnmatch</filename></ulink>),
                        which is similar to the Unix style pathname pattern
                        expansion
                        (<ulink url='https://docs.python.org/2/library/glob.html'><filename>glob</filename></ulink>).
                    </note>
                    The resulting list of complementary packages is associated
                    with an item that can be added to
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
                    An example usage of this is the "dev-pkgs" item that when
                    added to <filename>IMAGE_FEATURES</filename> will
                    install -dev packages (containing headers and other
                    development files) for every package in the image.
                </para>

                <para>
                    To add a new feature item pointing to a wildcard, use a
                    variable flag to specify the feature item name and
                    use the value to specify the wildcard.
                    Here is an example:
                    <literallayout class='monospaced'>
     COMPLEMENTARY_GLOB[dev-pkgs] = '*-dev'
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COMPONENTS_DIR'><glossterm>COMPONENTS_DIR</glossterm>
            <info>
                COMPONENTS_DIR[doc] = "Stores sysroot components for each recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Stores sysroot components for each recipe.
                    The OpenEmbedded build system uses
                    <filename>COMPONENTS_DIR</filename> when constructing
                    recipe-specific sysroots for other recipes.
                </para>

                <para>
                    The default is
                    "<filename>${</filename><link linkend='var-STAGING_DIR'><filename>STAGING_DIR</filename></link><filename>}-components</filename>."
                    (i.e. "<filename>${</filename><link linkend='var-TMPDIR'><filename>TMPDIR</filename></link><filename>}/sysroots-components</filename>").
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CONF_VERSION'><glossterm>CONF_VERSION</glossterm>
            <info>
                CONF_VERSION[doc] = "Tracks the version of local.conf.  Increased each time build/conf/ changes incompatibly."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Tracks the version of the local configuration file
                    (i.e. <filename>local.conf</filename>).
                    The value for <filename>CONF_VERSION</filename>
                    increments each time <filename>build/conf/</filename>
                    compatibility changes.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CONFFILES'><glossterm>CONFFILES</glossterm>
            <info>
                CONFFILES[doc] = "Identifies editable or configurable files that are part of a package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Identifies editable or configurable files that are part of a package.
                    If the Package Management System (PMS) is being used to update
                    packages on the target system, it is possible that
                    configuration files you have changed after the original installation
                    and that you now want to remain unchanged are overwritten.
                    In other words, editable files might exist in the package that you do not
                    want reset as part of the package update process.
                    You can use the <filename>CONFFILES</filename> variable to list the files in the
                    package that you wish to prevent the PMS from overwriting during this update process.
                </para>

                <para>
                    To use the <filename>CONFFILES</filename> variable, provide a package name
                    override that identifies the resulting package.
                    Then, provide a space-separated list of files.
                    Here is an example:
                    <literallayout class='monospaced'>
     CONFFILES_${PN} += "${sysconfdir}/file1 \
        ${sysconfdir}/file2 ${sysconfdir}/file3"
                    </literallayout>
                </para>

                <para>
                    A relationship exists between the <filename>CONFFILES</filename> and
                    <filename><link linkend='var-FILES'>FILES</link></filename> variables.
                    The files listed within <filename>CONFFILES</filename> must be a subset of
                    the files listed within <filename>FILES</filename>.
                    Because the configuration files you provide with <filename>CONFFILES</filename>
                    are simply being identified so that the PMS will not overwrite them,
                    it makes sense that
                    the files must already be included as part of the package through the
                    <filename>FILES</filename> variable.
                </para>

                <note>
                    When specifying paths as part of the <filename>CONFFILES</filename> variable,
                    it is good practice to use appropriate path variables.
                    For example, <filename>${sysconfdir}</filename> rather than
                    <filename>/etc</filename> or <filename>${bindir}</filename> rather
                    than <filename>/usr/bin</filename>.
                    You can find a list of these variables at the top of the
                    <filename>meta/conf/bitbake.conf</filename> file in the
                    <link linkend='source-directory'>Source Directory</link>.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-CONFIG_INITRAMFS_SOURCE'><glossterm>CONFIG_INITRAMFS_SOURCE</glossterm>
            <info>
                CONFIG_INITRAMFS_SOURCE[doc] = "Identifies the initial RAM filesystem (initramfs) source files. The OpenEmbedded build system receives and uses this kernel Kconfig variable as an environment variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Identifies the initial RAM filesystem (initramfs) source
                    files.
                    The OpenEmbedded build system receives and uses
                    this kernel Kconfig variable as an environment variable.
                    By default, the variable is set to null ("").
                </para>

                <para>
                    The <filename>CONFIG_INITRAMFS_SOURCE</filename> can be
                    either a single cpio archive with a
                    <filename>.cpio</filename> suffix or a
                    space-separated list of directories and files for building
                    the initramfs image.
                    A cpio archive should contain a filesystem archive
                    to be used as an initramfs image.
                    Directories should contain a filesystem layout to be
                    included in the initramfs image.
                    Files should contain entries according to the format
                    described by the
                    <filename>usr/gen_init_cpio</filename> program in the
                    kernel tree.
                </para>

                <para>
                    If you specify multiple directories and files, the
                    initramfs image will be the aggregate of all of them.
                </para>

                <para>
                    For information on creating an initramfs, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CONFIG_SITE'><glossterm>CONFIG_SITE</glossterm>
            <info>
                CONFIG_SITE[doc] = "A list of files that contains autoconf test results relevant to the current build. This variable is used by the Autotools utilities when running configure."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of files that contains <filename>autoconf</filename> test results relevant
                    to the current build.
                    This variable is used by the Autotools utilities when running
                    <filename>configure</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CONFIGURE_FLAGS'><glossterm>CONFIGURE_FLAGS</glossterm>
            <info>
                CONFIGURE_FLAGS[doc] = "The minimal arguments for GNU configure."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal arguments for GNU configure.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CONFLICT_DISTRO_FEATURES'><glossterm>CONFLICT_DISTRO_FEATURES</glossterm>
            <info>
                CONFLICT_DISTRO_FEATURES[doc] = "When a recipe inherits the distro_features_check class, this variable identifies distribution features that would be in conflict should the recipe be built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-distro_features_check'><filename>distro_features_check</filename></link>
                    class, this
                    variable identifies distribution features that would
                    be in conflict should the recipe
                    be built.
                    In other words, if the
                    <filename>CONFLICT_DISTRO_FEATURES</filename> variable
                    lists a feature that also appears in
                    <filename>DISTRO_FEATURES</filename> within the
                    current configuration, an error occurs and the
                    build stops.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COPYLEFT_LICENSE_EXCLUDE'><glossterm>COPYLEFT_LICENSE_EXCLUDE</glossterm>
            <info>
                COPYLEFT_LICENSE_EXCLUDE[doc] = "Licenses to exclude in the source archived by the archiver class."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list of licenses to exclude from the
                    source archived by the
                    <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
                    class.
                    In other words, if a license in a recipe's
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    value is in the value of
                    <filename>COPYLEFT_LICENSE_EXCLUDE</filename>, then its
                    source is not archived by the class.
                    <note>
                        The <filename>COPYLEFT_LICENSE_EXCLUDE</filename>
                        variable takes precedence over the
                        <link linkend='var-COPYLEFT_LICENSE_INCLUDE'><filename>COPYLEFT_LICENSE_INCLUDE</filename></link>
                        variable.
                    </note>
                    The default value, which is "CLOSED Proprietary", for
                    <filename>COPYLEFT_LICENSE_EXCLUDE</filename> is set
                    by the
                    <link linkend='ref-classes-copyleft_filter'><filename>copyleft_filter</filename></link>
                    class, which is inherited by the
                    <filename>archiver</filename> class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COPYLEFT_LICENSE_INCLUDE'><glossterm>COPYLEFT_LICENSE_INCLUDE</glossterm>
            <info>
                COPYLEFT_LICENSE_INCLUDE[doc] = "Licenses to include in the source archived by the archiver class."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list of licenses to include in the
                    source archived by the
                    <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
                    class.
                    In other words, if a license in a recipe's
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    value is in the value of
                    <filename>COPYLEFT_LICENSE_INCLUDE</filename>, then its
                    source is archived by the class.
                </para>

                <para>
                    The default value is set by the
                    <link linkend='ref-classes-copyleft_filter'><filename>copyleft_filter</filename></link>
                    class, which is inherited by the
                    <filename>archiver</filename> class.
                    The default value includes "GPL*", "LGPL*", and "AGPL*".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COPYLEFT_PN_EXCLUDE'><glossterm>COPYLEFT_PN_EXCLUDE</glossterm>
            <info>
                COPYLEFT_PN_EXCLUDE[doc] = "Recipes to exclude in the source archived by the archiver class."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recipes to exclude in the source archived
                    by the
                    <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
                    class.
                    The <filename>COPYLEFT_PN_EXCLUDE</filename> variable
                    overrides the license inclusion and exclusion caused
                    through the
                    <link linkend='var-COPYLEFT_LICENSE_INCLUDE'><filename>COPYLEFT_LICENSE_INCLUDE</filename></link>
                    and
                    <link linkend='var-COPYLEFT_LICENSE_EXCLUDE'><filename>COPYLEFT_LICENSE_EXCLUDE</filename></link>
                    variables, respectively.
                </para>

                <para>
                    The default value, which is "" indicating to not explicitly
                    exclude any recipes by name, for
                    <filename>COPYLEFT_PN_EXCLUDE</filename> is set
                    by the
                    <link linkend='ref-classes-copyleft_filter'><filename>copyleft_filter</filename></link>
                    class, which is inherited by the
                    <filename>archiver</filename> class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COPYLEFT_PN_INCLUDE'><glossterm>COPYLEFT_PN_INCLUDE</glossterm>
            <info>
                COPYLEFT_PN_INCLUDE[doc] = "Recipes to include in the source archived by the archiver class."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recipes to include in the source archived
                    by the
                    <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
                    class.
                    The <filename>COPYLEFT_PN_INCLUDE</filename> variable
                    overrides the license inclusion and exclusion caused
                    through the
                    <link linkend='var-COPYLEFT_LICENSE_INCLUDE'><filename>COPYLEFT_LICENSE_INCLUDE</filename></link>
                    and
                    <link linkend='var-COPYLEFT_LICENSE_EXCLUDE'><filename>COPYLEFT_LICENSE_EXCLUDE</filename></link>
                    variables, respectively.
                </para>

                <para>
                    The default value, which is "" indicating to not explicitly
                    include any recipes by name, for
                    <filename>COPYLEFT_PN_INCLUDE</filename> is set
                    by the
                    <link linkend='ref-classes-copyleft_filter'><filename>copyleft_filter</filename></link>
                    class, which is inherited by the
                    <filename>archiver</filename> class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COPYLEFT_RECIPE_TYPES'><glossterm>COPYLEFT_RECIPE_TYPES</glossterm>
            <info>
                COPYLEFT_RECIPE_TYPES[doc] = "Recipe types to include in the source archived by the archiver class."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list of recipe types to include
                    in the source archived by the
                    <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
                    class.
                    Recipe types are <filename>target</filename>,
                    <filename>native</filename>,
                    <filename>nativesdk</filename>,
                    <filename>cross</filename>,
                    <filename>crosssdk</filename>, and
                    <filename>cross-canadian</filename>.
                </para>

                <para>
                    The default value, which is "target*", for
                    <filename>COPYLEFT_RECIPE_TYPES</filename> is set
                    by the
                    <link linkend='ref-classes-copyleft_filter'><filename>copyleft_filter</filename></link>
                    class, which is inherited by the
                    <filename>archiver</filename> class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COPY_LIC_DIRS'><glossterm>COPY_LIC_DIRS</glossterm>
            <info>
                COPY_LIC_DIRS[doc] = "If set to "1" along with the COPY_LIC_MANIFEST variable, the OpenEmbedded build system copies into the image the license files, which are located in /usr/share/common-licenses, for each package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "1" along with the
                    <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
                    variable, the OpenEmbedded build system copies
                    into the image the license files, which are located in
                    <filename>/usr/share/common-licenses</filename>,
                    for each package.
                    The license files are placed
                    in directories within the image itself during build time.
                    <note>
                        The <filename>COPY_LIC_DIRS</filename> does not
                        offer a path for adding licenses for newly installed
                        packages to an image, which might be most suitable
                        for read-only filesystems that cannot be upgraded.
                        See the
                        <link linkend='var-LICENSE_CREATE_PACKAGE'><filename>LICENSE_CREATE_PACKAGE</filename></link>
                        variable for additional information.
                        You can also reference the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#providing-license-text'>Providing License Text</ulink>"
                        section in the Yocto Project Development Tasks Manual
                        for information on providing license text.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COPY_LIC_MANIFEST'><glossterm>COPY_LIC_MANIFEST</glossterm>
            <info>
                COPY_LIC_MANIFEST[doc] = "If set to "1", the OpenEmbedded build system copies the license manifest for the image to /usr/share/common-licenses/license.manifest within the image itself."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "1", the OpenEmbedded build system copies
                    the license manifest for the image to
                    <filename>/usr/share/common-licenses/license.manifest</filename>
                    within the image itself during build time.
                    <note>
                        The <filename>COPY_LIC_MANIFEST</filename> does not
                        offer a path for adding licenses for newly installed
                        packages to an image, which might be most suitable
                        for read-only filesystems that cannot be upgraded.
                        See the
                        <link linkend='var-LICENSE_CREATE_PACKAGE'><filename>LICENSE_CREATE_PACKAGE</filename></link>
                        variable for additional information.
                        You can also reference the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#providing-license-text'>Providing License Text</ulink>"
                        section in the Yocto Project Development Tasks Manual
                        for information on providing license text.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CORE_IMAGE_EXTRA_INSTALL'><glossterm>CORE_IMAGE_EXTRA_INSTALL</glossterm>
            <info>
                CORE_IMAGE_EXTRA_INSTALL[doc] = "Specifies the list of packages to be added to the image. You should only set this variable in the conf/local.conf file in the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the list of packages to be added to the image.
                    You should only set this variable in the
                    <filename>local.conf</filename> configuration file found
                    in the
                    <link linkend='build-directory'>Build Directory</link>.
                </para>

                <para>
                    This variable replaces <filename>POKY_EXTRA_INSTALL</filename>, which is no longer supported.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COREBASE'><glossterm>COREBASE</glossterm>
            <info>
                COREBASE[doc] = "Specifies the parent directory of the OpenEmbedded-Core Metadata layer (i.e. meta)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the parent directory of the OpenEmbedded-Core
                    Metadata layer (i.e. <filename>meta</filename>).
                </para>

                <para>
                    It is an important distinction that
                    <filename>COREBASE</filename> points to the parent of this
                    layer and not the layer itself.
                    Consider an example where you have cloned the Poky Git
                    repository and retained the <filename>poky</filename>
                    name for your local copy of the repository.
                    In this case, <filename>COREBASE</filename> points to
                    the <filename>poky</filename> folder because it is the
                    parent directory of the <filename>poky/meta</filename>
                    layer.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-COREBASE_FILES'><glossterm>COREBASE_FILES</glossterm>
            <info>
                COREBASE_FILES[doc] = "Lists files from the COREBASE directory that should be copied other than the layers listed in the bblayers.conf file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists files from the
                    <link linkend='var-COREBASE'><filename>COREBASE</filename></link>
                    directory that should be copied other than the layers
                    listed in the <filename>bblayers.conf</filename> file.
                    The <filename>COREBASE_FILES</filename> variable exists
                    for the purpose of copying metadata from the
                    OpenEmbedded build system into the extensible
                    SDK.
                </para>

                <para>
                    Explicitly listing files in <filename>COREBASE</filename>
                    is needed because it typically contains build
                    directories and other files that should not normally
                    be copied into the extensible SDK.
                    Consequently, the value of
                    <filename>COREBASE_FILES</filename> is used in order to
                    only copy the files that are actually needed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CPP'><glossterm>CPP</glossterm>
            <info>
                CPP[doc] = "Minimum command and arguments to run the C preprocessor."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments used to run the C
                    preprocessor.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CPPFLAGS'><glossterm>CPPFLAGS</glossterm>
            <info>
                CPPFLAGS[doc] = "Specifies the flags to pass to the C pre-processor (i.e. to both the C and the C++ compilers)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C pre-processor
                    (i.e. to both the C and the C++ compilers).
                    This variable is exported to an environment
                    variable and thus made visible to the software being
                    built during the compilation step.
                </para>

                <para>
                    Default initialization for <filename>CPPFLAGS</filename>
                    varies depending on what is being built:
                    <itemizedlist>
                        <listitem><para>
                            <link linkend='var-TARGET_CPPFLAGS'><filename>TARGET_CPPFLAGS</filename></link>
                            when building for the target
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILD_CPPFLAGS'><filename>BUILD_CPPFLAGS</filename></link>
                            when building for the build host (i.e.
                            <filename>-native</filename>)
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILDSDK_CPPFLAGS'><filename>BUILDSDK_CPPFLAGS</filename></link>
                            when building for an SDK (i.e.
                            <filename>nativesdk-</filename>)
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CROSS_COMPILE'><glossterm>CROSS_COMPILE</glossterm>
            <info>
                CROSS_COMPILE[doc] = "The toolchain binary prefix for the target tools."
            </info>
            <glossdef>
               <para role="glossdeffirst">
<!--               <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The toolchain binary prefix for the target tools.
                    The <filename>CROSS_COMPILE</filename> variable is the
                    same as the
                    <link linkend='var-TARGET_PREFIX'><filename>TARGET_PREFIX</filename></link>
                    variable.
                    <note>
                        The OpenEmbedded build system sets the
                        <filename>CROSS_COMPILE</filename> variable only in
                        certain contexts (e.g. when building for kernel
                        and kernel module recipes).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CVSDIR'><glossterm>CVSDIR</glossterm>
            <info>
                CVSDIR[doc] = "The directory where cvs checkouts will be stored in."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory in which files checked out under the
                    CVS system are stored.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CXX'><glossterm>CXX</glossterm>
            <info>
                CXX[doc] = "Minimum command and arguments to run the C++ compiler."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments used to run the C++
                    compiler.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CXXFLAGS'><glossterm>CXXFLAGS</glossterm>
            <info>
                CXXFLAGS[doc] = "Specifies the flags to pass to the C++ compiler."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C++ compiler.
                    This variable is exported to an environment
                    variable and thus made visible to the software being
                    built during the compilation step.
                </para>

                <para>
                    Default initialization for <filename>CXXFLAGS</filename>
                    varies depending on what is being built:
                    <itemizedlist>
                        <listitem><para>
                            <link linkend='var-TARGET_CXXFLAGS'><filename>TARGET_CXXFLAGS</filename></link>
                            when building for the target
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILD_CXXFLAGS'><filename>BUILD_CXXFLAGS</filename></link>
                            when building for the build host (i.e.
                            <filename>-native</filename>)
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILDSDK_CXXFLAGS'><filename>BUILDSDK_CXXFLAGS</filename></link>
                            when building for an SDK (i.e.
                            <filename>nativesdk-</filename>)
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-d'><title>D</title>

        <glossentry id='var-D'><glossterm>D</glossterm>
            <info>
                D[doc] = "The destination directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The destination directory.
                    The location in the
                    <link linkend='build-directory'>Build Directory</link>
                    where components are installed by the
                    <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                    task.
                    This location defaults to:
                    <literallayout class='monospaced'>
     ${WORKDIR}/image
                    </literallayout>
                    <note><title>Caution</title>
                        Tasks that read from or write to this directory should
                        run under
                        <ulink url='&YOCTO_DOCS_OM_URL;#fakeroot-and-pseudo'>fakeroot</ulink>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DATE'><glossterm>DATE</glossterm>
            <info>
                DATE[doc] = "The date the build was started using YMD format."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The date the build was started.
                    Dates appear using the year, month, and day (YMD) format
                    (e.g. "20150209" for February 9th, 2015).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DATETIME'><glossterm>DATETIME</glossterm>
            <info>
                DATETIME[doc] = "The date and time the build was started."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The date and time on which the current build started.
                    The format is suitable for timestamps.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEBIAN_NOAUTONAME'><glossterm>DEBIAN_NOAUTONAME</glossterm>
            <info>
                DEBIAN_NOAUTONAME[doc] = "Prevents a particular package from being renamed according to Debian package naming."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When the
                    <link linkend='ref-classes-debian'><filename>debian</filename></link>
                    class is inherited, which is the default behavior,
                    <filename>DEBIAN_NOAUTONAME</filename> specifies a
                    particular package should not be renamed according to
                    Debian library package naming.
                    You must use the package name as an override when you
                    set this variable.
                    Here is an example from the <filename>fontconfig</filename>
                    recipe:
                    <literallayout class='monospaced'>
     DEBIAN_NOAUTONAME_fontconfig-utils = "1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEBIANNAME'><glossterm>DEBIANNAME</glossterm>
            <info>
                DEBIANNAME[doc] = "Allows you to override the library name for an individual package for Debian library package renaming."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When the
                    <link linkend='ref-classes-debian'><filename>debian</filename></link>
                    class is inherited, which is the default behavior,
                    <filename>DEBIANNAME</filename> allows you to override the
                    library name for an individual package.
                    Overriding the library name in these cases is rare.
                    You must use the package name as an override when you
                    set this variable.
                    Here is an example from the <filename>dbus</filename>
                    recipe:
                    <literallayout class='monospaced'>
     DEBIANNAME_${PN} = "dbus-1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEBUG_BUILD'><glossterm>DEBUG_BUILD</glossterm>
            <info>
                DEBUG_BUILD[doc] = "Specifies to build packages with debugging information. This influences the value of the SELECTED_OPTIMIZATION variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies to build packages with debugging information.
                    This influences the value of the
                    <filename><link linkend='var-SELECTED_OPTIMIZATION'>SELECTED_OPTIMIZATION</link></filename>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEBUG_OPTIMIZATION'><glossterm>DEBUG_OPTIMIZATION</glossterm>
            <info>
                DEBUG_OPTIMIZATION[doc] = "The options to pass in TARGET_CFLAGS and CFLAGS when compiling a system for debugging. This variable defaults to '-O -fno-omit-frame-pointer -g'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The options to pass in
                    <filename><link linkend='var-TARGET_CFLAGS'>TARGET_CFLAGS</link></filename>
                    and <filename><link linkend='var-CFLAGS'>CFLAGS</link></filename> when compiling
                    a system for debugging.
                    This variable defaults to "-O -fno-omit-frame-pointer ${DEBUG_FLAGS} -pipe".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEFAULT_PREFERENCE'><glossterm>DEFAULT_PREFERENCE</glossterm>
            <info>
                DEFAULT_PREFERENCE[doc] = "Specifies a weak bias for recipe selection priority."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a weak bias for recipe selection priority.
                </para>

                <para>
                    The most common usage of this is variable is to set
                    it to "-1" within a recipe for a development version of a
                    piece of software.
                    Using the variable in this way causes the stable version
                    of the recipe to build by default in the absence of
                    <filename><link linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></filename>
                    being used to build the development version.
                </para>

                <note>
                    The bias provided by <filename>DEFAULT_PREFERENCE</filename>
                    is weak and is overridden by
                    <filename><link linkend='var-BBFILE_PRIORITY'>BBFILE_PRIORITY</link></filename>
                    if that variable is different between two layers
                    that contain different versions of the same recipe.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEFAULTTUNE'><glossterm>DEFAULTTUNE</glossterm>
            <info>
                DEFAULTTUNE[doc] = "The default CPU and Application Binary Interface (ABI) tunings (i.e.  the "tune") used by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The default CPU and Application Binary Interface (ABI)
                    tunings (i.e.  the "tune") used by the OpenEmbedded build
                    system.
                    The <filename>DEFAULTTUNE</filename> helps define
                    <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
                </para>

                <para>
                    The default tune is either implicitly or explicitly set
                    by the machine
                    (<link linkend='var-MACHINE'><filename>MACHINE</filename></link>).
                    However, you can override the setting using available tunes
                    as defined with
                    <link linkend='var-AVAILTUNES'><filename>AVAILTUNES</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPENDS'><glossterm>DEPENDS</glossterm>
            <info>
                DEPENDS[doc] = "Lists a recipe's build-time dependencies (i.e. other recipe files)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists a recipe's build-time dependencies.
                    These are dependencies on other recipes whose
                    contents (e.g. headers and shared libraries) are needed
                    by the recipe at build time.
                </para>

                <para>
                    As an example, consider a recipe <filename>foo</filename>
                    that contains the following assignment:
                    <literallayout class='monospaced'>
     DEPENDS = "bar"
                    </literallayout>
                    The practical effect of the previous assignment is that
                    all files installed by bar will be available in the
                    appropriate staging sysroot, given by the
                    <link linkend='var-STAGING_DIR'><filename>STAGING_DIR*</filename></link>
                    variables, by the time the
                    <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
                    task for <filename>foo</filename> runs.
                    This mechanism is implemented by having
                    <filename>do_configure</filename> depend on the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task of each recipe listed in <filename>DEPENDS</filename>,
                    through a
                    <filename>[</filename><ulink url='&YOCTO_DOCS_BB_URL;#variable-flags'><filename>deptask</filename></ulink><filename>]</filename>
                    declaration in the
                    <link linkend='ref-classes-base'><filename>base</filename></link>
                    class.
                    <note>
                        It seldom is necessary to reference, for example,
                        <filename>STAGING_DIR_HOST</filename> explicitly.
                        The standard classes and build-related variables are
                        configured to automatically use the appropriate staging
                        sysroots.
                    </note>
                    As another example, <filename>DEPENDS</filename> can also
                    be used to add utilities that run on the build machine
                    during the build.
                    For example, a recipe that makes use of a code generator
                    built by the recipe <filename>codegen</filename> might have
                    the following:
                    <literallayout class='monospaced'>
     DEPENDS = "codegen-native"
                    </literallayout>
                    For more information, see the
                    <link linkend='ref-classes-native'><filename>native</filename></link>
                    class and the
                    <link linkend='var-EXTRANATIVEPATH'><filename>EXTRANATIVEPATH</filename></link>
                    variable.
                    <note>
                        <title>Notes</title>
                        <itemizedlist>
                            <listitem><para>
                                <filename>DEPENDS</filename> is a list of
                                recipe names.
                                Or, to be more precise, it is a list of
                                <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
                                names, which usually match recipe names.
                                Putting a package name such as "foo-dev" in
                                <filename>DEPENDS</filename> does not make
                                sense.
                                Use "foo" instead, as this will put files
                                from all the packages that make up
                                <filename>foo</filename>, which includes
                                those from <filename>foo-dev</filename>, into
                                the sysroot.
                                </para></listitem>
                            <listitem><para>
                                One recipe having another recipe in
                                <filename>DEPENDS</filename> does not by itself
                                add any runtime dependencies between the
                                packages produced by the two recipes.
                                However, as explained in the
                                "<ulink url='&YOCTO_DOCS_OM_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
                                section in the Yocto Project Overview and
                                Concepts Manual, runtime dependencies will
                                often be added automatically, meaning
                                <filename>DEPENDS</filename> alone is
                                sufficient for most recipes.
                                </para></listitem>
                            <listitem><para>
                                Counterintuitively,
                                <filename>DEPENDS</filename> is often necessary
                                even for recipes that install precompiled
                                components.
                                For example, if <filename>libfoo</filename>
                                is a precompiled library that links against
                                <filename>libbar</filename>, then
                                linking against <filename>libfoo</filename>
                                requires both <filename>libfoo</filename>
                                and <filename>libbar</filename> to be available
                                in the sysroot.
                                Without a <filename>DEPENDS</filename> from the
                                recipe that installs <filename>libfoo</filename>
                                to the recipe that installs
                                <filename>libbar</filename>, other recipes might
                                fail to link against
                                <filename>libfoo</filename>.
                                </para></listitem>
                        </itemizedlist>
                    </note>
                </para>

                <para>
                    For information on runtime dependencies, see the
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    variable.
                    You can also see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#tasks'>Tasks</ulink>" and
                    "<ulink url='&YOCTO_DOCS_BB_URL;#dependencies'>Dependencies</ulink>"
                    sections in the BitBake User Manual for additional
                    information on tasks and dependencies.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPLOY_DIR'><glossterm>DEPLOY_DIR</glossterm>
            <info>
                DEPLOY_DIR[doc] = "Points to the general area that the OpenEmbedded build system uses to place images, packages, SDKs, and other output files that are ready to be used outside of the build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the general area that the OpenEmbedded build
                    system uses to place images, packages, SDKs, and other output
                    files that are ready to be used outside of the build system.
                    By default, this directory resides within the
                    <link linkend='build-directory'>Build Directory</link>
                    as <filename>${TMPDIR}/deploy</filename>.
                </para>

                <para>
                    For more information on the structure of the Build
                    Directory, see
                    "<link linkend='structure-build'>The Build Directory - <filename>build/</filename></link>"
                    section.
                    For more detail on the contents of the
                    <filename>deploy</filename> directory, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#images-dev-environment'>Images</ulink>",
                    "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>",
                    and
                    "<ulink url='&YOCTO_DOCS_OM_URL;#sdk-dev-environment'>Application Development SDK</ulink>"
                    sections all in the Yocto Project Overview and Concepts
                    Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPLOY_DIR_DEB'><glossterm>DEPLOY_DIR_DEB</glossterm>
            <info>
                DEPLOY_DIR_DEB[doc] = "Points to a Debian-specific area that the OpenEmbedded build system uses to place images, packages, SDKs, and other output files that are ready to be used outside of the build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the area that the OpenEmbedded build system uses
                    to place Debian packages that are ready to be used outside
                    of the build system.
                    This variable applies only when
                    <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
                    contains "package_deb".
                </para>

                <para>
                    The BitBake configuration file initially defines the
                    <filename>DEPLOY_DIR_DEB</filename> variable as a
                    sub-folder of
                    <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>:
                    <literallayout class='monospaced'>
     DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb"
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-package_deb'><filename>package_deb</filename></link>
                    class uses the
                    <filename>DEPLOY_DIR_DEB</filename> variable to make sure
                    the
                    <link linkend='ref-tasks-package_write_deb'><filename>do_package_write_deb</filename></link>
                    task writes Debian packages into the appropriate folder.
                    For more information on how packaging works, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPLOY_DIR_IMAGE'><glossterm>DEPLOY_DIR_IMAGE</glossterm>
            <info>
                DEPLOY_DIR_IMAGE[doc] = "Points to the area that the OpenEmbedded build system uses to place images and other associated output files that are ready to be deployed onto the target machine."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the area that the OpenEmbedded build system uses
                    to place images and other associated output files that are
                    ready to be deployed onto the target machine.
                    The directory is machine-specific as it contains the
                    <filename>${MACHINE}</filename> name.
                    By default, this directory resides within the
                    <link linkend='build-directory'>Build Directory</link>
                    as <filename>${DEPLOY_DIR}/images/${MACHINE}/</filename>.
                </para>

                <para>
                    For more information on the structure of the Build
                    Directory, see
                    "<link linkend='structure-build'>The Build Directory - <filename>build/</filename></link>"
                    section.
                    For more detail on the contents of the
                    <filename>deploy</filename> directory, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#images-dev-environment'>Images</ulink>"
                    and
                    "<ulink url='&YOCTO_DOCS_OM_URL;#sdk-dev-environment'>Application Development SDK</ulink>"
                    sections both in the Yocto Project Overview and Concepts
                    Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPLOY_DIR_IPK'><glossterm>DEPLOY_DIR_IPK</glossterm>
            <info>
                DEPLOY_DIR_IPK[doc] = "Points to a IPK-specific area that the OpenEmbedded build system uses to place images, packages, SDKs, and other output files that are ready to be used outside of the build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the area that the OpenEmbedded build system uses
                    to place IPK packages that are ready to be used outside of
                    the build system.
                    This variable applies only when
                    <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
                    contains "package_ipk".
                </para>

                <para>
                    The BitBake configuration file initially defines this
                    variable as a sub-folder of
                    <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>:
                    <literallayout class='monospaced'>
     DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk"
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-package_ipk'><filename>package_ipk</filename></link>
                    class uses the
                    <filename>DEPLOY_DIR_IPK</filename> variable to make sure
                    the
                    <link linkend='ref-tasks-package_write_ipk'><filename>do_package_write_ipk</filename></link>
                    task writes IPK packages into the appropriate folder.
                    For more information on how packaging works, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPLOY_DIR_RPM'><glossterm>DEPLOY_DIR_RPM</glossterm>
            <info>
                DEPLOY_DIR_RPM[doc] = "Points to a RPM-specific area that the OpenEmbedded build system uses to place images, packages, SDKs, and other output files that are ready to be used outside of the build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the area that the OpenEmbedded build system uses
                    to place RPM packages that are ready to be used outside
                    of the build system.
                    This variable applies only when
                    <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
                    contains "package_rpm".
                </para>

                <para>
                    The BitBake configuration file initially defines this
                    variable as a sub-folder of
                    <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>:
                    <literallayout class='monospaced'>
     DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm"
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-package_rpm'><filename>package_rpm</filename></link>
                    class uses the
                    <filename>DEPLOY_DIR_RPM</filename> variable to make sure
                    the
                    <link linkend='ref-tasks-package_write_rpm'><filename>do_package_write_rpm</filename></link>
                    task writes RPM packages into the appropriate folder.
                    For more information on how packaging works, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPLOY_DIR_TAR'><glossterm>DEPLOY_DIR_TAR</glossterm>
            <info>
                DEPLOY_DIR_TAR[doc] = "Points to a tarball area that the OpenEmbedded build system uses to place images, packages, SDKs, and other output files that are ready to be used outside of the build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the area that the OpenEmbedded build system uses
                    to place tarballs that are ready to be used outside of
                    the build system.
                    This variable applies only when
                    <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
                    contains "package_tar".
                </para>

                <para>
                    The BitBake configuration file initially defines this
                    variable as a sub-folder of
                    <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>:
                    <literallayout class='monospaced'>
     DEPLOY_DIR_TAR = "${DEPLOY_DIR}/tar"
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>
                    class uses the
                    <filename>DEPLOY_DIR_TAR</filename> variable to make sure
                    the
                    <link linkend='ref-tasks-package_write_tar'><filename>do_package_write_tar</filename></link>
                    task writes TAR packages into the appropriate folder.
                    For more information on how packaging works, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DEPLOYDIR'><glossterm>DEPLOYDIR</glossterm>
            <info>
                DEPLOYDIR[doc] = "For recipes that inherit the deploy class, the DEPLOYDIR points to a temporary work area for deployed files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-deploy'><filename>deploy</filename></link>
                    class, the <filename>DEPLOYDIR</filename> points to a
                    temporary work area for deployed files that is set in the
                    <filename>deploy</filename> class as follows:
                    <literallayout class='monospaced'>
     DEPLOYDIR = "${WORKDIR}/deploy-${<link linkend='var-PN'><filename>PN</filename></link>}"
                    </literallayout>
                </para>

                <para>
                    Recipes inheriting the <filename>deploy</filename> class
                    should copy files to be deployed into
                    <filename>DEPLOYDIR</filename>, and the class will take
                    care of copying them into
                    <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
                    afterwards.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DESCRIPTION'><glossterm>DESCRIPTION</glossterm>
            <info>
                DESCRIPTION[doc] = "The package description used by package managers. If not set, DESCRIPTION takes the value of the SUMMARY variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The package description used by package managers.
                    If not set, <filename>DESCRIPTION</filename> takes
                    the value of the
                    <link linkend='var-SUMMARY'><filename>SUMMARY</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO'><glossterm>DISTRO</glossterm>
            <info>
                DISTRO[doc] = "The short name of the distribution. If the variable is blank, meta/conf/distro/defaultsetup.conf will be used."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The short name of the distribution.
                    For information on the long name of the distribution, see
                    the
                    <link linkend='var-DISTRO_NAME'><filename>DISTRO_NAME</filename></link>
                    variable.
                </para>

                <para>
                    The <filename>DISTRO</filename> variable corresponds to a
                    distribution configuration file whose root name is the
                    same as the variable's argument and whose filename
                    extension is <filename>.conf</filename>.
                    For example, the distribution configuration file for the
                    Poky distribution is named <filename>poky.conf</filename>
                    and resides in the
                    <filename>meta-poky/conf/distro</filename> directory of
                    the
                    <link linkend='source-directory'>Source Directory</link>.
                </para>

                <para>
                    Within that <filename>poky.conf</filename> file, the
                    <filename>DISTRO</filename> variable is set as follows:
                    <literallayout class='monospaced'>
     DISTRO = "poky"
                    </literallayout>
                </para>

                <para>
                    Distribution configuration files are located in a
                    <filename>conf/distro</filename> directory within the
                    <link linkend='metadata'>Metadata</link>
                    that contains the distribution configuration.
                    The value for <filename>DISTRO</filename> must not contain
                    spaces, and is typically all lower-case.
                    <note>
                        If the <filename>DISTRO</filename> variable is blank,
                        a set of default configurations are used, which are
                        specified within
                        <filename>meta/conf/distro/defaultsetup.conf</filename>
                        also in the Source Directory.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_CODENAME'><glossterm>DISTRO_CODENAME</glossterm>
            <info>
                DISTRO_CODENAME[doc] = "Specifies a codename for the distribution being built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a codename for the distribution being built.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_EXTRA_RDEPENDS'><glossterm>DISTRO_EXTRA_RDEPENDS</glossterm>
            <info>
                DISTRO_EXTRA_RDEPENDS[doc] = "Specifies a list of distro-specific packages to add to all images. The variable only applies to the images that include packagegroup-base."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of distro-specific packages to add to all images.
                    This variable takes affect through
                    <filename>packagegroup-base</filename> so the
                    variable only really applies to the more full-featured
                    images that include <filename>packagegroup-base</filename>.
                    You can use this variable to keep distro policy out of
                    generic images.
                    As with all other distro variables, you set this variable
                    in the distro <filename>.conf</filename> file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_EXTRA_RRECOMMENDS'><glossterm>DISTRO_EXTRA_RRECOMMENDS</glossterm>
            <info>
                DISTRO_EXTRA_RRECOMMENDS[doc] = "Specifies a list of distro-specific packages to add to all images if the packages exist. The list of packages are automatically installed but you can remove them."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of distro-specific packages to add to all images
                    if the packages exist.
                    The packages might not exist or be empty (e.g. kernel modules).
                    The list of packages are automatically installed but you can
                    remove them.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_FEATURES'><glossterm>DISTRO_FEATURES</glossterm>
            <info>
                DISTRO_FEATURES[doc] = "The features enabled for the distribution."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The software support you want in your distribution for
                    various features.
                    You define your distribution features in the distribution
                    configuration file.
                </para>

                <para>
                    In most cases, the presence or absence of a feature in
                    <filename>DISTRO_FEATURES</filename> is translated to the
                    appropriate option supplied to the configure script
                    during the
                    <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
                    task for recipes that optionally support the feature.
                    For example, specifying "x11" in
                    <filename>DISTRO_FEATURES</filename>, causes
                    every piece of software built for the target that can
                    optionally support X11 to have its X11 support enabled.
                </para>

                <para>
                    Two more examples are Bluetooth and NFS support.
                    For a more complete list of features that ships with the
                    Yocto Project and that you can provide with this variable,
                    see the
                    "<link linkend='ref-features-distro'>Distro Features</link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_FEATURES_BACKFILL'><glossterm>DISTRO_FEATURES_BACKFILL</glossterm>
            <info>
                DISTRO_FEATURES_BACKFILL[doc] = "Features to be added to DISTRO_FEATURES if not also present in DISTRO_FEATURES_BACKFILL_CONSIDERED. This variable is set in the meta/conf/bitbake.conf file and it is not intended to be user-configurable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Features to be added to
                    <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>
                    if not also present in
                    <filename><link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'>DISTRO_FEATURES_BACKFILL_CONSIDERED</link></filename>.
                </para>

                <para>
                    This variable is set in the <filename>meta/conf/bitbake.conf</filename> file.
                    It is not intended to be user-configurable.
                    It is best to just reference the variable to see which distro features are
                    being backfilled for all distro configurations.
                    See the "<link linkend='ref-features-backfill'>Feature Backfilling</link>" section for
                    more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><glossterm>DISTRO_FEATURES_BACKFILL_CONSIDERED</glossterm>
            <info>
                DISTRO_FEATURES_BACKFILL_CONSIDERED[doc] = "Features from DISTRO_FEATURES_BACKFILL that should not be backfilled (i.e. added to DISTRO_FEATURES) during the build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Features from
                    <filename><link linkend='var-DISTRO_FEATURES_BACKFILL'>DISTRO_FEATURES_BACKFILL</link></filename>
                    that should not be backfilled (i.e. added to
                    <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>)
                    during the build.
                    See the "<link linkend='ref-features-backfill'>Feature Backfilling</link>" section for
                    more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_FEATURES_DEFAULT'><glossterm>DISTRO_FEATURES_DEFAULT</glossterm>
            <info>
                DISTRO_FEATURES_DEFAULT[doc] = "Provides the default list of distro features with the exception of any libc-specific features."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A convenience variable that gives you the default
                    list of distro features with the exception of any
                    features specific to the C library
                    (<filename>libc</filename>).
                </para>

                <para>
                    When creating a custom distribution, you might find it
                    useful to be able to reuse the default
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                    options without the need to write out the full set.
                    Here is an example that uses
                    <filename>DISTRO_FEATURES_DEFAULT</filename> from a
                    custom distro configuration file:
                    <literallayout class='monospaced'>
     DISTRO_FEATURES ?= "${DISTRO_FEATURES_DEFAULT} myfeature"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_FEATURES_FILTER_NATIVE'><glossterm>DISTRO_FEATURES_FILTER_NATIVE</glossterm>
            <info>
                DISTRO_FEATURES_FILTER_NATIVE[doc] = "Specifies a list of features that if present in the target DISTRO_FEATURES value should be included in DISTRO_FEATURES when building native recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of features that if present in
                    the target
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                    value should be included in
                    <filename>DISTRO_FEATURES</filename> when building native
                    recipes.
                    This variable is used in addition to the features
                    filtered using the
                    <link linkend='var-DISTRO_FEATURES_NATIVE'><filename>DISTRO_FEATURES_NATIVE</filename></link>
                    variable.
               </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_FEATURES_FILTER_NATIVESDK'><glossterm>DISTRO_FEATURES_FILTER_NATIVESDK</glossterm>
            <info>
                DISTRO_FEATURES_FILTER_NATIVESDK[doc] = "Specifies a list of features that if present in the target DISTRO_FEATURES value should be included in DISTRO_FEATURES when building nativesdk recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of features that if present in the target
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                    value should be included in
                    <filename>DISTRO_FEATURES</filename> when building
                    nativesdk recipes.
                    This variable is used in addition to the features
                    filtered using the
                    <link linkend='var-DISTRO_FEATURES_NATIVESDK'><filename>DISTRO_FEATURES_NATIVESDK</filename></link>
                    variable.
               </para>
            </glossdef>
        </glossentry>

<!--
        <glossentry id='var-DISTRO_FEATURES_LIBC'><glossterm>DISTRO_FEATURES_LIBC</glossterm>
            <info>
                DISTRO_FEATURES_LIBC[doc] = "Specifies the list of distro features that are specific to the C library (libc)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" />
                    A convenience variable that specifies the list of distro
                    features that are specific to the C library
                    (<filename>libc</filename>).
                    Typically, these features are prefixed with "libc-" and
                    control which features are enabled at during the build
                    within the C library itself.
                </para>
            </glossdef>
        </glossentry>
-->

        <glossentry id='var-DISTRO_FEATURES_NATIVE'><glossterm>DISTRO_FEATURES_NATIVE</glossterm>
            <info>
                DISTRO_FEATURES_NATIVE[doc] = "Specifies a list of features that should be included in DISTRO_FEATURES when building native recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of features that should be included in
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                    when building native recipes.
                    This variable is used in addition to the features
                    filtered using the
                    <link linkend='var-DISTRO_FEATURES_FILTER_NATIVE'><filename>DISTRO_FEATURES_FILTER_NATIVE</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_FEATURES_NATIVESDK'><glossterm>DISTRO_FEATURES_NATIVESDK</glossterm>
            <info>
                DISTRO_FEATURES_NATIVESDK[doc] = "Specifies a list of features that should be included in DISTRO_FEATURES when building nativesdk recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of features that should be included in
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                    when building nativesdk recipes.
                    This variable is used in addition to the features
                    filtered using the
                    <link linkend='var-DISTRO_FEATURES_FILTER_NATIVESDK'><filename>DISTRO_FEATURES_FILTER_NATIVESDK</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_NAME'><glossterm>DISTRO_NAME</glossterm>
            <info>
                DISTRO_NAME[doc] = "The long name of the distribution."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The long name of the distribution.
                    For information on the short name of the distribution, see
                    the
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>
                    variable.
                </para>

                <para>
                    The <filename>DISTRO_NAME</filename> variable corresponds
                    to a distribution configuration file whose root name is the
                    same as the variable's argument and whose filename
                    extension is <filename>.conf</filename>.
                    For example, the distribution configuration file for the
                    Poky distribution is named <filename>poky.conf</filename>
                    and resides in the
                    <filename>meta-poky/conf/distro</filename> directory of
                    the
                    <link linkend='source-directory'>Source Directory</link>.
                </para>

                <para>
                    Within that <filename>poky.conf</filename> file, the
                    <filename>DISTRO_NAME</filename> variable is set as
                    follows:
                    <literallayout class='monospaced'>
     DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
                    </literallayout>
                </para>

                <para>
                    Distribution configuration files are located in a
                    <filename>conf/distro</filename> directory within the
                    <link linkend='metadata'>Metadata</link>
                    that contains the distribution configuration.
                    <note>
                        If the <filename>DISTRO_NAME</filename> variable is
                        blank, a set of default configurations are used, which
                        are specified within
                        <filename>meta/conf/distro/defaultsetup.conf</filename>
                        also in the Source Directory.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTRO_VERSION'><glossterm>DISTRO_VERSION</glossterm>
            <info>
                DISTRO_VERSION[doc] = "The version of the distribution."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The version of the distribution.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DISTROOVERRIDES'><glossterm>DISTROOVERRIDES</glossterm>
            <info>
                DISTROOVERRIDES[doc] = "A colon-separated list of overrides specific to the current distribution."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A colon-separated list of overrides specific to the
                    current distribution.
                    By default, this list includes the value of
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>.
                </para>

                <para>
                    You can extend <filename>DISTROOVERRIDES</filename>
                    to add extra overrides that should apply to
                    the distribution.
                </para>

                <para>
                    The underlying mechanism behind
                    <filename>DISTROOVERRIDES</filename> is simply that it
                    is included in the default value of
                    <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DL_DIR'><glossterm>DL_DIR</glossterm>
            <info>
                DL_DIR[doc] = "The central download directory used by the build process to store downloads. By default, the directory is 'downloads' in the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The central download directory used by the build process to
                    store downloads.
                    By default, <filename>DL_DIR</filename> gets files
                    suitable for mirroring for everything except Git
                    repositories.
                    If you want tarballs of Git repositories, use the
                    <link linkend='var-BB_GENERATE_MIRROR_TARBALLS'><filename>BB_GENERATE_MIRROR_TARBALLS</filename></link>
                    variable.
                </para>

                <para>
                    You can set this directory by defining the
                    <filename>DL_DIR</filename> variable in the
                    <filename>conf/local.conf</filename> file.
                    This directory is self-maintaining and you should not have
                    to touch it.
                    By default, the directory is <filename>downloads</filename>
                    in the
                    <link linkend='build-directory'>Build Directory</link>.
                    <literallayout class='monospaced'>
     #DL_DIR ?= "${TOPDIR}/downloads"
                    </literallayout>
                    To specify a different download directory, simply remove
                    the comment from the line and provide your directory.
                </para>

                <para>
                    During a first build, the system downloads many different
                    source code tarballs from various upstream projects.
                    Downloading can take a while, particularly if your network
                    connection is slow.
                    Tarballs are all stored in the directory defined by
                    <filename>DL_DIR</filename> and the build system looks there
                    first to find source tarballs.
                    <note>
                        When wiping and rebuilding, you can preserve this
                        directory to speed up this part of subsequent
                        builds.
                    </note>
                </para>

                <para>
                    You can safely share this directory between multiple builds
                    on the same development machine.
                    For additional information on how the build process gets
                    source files when working behind a firewall or proxy server,
                    see this specific question in the
                    "<link linkend='how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server'>FAQ</link>"
                    chapter.
                    You can also refer to the
                    "<ulink url='&YOCTO_WIKI_URL;/wiki/Working_Behind_a_Network_Proxy'>Working Behind a Network Proxy</ulink>"
                    Wiki page.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DOC_COMPRESS'><glossterm>DOC_COMPRESS</glossterm>
            <info>
                DOC_COMPRESS[doc] = "When inheriting the compress_doc class, this variable sets the compression policy used when the OpenEmbedded build system compresses man pages and info pages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-compress_doc'><filename>compress_doc</filename></link>
                    class, this variable sets the compression policy used when
                    the OpenEmbedded build system compresses man pages and info
                    pages.
                    By default, the compression method used is gz (gzip).
                    Other policies available are xz and bz2.
                </para>

                <para>
                    For information on policies and on how to use this
                    variable, see the comments in the
                    <filename>meta/classes/compress_doc.bbclass</filename> file.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-e'><title>E</title>

        <glossentry id='var-EFI_PROVIDER'><glossterm>EFI_PROVIDER</glossterm>
            <info>
                EFI_PROVIDER[doc] = "When building bootable images (i.e. where hddimg, iso, or wic.vmdk is in IMAGE_FSTYPES), the EFI_PROVIDER variable specifies the EFI bootloader to use."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When building bootable images (i.e. where
                    <filename>hddimg</filename>, <filename>iso</filename>,
                    or <filename>wic.vmdk</filename> is in
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>),
                    the <filename>EFI_PROVIDER</filename> variable specifies
                    the EFI bootloader to use.
                    The default is "grub-efi", but "systemd-boot" can be used
                    instead.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-systemd-boot'><filename>systemd-boot</filename></link>
                    and
                    <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
                    classes for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ENABLE_BINARY_LOCALE_GENERATION'><glossterm>ENABLE_BINARY_LOCALE_GENERATION</glossterm>
            <info>
                ENABLE_BINARY_LOCALE_GENERATION[doc] = "Controls which locales for glibc are generated during the build. The variable is useful if the target device has 64Mbytes of RAM or less."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Variable that controls which locales for
                    <filename>glibc</filename> are generated during the
                    build (useful if the target device has 64Mbytes
                    of RAM or less).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ERR_REPORT_DIR'><glossterm>ERR_REPORT_DIR</glossterm>
            <info>
                ERR_REPORT_DIR[doc] = "When used with the report-error class, specifies the path used for storing the debug files created by the error reporting tool, which allows you to submit build errors you encounter to a central database."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When used with the
                    <link linkend='ref-classes-report-error'><filename>report-error</filename></link>
                    class, specifies the path used for storing the debug files
                    created by the
                    <ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>error reporting tool</ulink>,
                    which allows you to submit build errors you encounter to a
                    central database.
                    By default, the value of this variable is
                    <filename>${</filename><link linkend='var-LOG_DIR'><filename>LOG_DIR</filename></link><filename>}/error-report</filename>.
                </para>

                <para>
                    You can set <filename>ERR_REPORT_DIR</filename> to the path
                    you want the error reporting tool to store the debug files
                    as follows in your <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     ERR_REPORT_DIR = "<replaceable>path</replaceable>"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ERROR_QA'><glossterm>ERROR_QA</glossterm>
            <info>
                ERROR_QA[doc] = "Specifies the quality assurance checks whose failures are reported as errors by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the quality assurance checks whose failures are
                    reported as errors by the OpenEmbedded build system.
                    You set this variable in your distribution configuration
                    file.
                    For a list of the checks you can control with this variable,
                    see the
                    "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXCLUDE_FROM_SHLIBS'><glossterm>EXCLUDE_FROM_SHLIBS</glossterm>
            <info>
                EXCLUDE_FROM_SHLIBS[doc] = "Causes the OpenEmbedded build system's shared libraries resolver to exclude an entire package when scanning for shared libraries."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Triggers the OpenEmbedded build system's shared libraries
                    resolver to exclude an entire package when scanning for
                    shared libraries.
                    <note>
                        The shared libraries resolver's functionality results
                        in part from the internal function
                        <filename>package_do_shlibs</filename>, which is part of
                        the
                        <link linkend='ref-tasks-package'><filename>do_package</filename></link>
                        task.
                        You should be aware that the shared libraries resolver
                        might implicitly define some dependencies between
                        packages.
                    </note>
                    The <filename>EXCLUDE_FROM_SHLIBS</filename> variable is
                    similar to the
                    <link linkend='var-PRIVATE_LIBS'><filename>PRIVATE_LIBS</filename></link>
                    variable, which excludes a package's particular libraries
                    only and not the whole package.
                </para>

                <para>
                    Use the
                    <filename>EXCLUDE_FROM_SHLIBS</filename> variable by
                    setting it to "1" for a particular package:
                    <literallayout class='monospaced'>
     EXCLUDE_FROM_SHLIBS = "1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXCLUDE_FROM_WORLD'><glossterm>EXCLUDE_FROM_WORLD</glossterm>
            <info>
                EXCLUDE_FROM_WORLD[doc] = "Directs BitBake to exclude a recipe from world builds (i.e. bitbake world)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Directs BitBake to exclude a recipe from world builds (i.e.
                    <filename>bitbake world</filename>).
                    During world builds, BitBake locates, parses and builds all
                    recipes found in every layer exposed in the
                    <filename>bblayers.conf</filename> configuration file.
                </para>

                <para>
                    To exclude a recipe from a world build using this variable,
                    set the variable to "1" in the recipe.
                </para>

                <note>
                    Recipes added to <filename>EXCLUDE_FROM_WORLD</filename>
                    may still be built during a world build in order to satisfy
                    dependencies of other recipes.
                    Adding a recipe to <filename>EXCLUDE_FROM_WORLD</filename>
                    only ensures that the recipe is not explicitly added
                    to the list of build targets in a world build.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTENDPE'><glossterm>EXTENDPE</glossterm>
            <info>
                EXTENDPE[doc] = "Used with file and pathnames to create a prefix for a recipe's version based on the recipe's PE value. If PE is set and greater than zero for a recipe, EXTENDPE becomes that value."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Used with file and pathnames to create a prefix for a recipe's
                    version based on the recipe's
                    <link linkend='var-PE'><filename>PE</filename></link> value.
                    If <filename>PE</filename> is set and greater than zero for a recipe,
                    <filename>EXTENDPE</filename> becomes that value (e.g if
                    <filename>PE</filename> is equal to "1" then <filename>EXTENDPE</filename>
                    becomes "1_").
                    If a recipe's <filename>PE</filename> is not set (the default) or is equal to
                    zero, <filename>EXTENDPE</filename> becomes "".</para>
                    <para>See the <link linkend='var-STAMP'><filename>STAMP</filename></link>
                    variable for an example.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTENDPKGV'><glossterm>EXTENDPKGV</glossterm>
            <info>
                EXTENDPKGV[doc] = "The full package version specification as it appears on the final packages produced by a recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The full package version specification as it appears on the
                    final packages produced by a recipe.
                    The variable's value is normally used to fix a runtime
                    dependency to the exact same version of another package
                    in the same recipe:
                    <literallayout class='monospaced'>
     RDEPENDS_${PN}-additional-module = "${PN} (= ${EXTENDPKGV})"
                    </literallayout>
                </para>

                <para>
                    The dependency relationships are intended to force the
                    package manager to upgrade these types of packages in
                    lock-step.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTERNAL_KERNEL_TOOLS'><glossterm>EXTERNAL_KERNEL_TOOLS</glossterm>
            <info>
                EXTERNAL_KERNEL_TOOLS[doc] = "Indicates kernel tools are external to the source tree."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set, the <filename>EXTERNAL_KERNEL_TOOLS</filename>
                    variable indicates that these tools are not in the
                    source tree.
                </para>

                <para>
                    When kernel tools are available in the tree, they are
                    preferred over any externally installed tools.
                    Setting the <filename>EXTERNAL_KERNEL_TOOLS</filename>
                    variable tells the OpenEmbedded build system to prefer
                    the installed external tools.
                    See the
                    <link linkend='ref-classes-kernel-yocto'><filename>kernel-yocto</filename></link>
                    class in <filename>meta/classes</filename> to see how
                    the variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTERNALSRC'><glossterm>EXTERNALSRC</glossterm>
            <info>
                EXTERNALSRC[doc] = "If externalsrc.bbclass is inherited, this variable points to the source tree, which is outside of the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-externalsrc'><filename>externalsrc</filename></link>
                    class, this variable points to the source tree, which is
                    outside of the OpenEmbedded build system.
                    When set, this variable sets the
                    <link linkend='var-S'><filename>S</filename></link>
                    variable, which is what the OpenEmbedded build system uses
                    to locate unpacked recipe source code.
                </para>

                <para>
                    For more information on
                    <filename>externalsrc.bbclass</filename>, see the
                    "<link linkend='ref-classes-externalsrc'><filename>externalsrc.bbclass</filename></link>"
                    section.
                    You can also find information on how to use this variable
                    in the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTERNALSRC_BUILD'><glossterm>EXTERNALSRC_BUILD</glossterm>
            <info>
                EXTERNALSRC_BUILD[doc] = "If externalsrc.bbclass is inherited, this variable points to the directory in which the recipe's source code is built, which is outside of the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-externalsrc'><filename>externalsrc</filename></link>
                    class, this variable points to the directory in which the
                    recipe's source code is built, which is outside of the
                    OpenEmbedded build system.
                    When set, this variable sets the
                    <link linkend='var-B'><filename>B</filename></link>
                    variable, which is what the OpenEmbedded build system uses
                    to locate the Build Directory.
                </para>

                <para>
                    For more information on
                    <filename>externalsrc.bbclass</filename>, see the
                    "<link linkend='ref-classes-externalsrc'><filename>externalsrc.bbclass</filename></link>"
                    section.
                    You can also find information on how to use this variable
                    in the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_AUTORECONF'><glossterm>EXTRA_AUTORECONF</glossterm>
            <info>
                EXTRA_AUTORECONF[doc] = "Extra options passed to the autoreconf command, which is executed during do_configure."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For recipes inheriting the
                    <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
                    class, you can use <filename>EXTRA_AUTORECONF</filename> to
                    specify extra options to pass to the
                    <filename>autoreconf</filename> command that is
                    executed during the
                    <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
                    task.
                </para>

                <para>
                    The default value is "--exclude=autopoint".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_IMAGE_FEATURES'><glossterm>EXTRA_IMAGE_FEATURES</glossterm>
            <info>
                EXTRA_IMAGE_FEATURES[doc] = "The list of additional features to include in an image. Configure this variable in the conf/local.conf file in the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of additional features to include in an image.
                    When listing more than one feature, separate them with
                    a space.
                </para>

                <para>
                    Typically, you configure this variable in your
                    <filename>local.conf</filename> file, which is found in the
                    <link linkend='build-directory'>Build Directory</link>.
                    Although you can use this variable from within a recipe,
                    best practices dictate that you do not.
                    <note>
                        To enable primary features from within the image
                        recipe, use the
                        <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                        variable.
                    </note>
                </para>

                <para>
                    Here are some examples of features you can add:
                    <literallayout class='monospaced'>
"dbg-pkgs" - Adds -dbg packages for all installed packages
             including symbol information for debugging and
             profiling.

"debug-tweaks" - Makes an image suitable for debugging.
                 For example, allows root logins without
                 passwords and enables post-installation
                 logging. See the 'allow-empty-password'
                 and 'post-install-logging' features in
                 the "<link linkend='ref-features-image'>Image Features</link>" section for
                 more information.

"dev-pkgs" - Adds -dev packages for all installed packages.
             This is useful if you want to develop against
             the libraries in the image.

"read-only-rootfs" - Creates an image whose root
                     filesystem is read-only. See the
                     "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
                     section in the Yocto Project
                     Development Tasks Manual for
                     more information

"tools-debug" - Adds debugging tools such as gdb and
                strace.

"tools-sdk" - Adds development tools such as gcc, make,
              pkgconfig and so forth.

"tools-testapps" - Adds useful testing tools such as
                   ts_print, aplay, arecord and so
                   forth.

                    </literallayout>
                </para>

                <para>
                    For a complete list of image features that ships with the
                    Yocto Project, see the
                    "<link linkend="ref-features-image">Image Features</link>"
                    section.
                </para>

                <para>
                    For an example that shows how to customize your image by
                    using this variable, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_IMAGECMD'><glossterm>EXTRA_IMAGECMD</glossterm>
            <info>
                EXTRA_IMAGECMD[doc] = "Specifies additional options for the image creation command that has been specified in IMAGE_CMD. When setting this variable, you should use an override for the associated image type."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies additional options for the image
                    creation command that has been specified in
                    <link linkend='var-IMAGE_CMD'><filename>IMAGE_CMD</filename></link>.
                    When setting this variable, use an override for the
                    associated image type.
                    Here is an example:
                    <literallayout class='monospaced'>
     EXTRA_IMAGECMD_ext3 ?= "-i 4096"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_IMAGEDEPENDS'><glossterm>EXTRA_IMAGEDEPENDS</glossterm>
            <info>
                EXTRA_IMAGEDEPENDS[doc] = "A list of recipes to build that do not provide packages for installing into the root filesystem. Use this variable to list recipes that are required to build the final image, but not needed in the root filesystem."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recipes to build that do not provide packages
                    for installing into the root filesystem.
                </para>

                <para>
                    Sometimes a recipe is required to build the final image but is not
                    needed in the root filesystem.
                    You can use the <filename>EXTRA_IMAGEDEPENDS</filename> variable to
                    list these recipes and thus specify the dependencies.
                    A typical example is a required bootloader in a machine configuration.
                </para>

                <note>
                    To add packages to the root filesystem, see the various
                    <filename>*<link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
                    and <filename>*<link linkend='var-RRECOMMENDS'>RRECOMMENDS</link></filename>
                    variables.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRANATIVEPATH'><glossterm>EXTRANATIVEPATH</glossterm>
            <info>
                EXTRANATIVEPATH[doc] = "A list of subdirectories of ${STAGING_BINDIR_NATIVE} added to the beginning of the environment variable PATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of subdirectories of
                    <filename>${</filename><link linkend='var-STAGING_BINDIR_NATIVE'><filename>STAGING_BINDIR_NATIVE</filename></link><filename>}</filename>
                    added to the beginning of the environment variable
                    <filename>PATH</filename>.
                    As an example, the following prepends
                    "${STAGING_BINDIR_NATIVE}/foo:${STAGING_BINDIR_NATIVE}/bar:"
                    to <filename>PATH</filename>:
                    <literallayout class='monospaced'>
     EXTRANATIVEPATH = "foo bar"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_OECMAKE'><glossterm>EXTRA_OECMAKE</glossterm>
            <info>
                EXTRA_OECMAKE[doc] = "Additional cmake options."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Additional
                    <ulink url='https://cmake.org/overview/'>CMake</ulink>
                    options.
                    See the
                    <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
                    class for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_OECONF'><glossterm>EXTRA_OECONF</glossterm>
            <info>
                EXTRA_OECONF[doc] = "Additional configure script options."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Additional <filename>configure</filename> script options.
                    See
                    <link linkend='var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></link>
                    for additional information on passing configure script
                    options.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_OEMAKE'><glossterm>EXTRA_OEMAKE</glossterm>
            <info>
                EXTRA_OEMAKE[doc] = "Additional GNU make options."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Additional GNU <filename>make</filename> options.
                </para>

                <para>
                    Because the <filename>EXTRA_OEMAKE</filename> defaults to
                    "", you need to set the variable to specify any required
                    GNU options.
                </para>

                <para>
                    <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
                    and
                    <link linkend='var-PARALLEL_MAKEINST'><filename>PARALLEL_MAKEINST</filename></link>
                    also make use of
                    <filename>EXTRA_OEMAKE</filename> to pass the required
                    flags.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_OESCONS'><glossterm>EXTRA_OESCONS</glossterm>
            <info>
                EXTRA_OESCONS[doc] = "When a recipe inherits the scons class, this variable specifies additional configuration options you want to pass to the scons command line."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-scons'><filename>scons</filename></link>
                    class, this variable specifies additional configuration
                    options you want to pass to the
                    <filename>scons</filename> command line.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-EXTRA_USERS_PARAMS'><glossterm>EXTRA_USERS_PARAMS</glossterm>
            <info>
                EXTRA_USERS_PARAMS[doc] = "When a recipe inherits the extrausers class, this variable provides image level user and group operations."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-extrausers'><filename>extrausers</filename></link>
                    class, this variable provides image level user and group
                    operations.
                    This is a more global method of providing user and group
                    configuration as compared to using the
                    <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
                    class, which ties user and group configurations to a
                    specific recipe.
                </para>

                <para>
                    The set list of commands you can configure using the
                    <filename>EXTRA_USERS_PARAMS</filename> is shown in the
                    <filename>extrausers</filename> class.
                    These commands map to the normal Unix commands of the same
                    names:
                    <literallayout class='monospaced'>
     # EXTRA_USERS_PARAMS = "\
     # useradd -p '' tester; \
     # groupadd developers; \
     # userdel nobody; \
     # groupdel -g video; \
     # groupmod -g 1020 developers; \
     # usermod -s /bin/sh tester; \
     # "
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-f'><title>F</title>

        <glossentry id='var-FEATURE_PACKAGES'><glossterm>FEATURE_PACKAGES</glossterm>
            <info>
                FEATURE_PACKAGES[doc] = "Defines one or more packages to include in an image when a specific item is included in IMAGE_FEATURES. When setting the value, FEATURE_PACKAGES should have the name of the feature item as an override."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines one or more packages to include in an image when
                    a specific item is included in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
                    When setting the value, <filename>FEATURE_PACKAGES</filename>
                    should have the name of the feature item as an override.
                    Here is an example:
                    <literallayout class='monospaced'>
     FEATURE_PACKAGES_widget = "<replaceable>package1</replaceable> <replaceable>package2</replaceable>"
                    </literallayout>
                </para>

                <para>
                    In this example, if "widget" were added to
                    <filename>IMAGE_FEATURES</filename>, <replaceable>package1</replaceable> and
                    <replaceable>package2</replaceable> would be included in the image.
                    <note>
                        Packages installed by features defined through
                        <filename>FEATURE_PACKAGES</filename> are often package
                        groups.
                        While similarly named, you should not confuse the
                        <filename>FEATURE_PACKAGES</filename> variable with
                        package groups, which are discussed elsewhere in the
                        documentation.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FEED_DEPLOYDIR_BASE_URI'><glossterm>FEED_DEPLOYDIR_BASE_URI</glossterm>
            <info>
                FEED_DEPLOYDIR_BASE_URI[doc] = "Allow to serve ipk deploy directory as an ad hoc feed (bogofeed). Set to base URL of the directory as exported by HTTP. Set of ad hoc feed configs will be generated in the image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the base URL of the server and location within
                    the document-root that provides the metadata and
                    packages required by OPKG to support runtime package
                    management of IPK packages.
                    You set this variable in your
                    <filename>local.conf</filename> file.
                </para>

                <para>
                    Consider the following example:
                    <literallayout class='monospaced'>
     FEED_DEPLOYDIR_BASE_URI = "http://192.168.7.1/BOARD-dir"
                    </literallayout>
                    This example assumes you are serving your packages over
                    HTTP and your databases are located in a directory
                    named <filename>BOARD-dir</filename>, which is underneath
                    your HTTP server's document-root.
                    In this case, the OpenEmbedded build system generates a set
                    of configuration files for you in your target that work
                    with the feed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILES'><glossterm>FILES</glossterm>
            <info>
                FILES[doc] = "The list of directories or files that are placed in a package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of files and directories that are placed in a
                    package.
                    The
                    <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                    variable lists the packages generated by a recipe.
                </para>

                <para>
                    To use the <filename>FILES</filename> variable, provide a
                    package name override that identifies the resulting package.
                    Then, provide a space-separated list of files or paths
                    that identify the files you want included as part of the
                    resulting package.
                    Here is an example:
                    <literallayout class='monospaced'>
     FILES_${PN} += "${bindir}/mydir1 ${bindir}/mydir2/myfile"
                    </literallayout>
                    <note><title>Notes</title>
                        <itemizedlist>
                            <listitem><para>
                                When specifying files or paths, you can pattern
                                match using Python's
                                <ulink url='https://docs.python.org/2/library/glob.html'><filename>glob</filename></ulink>
                                syntax.
                                For details on the syntax, see the
                                documentation by following the previous link.
                                </para></listitem>
                            <listitem><para>
                                When specifying paths as part of the
                                <filename>FILES</filename> variable, it is
                                good practice to use appropriate path
                                variables.
                                For example, use <filename>${sysconfdir}</filename>
                                rather than <filename>/etc</filename>, or
                                <filename>${bindir}</filename> rather than
                                <filename>/usr/bin</filename>.
                                You can find a list of these variables at the
                                top of the
                                <filename>meta/conf/bitbake.conf</filename>
                                file in the
                                <link linkend='source-directory'>Source Directory</link>.
                                You will also find the default values of the
                                various <filename>FILES_*</filename> variables
                                in this file.
                                </para></listitem>
                        </itemizedlist>
                    </note>
                </para>

                <para>
                    If some of the files you provide with the
                    <filename>FILES</filename> variable are editable and you
                    know they should not be overwritten during the package
                    update process by the Package Management System (PMS), you
                    can identify these files so that the PMS will not
                    overwrite them.
                    See the
                    <link linkend='var-CONFFILES'><filename>CONFFILES</filename></link>
                    variable for information on how to identify these files to
                    the PMS.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILES_SOLIBSDEV'><glossterm>FILES_SOLIBSDEV</glossterm>
            <info>
                FILES_SOLIBSDEV[doc] = "Defines the full path name of the development symbolic link (symlink) for shared libraries on the target platform."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the file specification to match
                    <link linkend='var-SOLIBSDEV'><filename>SOLIBSDEV</filename></link>.
                    In other words, <filename>FILES_SOLIBSDEV</filename>
                    defines the full path name of the development symbolic link
                    (symlink) for shared libraries on the target platform.
                </para>

                <para>
                    The following statement from the
                    <filename>bitbake.conf</filename> shows how it is set:
                    <literallayout class='monospaced'>
     FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILESEXTRAPATHS'><glossterm>FILESEXTRAPATHS</glossterm>
            <info>
                FILESEXTRAPATHS[doc] = "Extends the search path the OpenEmbedded build system uses when looking for files and patches as it processes recipes and append files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Extends the search path the OpenEmbedded build system uses
                    when looking for files and patches as it processes recipes
                    and append files.
                    The default directories BitBake uses when it processes
                    recipes are initially defined by the
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                    variable.
                    You can extend <filename>FILESPATH</filename> variable
                    by using <filename>FILESEXTRAPATHS</filename>.
                </para>

                <para>
                    Best practices dictate that you accomplish this by using
                    <filename>FILESEXTRAPATHS</filename> from within a
                    <filename>.bbappend</filename> file and that you prepend
                    paths as follows:
                    <literallayout class='monospaced'>
     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
                    </literallayout>
                    In the above example, the build system first looks for files
                    in a directory that has the same name as the corresponding
                    append file.
                    <note>
                        <para>When extending
                        <filename>FILESEXTRAPATHS</filename>,
                        be sure to use the immediate expansion
                        (<filename>:=</filename>) operator.
                        Immediate expansion makes sure that BitBake evaluates
                        <link linkend='var-THISDIR'><filename>THISDIR</filename></link>
                        at the time the directive is encountered rather than at
                        some later time when expansion might result in a
                        directory that does not contain the files you need.
                        </para>

                        <para>Also, include the trailing separating colon
                        character if you are prepending.
                        The trailing colon character is necessary because you
                        are directing BitBake to extend the path by prepending
                        directories to the search path.</para>
                    </note>
                    Here is another common use:
                    <literallayout class='monospaced'>
     FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
                    </literallayout>
                    In this example, the build system extends the
                    <filename>FILESPATH</filename> variable to include a
                    directory named <filename>files</filename> that is in the
                    same directory as the corresponding append file.
                </para>

                <para>
                    This next example specifically adds three paths:
                    <literallayout class='monospaced'>
     FILESEXTRAPATHS_prepend := "path_1:path_2:path_3:"
                    </literallayout>
                </para>

                <para>
                    A final example shows how you can extend the search path
                    and include a
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>-specific
                    override, which is useful in a BSP layer:
                    <literallayout class='monospaced'>
     FILESEXTRAPATHS_prepend_intel-x86-common := "${THISDIR}/${PN}:"
                    </literallayout>
                    The previous statement appears in the
                    <filename>linux-yocto-dev.bbappend</filename> file, which
                    is found in the Yocto Project
                    <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
                    in
                    <filename>meta-intel/common/recipes-kernel/linux</filename>.
                    Here, the machine override is a special
                    <link linkend='var-PACKAGE_ARCH'><filename>PACKAGE_ARCH</filename></link>
                    definition for multiple <filename>meta-intel</filename>
                    machines.
                    <note>
                        For a layer that supports a single BSP, the override
                        could just be the value of <filename>MACHINE</filename>.
                    </note>
                </para>

                <para>
                    By prepending paths in <filename>.bbappend</filename>
                    files, you allow multiple append files that reside in
                    different layers but are used for the same recipe to
                    correctly extend the path.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILESOVERRIDES'><glossterm>FILESOVERRIDES</glossterm>
            <info>
                FILESOVERRIDES[doc] = "A subset of OVERRIDES used by the OpenEmbedded build system for creating FILESPATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A subset of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    used by the OpenEmbedded build system for creating
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
                    The <filename>FILESOVERRIDES</filename> variable uses
                    overrides to automatically extend the
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                    variable.
                    For an example of how that works, see the
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                    variable description.
                    Additionally, you find more information on how overrides
                    are handled in the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#conditional-syntax-overrides'>Conditional Syntax (Overrides)</ulink>"
                    section of the BitBake User Manual.
                </para>

                <para>
                    By default, the <filename>FILESOVERRIDES</filename>
                    variable is defined as:
                    <literallayout class='monospaced'>
     FILESOVERRIDES = "${TRANSLATED_TARGET_ARCH}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}"
                    </literallayout>

                    <note>
                        Do not hand-edit the <filename>FILESOVERRIDES</filename>
                        variable.
                        The values match up with expected overrides and are
                        used in an expected manner by the build system.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILESPATH'><glossterm>FILESPATH</glossterm>
            <info>
                FILESPATH[doc] = "The default set of directories the OpenEmbedded build system uses when searching for patches and files. It is defined in the base.bbclass class found in meta/classes in the Source Directory. Do not hand-edit the FILESPATH variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The default set of directories the OpenEmbedded build
                    system uses when searching for patches and files.
                </para>

                <para>
                    During the build process, BitBake searches each directory
                    in <filename>FILESPATH</filename> in the specified order
                    when looking for files and patches specified by each
                    <filename>file://</filename> URI in a recipe's
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                    statements.
                </para>

                <para>
                    The default value for the <filename>FILESPATH</filename>
                    variable is defined in the <filename>base.bbclass</filename>
                    class found in <filename>meta/classes</filename> in the
                    <link linkend='source-directory'>Source Directory</link>:
                    <literallayout class='monospaced'>
     FILESPATH = "${@base_set_filespath(["${FILE_DIRNAME}/${BP}", \
        "${FILE_DIRNAME}/${BPN}", "${FILE_DIRNAME}/files"], d)}"
                    </literallayout>
                    The <filename>FILESPATH</filename> variable is automatically
                    extended using the overrides from the
                    <link linkend='var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></link>
                    variable.
                    <note><title>Notes</title>
                        <itemizedlist>
                            <listitem><para>
                                Do not hand-edit the
                                <filename>FILESPATH</filename> variable.
                                If you want the build system to look in
                                directories other than the defaults, extend the
                                <filename>FILESPATH</filename> variable by
                                using the
                                <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
                                variable.
                                </para></listitem>
                            <listitem><para>
                                Be aware that the default
                                <filename>FILESPATH</filename> directories do
                                not map to directories in custom layers
                                where append files
                                (<filename>.bbappend</filename>) are used.
                                If you want the build system to find patches
                                or files that reside with your append files,
                                you need to extend the
                                <filename>FILESPATH</filename> variable by
                                using the <filename>FILESEXTRAPATHS</filename>
                                variable.
                                </para></listitem>
                        </itemizedlist>
                    </note>
                </para>

                <para>
                    You can take advantage of this searching behavior in
                    useful ways.
                    For example, consider a case where the following
                    directory structure exists for general and machine-specific
                    configurations:
                    <literallayout class='monospaced'>
     files/defconfig
     files/MACHINEA/defconfig
     files/MACHINEB/defconfig
                    </literallayout>
                    Also in the example, the <filename>SRC_URI</filename>
                    statement contains "file://defconfig".
                    Given this scenario, you can set
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    to "MACHINEA" and cause the build system to use files
                    from <filename>files/MACHINEA</filename>.
                    Set <filename>MACHINE</filename> to "MACHINEB" and the
                    build system uses files from
                    <filename>files/MACHINEB</filename>.
                    Finally, for any machine other than "MACHINEA" and
                    "MACHINEB", the build system uses files from
                    <filename>files/defconfig</filename>.
                </para>

                <para>
                    You can find out more about the patching process in the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#patching-dev-environment'>Patching</ulink>"
                    section in the Yocto Project Overview and Concepts Manual
                    and the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-patching-code'>Patching Code</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    See the
                    <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
                    task as well.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILESYSTEM_PERMS_TABLES'><glossterm>FILESYSTEM_PERMS_TABLES</glossterm>
            <info>
                FILESYSTEM_PERMS_TABLES[doc] = "Allows you to define your own file permissions settings table as part of your configuration for the packaging process."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Allows you to define your own file permissions settings table as part of
                    your configuration for the packaging process.
                    For example, suppose you need a consistent set of custom permissions for
                    a set of groups and users across an entire work project.
                    It is best to do this in the packages themselves but this is not always
                    possible.
                </para>

                <para>
                    By default, the OpenEmbedded build system uses the <filename>fs-perms.txt</filename>, which
                    is located in the <filename>meta/files</filename> folder in the
                    <link linkend='source-directory'>Source Directory</link>.
                    If you create your own file permissions setting table, you should place it in your
                    layer or the distro's layer.
                </para>

                <para>
                    You define the <filename>FILESYSTEM_PERMS_TABLES</filename> variable in the
                    <filename>conf/local.conf</filename> file, which is found in the
                    <link linkend='build-directory'>Build Directory</link>, to
                    point to your custom <filename>fs-perms.txt</filename>.
                    You can specify more than a single file permissions setting table.
                    The paths you specify to these files must be defined within the
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link> variable.
                </para>

                <para>
                    For guidance on how to create your own file permissions settings table file,
                    examine the existing <filename>fs-perms.txt</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FONT_EXTRA_RDEPENDS'><glossterm>FONT_EXTRA_RDEPENDS</glossterm>
            <info>
                FONT_EXTRA_RDEPENDS[doc] = "When a recipe inherits the fontcache class, this variable specifies runtime dependencies for font packages. This variable defaults to 'fontconfig-utils'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-fontcache'><filename>fontcache</filename></link>
                    class, this variable specifies the runtime dependencies
                    for font packages.
                    By default, the <filename>FONT_EXTRA_RDEPENDS</filename>
                    is set to "fontconfig-utils".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FONT_PACKAGES'><glossterm>FONT_PACKAGES</glossterm>
            <info>
                FONT_PACKAGES[doc] = "When a recipe inherits the fontcache class, this variable identifies packages containing font files that need to be cached by Fontconfig."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-fontcache'><filename>fontcache</filename></link>
                    class, this variable identifies packages containing font
                    files that need to be cached by Fontconfig.
                    By default, the <filename>fontcache</filename> class assumes
                    that fonts are in the recipe's main package
                    (i.e. <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
                    Use this variable if fonts you need are in a package
                    other than that main package.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FORCE_RO_REMOVE'><glossterm>FORCE_RO_REMOVE</glossterm>
            <info>
                FORCE_RO_REMOVE[doc] = "Forces the removal of the packages listed in ROOTFS_RO_UNNEEDED during the generation of the root filesystem."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Forces the removal of the packages listed in
                    <filename>ROOTFS_RO_UNNEEDED</filename> during the
                    generation of the root filesystem.
                </para>

                <para>
                    Set the variable to "1" to force the removal of these
                    packages.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FULL_OPTIMIZATION'><glossterm>FULL_OPTIMIZATION</glossterm>
            <info>
                FULL_OPTIMIZATION[doc]= "The options to pass in TARGET_CFLAGS and CFLAGS when compiling an optimized system. This variable defaults to '-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The options to pass in
                    <filename><link linkend='var-TARGET_CFLAGS'>TARGET_CFLAGS</link></filename>
                    and <filename><link linkend='var-CFLAGS'>CFLAGS</link></filename>
                    when compiling an optimized system.
                    This variable defaults to
                    "-O2 -pipe ${DEBUG_FLAGS}".
                </para>
            </glossdef>
        </glossentry>
    </glossdiv>

    <glossdiv id='var-glossary-g'><title>G</title>

        <glossentry id='var-GCCPIE'><glossterm>GCCPIE</glossterm>
            <info>
                GCCPIE[doc] = "Enables Position Independent Executables (PIE) within the GNU C Compiler (GCC)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Enables Position Independent Executables (PIE) within the
                    GNU C Compiler (GCC).
                    Enabling PIE in the GCC makes Return Oriented Programming
                    (ROP) attacks much more difficult to
                    execute.
                </para>

                <para>
                    By default the <filename>security_flags.inc</filename>
                    file enables PIE by setting the variable as follows:
                    <literallayout class='monospaced'>
     GCCPIE ?= "--enable-default-pie"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GCCVERSION'><glossterm>GCCVERSION</glossterm>
            <info>
                GCCVERSION[doc] = "Specifies the default version of the GNU C Compiler (GCC) to use."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the default version of the GNU C Compiler (GCC)
                    used for compilation.
                    By default, <filename>GCCVERSION</filename> is set to
                    "8.x" in the
                    <filename>meta/conf/distro/include/tcmode-default.inc</filename>
                    include file:
                    <literallayout class='monospaced'>
     GCCVERSION ?= "8.%"
                    </literallayout>
                    You can override this value by setting it in a configuration
                    file such as the <filename>local.conf</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GDB'><glossterm>GDB</glossterm>
            <info>
                GDB[doc] = "The minimal command and arguments to run the GNU Debugger."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments to run the GNU Debugger.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GITDIR'><glossterm>GITDIR</glossterm>
            <info>
                GITDIR[doc] = "The directory where Git clones will be stored."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory in which a local copy of a Git repository
                    is stored when it is cloned.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GLIBC_GENERATE_LOCALES'><glossterm>GLIBC_GENERATE_LOCALES</glossterm>
            <info>
                GLIBC_GENERATE_LOCALES[doc]= "Specifies the list of GLIBC locales to generate should you not wish to generate all LIBC locals, which can be time consuming."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the list of GLIBC locales to generate should you
                    not wish to generate all LIBC locals, which can be time
                    consuming.
                    <note>
                        If you specifically remove the locale
                        <filename>en_US.UTF-8</filename>, you must set
                        <link linkend='var-IMAGE_LINGUAS'><filename>IMAGE_LINGUAS</filename></link>
                        appropriately.
                    </note>
                </para>

                <para>
                    You can set <filename>GLIBC_GENERATE_LOCALES</filename>
                    in your <filename>local.conf</filename> file.
                    By default, all locales are generated.
                    <literallayout class='monospaced'>
      GLIBC_GENERATE_LOCALES = "en_GB.UTF-8 en_US.UTF-8"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GROUPADD_PARAM'><glossterm>GROUPADD_PARAM</glossterm>
            <info>
                GROUPADD_PARAM[doc] = "When a recipe inherits the useradd class, this variable specifies for a package what parameters should be passed to the groupadd command if you wish to add a group to the system when the package is installed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
                    class, this variable
                    specifies for a package what parameters should be passed
                    to the <filename>groupadd</filename> command
                    if you wish to add a group to the system when the package
                    is installed.
                </para>

                <para>
                    Here is an example from the <filename>dbus</filename>
                    recipe:
                    <literallayout class='monospaced'>
     GROUPADD_PARAM_${PN} = "-r netdev"
                    </literallayout>
                    For information on the standard Linux shell command
                    <filename>groupadd</filename>, see
                    <ulink url='http://linux.die.net/man/8/groupadd'></ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GROUPMEMS_PARAM'><glossterm>GROUPMEMS_PARAM</glossterm>
            <info>
                GROUPMEMS_PARAM[doc] = "When a recipe inherits the useradd class, this variable specifies for a package what parameters should be passed to the groupmems command if you wish to modify the members of a group when the package is installed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
                    class, this variable
                    specifies for a package what parameters should be passed
                    to the <filename>groupmems</filename> command
                    if you wish to modify the members of a group when the
                    package is installed.
                </para>

                <para>
                    For information on the standard Linux shell command
                    <filename>groupmems</filename>, see
                    <ulink url='http://linux.die.net/man/8/groupmems'></ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GRUB_GFXSERIAL'><glossterm>GRUB_GFXSERIAL</glossterm>
            <info>
                GRUB_GFXSERIAL[doc] = "Configures the GNU GRand Unified Bootloader (GRUB) to have graphics and serial in the boot menu."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Configures the GNU GRand Unified Bootloader (GRUB) to have
                    graphics and serial in the boot menu.
                    Set this variable to "1" in your
                    <filename>local.conf</filename> or distribution
                    configuration file to enable graphics and serial
                    in the menu.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
                    class for more information on how this variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GRUB_OPTS'><glossterm>GRUB_OPTS</glossterm>
            <info>
                GRUB_OPTS[doc] = "Additional options to add to the GNU GRand Unified Bootloader (GRUB) configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Additional options to add to the GNU GRand Unified
                    Bootloader (GRUB) configuration.
                    Use a semi-colon character (<filename>;</filename>) to
                    separate multiple options.
                </para>

                <para>
                    The <filename>GRUB_OPTS</filename> variable is optional.
                    See the
                    <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
                    class for more information on how this variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GRUB_TIMEOUT'><glossterm>GRUB_TIMEOUT</glossterm>
            <info>
                GRUB_TIMEOUT[doc] = "Specifies the timeout before executing the default LABEL in the GNU GRand Unified Bootloader (GRUB)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the timeout before executing the default
                    <filename>LABEL</filename> in the GNU GRand Unified
                    Bootloader (GRUB).
                </para>

                <para>
                    The <filename>GRUB_TIMEOUT</filename> variable is optional.
                    See the
                    <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
                    class for more information on how this variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-GTKIMMODULES_PACKAGES'><glossterm>GTKIMMODULES_PACKAGES</glossterm>
            <info>
                GTKIMMODULES_PACKAGES[doc] = "For recipes that inherit the gtk-immodules-cache class, this variable specifies the packages that contain the GTK+ input method modules being installed when the modules are in packages other than the main package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-gtk-immodules-cache'><filename>gtk-immodules-cache</filename></link>
                    class, this variable specifies the packages that contain the
                    GTK+ input method modules being installed when the modules
                    are in packages other than the main package.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-h'><title>H</title>

        <glossentry id='var-HOMEPAGE'><glossterm>HOMEPAGE</glossterm>
            <info>
                HOMEPAGE[doc] = "Website where more information about the software the recipe is building can be found."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Website where more information about the software the recipe is building
                    can be found.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOST_ARCH'><glossterm>HOST_ARCH</glossterm>
            <info>
                HOST_ARCH[doc] = "The name of the target architecture. Normally same as the TARGET_ARCH."

            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The name of the target architecture, which is normally
                    the same as
                    <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>.
                    The OpenEmbedded build system supports many
                    architectures.
                    Here is an example list of architectures supported.
                    This list is by no means complete as the architecture
                    is configurable:
                    <literallayout class='monospaced'>
     arm
     i586
     x86_64
     powerpc
     powerpc64
     mips
     mipsel
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOST_CC_ARCH'><glossterm>HOST_CC_ARCH</glossterm>
            <info>
                HOST_CC_ARCH[doc] = "The name of the host architecture. Normally same as the TARGET_CC_ARCH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific compiler flags that are
                    passed to the C compiler.
                </para>

                <para>
                    Default initialization for <filename>HOST_CC_ARCH</filename>
                    varies depending on what is being built:
                    <itemizedlist>
                        <listitem><para>
                            <link linkend='var-TARGET_CC_ARCH'><filename>TARGET_CC_ARCH</filename></link>
                            when building for the target
                            </para></listitem>
                        <listitem><para>
                            <filename>BUILD_CC_ARCH</filename>
                            when building for the build host (i.e.
                            <filename>-native</filename>)
                            </para></listitem>
                        <listitem><para>
                            <filename>BUILDSDK_CC_ARCH</filename>
                            when building for an SDK (i.e.
                            <filename>nativesdk-</filename>)
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOST_OS'><glossterm>HOST_OS</glossterm>
            <info>
                HOST_OS[doc] = "The name of the target operating system. Normally the same as the TARGET_OS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the target operating system, which
                    is normally the same as the
                    <link linkend='var-TARGET_OS'><filename>TARGET_OS</filename></link>.
                    The variable can be set to "linux" for <filename>glibc</filename>-based systems and
                    to "linux-musl" for <filename>musl</filename>.
                    For ARM/EABI targets, there are also "linux-gnueabi" and
                    "linux-musleabi" values possible.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOST_PREFIX'><glossterm>HOST_PREFIX</glossterm>
            <info>
                HOST_PREFIX[doc] = "The prefix for the cross compile toolchain. Normally same as the TARGET_PREFIX."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the prefix for the cross-compile toolchain.
                    <filename>HOST_PREFIX</filename> is normally the same as
                    <link linkend='var-TARGET_PREFIX'><filename>TARGET_PREFIX</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOST_SYS'><glossterm>HOST_SYS</glossterm>
            <info>
                HOST_SYS[doc] = "Specifies the system, including the architecture and the operating system, for which the build is occurring in the context of the current recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the system, including the architecture and the
                    operating system, for which the build is occurring
                    in the context of the current recipe.
                </para>

                <para>
                    The OpenEmbedded build system automatically sets this
                    variable based on
                    <link linkend='var-HOST_ARCH'><filename>HOST_ARCH</filename></link>,
                    <link linkend='var-HOST_VENDOR'><filename>HOST_VENDOR</filename></link>,
                    and
                    <link linkend='var-HOST_OS'><filename>HOST_OS</filename></link>
                    variables.
                    <note>
                        You do not need to set the variable yourself.
                    </note>
                </para>

                <para>
                    Consider these two examples:
                    <itemizedlist>
                        <listitem><para>Given a native recipe on a 32-bit
                            x86 machine running Linux, the value is
                            "i686-linux".
                            </para></listitem>
                        <listitem><para>Given a recipe being built for a
                            little-endian MIPS target running Linux,
                            the value might be "mipsel-linux".
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOSTTOOLS'><glossterm>HOSTTOOLS</glossterm>
            <info>
                HOSTTOOLS[doc] = "A space-separated list (filter) of tools on the build host that should be allowed to be called from within build tasks."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list (filter) of tools on the build host
                    that should be allowed to be called from within build tasks.
                    Using this filter helps reduce the possibility of host
                    contamination.
                    If a tool specified in the value of
                    <filename>HOSTTOOLS</filename> is not found on the
                    build host, the OpenEmbedded build system produces
                    an error and the build is not started.
                </para>

                <para>
                    For additional information, see
                    <link linkend='var-HOSTTOOLS_NONFATAL'><filename>HOSTTOOLS_NONFATAL</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOSTTOOLS_NONFATAL'><glossterm>HOSTTOOLS_NONFATAL</glossterm>
            <info>
                HOSTTOOLS_NONFATAL[doc] = "A space-separated list (filter) of tools on the build host that should be allowed to be called from within build tasks."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list (filter) of tools on the build host
                    that should be allowed to be called from within build tasks.
                    Using this filter helps reduce the possibility of host
                    contamination.
                    Unlike
                    <link linkend='var-HOSTTOOLS'><filename>HOSTTOOLS</filename></link>,
                    the OpenEmbedded build system does not produce an error
                    if a tool specified in the value of
                    <filename>HOSTTOOLS_NONFATAL</filename> is not found on the
                    build host.
                    Thus, you can use <filename>HOSTTOOLS_NONFATAL</filename>
                    to filter optional host tools.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOST_VENDOR'><glossterm>HOST_VENDOR</glossterm>
            <info>
                HOST_VENDOR[doc] = "The name of the vendor. Normally same as the TARGET_VENDOR."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the vendor.
                    <filename>HOST_VENDOR</filename> is normally the same as
                    <link linkend='var-TARGET_VENDOR'><filename>TARGET_VENDOR</filename></link>.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-i'><title>I</title>

        <glossentry id='var-ICECC_DISABLED'><glossterm>ICECC_DISABLED</glossterm>
            <info>
                ICECC_DISABLED[doc] = "Disables or enables the icecc (Icecream) function."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Disables or enables the <filename>icecc</filename>
                    (Icecream) function.
                    For more information on this function and best practices
                    for using this variable, see the
                    "<link linkend='ref-classes-icecc'><filename>icecc.bbclass</filename></link>"
                    section.
                </para>

                <para>
                    Setting this variable to "1" in your
                    <filename>local.conf</filename> disables the function:
                    <literallayout class='monospaced'>
     ICECC_DISABLED ??= "1"
                    </literallayout>
                    To enable the function, set the variable as follows:
                    <literallayout class='monospaced'>
     ICECC_DISABLED = ""
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ICECC_ENV_EXEC'><glossterm>ICECC_ENV_EXEC</glossterm>
            <info>
                ICECC_ENV_EXEC[doc] = "Points to the icecc-create-env script that you provide."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the <filename>icecc-create-env</filename> script
                    that you provide.
                    This variable is used by the
                    <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
                    class.
                    You set this variable in your
                    <filename>local.conf</filename> file.
                </para>

                <para>
                    If you do not point to a script that you provide, the
                    OpenEmbedded build system uses the default script provided
                    by the <filename>icecc-create-env.bb</filename> recipe,
                    which is a modified version and not the one that comes with
                    <filename>icecc</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ICECC_PARALLEL_MAKE'><glossterm>ICECC_PARALLEL_MAKE</glossterm>
            <info>
                ICECC_PARALLEL_MAKE[doc] = "Extra options passed to the make command during the do_compile task that specify parallel compilation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Extra options passed to the <filename>make</filename>
                    command during the
                    <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
                    task that specify parallel compilation.
                    This variable usually takes the form of
                    "-j <replaceable>x</replaceable>", where
                    <replaceable>x</replaceable> represents the maximum
                    number of parallel threads <filename>make</filename> can
                    run.
                    <note>
                        The options passed affect builds on all enabled
                        machines on the network, which are machines running the
                        <filename>iceccd</filename> daemon.
                    </note>
                </para>

                <para>
                    If your enabled machines support multiple cores,
                    coming up with the maximum number of parallel threads
                    that gives you the best performance could take some
                    experimentation since machine speed, network lag,
                    available memory, and existing machine loads can all
                    affect build time.
                    Consequently, unlike the
                    <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
                    variable, there is no rule-of-thumb for setting
                    <filename>ICECC_PARALLEL_MAKE</filename> to achieve
                    optimal performance.
                </para>

                <para>
                    If you do not set <filename>ICECC_PARALLEL_MAKE</filename>,
                    the build system does not use it (i.e. the system does
                    not detect and assign the number of cores as is done with
                    <filename>PARALLEL_MAKE</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ICECC_PATH'><glossterm>ICECC_PATH</glossterm>
            <info>
                ICECC_PATH[doc] = "The location of the icecc binary."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location of the <filename>icecc</filename> binary.
                    You can set this variable in your
                    <filename>local.conf</filename> file.
                    If your <filename>local.conf</filename> file does not define
                    this variable, the
                    <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
                    class attempts to define it by locating
                    <filename>icecc</filename> using <filename>which</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ICECC_USER_CLASS_BL'><glossterm>ICECC_USER_CLASS_BL</glossterm>
            <info>
                ICECC_USER_CLASS_BL[doc] = "Identifies user classes that you do not want the Icecream distributed compile support to consider."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Identifies user classes that you do not want the
                    Icecream distributed compile support to consider.
                    This variable is used by the
                    <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
                    class.
                    You set this variable in your
                    <filename>local.conf</filename> file.
                </para>

                <para>
                    When you list classes using this variable, you are
                    "blacklisting" them from distributed compilation across
                    remote hosts.
                    Any classes you list will be distributed and compiled
                    locally.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ICECC_USER_PACKAGE_BL'><glossterm>ICECC_USER_PACKAGE_BL</glossterm>
            <info>
                ICECC_USER_PACKAGE_BL[doc] = "Identifies user recipes that you do not want the Icecream distributed compile support to consider."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Identifies user recipes that you do not want the
                    Icecream distributed compile support to consider.
                    This variable is used by the
                    <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
                    class.
                    You set this variable in your
                    <filename>local.conf</filename> file.
                </para>

                <para>
                    When you list packages using this variable, you are
                    "blacklisting" them from distributed compilation across
                    remote hosts.
                    Any packages you list will be distributed and compiled
                    locally.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ICECC_USER_PACKAGE_WL'><glossterm>ICECC_USER_PACKAGE_WL</glossterm>
            <info>
                ICECC_USER_PACKAGE_WL[doc] = "Identifies user recipes that use an empty PARALLEL_MAKE variable that you want to force remote distributed compilation on using the Icecream distributed compile support."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Identifies user recipes that use an empty
                    <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
                    variable that you want to force remote distributed
                    compilation on using the Icecream distributed compile
                    support.
                    This variable is used by the
                    <link linkend='ref-classes-icecc'><filename>icecc</filename></link>
                    class.
                    You set this variable in your
                    <filename>local.conf</filename> file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_BASENAME'><glossterm>IMAGE_BASENAME</glossterm>
            <info>
                IMAGE_BASENAME[doc] = "The base name of image output files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name of image output files.
                    This variable defaults to the recipe name
                    (<filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_BOOT_FILES'><glossterm>IMAGE_BOOT_FILES</glossterm>
            <info>
                IMAGE_BOOT_FILES[doc] = "A space-separated list of files from ${DEPLOY_DIR_IMAGE} to place in boot partition."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list of files installed into the
                    boot partition when preparing an image using the Wic tool
                    with the <filename>bootimg-partition</filename> source
                    plugin.
                    By default, the files are installed under the same name as
                    the source files.
                    To change the installed name, separate it from the
                    original name with a semi-colon (;).
                    Source files need to be located in
                    <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>.
                    Here are two examples:

                    <literallayout class="monospaced">
     IMAGE_BOOT_FILES = "u-boot.img uImage;kernel"
     IMAGE_BOOT_FILES = "u-boot.${UBOOT_SUFFIX} ${KERNEL_IMAGETYPE}"
                    </literallayout>
                </para>

                <para>
                    Alternatively, source files can be picked up using
                    a glob pattern.
                    In this case, the destination file must have the same name
                    as the base name of the source file path.
                    To install files into a directory within the
                    target location, pass its name after a semi-colon
                    (;).
                    Here are two examples:
                    <literallayout class="monospaced">
     IMAGE_BOOT_FILES = "bcm2835-bootfiles/*"
     IMAGE_BOOT_FILES = "bcm2835-bootfiles/*;boot/"
                    </literallayout>
                    The first example installs all files from
                    <filename>${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles</filename>
                    into the root of the target partition.
                    The second example installs the same files into a
                    <filename>boot</filename> directory within the
                    target partition.
                </para>

                <para>
                    You can find information on how to use the Wic tool in the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-partitioned-images-using-wic'>Creating Partitioned Images Using Wic</ulink>"
                    section of the Yocto Project Development Tasks Manual.
                    Reference material for Wic is located in the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#ref-kickstart'>OpenEmbedded Kickstart (.wks) Reference</ulink>"
                    chapter.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_CLASSES'><glossterm>IMAGE_CLASSES</glossterm>
            <info>
                IMAGE_CLASSES[doc] = "A list of classes that all images should inherit."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of classes that all images should inherit.
                    You typically use this variable to specify the list of
                    classes that register the different types of images
                    the OpenEmbedded build system creates.
                </para>

                <para>
                    The default value for <filename>IMAGE_CLASSES</filename> is
                    <filename>image_types</filename>.
                    You can set this variable in your
                    <filename>local.conf</filename> or in a distribution
                    configuration file.
                </para>

                <para>
                    For more information, see
                    <filename>meta/classes/image_types.bbclass</filename> in the
                    <link linkend='source-directory'>Source Directory</link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_CMD'><glossterm>IMAGE_CMD</glossterm>
            <info>
                IMAGE_CMD[doc] = "Specifies the command to create the image file for a specific image type, which corresponds to the value set set in IMAGE_FSTYPES, (e.g. ext3, btrfs, and so forth)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the command to create the image file for a
                    specific image type, which corresponds to the value set
                    set in
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>,
                    (e.g. <filename>ext3</filename>,
                    <filename>btrfs</filename>, and so forth).
                    When setting this variable, you should use
                    an override for the associated type.
                    Here is an example:
                    <literallayout class='monospaced'>
     IMAGE_CMD_jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} \
        --faketime --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
        ${EXTRA_IMAGECMD}"
                    </literallayout>
                </para>

                <para>
                    You typically do not need to set this variable unless
                    you are adding support for a new image type.
                    For more examples on how to set this variable, see the
                    <link linkend='ref-classes-image_types'><filename>image_types</filename></link>
                    class file, which is
                    <filename>meta/classes/image_types.bbclass</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_DEVICE_TABLES'><glossterm>IMAGE_DEVICE_TABLES</glossterm>
            <info>
                IMAGE_DEVICE_TABLES[doc] = "Specifies one or more files that contain custom device tables that are passed to the makedevs command as part of creating an image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies one or more files that contain custom device
                    tables that are passed to the
                    <filename>makedevs</filename> command as part of creating
                    an image.
                    These files list basic device nodes that should be
                    created under <filename>/dev</filename> within the image.
                    If <filename>IMAGE_DEVICE_TABLES</filename> is not set,
                    <filename>files/device_table-minimal.txt</filename> is
                    used, which is located by
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>.
                    For details on how you should write device table files,
                    see <filename>meta/files/device_table-minimal.txt</filename>
                    as an example.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_FEATURES'><glossterm>IMAGE_FEATURES</glossterm>
            <info>
                IMAGE_FEATURES[doc] = "The primary list of features to include in an image. Configure this variable in an image recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The primary list of features to include in an image.
                    Typically, you configure this variable in an image recipe.
                    Although you can use this variable from your
                    <filename>local.conf</filename> file, which is found in the
                    <link linkend='build-directory'>Build Directory</link>,
                    best practices dictate that you do not.
                    <note>
                        To enable extra features from outside the image recipe,
                        use the
                        <filename><link linkend='var-EXTRA_IMAGE_FEATURES'>EXTRA_IMAGE_FEATURES</link></filename> variable.
                    </note>
                </para>

                <para>
                    For a list of image features that ships with the Yocto
                    Project, see the
                    "<link linkend="ref-features-image">Image Features</link>"
                    section.
                </para>

                <para>
                    For an example that shows how to customize your image by
                    using this variable, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage-imagefeatures'>Customizing Images Using Custom <filename>IMAGE_FEATURES</filename> and <filename>EXTRA_IMAGE_FEATURES</filename></ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_FSTYPES'><glossterm>IMAGE_FSTYPES</glossterm>
            <info>
                IMAGE_FSTYPES[doc] = "Formats of root filesystem images that you want to have created."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the formats the OpenEmbedded build system uses
                    during the build when creating the root filesystem.
                    For example, setting <filename>IMAGE_FSTYPES</filename>
                    as follows causes the build system to create root
                    filesystems using two formats: <filename>.ext3</filename>
                    and <filename>.tar.bz2</filename>:
                    <literallayout class='monospaced'>
     IMAGE_FSTYPES = "ext3 tar.bz2"
                    </literallayout>
                </para>

                <para>
                    For the complete list of supported image formats from which
                    you can choose, see
                    <link linkend='var-IMAGE_TYPES'><filename>IMAGE_TYPES</filename></link>.
                </para>

                <note><title>Notes</title>
                    <itemizedlist>
                        <listitem><para>
                            If an image recipe uses the "inherit image" line
                            and you are setting
                            <filename>IMAGE_FSTYPES</filename> inside the
                            recipe, you must set
                            <filename>IMAGE_FSTYPES</filename> prior to
                            using the "inherit image" line.
                            </para></listitem>
                        <listitem><para>
                            Due to the way the OpenEmbedded build system
                            processes this variable, you cannot update its
                            contents by using <filename>_append</filename> or
                            <filename>_prepend</filename>.
                            You must use the <filename>+=</filename>
                            operator to add one or more options to the
                            <filename>IMAGE_FSTYPES</filename> variable.
                            </para></listitem>
                    </itemizedlist>
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_INSTALL'><glossterm>IMAGE_INSTALL</glossterm>
            <info>
                IMAGE_INSTALL[doc] = "Used by recipes to specify the packages to install into an image through image.bbclass."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Used by recipes to specify the packages to install into an
                    image through the
                    <link linkend='ref-classes-image'><filename>image</filename></link>
                    class.
                    Use the <filename>IMAGE_INSTALL</filename> variable with
                    care to avoid ordering issues.
                </para>

                <para>
                    Image recipes set <filename>IMAGE_INSTALL</filename>
                    to specify the packages to install into an image through
                    <filename>image.bbclass</filename>.
                    Additionally, "helper" classes such as the
                    <link linkend='ref-classes-core-image'><filename>core-image</filename></link>
                    class exist that can take lists used with
                    <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>
                    and turn them into auto-generated entries in
                    <filename>IMAGE_INSTALL</filename> in addition to its
                    default contents.
                </para>

                <para>
                    When you use this variable, it is best to use it as follows:
                    <literallayout class='monospaced'>
     IMAGE_INSTALL_append = " <replaceable>package-name</replaceable>"
                    </literallayout>
                    Be sure to include the space between the quotation character
                    and the start of the package name or names.
                    <note><title>Caution</title>
                        <itemizedlist>
                            <listitem><para>
                                When working with a
                                <link linkend='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename></link>
                                image, do not use the
                                <filename>IMAGE_INSTALL</filename> variable to
                                specify packages for installation.
                                Instead, use the
                                <link linkend='var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></link>
                                variable, which allows the initial RAM
                                filesystem (initramfs) recipe to use a fixed
                                set of packages and not be affected by
                                <filename>IMAGE_INSTALL</filename>.
                                For information on creating an initramfs, see
                                the
                                "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
                                section in the Yocto Project Development Tasks
                                Manual.
                                </para></listitem>
                            <listitem><para>
                                Using <filename>IMAGE_INSTALL</filename> with
                                the
                                <ulink url='&YOCTO_DOCS_BB_URL;#appending-and-prepending'><filename>+=</filename></ulink>
                                BitBake operator within the
                                <filename>/conf/local.conf</filename> file or
                                from within an image recipe is not recommended.
                                Use of this operator in these ways can cause
                                ordering issues.
                                Since <filename>core-image.bbclass</filename>
                                sets <filename>IMAGE_INSTALL</filename> to a
                                default value using the
                                <ulink url='&YOCTO_DOCS_BB_URL;#setting-a-default-value'><filename>?=</filename></ulink>
                                operator, using a <filename>+=</filename>
                                operation against
                                <filename>IMAGE_INSTALL</filename> results in
                                unexpected behavior when used within
                                <filename>conf/local.conf</filename>.
                                Furthermore, the same operation from within
                                an image recipe may or may not succeed
                                depending on the specific situation.
                                In both these cases, the behavior is contrary
                                to how most users expect the
                                <filename>+=</filename> operator to work.
                                </para></listitem>
                        </itemizedlist>
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_LINGUAS'><glossterm>IMAGE_LINGUAS</glossterm>
            <info>
                IMAGE_LINGUAS[doc] = "Specifies the list of locales to install into the image during the root filesystem construction process."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the list of locales to install into the image
                    during the root filesystem construction process.
                    The OpenEmbedded build system automatically splits locale
                    files, which are used for localization, into separate
                    packages.
                    Setting the <filename>IMAGE_LINGUAS</filename> variable
                    ensures that any locale packages that correspond to packages
                    already selected for installation into the image are also
                    installed.
                    Here is an example:
                    <literallayout class='monospaced'>
     IMAGE_LINGUAS = "pt-br de-de"
                    </literallayout>
                </para>

                <para>
                    In this example, the build system ensures any Brazilian
                    Portuguese and German locale files that correspond to
                    packages in the image are installed (i.e.
                    <filename>*-locale-pt-br</filename>
                    and <filename>*-locale-de-de</filename> as well as
                    <filename>*-locale-pt</filename>
                    and <filename>*-locale-de</filename>, since some software
                    packages only provide locale files by language and not by
                    country-specific language).
                </para>

                <para>
                    See the
                    <link linkend='var-GLIBC_GENERATE_LOCALES'><filename>GLIBC_GENERATE_LOCALES</filename></link>
                    variable for information on generating GLIBC locales.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_MANIFEST'><glossterm>IMAGE_MANIFEST</glossterm>
            <info>
                IMAGE_MANIFEST[doc] = "The manifest file for the image. This file lists all the installed packages that make up the image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The manifest file for the image.
                    This file lists all the installed packages that make up
                    the image.
                    The file contains package information on a line-per-package
                    basis as follows:
                    <literallayout class='monospaced'>
     <replaceable>packagename</replaceable> <replaceable>packagearch</replaceable> <replaceable>version</replaceable>
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-image'><filename>image</filename></link>
                    class defines the manifest file as follows:
                    <literallayout class='monospaced'>
     IMAGE_MANIFEST = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.manifest"
                    </literallayout>
                    The location is derived using the
                    <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
                    and
                    <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>
                    variables.
                    You can find information on how the image
                    is created in the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#image-generation-dev-environment'>Image Generation</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_NAME'><glossterm>IMAGE_NAME</glossterm>
            <info>
                IMAGE_NAME[doc] = "The name of the output image files minus the extension."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The name of the output image files minus the extension.
                    This variable is derived using the
                    <link linkend='var-IMAGE_BASENAME'><filename>IMAGE_BASENAME</filename></link>,
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>,
                    and
                    <link linkend='var-DATETIME'><filename>DATETIME</filename></link>
                    variables:
                    <literallayout class='monospaced'>
     IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DATETIME}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_OVERHEAD_FACTOR'><glossterm>IMAGE_OVERHEAD_FACTOR</glossterm>
            <info>
                IMAGE_OVERHEAD_FACTOR[doc] = "Defines a multiplier that the build system applies to the initial image size for cases when the multiplier times the returned disk usage value for the image is greater than the sum of IMAGE_ROOTFS_SIZE and IMAGE_ROOTFS_EXTRA_SPACE."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines a multiplier that the build system applies to the initial image
                    size for cases when the multiplier times the returned disk usage value
                    for the image is greater than the sum of
                    <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>
                    and
                    <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>.
                    The result of the multiplier applied to the initial image size creates
                    free disk space in the image as overhead.
                    By default, the build process uses a multiplier of 1.3 for this variable.
                    This default value results in 30% free disk space added to the image when this
                    method is used to determine the final generated image size.
                    You should be aware that post install scripts and the package management
                    system uses disk space inside this overhead area.
                    Consequently, the multiplier does not produce an image with
                    all the theoretical free disk space.
                    See <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>
                    for information on how the build system determines the overall image size.
                </para>

                <para>
                    The default 30% free disk space typically gives the image enough room to boot
                    and allows for basic post installs while still leaving a small amount of
                    free disk space.
                    If 30% free space is inadequate, you can increase the default value.
                    For example, the following setting gives you 50% free space added to the image:
                    <literallayout class='monospaced'>
     IMAGE_OVERHEAD_FACTOR = "1.5"
                    </literallayout>
                </para>

                <para>
                    Alternatively, you can ensure a specific amount of free disk space is added
                    to the image by using the
                    <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_PKGTYPE'><glossterm>IMAGE_PKGTYPE</glossterm>
            <info>
                IMAGE_PKGTYPE[doc] = "Defines the package type (i.e. DEB, RPM, IPK, or TAR) used by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the package type (i.e. DEB, RPM, IPK, or TAR) used
                    by the OpenEmbedded build system.
                    The variable is defined appropriately by the
                    <link linkend='ref-classes-package_deb'><filename>package_deb</filename></link>,
                    <link linkend='ref-classes-package_rpm'><filename>package_rpm</filename></link>,
                    <link linkend='ref-classes-package_ipk'><filename>package_ipk</filename></link>,
                    or
                    <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>
                    class.
                    <note><title>Warning</title>
                        The <filename>package_tar</filename> class is broken
                        and is not supported.
                        It is recommended that you do not use it.
                    </note>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_*</filename></link>
                    and
                    <link linkend='ref-classes-image'><filename>image</filename></link>
                    classes use the <filename>IMAGE_PKGTYPE</filename> for
                    packaging up images and SDKs.
                </para>

                <para>
                    You should not set the <filename>IMAGE_PKGTYPE</filename>
                    manually.
                    Rather, the variable is set indirectly through the
                    appropriate
                    <link linkend='ref-classes-package'><filename>package_*</filename></link>
                    class using the
                    <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
                    variable.
                    The OpenEmbedded build system uses the first package type
                    (e.g. DEB, RPM, or IPK) that appears with the variable
                    <note>
                        Files using the <filename>.tar</filename> format are
                        never used as a substitute packaging format for DEB,
                        RPM, and IPK formatted files for your image or SDK.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_POSTPROCESS_COMMAND'><glossterm>IMAGE_POSTPROCESS_COMMAND</glossterm>
            <info>
                IMAGE_POSTPROCESS_COMMAND[doc] = "Specifies a list of functions to call once the OpenEmbedded build system creates the final image output files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call once the
                    OpenEmbedded build system creates the final image
                    output files.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     IMAGE_POSTPROCESS_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the root filesystem path to a command
                    within the function, you can use
                    <filename>${IMAGE_ROOTFS}</filename>, which points to
                    the directory that becomes the root filesystem image.
                    See the
                    <link linkend='var-IMAGE_ROOTFS'><filename>IMAGE_ROOTFS</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_PREPROCESS_COMMAND'><glossterm>IMAGE_PREPROCESS_COMMAND</glossterm>
            <info>
                IMAGE_PREPROCESS_COMMAND[doc] = "Specifies a list of functions to call before the OpenEmbedded build system creates the final image output files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call before the
                    OpenEmbedded build system creates the final image
                    output files.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     IMAGE_PREPROCESS_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the root filesystem path to a command
                    within the function, you can use
                    <filename>${IMAGE_ROOTFS}</filename>, which points to
                    the directory that becomes the root filesystem image.
                    See the
                    <link linkend='var-IMAGE_ROOTFS'><filename>IMAGE_ROOTFS</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_ROOTFS'><glossterm>IMAGE_ROOTFS</glossterm>
            <info>
                IMAGE_ROOTFS[doc] = "The location of the root filesystem while it is under construction (i.e. during do_rootfs)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location of the root filesystem while it is under
                    construction (i.e. during the
                    <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
                    task).
                    This variable is not configurable.
                    Do not change it.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_ROOTFS_ALIGNMENT'><glossterm>IMAGE_ROOTFS_ALIGNMENT</glossterm>
            <info>
                IMAGE_ROOTFS_ALIGNMENT[doc] = "Specifies the alignment for the output image file in Kbytes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the alignment for the output image file in
                    Kbytes.
                    If the size of the image is not a multiple of
                    this value, then the size is rounded up to the nearest
                    multiple of the value.
                    The default value is "1".
                    See
                    <link linkend='var-IMAGE_ROOTFS_SIZE'><filename>IMAGE_ROOTFS_SIZE</filename></link>
                    for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_ROOTFS_EXTRA_SPACE'><glossterm>IMAGE_ROOTFS_EXTRA_SPACE</glossterm>
            <info>
                IMAGE_ROOTFS_EXTRA_SPACE[doc] = "Defines additional free disk space created in the image in Kbytes. By default, this variable is set to '0'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines additional free disk space created in the image in Kbytes.
                    By default, this variable is set to "0".
                    This free disk space is added to the image after the build system determines
                    the image size as described in
                    <filename><link linkend='var-IMAGE_ROOTFS_SIZE'>IMAGE_ROOTFS_SIZE</link></filename>.
                </para>

                <para>
                    This variable is particularly useful when you want to ensure that a
                    specific amount of free disk space is available on a device after an image
                    is installed and running.
                    For example, to be sure 5 Gbytes of free disk space is available, set the
                    variable as follows:
                    <literallayout class='monospaced'>
     IMAGE_ROOTFS_EXTRA_SPACE = "5242880"
                    </literallayout>
                </para>

                <para>
                    For example, the Yocto Project Build Appliance specifically requests 40 Gbytes
                    of extra space with the line:
                    <literallayout class='monospaced'>
     IMAGE_ROOTFS_EXTRA_SPACE = "41943040"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_ROOTFS_SIZE'><glossterm>IMAGE_ROOTFS_SIZE</glossterm>
            <info>
                IMAGE_ROOTFS_SIZE[doc] = "Defines the size in Kbytes for the generated image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the size in Kbytes for the generated image.
                    The OpenEmbedded build system determines the final size for the generated
                    image using an algorithm that takes into account the initial disk space used
                    for the generated image, a requested size for the image, and requested
                    additional free disk space to be added to the image.
                    Programatically, the build system determines the final size of the
                    generated image as follows:
                    <literallayout class='monospaced'>
    if (image-du * overhead) &lt; rootfs-size:
	internal-rootfs-size = rootfs-size + xspace
    else:
	internal-rootfs-size = (image-du * overhead) + xspace

    where:

      image-du = Returned value of the du command on
                 the image.

      overhead = IMAGE_OVERHEAD_FACTOR

      rootfs-size = IMAGE_ROOTFS_SIZE

      internal-rootfs-size = Initial root filesystem
                             size before any modifications.

      xspace = IMAGE_ROOTFS_EXTRA_SPACE
                    </literallayout>
                </para>

                <para>
                    See the <link linkend='var-IMAGE_OVERHEAD_FACTOR'><filename>IMAGE_OVERHEAD_FACTOR</filename></link>
                    and <link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'><filename>IMAGE_ROOTFS_EXTRA_SPACE</filename></link>
                    variables for related information.
<!--                    In the above example, <filename>overhead</filename> is defined by the
                    <filename><link linkend='var-IMAGE_OVERHEAD_FACTOR'>IMAGE_OVERHEAD_FACTOR</link></filename>
                    variable, <filename>xspace</filename> is defined by the
                    <filename><link linkend='var-IMAGE_ROOTFS_EXTRA_SPACE'>IMAGE_ROOTFS_EXTRA_SPACE</link></filename>
                    variable, and <filename>du</filename> is the results of the disk usage command
                    on the initially generated image. -->
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_TYPEDEP'><glossterm>IMAGE_TYPEDEP</glossterm>
            <info>
                IMAGE_TYPEDEP[doc] = "Specifies a dependency from one image type on another."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a dependency from one image type on another.
                    Here is an example from the
                    <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
                    class:
                    <literallayout class='monospaced'>
     IMAGE_TYPEDEP_live = "ext3"
                    </literallayout>
                </para>

                <para>
                    In the previous example, the variable ensures that when
                    "live" is listed with the
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    variable, the OpenEmbedded build system produces an
                    <filename>ext3</filename> image first since one of the
                    components of the live
                    image is an <filename>ext3</filename>
                    formatted partition containing the root
                    filesystem.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IMAGE_TYPES'><glossterm>IMAGE_TYPES</glossterm>
            <info>
                IMAGE_TYPES[doc] = "Specifies the complete list of supported image types by default."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the complete list of supported image types
                    by default:
                    <literallayout class='monospaced'>
     btrfs
     container
     cpio
     cpio.gz
     cpio.lz4
     cpio.lzma
     cpio.xz
     cramfs
     ext2
     ext2.bz2
     ext2.gz
     ext2.lzma
     ext3
     ext3.gz
     ext4
     ext4.gz
     f2fs
     hddimg
     iso
     jffs2
     jffs2.sum
     multiubi
     squashfs
     squashfs-lz4
     squashfs-lzo
     squashfs-xz
     tar
     tar.bz2
     tar.gz
     tar.lz4
     tar.xz
     tar.zst
     ubi
     ubifs
     wic
     wic.bz2
     wic.gz
     wic.lzma
                    </literallayout>
                </para>

                <para>
                    For more information about these types of images, see
                    <filename>meta/classes/image_types*.bbclass</filename>
                    in the
                    <link linkend='source-directory'>Source Directory</link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INC_PR'><glossterm>INC_PR</glossterm>
            <info>
                INC_PR[doc] = "Helps define the recipe revision for recipes that share a common include file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Helps define the recipe revision for recipes that share
                    a common <filename>include</filename> file.
                    You can think of this variable as part of the recipe revision
                    as set from within an include file.
                </para>

                <para>
                    Suppose, for example, you have a set of recipes that
                    are used across several projects.
                    And, within each of those recipes the revision
                    (its <link linkend='var-PR'><filename>PR</filename></link>
                    value) is set accordingly.
                    In this case, when the revision of those recipes changes,
                    the burden is on you to find all those recipes and
                    be sure that they get changed to reflect the updated
                    version of the recipe.
                    In this scenario, it can get complicated when recipes
                    that are used in many places and provide common functionality
                    are upgraded to a new revision.
                </para>

                <para>
                    A more efficient way of dealing with this situation is
                    to set the <filename>INC_PR</filename> variable inside
                    the <filename>include</filename> files that the recipes
                    share and then expand the <filename>INC_PR</filename>
                    variable within the recipes to help
                    define the recipe revision.
                </para>

                <para>
                    The following provides an example that shows how to use
                    the <filename>INC_PR</filename> variable
                    given a common <filename>include</filename> file that
                    defines the variable.
                    Once the variable is defined in the
                    <filename>include</filename> file, you can use the
                    variable to set the <filename>PR</filename> values in
                    each recipe.
                    You will notice that when you set a recipe's
                    <filename>PR</filename> you can provide more granular
                    revisioning by appending values to the
                    <filename>INC_PR</filename> variable:
                    <literallayout class='monospaced'>
     recipes-graphics/xorg-font/xorg-font-common.inc:INC_PR = "r2"
     recipes-graphics/xorg-font/encodings_1.0.4.bb:PR = "${INC_PR}.1"
     recipes-graphics/xorg-font/font-util_1.3.0.bb:PR = "${INC_PR}.0"
     recipes-graphics/xorg-font/font-alias_1.0.3.bb:PR = "${INC_PR}.3"
                    </literallayout>
                    The first line of the example establishes the baseline
                    revision to be used for all recipes that use the
                    <filename>include</filename> file.
                    The remaining lines in the example are from individual
                    recipes and show how the <filename>PR</filename> value
                    is set.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INCOMPATIBLE_LICENSE'><glossterm>INCOMPATIBLE_LICENSE</glossterm>
            <info>
                INCOMPATIBLE_LICENSE[doc] = "Specifies a space-separated list of license names (as they would appear in LICENSE) that should be excluded from the build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a space-separated list of license names
                    (as they would appear in
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>)
                    that should be excluded from the build.
                    Recipes that provide no alternatives to listed incompatible
                    licenses are not built.
                    Packages that are individually licensed with the specified
                    incompatible licenses will be deleted.
                </para>

                <note>
                    This functionality is only regularly tested using
                    the following setting:
                    <literallayout class='monospaced'>
     INCOMPATIBLE_LICENSE = "GPL-3.0 LGPL-3.0 AGPL-3.0"
                    </literallayout>
                    Although you can use other settings, you might be required
                    to remove dependencies on or provide alternatives to
                    components that are required to produce a functional system
                    image.
                </note>

                <note><title>Tips</title>
                    It is possible to define a list of licenses that are allowed
                    to be used instead of the licenses that are excluded. To do
                    this, define a
                    variable <filename>COMPATIBLE_LICENSES</filename> with the
                    names of the licences that are allowed. Then
                    define <filename>INCOMPATIBLE_LICENSE</filename> as:
                    <literallayout class='monospaced'>
     INCOMPATIBLE_LICENSE = "${@' '.join(sorted(set(d.getVar('AVAILABLE_LICENSES').split()) - set(d.getVar('COMPATIBLE_LICENSES').split())))}"
                    </literallayout>
                    This will result
                    in <filename>INCOMPATIBLE_LICENSE</filename> containing the
                    names of all licences
                    from <link linkend='var-AVAILABLE_LICENSES'><filename>AVAILABLE_LICENSES</filename></link>
                    except the ones specified
                    in <filename>COMPATIBLE_LICENSES</filename>, thus only
                    allowing the latter licences to be used.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-INHERIT'><glossterm>INHERIT</glossterm>
            <info>
                INHERIT[doc] = "Causes the named class or classes to be inherited globally."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Causes the named class or classes to be inherited globally.
                    Anonymous functions in the class or classes
                    are not executed for the
                    base configuration and in each individual recipe.
                    The OpenEmbedded build system ignores changes to
                    <filename>INHERIT</filename> in individual recipes.
                </para>

                <para>
                    For more information on <filename>INHERIT</filename>, see
                    the
                    "<ulink url="&YOCTO_DOCS_BB_URL;#inherit-configuration-directive"><filename>INHERIT</filename> Configuration Directive</ulink>"
                    section in the Bitbake User Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INHERIT_DISTRO'><glossterm>INHERIT_DISTRO</glossterm>
            <info>
                INHERIT_DISTRO[doc] = "Lists classes that will be inherited at the distribution level. It is unlikely that you want to edit this variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists classes that will be inherited at the
                    distribution level.
                    It is unlikely that you want to edit this variable.
                </para>

                <para>
                    The default value of the variable is set as follows in the
                    <filename>meta/conf/distro/defaultsetup.conf</filename>
                    file:
                    <literallayout class='monospaced'>
     INHERIT_DISTRO ?= "debian devshell sstate license"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INHIBIT_DEFAULT_DEPS'><glossterm>INHIBIT_DEFAULT_DEPS</glossterm>
            <info>
                INHIBIT_DEFAULT_DEPS[doc] = "Prevents the default dependencies, namely the C compiler and standard C library (libc), from being added to DEPENDS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Prevents the default dependencies, namely the C compiler
                    and standard C library (libc), from being added to
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>.
                    This variable is usually used within recipes that do not
                    require any compilation using the C compiler.
                </para>

                <para>
                    Set the variable to "1" to prevent the default dependencies
                    from being added.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INHIBIT_PACKAGE_DEBUG_SPLIT'><glossterm>INHIBIT_PACKAGE_DEBUG_SPLIT</glossterm>
            <info>
                INHIBIT_PACKAGE_DEBUG_SPLIT[doc] = "If set to "1", prevents the OpenEmbedded build system from splitting out debug information during packaging"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Prevents the OpenEmbedded build system from splitting
                    out debug information during packaging.
                    By default, the build system splits out debugging
                    information during the
                    <link linkend='ref-tasks-package'><filename>do_package</filename></link>
                    task.
                    For more information on how debug information is split out,
                    see the
                    <link linkend='var-PACKAGE_DEBUG_SPLIT_STYLE'><filename>PACKAGE_DEBUG_SPLIT_STYLE</filename></link>
                    variable.
                </para>

                <para>
                    To prevent the build system from splitting out
                    debug information during packaging, set the
                    <filename>INHIBIT_PACKAGE_DEBUG_SPLIT</filename> variable
                    as follows:
                    <literallayout class='monospaced'>
     INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INHIBIT_PACKAGE_STRIP'><glossterm>INHIBIT_PACKAGE_STRIP</glossterm>
            <info>
                INHIBIT_PACKAGE_STRIP[doc] = "If set to "1", causes the build to not strip binaries in resulting packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "1", causes the build to not strip binaries in
                    resulting packages and prevents the
                    <filename>-dbg</filename> package from containing the
                    source files.
                </para>

                <para>
                     By default, the OpenEmbedded build system strips
                     binaries and puts the debugging symbols into
                     <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-dbg</filename>.
                     Consequently, you should not set
                     <filename>INHIBIT_PACKAGE_STRIP</filename> when you plan
                     to debug in general.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INHIBIT_SYSROOT_STRIP'><glossterm>INHIBIT_SYSROOT_STRIP</glossterm>
            <info>
                INHIBIT_SYSROOT_STRIP[doc] = "If set to "1", causes the build to not strip binaries in the resulting sysroot."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "1", causes the build to not strip binaries in
                    the resulting sysroot.
                </para>

                <para>
                    By default, the OpenEmbedded build system strips
                    binaries in the resulting sysroot.
                    When you specifically set the
                    <filename>INHIBIT_SYSROOT_STRIP</filename> variable to
                    "1" in your recipe, you inhibit this stripping.
                </para>

                <para>
                    If you want to use this variable, include the
                    <link linkend='ref-classes-staging'><filename>staging</filename></link>
                    class.
                    This class uses a <filename>sys_strip()</filename>
                    function to test for the variable and acts accordingly.
                    <note>
                        Use of the <filename>INHIBIT_SYSROOT_STRIP</filename>
                        variable occurs in rare and special circumstances.
                        For example, suppose you are building bare-metal
                        firmware by using an external GCC toolchain.
                        Furthermore, even if the toolchain's binaries are
                        strippable, other files exist that are needed for the
                        build that are not strippable.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITRAMFS_FSTYPES'><glossterm>INITRAMFS_FSTYPES</glossterm>
            <info>
                INITRAMFS_FSTYPES[doc] = "Defines the format for the output image of an initial RAM filesystem (initramfs), which is used during boot."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the format for the output image of an initial
                    RAM filesystem (initramfs), which is used during boot.
                    Supported formats are the same as those supported by the
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    variable.
                </para>

                <para>
                    The default value of this variable, which is set in the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file in the
                    <link linkend='source-directory'>Source Directory</link>,
                    is "cpio.gz".
                    The Linux kernel's initramfs mechanism, as opposed to the
                    initial RAM filesystem
                    <ulink url='https://en.wikipedia.org/wiki/Initrd'>initrd</ulink>
                    mechanism, expects an optionally compressed cpio
                    archive.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITRAMFS_IMAGE'><glossterm>INITRAMFS_IMAGE</glossterm>
            <info>
                INITRAMFS_IMAGE[doc] = "Specifies the PROVIDES name of an image recipe that is used to build an initial RAM filesystem (initramfs) image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the
                    <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
                    name of an image recipe that is used to build an initial
                    RAM filesystem (initramfs) image.
                    In other words, the <filename>INITRAMFS_IMAGE</filename>
                    variable causes an additional recipe to be built as
                    a dependency to whatever root filesystem recipe you
                    might be using (e.g. <filename>core-image-sato</filename>).
                    The initramfs image recipe you provide should set
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    to
                    <link linkend='var-INITRAMFS_FSTYPES'><filename>INITRAMFS_FSTYPES</filename></link>.
                </para>

                <para>
                    An initramfs image provides a temporary root filesystem
                    used for early system initialization (e.g. loading of
                    modules needed to locate and mount the "real" root
                    filesystem).
                    <note>
                        See the <filename>meta/recipes-core/images/core-image-minimal-initramfs.bb</filename>
                        recipe in the
                        <link linkend='source-directory'>Source Directory</link>
                        for an example initramfs recipe.
                        To select this sample recipe as the one built
                        to provide the initramfs image,
                        set <filename>INITRAMFS_IMAGE</filename> to
                        "core-image-minimal-initramfs".
                    </note>
                </para>

                <para>
                    You can also find more information by referencing the
                    <filename>meta-poky/conf/local.conf.sample.extended</filename>
                    configuration file in the Source Directory,
                    the
                    <link linkend='ref-classes-image'><filename>image</filename></link>
                    class, and the
                    <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
                    class to see how to use the
                    <filename>INITRAMFS_IMAGE</filename> variable.
                </para>

                <para>
                    If <filename>INITRAMFS_IMAGE</filename> is empty, which is
                    the default, then no initramfs image is built.
                </para>

                <para>
                    For more information, you can also see the
                    <link linkend='var-INITRAMFS_IMAGE_BUNDLE'><filename>INITRAMFS_IMAGE_BUNDLE</filename></link>
                    variable, which allows the generated image to be bundled
                    inside the kernel image.
                    Additionally, for information on creating an initramfs
                    image, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITRAMFS_IMAGE_BUNDLE'><glossterm>INITRAMFS_IMAGE_BUNDLE</glossterm>
            <info>
                INITRAMFS_IMAGE_BUNDLE[doc] = "Controls whether or not the image recipe specified by INITRAMFS_IMAGE is run through an extra pass (do_bundle_initramfs) during kernel compilation in order to build a single binary that contains both the kernel image and the initial RAM filesystem (initramfs)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Controls whether or not the image recipe specified by
                    <link linkend='var-INITRAMFS_IMAGE'><filename>INITRAMFS_IMAGE</filename></link>
                    is run through an extra pass
                    (<link linkend='ref-tasks-bundle_initramfs'><filename>do_bundle_initramfs</filename></link>)
                    during kernel compilation in order to build a single binary
                    that contains both the kernel image and the initial RAM
                    filesystem (initramfs) image.
                    This makes use of the
                    <link linkend='var-CONFIG_INITRAMFS_SOURCE'><filename>CONFIG_INITRAMFS_SOURCE</filename></link>
                    kernel feature.
                    <note>
                        Using an extra compilation pass to bundle the initramfs
                        avoids a circular dependency between the kernel recipe and
                        the initramfs recipe should the initramfs include kernel
                        modules.
                        Should that be the case, the initramfs recipe depends on
                        the kernel for the kernel modules, and the kernel depends
                        on the initramfs recipe since the initramfs is bundled
                        inside the kernel image.
                    </note>
                </para>

                <para>
                    The combined binary is deposited into the
                    <filename>tmp/deploy</filename> directory, which is part
                    of the
                    <link linkend='build-directory'>Build Directory</link>.
                </para>

                <para>
                    Setting the variable to "1" in a configuration file causes the
                    OpenEmbedded build system to generate a kernel image with the
                    initramfs specified in <filename>INITRAMFS_IMAGE</filename>
                    bundled within:
                    <literallayout class='monospaced'>
     INITRAMFS_IMAGE_BUNDLE = "1"
                    </literallayout>
                    By default, the
                    <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
                    class sets this variable to a null string as follows:
                    <literallayout class='monospaced'>
     INITRAMFS_IMAGE_BUNDLE ?= ""
                    </literallayout>
                    <note>
                        You must set the
                        <filename>INITRAMFS_IMAGE_BUNDLE</filename> variable in
                        a configuration file.
                        You cannot set the variable in a recipe file.
                    </note>
                    See the
                    <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-poky/conf/local.conf.sample.extended'><filename>local.conf.sample.extended</filename></ulink>
                    file for additional information.
                    Also, for information on creating an initramfs, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITRAMFS_LINK_NAME'><glossterm>INITRAMFS_LINK_NAME</glossterm>
            <info>
                INITRAMFS_LINK_NAME[doc] = "The link name of the initial RAM filesystem image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The link name of the initial RAM filesystem image.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     INITRAMFS_LINK_NAME ?= "initramfs-${KERNEL_ARTIFACT_LINK_NAME}"
                    </literallayout>
                    The value of the <filename>KERNEL_ARTIFACT_LINK_NAME</filename>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
                    </literallayout>
                </para>

                <para>
                    See the
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    variable for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITRAMFS_NAME'><glossterm>INITRAMFS_NAME</glossterm>
            <info>
                INITRAMFS_NAME[doc] = "The base name of the initial RAM filesystem image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name of the initial RAM filesystem image.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     INITRAMFS_NAME ?= "initramfs-${KERNEL_ARTIFACT_NAME}"
                    </literallayout>
                    The value of the
                    <link linkend='var-KERNEL_ARTIFACT_NAME'><filename>KERNEL_ARTIFACT_NAME</filename></link>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITRD'><glossterm>INITRD</glossterm>
            <info>
                INITRD[doc] = "Indicates a list of filesystem images to concatenate and use as an initial RAM disk (initrd)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Indicates list of filesystem images to concatenate and use
                    as an initial RAM disk (<filename>initrd</filename>).
                </para>

                <para>
                    The <filename>INITRD</filename> variable is an optional
                    variable used with the
                    <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITRD_IMAGE'><glossterm>INITRD_IMAGE</glossterm>
            <info>
                INITRD_IMAGE[doc] = "When building a "live" bootable image (i.e. when IMAGE_FSTYPES contains "live"), INITRD_IMAGE specifies the image recipe that should be built to provide the initial RAM disk image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When building a "live" bootable image (i.e. when
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    contains "live"), <filename>INITRD_IMAGE</filename>
                    specifies the image recipe that should be built
                    to provide the initial RAM disk image.
                    The default value is "core-image-minimal-initramfs".
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
                    class for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITSCRIPT_NAME'><glossterm>INITSCRIPT_NAME</glossterm>
            <info>
                INITSCRIPT_NAME[doc] = "The filename of the initialization script as installed to ${sysconfdir}/init.d."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The filename of the initialization script as installed to
                    <filename>${sysconfdir}/init.d</filename>.
                </para>

                <para>
                    This variable is used in recipes when using <filename>update-rc.d.bbclass</filename>.
                    The variable is mandatory.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INITSCRIPT_PACKAGES'><glossterm>INITSCRIPT_PACKAGES</glossterm>
            <info>
                INITSCRIPT_PACKAGES[doc] = "A list of the packages that contain initscripts. This variable is used in recipes when using update-rc.d.bbclass. The variable is optional and defaults to the PN variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of the packages that contain initscripts.
                    If multiple packages are specified, you need to append the package name
                    to the other <filename>INITSCRIPT_*</filename> as an override.
                 </para>

                 <para>
                    This variable is used in recipes when using <filename>update-rc.d.bbclass</filename>.
                    The variable is optional and defaults to the
                    <link linkend='var-PN'><filename>PN</filename></link> variable.
                </para>
           </glossdef>
        </glossentry>

        <glossentry id='var-INITSCRIPT_PARAMS'><glossterm>INITSCRIPT_PARAMS</glossterm>
            <info>
                INITSCRIPT_PARAMS[doc] = "Specifies the options to pass to update-rc.d. The variable is mandatory and is used in recipes when using update-rc.d.bbclass."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the options to pass to <filename>update-rc.d</filename>.
                    Here is an example:
                    <literallayout class='monospaced'>
     INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
                    </literallayout>
                </para>

                <para>
                    In this example, the script has a runlevel of 99,
                    starts the script in initlevels 2 and 5, and
                    stops the script in levels 0, 1 and 6.
                </para>

                <para>
                    The variable's default value is "defaults", which is
                    set in the
                    <link linkend='ref-classes-update-rc.d'><filename>update-rc.d</filename></link>
                    class.
                </para>

                <para>
                    The value in
                    <filename>INITSCRIPT_PARAMS</filename> is passed through
                    to the <filename>update-rc.d</filename> command.
                    For more information on valid parameters, please see the
                    <filename>update-rc.d</filename> manual page at
                    <ulink url='http://www.tin.org/bin/man.cgi?section=8&amp;topic=update-rc.d'></ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INSANE_SKIP'><glossterm>INSANE_SKIP</glossterm>
            <info>
                INSANE_SKIP[doc] = "Specifies the QA checks to skip for a specific package within a recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the QA checks to skip for a specific package
                    within a recipe.
                    For example, to skip the check for symbolic link
                    <filename>.so</filename> files in the main package of a
                    recipe, add the following to the recipe.
                    The package name override must be used, which in this
                    example is <filename>${PN}</filename>:
                    <literallayout class='monospaced'>
     INSANE_SKIP_${PN} += "dev-so"
                    </literallayout>
                </para>

                <para>
                    See the "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
                    section for a list of the valid QA checks you can
                    specify using this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-INSTALL_TIMEZONE_FILE'><glossterm>INSTALL_TIMEZONE_FILE</glossterm>
            <info>
                INSTALL_TIMEZONE_FILE[doc] = "Enables installation of the /etc/timezone file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    By default, the <filename>tzdata</filename> recipe packages
                    an <filename>/etc/timezone</filename> file.
                    Set the <filename>INSTALL_TIMEZONE_FILE</filename>
                    variable to "0" at the configuration level to disable this
                    behavior.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-IPK_FEED_URIS'><glossterm>IPK_FEED_URIS</glossterm>
            <info>
                IPK_FEED_URIS[doc] = "List of ipkg feed records to put into generated image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When the IPK backend is in use and package management
                    is enabled on the target, you can use this variable to
                    set up <filename>opkg</filename> in the target image
                    to point to package feeds on a nominated server.
                    Once the feed is established, you can perform
                    installations or upgrades using the package manager
                    at runtime.
                </para>
            </glossdef>
        </glossentry>

<!--
        <glossentry id='var-INTERCEPT_DIR'><glossterm>INTERCEPT_DIR</glossterm>
            <glossdef>
                <para>
                    An environment variable that defines the directory where
                    post installation hooks are installed for the
                    post install environment.
                    This variable is fixed as follows:
                    <literallayout class='monospaced'>
     ${WORKDIR}/intercept_scripts
                    </literallayout>
                </para>

                <para>
                    After installation of a target's root filesystem,
                    post installation scripts, which are essentially bash scripts,
                    are all executed just a single time.
                    Limiting execution of these scripts minimizes installation
                    time that would be lengthened due to  certain packages
                    triggering redundant operations.
                    For example, consider the installation of font packages
                    as a common example.
                    Without limiting the execution of post installation scripts,
                    all font directories would be rescanned to create the
                    cache after each individual font package was installed.
                </para>

                <para>
                    Do not edit the <filename>INTERCEPT_DIR</filename>
                    variable.
                </para>
            </glossdef>
        </glossentry>
-->

    </glossdiv>

<!--            <glossdiv id='var-glossary-j'><title>J</title>-->
<!--            </glossdiv>-->

   <glossdiv id='var-glossary-k'><title>K</title>

        <glossentry id='var-KARCH'><glossterm>KARCH</glossterm>
            <info>
                KARCH[doc] = "Defines the kernel architecture used when assembling the configuration. You define the KARCH variable in the BSP Descriptions."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the kernel architecture used when assembling
                    the configuration.
                    Architectures supported for this release are:
                    <literallayout class='monospaced'>
     powerpc
     i386
     x86_64
     arm
     qemu
     mips
                    </literallayout>
                </para>

                <para>
                    You define the <filename>KARCH</filename> variable in the
                    <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#bsp-descriptions'>BSP Descriptions</ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KBRANCH'><glossterm>KBRANCH</glossterm>
            <info>
                KBRANCH[doc] = "A regular expression used by the build process to explicitly identify the kernel branch that is validated, patched, and configured during a build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A regular expression used by the build process to explicitly
                    identify the kernel branch that is validated, patched,
                    and configured during a build.
                    You must set this variable to ensure the exact kernel
                    branch you want is being used by the build process.
                </para>

                <para>
                    Values for this variable are set in the kernel's recipe
                    file and the kernel's append file.
                    For example, if you are using the
                    <filename>linux-yocto_4.12</filename> kernel, the kernel
                    recipe file is the
                    <filename>meta/recipes-kernel/linux/linux-yocto_4.12.bb</filename>
                    file.
                    <filename>KBRANCH</filename> is set as follows in that
                    kernel recipe file:
                    <literallayout class='monospaced'>
     KBRANCH ?= "standard/base"
                    </literallayout>
                </para>

                <para>
                    This variable is also used from the kernel's append file
                    to identify the kernel branch specific to a particular
                    machine or target hardware.
                    Continuing with the previous kernel example, the kernel's
                    append file (i.e.
                    <filename>linux-yocto_4.12.bbappend</filename>) is located
                    in the BSP layer for a given machine.
                    For example, the append file for the Beaglebone,
                    EdgeRouter, and generic versions of both 32 and 64-bit IA
                    machines (<filename>meta-yocto-bsp</filename>) is named
                    <filename>meta-yocto-bsp/recipes-kernel/linux/linux-yocto_4.12.bbappend</filename>.
                    Here are the related statements from that append file:
                    <literallayout class='monospaced'>
     KBRANCH_genericx86  = "standard/base"
     KBRANCH_genericx86-64  = "standard/base"
     KBRANCH_edgerouter = "standard/edgerouter"
     KBRANCH_beaglebone = "standard/beaglebone"
                    </literallayout>
                        The <filename>KBRANCH</filename> statements identify
                        the kernel branch to use when building for each
                        supported BSP.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KBUILD_DEFCONFIG'><glossterm>KBUILD_DEFCONFIG</glossterm>
            <info>
                KBUILD_DEFCONFIG[doc] = "Specifies an "in-tree" kernel configuration file for use during a kernel build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When used with the
                    <link linkend='ref-classes-kernel-yocto'><filename>kernel-yocto</filename></link>
                    class, specifies an "in-tree" kernel configuration file
                    for use during a kernel build.
                </para>

                <para>
                    Typically, when using a <filename>defconfig</filename> to
                    configure a kernel during a build, you place the
                    file in your layer in the same manner as you would
                    place patch files and configuration fragment files (i.e.
                    "out-of-tree").
                    However, if you want to use a <filename>defconfig</filename>
                    file that is part of the kernel tree (i.e. "in-tree"),
                    you can use the
                    <filename>KBUILD_DEFCONFIG</filename> variable and append
                    the
                    <link linkend='var-KMACHINE'><filename>KMACHINE</filename></link>
                    variable to point to the <filename>defconfig</filename>
                    file.
                </para>

                <para>
                    To use the variable, set it in the append file for your
                    kernel recipe using the following form:
                    <literallayout class='monospaced'>
     KBUILD_DEFCONFIG_<replaceable>KMACHINE</replaceable> ?= <replaceable>defconfig_file</replaceable>
                    </literallayout>
                    Here is an example from a "raspberrypi2"
                    <filename>KMACHINE</filename> build that uses a
                    <filename>defconfig</filename> file named
                    "bcm2709_defconfig":
                    <literallayout class='monospaced'>
     KBUILD_DEFCONFIG_raspberrypi2 = "bcm2709_defconfig"
                    </literallayout>
                    As an alternative, you can use the following within your
                    append file:
                    <literallayout class='monospaced'>
     KBUILD_DEFCONFIG_pn-linux-yocto ?= <replaceable>defconfig_file</replaceable>
                    </literallayout>
                    For more information on how to use the
                    <filename>KBUILD_DEFCONFIG</filename> variable, see the
                    "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#using-an-in-tree-defconfig-file'>Using an "In-Tree" <filename>defconfig</filename> File</ulink>"
                    section in the Yocto Project Linux Kernel Development
                    Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_ALT_IMAGETYPE'><glossterm>KERNEL_ALT_IMAGETYPE</glossterm>
            <info>
                KERNEL_ALT_IMAGETYPE[doc] = "Specifies an alternate kernel image type for creation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies an alternate kernel image type for creation in
                    addition to the kernel image type specified using the
                    <link linkend='var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_ARTIFACT_NAME'><glossterm>KERNEL_ARTIFACT_NAME</glossterm>
            <info>
                KERNEL_ARTIFACT_NAME[doc] = "Specifies the name of all of the build artifacts."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of all of the build artifacts.
                    You can change the name of the artifacts by changing the
                    <filename>KERNEL_ARTIFACT_NAME</filename> variable.
                </para>

                <para>
                    The value of <filename>KERNEL_ARTIFACT_NAME</filename>,
                    which is set in the
                    <filename> meta/classes/kernel-artifact-names.bbclass</filename>
                    file, has the following default value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    </literallayout>
                </para>

                <para>
                    See the
                    <link linkend='var-PKGE'><filename>PKGE</filename></link>,
                    <link linkend='var-PKGV'><filename>PKGV</filename></link>,
                    <link linkend='var-PKGR'><filename>PKGR</filename></link>,
                    and
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    variables for additional information.
                    <note>
                        The <filename>IMAGE_VERSION_SUFFIX</filename> variable
                        is set to
                        <link linkend='var-DATETIME'><filename>DATETIME</filename></link>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_CLASSES'><glossterm>KERNEL_CLASSES</glossterm>
            <info>
                KERNEL_CLASSES[doc] = "A list of classes defining kernel image types that kernel class should inherit."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of classes defining kernel image types that the
                    <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
                    class should inherit.
                    You typically append this variable to enable extended image
                    types.
                    An example is the "kernel-fitimage", which enables
                    fitImage support and resides in
                    <filename>meta/classes/kernel-fitimage.bbclass</filename>.
                    You can register custom kernel image types with the
                    <filename>kernel</filename> class using this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_DEVICETREE'><glossterm>KERNEL_DEVICETREE</glossterm>
            <info>
                KERNEL_DEVICETREE[doc] = "Specifies the name of the generated Linux kernel device tree (i.e. the .dtb) file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the generated Linux kernel device tree
                    (i.e. the <filename>.dtb</filename>) file.
                    <note>
                        Legacy support exists for specifying the full path
                        to the device tree.
                        However, providing just the <filename>.dtb</filename>
                        file is preferred.
                    </note>
                    In order to use this variable, the
                    <link linkend='ref-classes-kernel-devicetree'><filename>kernel-devicetree</filename></link>
                    class must be inherited.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_DTB_LINK_NAME'><glossterm>KERNEL_DTB_LINK_NAME</glossterm>
            <info>
                KERNEL_DTB_LINK_NAME[doc] = "The link name of the kernel device tree binary (DTB)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The link name of the kernel device tree binary (DTB).
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     KERNEL_DTB_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
                    </literallayout>
                    The value of the <filename>KERNEL_ARTIFACT_LINK_NAME</filename>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
                    </literallayout>
                </para>

                <para>
                    See the
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    variable for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_DTB_NAME'><glossterm>KERNEL_DTB_NAME</glossterm>
            <info>
                KERNEL_DTB_NAME[doc] = "The base name of the kernel device tree binary (DTB)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name of the kernel device tree binary (DTB).
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     KERNEL_DTB_NAME ?= "${KERNEL_ARTIFACT_NAME}"
                    </literallayout>
                    The value of the
                    <link linkend='var-KERNEL_ARTIFACT_NAME'><filename>KERNEL_ARTIFACT_NAME</filename></link>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_EXTRA_ARGS'><glossterm>KERNEL_EXTRA_ARGS</glossterm>
            <info>
                KERNEL_EXTRA_ARGS[doc] = "Specifies additional make command-line arguments the OpenEmbedded build system passes on when compiling the kernel."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies additional <filename>make</filename>
                    command-line arguments the OpenEmbedded build system
                    passes on when compiling the kernel.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_FEATURES'><glossterm>KERNEL_FEATURES</glossterm>
            <info>
                KERNEL_FEATURES[doc] = "Includes additional kernel metadata. The metadata you add through this variable includes config fragments and features descriptions."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Includes additional kernel metadata.
                    In the OpenEmbedded build system, the default Board Support
                    Packages (BSPs)
                    <link linkend='metadata'>Metadata</link>
                    is provided through
                    the <link linkend='var-KMACHINE'><filename>KMACHINE</filename></link>
                    and
                    <link linkend='var-KBRANCH'><filename>KBRANCH</filename></link>
                    variables.
                    You can use the <filename>KERNEL_FEATURES</filename>
                    variable from within the kernel recipe or kernel append
                    file to further add metadata for all BSPs or specific
                    BSPs.
                </para>

                <para>
                    The metadata you add through this variable includes config
                    fragments and features descriptions,
                    which usually includes patches as well as config fragments.
                    You typically override the
                    <filename>KERNEL_FEATURES</filename> variable for a
                    specific machine.
                    In this way, you can provide validated, but optional,
                    sets of kernel configurations and features.
                </para>

                <para>
                    For example, the following example from the
                    <filename>linux-yocto-rt_4.12</filename> kernel recipe
                    adds "netfilter" and "taskstats" features to all BSPs
                    as well as "virtio" configurations to all QEMU machines.
                    The last two statements add specific configurations to
                    targeted machine types:
                    <literallayout class='monospaced'>
     KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc features/taskstats/taskstats.scc"
     KERNEL_FEATURES_append = " ${KERNEL_EXTRA_FEATURES}"
     KERNEL_FEATURES_append_qemuall = " cfg/virtio.scc"
     KERNEL_FEATURES_append_qemux86 = " cfg/sound.scc cfg/paravirt_kvm.scc"
     KERNEL_FEATURES_append_qemux86-64 = " cfg/sound.scc"                    </literallayout></para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_FIT_LINK_NAME'><glossterm>KERNEL_FIT_LINK_NAME</glossterm>
            <info>
                KERNEL_FIT_LINK_NAME[doc] = "The link name of the kernel flattened image tree (FIT) image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The link name of the kernel flattened image tree (FIT) image.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     KERNEL_FIT_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
                    </literallayout>
                    The value of the <filename>KERNEL_ARTIFACT_LINK_NAME</filename>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
                    </literallayout>
                </para>

                <para>
                    See the
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    variable for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_FIT_NAME'><glossterm>KERNEL_FIT_NAME</glossterm>
            <info>
                KERNEL_FIT_NAME[doc] = "The base name of the kernel flattened image tree (FIT) image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name of the kernel flattened image tree (FIT) image.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     KERNEL_FIT_NAME ?= "${KERNEL_ARTIFACT_NAME}"
                    </literallayout>
                    The value of the
                    <link linkend='var-KERNEL_ARTIFACT_NAME'><filename>KERNEL_ARTIFACT_NAME</filename></link>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_IMAGE_LINK_NAME'><glossterm>KERNEL_IMAGE_LINK_NAME</glossterm>
            <info>
                KERNEL_IMAGE_LINK_NAME[doc] = "The link name for the kernel image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The link name for the kernel image.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     KERNEL_IMAGE_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
                    </literallayout>
                    The value of the <filename>KERNEL_ARTIFACT_LINK_NAME</filename>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
                    </literallayout>
                </para>

                <para>
                    See the
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    variable for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_IMAGE_MAXSIZE'><glossterm>KERNEL_IMAGE_MAXSIZE</glossterm>
            <info>
                KERNEL_IMAGE_MAXSIZE[doc] = "The maximum allowable size in kilobytes of the kernel image file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the maximum size of the kernel image file in
                    kilobytes.
                    If <filename>KERNEL_IMAGE_MAXSIZE</filename> is set,
                    the size of the kernel image file is checked against
                    the set value during the
                    <link linkend='ref-tasks-sizecheck'><filename>do_sizecheck</filename></link>
                    task.
                    The task fails if the kernel image file is larger than
                    the setting.
                </para>

                <para>
                    <filename>KERNEL_IMAGE_MAXSIZE</filename> is useful for
                    target devices that have a limited amount of space in
                    which the kernel image must be stored.
                </para>

                <para>
                    By default, this variable is not set, which means the
                    size of the kernel image is not checked.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_IMAGE_NAME'><glossterm>KERNEL_IMAGE_NAME</glossterm>
            <info>
                KERNEL_IMAGE_NAME[doc] = "The base name of the kernel image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name of the kernel image.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     KERNEL_IMAGE_NAME ?= "${KERNEL_ARTIFACT_NAME}"
                    </literallayout>
                    The value of the
                    <link linkend='var-KERNEL_ARTIFACT_NAME'><filename>KERNEL_ARTIFACT_NAME</filename></link>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_IMAGETYPE'><glossterm>KERNEL_IMAGETYPE</glossterm>
            <info>
                KERNEL_IMAGETYPE[doc] = "The type of kernel to build for a device, usually set by the machine configuration files and defaults to 'zImage'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The type of kernel to build for a device, usually set by the
                    machine configuration files and defaults to "zImage".
                    This variable is used
                    when building the kernel and is passed to <filename>make</filename> as the target to
                    build.
                </para>

                <para>
                    If you want to build an alternate kernel image type, use the
                    <link linkend='var-KERNEL_ALT_IMAGETYPE'><filename>KERNEL_ALT_IMAGETYPE</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_MODULE_AUTOLOAD'><glossterm>KERNEL_MODULE_AUTOLOAD</glossterm>
            <info>
                KERNEL_MODULE_AUTOLOAD[doc] = "Lists kernel modules that need to be auto-loaded during boot"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists kernel modules that need to be auto-loaded during
                    boot.
                    <note>
                        This variable replaces the deprecated
                        <link linkend='var-module_autoload'><filename>module_autoload</filename></link>
                        variable.
                    </note>
                </para>

                <para>
                    You can use the <filename>KERNEL_MODULE_AUTOLOAD</filename>
                    variable anywhere that it can be
                    recognized by the kernel recipe or by an out-of-tree kernel
                    module recipe (e.g. a machine configuration file, a
                    distribution configuration file, an append file for the
                    recipe, or the recipe itself).
                </para>

                <para>
                    Specify it as follows:
                    <literallayout class='monospaced'>
     KERNEL_MODULE_AUTOLOAD += "<replaceable>module_name1</replaceable> <replaceable>module_name2</replaceable> <replaceable>module_name3</replaceable>"
                    </literallayout>
                </para>

                <para>
                    Including <filename>KERNEL_MODULE_AUTOLOAD</filename> causes
                    the OpenEmbedded build system to populate the
                    <filename>/etc/modules-load.d/modname.conf</filename>
                    file with the list of modules to be auto-loaded on boot.
                    The modules appear one-per-line in the file.
                    Here is an example of the most common use case:
                    <literallayout class='monospaced'>
     KERNEL_MODULE_AUTOLOAD += "<replaceable>module_name</replaceable>"
                    </literallayout>
                </para>

                <para>
                    For information on how to populate the
                    <filename>modname.conf</filename> file with
                    <filename>modprobe.d</filename> syntax lines, see the
                    <link linkend='var-KERNEL_MODULE_PROBECONF'><filename>KERNEL_MODULE_PROBECONF</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_MODULE_PROBECONF'><glossterm>KERNEL_MODULE_PROBECONF</glossterm>
            <info>
                KERNEL_MODULE_PROBECONF[doc] = "Lists kernel modules for which the build system expects to find module_conf_* values that specify configuration for each of the modules."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Provides a list of modules for which the OpenEmbedded
                    build system expects to find
                    <filename>module_conf_</filename><replaceable>modname</replaceable>
                    values that specify configuration for each of the modules.
                    For information on how to provide those module
                    configurations, see the
                    <link linkend='var-module_conf'><filename>module_conf_*</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_PATH'><glossterm>KERNEL_PATH</glossterm>
            <info>
                KERNEL_PATH[doc] = "The location of the kernel sources. This variable is set to the value of the STAGING_KERNEL_DIR within the module class (module.bbclass)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location of the kernel sources.
                    This variable is set to the value of the
                    <link linkend='var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></link>
                    within the
                    <link linkend='ref-classes-module'><filename>module</filename></link>
                    class.
                    For information on how this variable is used, see the
                    "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
                    section in the Yocto Project Linux Kernel Development
                    Manual.
                </para>

                <para>
                    To help maximize compatibility with out-of-tree drivers
                    used to build modules, the OpenEmbedded build system also
                    recognizes and uses the
                    <link linkend='var-KERNEL_SRC'><filename>KERNEL_SRC</filename></link>
                    variable, which is identical to the
                    <filename>KERNEL_PATH</filename> variable.
                    Both variables are common variables used by external
                    Makefiles to point to the kernel source directory.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_SRC'><glossterm>KERNEL_SRC</glossterm>
            <info>
                KERNEL_SRC[doc] = "The location of the kernel sources. This variable is set to the value of the STAGING_KERNEL_DIR within the module class (module.bbclass)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location of the kernel sources.
                    This variable is set to the value of the
                    <link linkend='var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></link>
                    within the
                    <link linkend='ref-classes-module'><filename>module</filename></link>
                    class.
                    For information on how this variable is used, see the
                    "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
                    section in the Yocto Project Linux Kernel Development
                    Manual.
                </para>

                <para>
                    To help maximize compatibility with out-of-tree drivers
                    used to build modules, the OpenEmbedded build system also
                    recognizes and uses the
                    <link linkend='var-KERNEL_PATH'><filename>KERNEL_PATH</filename></link>
                    variable, which is identical to the
                    <filename>KERNEL_SRC</filename> variable.
                    Both variables are common variables used by external
                    Makefiles to point to the kernel source directory.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNEL_VERSION'><glossterm>KERNEL_VERSION</glossterm>
            <info>
                KERNEL_VERSION[doc] = "Specifies the version of the kernel as extracted from version.h or utsrelease.h within the kernel sources."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the version of the kernel as extracted from
                    <filename>version.h</filename> or
                    <filename>utsrelease.h</filename> within the kernel sources.
                    Effects of setting this variable do not take affect until
                    the kernel has been configured.
                    Consequently, attempting to refer to this variable in
                    contexts prior to configuration will not work.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KERNELDEPMODDEPEND'><glossterm>KERNELDEPMODDEPEND</glossterm>
            <info>
                KERNELDEPMODDEPEND[doc] = "Specifies whether or not to use the data referenced through the PKGDATA_DIR directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies whether the data referenced through
                    <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>
                    is needed or not.
                    The <filename>KERNELDEPMODDEPEND</filename> does not
                    control whether or not that data exists,
                    but simply whether or not it is used.
                    If you do not need to use the data, set the
                    <filename>KERNELDEPMODDEPEND</filename> variable in your
                    <filename>initramfs</filename> recipe.
                    Setting the variable there when the data is not needed
                    avoids a potential dependency loop.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KFEATURE_DESCRIPTION'><glossterm>KFEATURE_DESCRIPTION</glossterm>
            <info>
                KFEATURE_DESCRIPTION[doc] = "Provides a short description of a configuration fragment. You use this variable in the .scc file that describes a configuration fragment file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Provides a short description of a configuration fragment.
                    You use this variable in the <filename>.scc</filename>
                    file that describes a configuration fragment file.
                    Here is the variable used in a file named
                    <filename>smp.scc</filename> to describe SMP being
                    enabled:
                    <literallayout class='monospaced'>
     define KFEATURE_DESCRIPTION "Enable SMP"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-KMACHINE'><glossterm>KMACHINE</glossterm>
            <info>
                KMACHINE[doc] = "The machine as known by the kernel."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The machine as known by the kernel.
                    Sometimes the machine name used by the kernel does not
                    match the machine name used by the OpenEmbedded build
                    system.
                    For example, the machine name that the OpenEmbedded build
                    system understands as
                    <filename>core2-32-intel-common</filename> goes by a
                    different name in the Linux Yocto kernel.
                    The kernel understands that machine as
                    <filename>intel-core2-32</filename>.
                    For cases like these, the <filename>KMACHINE</filename>
                    variable maps the kernel machine name to the OpenEmbedded
                    build system machine name.
                </para>

                <para>
                    These mappings between different names occur in the
                    Yocto Linux Kernel's <filename>meta</filename> branch.
                    As an example take a look in the
                    <filename>common/recipes-kernel/linux/linux-yocto_3.19.bbappend</filename>
                    file:
                    <literallayout class='monospaced'>
     LINUX_VERSION_core2-32-intel-common = "3.19.0"
     COMPATIBLE_MACHINE_core2-32-intel-common = "${MACHINE}"
     SRCREV_meta_core2-32-intel-common = "8897ef68b30e7426bc1d39895e71fb155d694974"
     SRCREV_machine_core2-32-intel-common = "43b9eced9ba8a57add36af07736344dcc383f711"
     KMACHINE_core2-32-intel-common = "intel-core2-32"
     KBRANCH_core2-32-intel-common = "standard/base"
     KERNEL_FEATURES_append_core2-32-intel-common = "${KERNEL_FEATURES_INTEL_COMMON}"
                    </literallayout>
                    The <filename>KMACHINE</filename> statement says that
                    the kernel understands the machine name as
                    "intel-core2-32".
                    However, the OpenEmbedded build system understands the
                    machine as "core2-32-intel-common".
                </para>

            </glossdef>
        </glossentry>

        <glossentry id='var-KTYPE'><glossterm>KTYPE</glossterm>
            <info>
                KTYPE[doc] = "Defines the kernel type to be used in assembling the configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the kernel type to be used in assembling the
                    configuration.
                    The linux-yocto recipes define "standard", "tiny",
                    and "preempt-rt" kernel types.
                    See the
                    "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#kernel-types'>Kernel Types</ulink>"
                    section in the Yocto Project Linux Kernel Development
                    Manual for more information on kernel types.
                </para>

                <para>
                    You define the <filename>KTYPE</filename> variable in the
                    <ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#bsp-descriptions'>BSP Descriptions</ulink>.
                    The value you use must match the value used for the
                    <link linkend='var-LINUX_KERNEL_TYPE'><filename>LINUX_KERNEL_TYPE</filename></link>
                    value used by the kernel recipe.
                </para>
            </glossdef>
        </glossentry>
   </glossdiv>

    <glossdiv id='var-glossary-l'><title>L</title>

        <glossentry id='var-LABELS'><glossterm>LABELS</glossterm>
            <info>
                LABELS[doc] = "Provides a list of targets for automatic configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Provides a list of targets for automatic configuration.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-grub-efi'><filename>grub-efi</filename></link>
                    class for more information on how this variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LAYERDEPENDS'><glossterm>LAYERDEPENDS</glossterm>
            <info>
                LAYERDEPENDS[doc] = "Lists the layers, separated by spaces, on which this recipe depends. This variable is used in the conf/layer.conf file and must be suffixed with the name of the specific layer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists the layers, separated by spaces, on which this
                    recipe depends.
                    Optionally, you can specify a specific layer version for a
                    dependency by adding it to the end of the layer name.
                    Here is an example:
                    <literallayout class='monospaced'>
     LAYERDEPENDS_mylayer = "anotherlayer (=3)"
                    </literallayout>
                    In this previous example, version 3 of "anotherlayer"
                    is compared against
                    <link linkend='var-LAYERVERSION'><filename>LAYERVERSION</filename></link><filename>_anotherlayer</filename>.
                </para>

                <para>
                    An error is produced if any dependency is missing or
                    the version numbers (if specified) do not match exactly.
                    This variable is used in the
                    <filename>conf/layer.conf</filename> file and must be
                    suffixed with the name of the specific layer (e.g.
                    <filename>LAYERDEPENDS_mylayer</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LAYERDIR'><glossterm>LAYERDIR</glossterm>
            <info>
                LAYERDIR[doc] = "When used inside the layer.conf configuration file, this variable provides the path of the current layer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When used inside the <filename>layer.conf</filename> configuration
                    file, this variable provides the path of the current layer.
                    This variable is not available outside of <filename>layer.conf</filename>
                    and references are expanded immediately when parsing of the file completes.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LAYERRECOMMENDS'><glossterm>LAYERRECOMMENDS</glossterm>
            <info>
                LAYERRECOMMENDS[doc] = "Lists the layers, separated by spaces, recommended for use with this layer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists the layers, separated by spaces, recommended for
                    use with this layer.
                </para>

                <para>
                    Optionally, you can specify a specific layer version for a
                    recommendation by adding the version to the end of the
                    layer name.
                    Here is an example:
                    <literallayout class='monospaced'>
     LAYERRECOMMENDS_mylayer = "anotherlayer (=3)"
                    </literallayout>
                    In this previous example, version 3 of "anotherlayer" is
                    compared against
                    <filename>LAYERVERSION_anotherlayer</filename>.
                </para>

                <para>
                    This variable is used in the
                    <filename>conf/layer.conf</filename> file and must be
                    suffixed with the name of the specific layer (e.g.
                    <filename>LAYERRECOMMENDS_mylayer</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LAYERSERIES_COMPAT'><glossterm>LAYERSERIES_COMPAT</glossterm>
            <info>
                LAYERSERIES_COMPAT[doc] = "Lists the OpenEmbedded-Core versions for which a layer is compatible."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists the versions of the
                    <link linkend='oe-core'>OpenEmbedded-Core</link> for which
                    a layer is compatible.
                    Using the <filename>LAYERSERIES_COMPAT</filename> variable
                    allows the layer maintainer to indicate which combinations
                    of the layer and OE-Core can be expected to work.
                    The variable gives the system a way to detect when a layer
                    has not been tested with new releases of OE-Core (e.g.
                    the layer is not maintained).
                </para>

                <para>
                    To specify the OE-Core versions for which a layer is
                    compatible, use this variable in your layer's
                    <filename>conf/layer.conf</filename> configuration file.
                    For the list, use the Yocto Project
                    <ulink url='https://wiki.yoctoproject.org/wiki/Releases'>Release Name</ulink>
                    (e.g. &DISTRO_NAME_NO_CAP;).
                    To specify multiple OE-Core versions for the layer,
                    use a space-separated list:
                    <literallayout class='monospaced'>
     LAYERSERIES_COMPAT_<replaceable>layer_root_name</replaceable> = "&DISTRO_NAME_NO_CAP; &DISTRO_NAME_NO_CAP_MINUS_ONE;"
                    </literallayout>
                    <note>
                        Setting <filename>LAYERSERIES_COMPAT</filename> is
                        required by the Yocto Project Compatible version 2
                        standard.
                        The OpenEmbedded build system produces a warning if
                        the variable is not set for any given layer.
                    </note>
                </para>

                <para>
                    See the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-your-own-layer'>Creating Your Own Layer</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LAYERVERSION'><glossterm>LAYERVERSION</glossterm>
            <info>
                LAYERVERSION[doc] = "Optionally specifies the version of a layer as a single number. This variable is used in the conf/layer.conf file and must be suffixed with the name of the specific layer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Optionally specifies the version of a layer as a single number.
                    You can use this within
                    <link linkend='var-LAYERDEPENDS'><filename>LAYERDEPENDS</filename></link>
                    for another layer in order to depend on a specific version
                    of the layer.
                    This variable is used in the <filename>conf/layer.conf</filename> file
                    and must be suffixed with the name of the specific layer (e.g.
                    <filename>LAYERVERSION_mylayer</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LD'><glossterm>LD</glossterm>
            <info>
                LD[doc] = "Minimal command and arguments to run the linker."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments used to run the
                    linker.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LDFLAGS'><glossterm>LDFLAGS</glossterm>
            <info>
                LDFLAGS[doc] = "Specifies the flags to pass to the linker."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the linker.
                    This variable is exported to an environment
                    variable and thus made visible to the software being
                    built during the compilation step.
                </para>

                <para>
                    Default initialization for <filename>LDFLAGS</filename>
                    varies depending on what is being built:
                    <itemizedlist>
                        <listitem><para>
                            <link linkend='var-TARGET_LDFLAGS'><filename>TARGET_LDFLAGS</filename></link>
                            when building for the target
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILD_LDFLAGS'><filename>BUILD_LDFLAGS</filename></link>
                            when building for the build host (i.e.
                            <filename>-native</filename>)
                            </para></listitem>
                        <listitem><para>
                            <link linkend='var-BUILDSDK_LDFLAGS'><filename>BUILDSDK_LDFLAGS</filename></link>
                            when building for an SDK (i.e.
                            <filename>nativesdk-</filename>)
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LEAD_SONAME'><glossterm>LEAD_SONAME</glossterm>
            <info>
                LEAD_SONAME[doc] = "Specifies the lead (or primary) compiled library file (i.e. .so) that the debian class applies its naming policy to given a recipe that packages multiple libraries."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the lead (or primary) compiled library file
                    (i.e. <filename>.so</filename>) that the
                    <link linkend='ref-classes-debian'><filename>debian</filename></link>
                    class applies its naming policy to given a recipe that
                    packages multiple libraries.
                </para>

                <para>
                    This variable works in conjunction with the
                    <filename>debian</filename> class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LIC_FILES_CHKSUM'><glossterm>LIC_FILES_CHKSUM</glossterm>
            <info>
                LIC_FILES_CHKSUM[doc] = "Checksums of the license text in the recipe source code."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Checksums of the license text in the recipe source code.
                </para>

                <para>
                    This variable tracks changes in license text of the source
                    code files.
                    If the license text is changed, it will trigger a build
                    failure, which gives the developer an opportunity to review any
                    license change.
                </para>

                <para>
                    This variable must be defined for all recipes (unless
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    is set to "CLOSED").</para>
                <para>For more information, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LICENSE'><glossterm>LICENSE</glossterm>
            <info>
                LICENSE[doc] = "The list of source licenses for the recipe. The logical operators &amp;, '|', and parentheses can be used."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of source licenses for the recipe.
                    Follow these rules:
                    <itemizedlist>
                        <listitem><para>Do not use spaces within individual
                            license names.</para></listitem>
                        <listitem><para>Separate license names using
                            | (pipe) when there is a choice between licenses.
                            </para></listitem>
                        <listitem><para>Separate license names using
                            &amp; (ampersand) when multiple licenses exist
                            that cover different parts of the source.
                            </para></listitem>
                        <listitem><para>You can use spaces between license
                            names.</para></listitem>
                        <listitem><para>For standard licenses, use the names
                            of the files in
                            <filename>meta/files/common-licenses/</filename>
                            or the
                            <link linkend='var-SPDXLICENSEMAP'><filename>SPDXLICENSEMAP</filename></link>
                            flag names defined in
                            <filename>meta/conf/licenses.conf</filename>.
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    Here are some examples:
                    <literallayout class='monospaced'>
     LICENSE = "LGPLv2.1 | GPLv3"
     LICENSE = "MPL-1 &amp; LGPLv2.1"
     LICENSE = "GPLv2+"
                    </literallayout>
                    The first example is from the recipes for Qt, which the user
                    may choose to distribute under either the LGPL version
                    2.1 or GPL version 3.
                    The second example is from Cairo where two licenses cover
                    different parts of the source code.
                    The final example is from <filename>sysstat</filename>,
                    which presents a single license.
                </para>

                <para>
                    You can also specify licenses on a per-package basis to
                    handle situations where components of the output have
                    different licenses.
                    For example, a piece of software whose code is
                    licensed under GPLv2 but has accompanying documentation
                    licensed under the GNU Free Documentation License 1.2 could
                    be specified as follows:
                    <literallayout class='monospaced'>
     LICENSE = "GFDL-1.2 &amp; GPLv2"
     LICENSE_${PN} = "GPLv2"
     LICENSE_${PN}-doc = "GFDL-1.2"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LICENSE_CREATE_PACKAGE'><glossterm>LICENSE_CREATE_PACKAGE</glossterm>
            <info>
                LICENSE_CREATE_PACKAGE[doc] = "Creates an extra package (i.e. ${PN}-lic) for each recipe and adds that package to the RRECOMMENDS+${PN}."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                        Setting <filename>LICENSE_CREATE_PACKAGE</filename>
                        to "1" causes the OpenEmbedded build system to create
                        an extra package (i.e.
                        <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-lic</filename>)
                        for each recipe and to add those packages to the
                        <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link><filename>_${PN}</filename>.
                </para>

                <para>
                    The <filename>${PN}-lic</filename> package installs a
                    directory in <filename>/usr/share/licenses</filename>
                    named <filename>${PN}</filename>, which is the recipe's
                    base name, and installs files in that directory that
                    contain license and copyright information (i.e. copies of
                    the appropriate license files from
                    <filename>meta/common-licenses</filename> that match the
                    licenses specified in the
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    variable of the recipe metadata and copies of files marked
                    in
                    <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>
                    as containing license text).
                </para>

                <para>
                    For related information on providing license text, see the
                    <link linkend='var-COPY_LIC_DIRS'><filename>COPY_LIC_DIRS</filename></link>
                    variable, the
                    <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
                    variable, and the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#providing-license-text'>Providing License Text</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LICENSE_FLAGS'><glossterm>LICENSE_FLAGS</glossterm>
            <info>
                LICENSE_FLAGS[doc] = "Specifies additional flags for a recipe you must whitelist through LICENSE_FLAGS_WHITELIST in order to allow the recipe to be built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies additional flags for a recipe you must
                    whitelist through
                    <link linkend='var-LICENSE_FLAGS_WHITELIST'><filename>LICENSE_FLAGS_WHITELIST</filename></link>
                    in order to allow the recipe to be built.
                    When providing multiple flags, separate them with
                    spaces.
                </para>

                <para>
                    This value is independent of
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    and is typically used to mark recipes that might
                    require additional licenses in order to be used in a
                    commercial product.
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-commercially-licensed-recipes'>Enabling Commercially Licensed Recipes</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LICENSE_FLAGS_WHITELIST'><glossterm>LICENSE_FLAGS_WHITELIST</glossterm>
            <info>
                LICENSE_FLAGS_WHITELIST[doc] = "Lists license flags that when specified in LICENSE_FLAGS within a recipe should not prevent that recipe from being built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists license flags that when specified in
                    <link linkend='var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></link>
                    within a recipe should not prevent that recipe from being
                    built.
                    This practice is otherwise known as "whitelisting"
                    license flags.
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-commercially-licensed-recipes'>Enabling Commercially Licensed Recipes</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LICENSE_PATH'><glossterm>LICENSE_PATH</glossterm>
            <info>
                LICENSE_PATH[doc] = "Path to additional licenses used during the build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Path to additional licenses used during the build.
                    By default, the OpenEmbedded build system uses <filename>COMMON_LICENSE_DIR</filename>
                    to define the directory that holds common license text used during the build.
                    The <filename>LICENSE_PATH</filename> variable allows you to extend that
                    location to other areas that have additional licenses:
                    <literallayout class='monospaced'>
     LICENSE_PATH += "<replaceable>path-to-additional-common-licenses</replaceable>"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LINUX_KERNEL_TYPE'><glossterm>LINUX_KERNEL_TYPE</glossterm>
            <info>
                LINUX_KERNEL_TYPE[doc] = "Defines the kernel type to be used in assembling the configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the kernel type to be used in assembling the
                    configuration.
                    The linux-yocto recipes define "standard", "tiny", and
                    "preempt-rt" kernel types.
                    See the
                    "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#kernel-types'>Kernel Types</ulink>"
                    section in the Yocto Project Linux Kernel Development
                    Manual for more information on kernel types.
                </para>

                <para>
                    If you do not specify a
                    <filename>LINUX_KERNEL_TYPE</filename>, it defaults to
                    "standard".
                    Together with
                    <link linkend='var-KMACHINE'><filename>KMACHINE</filename></link>,
                    the <filename>LINUX_KERNEL_TYPE</filename> variable
                    defines the search
                    arguments used by the kernel tools to find the appropriate
                    description within the kernel
                    <link linkend='metadata'>Metadata</link>
                    with which to build out the sources and configuration.
                    </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LINUX_VERSION'><glossterm>LINUX_VERSION</glossterm>
            <info>
                LINUX_VERSION[doc] = "The Linux version from kernel.org on which the Linux kernel image being built using the OpenEmbedded build system is based. You define this variable in the kernel recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The Linux version from <filename>kernel.org</filename>
                    on which the Linux kernel image being built using the
                    OpenEmbedded build system is based.
                    You define this variable in the kernel recipe.
                    For example, the <filename>linux-yocto-3.4.bb</filename>
                    kernel recipe found in
                    <filename>meta/recipes-kernel/linux</filename>
                    defines the variables as follows:
                    <literallayout class='monospaced'>
     LINUX_VERSION ?= "3.4.24"
                    </literallayout>
                </para>

                <para>
                    The <filename>LINUX_VERSION</filename> variable is used to
                    define <link linkend='var-PV'><filename>PV</filename></link>
                    for the recipe:
                    <literallayout class='monospaced'>
     PV = "${LINUX_VERSION}+git${SRCPV}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LINUX_VERSION_EXTENSION'><glossterm>LINUX_VERSION_EXTENSION</glossterm>
            <info>
                LINUX_VERSION_EXTENSION[doc] = "A string extension compiled into the version string of the Linux kernel built with the OpenEmbedded build system. You define this variable in the kernel recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A string extension compiled into the version
                    string of the Linux kernel built with the OpenEmbedded
                    build system.
                    You define this variable in the kernel recipe.
                    For example, the linux-yocto kernel recipes all define
                    the variable as follows:
                    <literallayout class='monospaced'>
     LINUX_VERSION_EXTENSION ?= "-yocto-${<link linkend='var-LINUX_KERNEL_TYPE'>LINUX_KERNEL_TYPE</link>}"
                    </literallayout>
                </para>

                <para>
                    Defining this variable essentially sets the
                    Linux kernel configuration item
                    <filename>CONFIG_LOCALVERSION</filename>, which is visible
                    through the <filename>uname</filename> command.
                    Here is an example that shows the extension assuming it
                    was set as previously shown:
                    <literallayout class='monospaced'>
     $ uname -r
     3.7.0-rc8-custom
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LOG_DIR'><glossterm>LOG_DIR</glossterm>
            <info>
                LOG_DIR[doc] = "Specifies the directory to which the OpenEmbedded build system writes overall log files. The default directory is ${TMPDIR}/log"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the directory to which the OpenEmbedded build
                    system writes overall log files.
                    The default directory is <filename>${TMPDIR}/log</filename>.
                </para>

                <para>
                    For the directory containing logs specific to each task,
                    see the <link linkend='var-T'><filename>T</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-m'><title>M</title>

         <glossentry id='var-MACHINE'><glossterm>MACHINE</glossterm>
            <info>
                MACHINE[doc] = "Specifies the target device for which the image is built. You define MACHINE in the conf/local.conf file in the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target device for which the image is built.
                    You define <filename>MACHINE</filename> in the
                    <filename>local.conf</filename> file found in the
                    <link linkend='build-directory'>Build Directory</link>.
                    By default, <filename>MACHINE</filename> is set to
                    "qemux86", which is an x86-based architecture machine to
                    be emulated using QEMU:
                    <literallayout class='monospaced'>
     MACHINE ?= "qemux86"
                    </literallayout>
                </para>

                <para>
                    The variable corresponds to a machine configuration file of the
                    same name, through which machine-specific configurations are set.
                    Thus, when <filename>MACHINE</filename> is set to "qemux86" there
                    exists the corresponding <filename>qemux86.conf</filename> machine
                    configuration file, which can be found in the
                    <link linkend='source-directory'>Source Directory</link>
                    in <filename>meta/conf/machine</filename>.
                </para>

                <para>
                    The list of machines supported by the Yocto Project as
                    shipped include the following:
                    <literallayout class='monospaced'>
     MACHINE ?= "qemuarm"
     MACHINE ?= "qemuarm64"
     MACHINE ?= "qemumips"
     MACHINE ?= "qemumips64"
     MACHINE ?= "qemuppc"
     MACHINE ?= "qemux86"
     MACHINE ?= "qemux86-64"
     MACHINE ?= "genericx86"
     MACHINE ?= "genericx86-64"
     MACHINE ?= "beaglebone"
     MACHINE ?= "edgerouter"
                    </literallayout>
                    The last five are Yocto Project reference hardware boards, which
                    are provided in the <filename>meta-yocto-bsp</filename> layer.
                    <note>Adding additional Board Support Package (BSP) layers
                        to your configuration adds new possible settings for
                        <filename>MACHINE</filename>.
                    </note>
                </para>
            </glossdef>
         </glossentry>

         <glossentry id='var-MACHINE_ARCH'><glossterm>MACHINE_ARCH</glossterm>
            <info>
                MACHINE_ARCH[doc] = "Specifies the name of the machine-specific architecture. This variable is set automatically from MACHINE or TUNE_PKGARCH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the machine-specific architecture.
                    This variable is set automatically from
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    or
                    <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>.
                    You should not hand-edit the
                    <filename>MACHINE_ARCH</filename> variable.
                </para>
            </glossdef>
         </glossentry>

         <glossentry id='var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><glossterm>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</glossterm>
            <info>
                MACHINE_ESSENTIAL_EXTRA_RDEPENDS[doc] = "A list of required machine-specific packages to install as part of the image being built. Because this is a 'machine-essential' variable, the list of packages are essential for the machine to boot."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of required machine-specific packages to install as part of
                    the image being built.
                    The build process depends on these packages being present.
                    Furthermore, because this is a "machine-essential" variable, the list of
                    packages are essential for the machine to boot.
                    The impact of this variable affects images based on
                    <filename>packagegroup-core-boot</filename>,
                    including the <filename>core-image-minimal</filename> image.
                </para>

                <para>
                    This variable is similar to the
                    <filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</link></filename>
                    variable with the exception that the image being built has a build
                    dependency on the variable's list of packages.
                    In other words, the image will not build if a file in this list is not found.
                </para>

                <para>
                    As an example, suppose the machine for which you are building requires
                    <filename>example-init</filename> to be run during boot to initialize the hardware.
                    In this case, you would use the following in the machine's
                    <filename>.conf</filename> configuration file:
                    <literallayout class='monospaced'>
     MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "example-init"
                    </literallayout>
                </para>
            </glossdef>
         </glossentry>

         <glossentry id='var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><glossterm>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</glossterm>
            <info>
                MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS[doc] = "A list of recommended machine-specific packages to install as part of the image being built. Because this is a 'machine-essential' variable, the list of packages are essential for the machine to boot."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recommended machine-specific packages to install as part of
                    the image being built.
                    The build process does not depend on these packages being present.
                    However, because this is a "machine-essential" variable, the list of
                    packages are essential for the machine to boot.
                    The impact of this variable affects images based on
                    <filename>packagegroup-core-boot</filename>,
                    including the <filename>core-image-minimal</filename> image.
                </para>

                <para>
                    This variable is similar to the
                    <filename><link linkend='var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</link></filename>
                    variable with the exception that the image being built does not have a build
                    dependency on the variable's list of packages.
                    In other words, the image will still build if a package in this list is not found.
                    Typically, this variable is used to handle essential kernel modules, whose
                    functionality may be selected to be built into the kernel rather than as a module,
                    in which case a package will not be produced.
                </para>

                <para>
                    Consider an example where you have a custom kernel where a specific touchscreen
                    driver is required for the machine to be usable.
                    However, the driver can be built as a module or
                    into the kernel depending on the kernel configuration.
                    If the driver is built as a module, you want it to be installed.
                    But, when the driver is built into the kernel, you still want the
                    build to succeed.
                    This variable sets up a "recommends" relationship so that in the latter case,
                    the build will not fail due to the missing package.
                    To accomplish this, assuming the package for the module was called
                    <filename>kernel-module-ab123</filename>, you would use the
                    following in the machine's <filename>.conf</filename> configuration
                    file:
                    <literallayout class='monospaced'>
     MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-module-ab123"
                    </literallayout>
                    <note>
                        In this example, the
                        <filename>kernel-module-ab123</filename> recipe
                        needs to explicitly set its
                        <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                        variable to ensure that BitBake does not use the
                        kernel recipe's
                        <link linkend='var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></link>
                        variable to satisfy the dependency.
                    </note>
                </para>

                <para>
                    Some examples of these machine essentials are flash, screen, keyboard, mouse,
                    or touchscreen drivers (depending on the machine).
                </para>
            </glossdef>
        </glossentry>

         <glossentry id='var-MACHINE_EXTRA_RDEPENDS'><glossterm>MACHINE_EXTRA_RDEPENDS</glossterm>
            <info>
                MACHINE_EXTRA_RDEPENDS[doc] = "A list of machine-specific packages to install as part of the image being built that are not essential for the machine to boot. However, the build process for more fully-featured images depends on the packages being present."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of machine-specific packages to install as part of the
                    image being built that are not essential for the machine to boot.
                    However, the build process for more fully-featured images
                    depends on the packages being present.
                </para>

                <para>
                    This variable affects all images based on
                    <filename>packagegroup-base</filename>, which does not include the
                    <filename>core-image-minimal</filename> or <filename>core-image-full-cmdline</filename>
                    images.
                </para>

                <para>
                    The variable is similar to the
                    <filename><link linkend='var-MACHINE_EXTRA_RRECOMMENDS'>MACHINE_EXTRA_RRECOMMENDS</link></filename>
                    variable with the exception that the image being built has a build
                    dependency on the variable's list of packages.
                    In other words, the image will not build if a file in this list is not found.
                </para>

                <para>
                    An example is a machine that has WiFi capability but is not
                    essential for the machine to boot the image.
                    However, if you are building a more fully-featured image, you want to enable
                    the WiFi.
                    The package containing the firmware for the WiFi hardware is always
                    expected to exist, so it is acceptable for the build process to depend upon
                    finding the package.
                    In this case, assuming the package for the firmware was called
                    <filename>wifidriver-firmware</filename>, you would use the following in the
                    <filename>.conf</filename> file for the machine:
                    <literallayout class='monospaced'>
     MACHINE_EXTRA_RDEPENDS += "wifidriver-firmware"
                    </literallayout>
                </para>
            </glossdef>
         </glossentry>

         <glossentry id='var-MACHINE_EXTRA_RRECOMMENDS'><glossterm>MACHINE_EXTRA_RRECOMMENDS</glossterm>
            <info>
                MACHINE_EXTRA_RRECOMMENDS[doc] = "A list of machine-specific packages to install as part of the image being built that are not essential for booting the machine. The image being built has no build dependencies on the packages in this list."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of machine-specific packages to install as part of the
                    image being built that are not essential for booting the machine.
                    The image being built has no build dependency on this list of packages.
                </para>

                <para>
                    This variable affects only images based on
                    <filename>packagegroup-base</filename>, which does not include the
                    <filename>core-image-minimal</filename> or <filename>core-image-full-cmdline</filename>
                    images.
                </para>

                <para>
                    This variable is similar to the
                    <filename><link linkend='var-MACHINE_EXTRA_RDEPENDS'>MACHINE_EXTRA_RDEPENDS</link></filename>
                    variable with the exception that the image being built does not have a build
                    dependency on the variable's list of packages.
                    In other words, the image will build if a file in this list is not found.
                </para>

                <para>
                    An example is a machine that has WiFi capability but is not essential
                    For the machine to boot the image.
                    However, if you are building a more fully-featured image, you want to enable
                    WiFi.
                    In this case, the package containing the WiFi kernel module will not be produced
                    if the WiFi driver is built into the kernel, in which case you still want the
                    build to succeed instead of failing as a result of the package not being found.
                    To accomplish this, assuming the package for the module was called
                    <filename>kernel-module-examplewifi</filename>, you would use the
                    following in the <filename>.conf</filename> file for the machine:
                    <literallayout class='monospaced'>
     MACHINE_EXTRA_RRECOMMENDS += "kernel-module-examplewifi"
                    </literallayout>
                </para>
            </glossdef>
         </glossentry>

         <glossentry id='var-MACHINE_FEATURES'><glossterm>MACHINE_FEATURES</glossterm>
            <info>
                MACHINE_FEATURES[doc] = "Specifies the list of hardware features the MACHINE supports."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the list of hardware features the
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link> is capable
                    of supporting.
                    For related information on enabling features, see the
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>,
                    <link linkend='var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></link>,
                    and
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                    variables.
                </para>

                <para>
                    For a list of hardware features supported by the Yocto
                    Project as shipped, see the
                    "<link linkend='ref-features-machine'>Machine Features</link>"
                    section.
                </para>
            </glossdef>
         </glossentry>

        <glossentry id='var-MACHINE_FEATURES_BACKFILL'><glossterm>MACHINE_FEATURES_BACKFILL</glossterm>
            <info>
                MACHINE_FEATURES_BACKFILL[doc] = "Features to be added to MACHINE_FEATURES if not also present in MACHINE_FEATURES_BACKFILL_CONSIDERED. This variable is set in the meta/conf/bitbake.conf file and is not intended to be user-configurable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Features to be added to
                    <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>
                    if not also present in
                    <filename><link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'>MACHINE_FEATURES_BACKFILL_CONSIDERED</link></filename>.
                </para>

                <para>
                    This variable is set in the <filename>meta/conf/bitbake.conf</filename> file.
                    It is not intended to be user-configurable.
                    It is best to just reference the variable to see which machine features are
                    being backfilled for all machine configurations.
                    See the "<link linkend='ref-features-backfill'>Feature Backfilling</link>" section for
                    more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><glossterm>MACHINE_FEATURES_BACKFILL_CONSIDERED</glossterm>
            <info>
                MACHINE_FEATURES_BACKFILL_CONSIDERED[doc] = "Features from MACHINE_FEATURES_BACKFILL that should not be backfilled (i.e. added to MACHINE_FEATURES) during the build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Features from
                    <filename><link linkend='var-MACHINE_FEATURES_BACKFILL'>MACHINE_FEATURES_BACKFILL</link></filename>
                    that should not be backfilled (i.e. added to
                    <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>)
                    during the build.
                    See the "<link linkend='ref-features-backfill'>Feature Backfilling</link>" section for
                    more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MACHINEOVERRIDES'><glossterm>MACHINEOVERRIDES</glossterm>
            <info>
                MACHINEOVERRIDES[doc] = "A colon-separated list of overrides that apply to the current machine."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A colon-separated list of overrides that apply to the
                    current machine.
                    By default, this list includes the value of
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>.
                </para>

                <para>
                    You can extend <filename>MACHINEOVERRIDES</filename>
                    to add extra overrides that should apply to a machine.
                    For example, all machines emulated in QEMU (e.g.
                    <filename>qemuarm</filename>, <filename>qemux86</filename>,
                    and so forth) include a file named
                    <filename>meta/conf/machine/include/qemu.inc</filename>
                    that prepends the following override to
                    <filename>MACHINEOVERRIDES</filename>:
                    <literallayout class='monospaced'>
     MACHINEOVERRIDES =. "qemuall:"
                    </literallayout>
                    This override allows variables to be overriden for all
                    machines emulated in QEMU, like in the following example
                    from the <filename>connman-conf</filename> recipe:
                    <literallayout class='monospaced'>
     SRC_URI_append_qemuall = "file://wired.config \
                               file://wired-setup \
                              "
                    </literallayout>
                    The underlying mechanism behind
                    <filename>MACHINEOVERRIDES</filename> is simply that it is
                    included in the default value of
                    <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MAINTAINER'><glossterm>MAINTAINER</glossterm>
            <info>
                MAINTAINER[doc] = "The email address of the distribution maintainer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The email address of the distribution maintainer.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MIRRORS'><glossterm>MIRRORS</glossterm>
            <info>
                MIRRORS[doc] = "Specifies additional paths from which the OpenEmbedded build system gets source code."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies additional paths from which the OpenEmbedded
                    build system gets source code.
                    When the build system searches for source code, it first
                    tries the local download directory.
                    If that location fails, the build system tries locations
                    defined by
                    <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>,
                    the upstream source, and then locations specified by
                    <filename>MIRRORS</filename> in that order.
                </para>

                <para>
                    Assuming your distribution
                    (<link linkend='var-DISTRO'><filename>DISTRO</filename></link>)
                    is "poky", the default value for
                    <filename>MIRRORS</filename> is defined in the
                    <filename>conf/distro/poky.conf</filename> file in the
                    <filename>meta-poky</filename> Git repository.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MLPREFIX'><glossterm>MLPREFIX</glossterm>
            <info>
                MLPREFIX[doc] = "Specifies a prefix has been added to PN to create a special version of a recipe or package (i.e. a Multilib version)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a prefix has been added to
                    <link linkend='var-PN'><filename>PN</filename></link> to create a special version
                    of a recipe or package (i.e. a Multilib version).
                    The variable is used in places where the prefix needs to be
                    added to or removed from a the name (e.g. the
                    <link linkend='var-BPN'><filename>BPN</filename></link> variable).
                    <filename>MLPREFIX</filename> gets set when a prefix has been
                    added to <filename>PN</filename>.
                    <note>
                        The "ML" in <filename>MLPREFIX</filename> stands for
                        "MultiLib".
                        This representation is historical and comes from
                        a time when <filename>nativesdk</filename> was a suffix
                        rather than a prefix on the recipe name.
                        When <filename>nativesdk</filename> was turned into a
                        prefix, it made sense to set
                        <filename>MLPREFIX</filename> for it as well.
                    </note>
                </para>

                <para>
                    To help understand when <filename>MLPREFIX</filename>
                    might be needed, consider when
                    <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link>
                    is used to provide a <filename>nativesdk</filename> version
                    of a recipe in addition to the target version.
                    If that recipe declares build-time dependencies on tasks in
                    other recipes by using
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>,
                    then a dependency on "foo" will automatically get rewritten
                    to a dependency on "nativesdk-foo".
                    However, dependencies like the following will not get
                    rewritten automatically:
                    <literallayout class='monospaced'>
     do_foo[depends] += "<replaceable>recipe</replaceable>:do_foo"
                    </literallayout>
                    If you want such a dependency to also get transformed,
                    you can do the following:
                    <literallayout class='monospaced'>
     do_foo[depends] += "${MLPREFIX}<replaceable>recipe</replaceable>:do_foo"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-module_autoload'><glossterm>module_autoload</glossterm>
            <info>
                module_autoload[doc] = "This variable has been replaced by the KERNEL_MODULE_AUTOLOAD variable. You should replace all occurrences of module_autoload with additions to KERNEL_MODULE_AUTOLOAD."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable has been replaced by the
                    <filename>KERNEL_MODULE_AUTOLOAD</filename> variable.
                    You should replace all occurrences of
                    <filename>module_autoload</filename> with additions to
                    <filename>KERNEL_MODULE_AUTOLOAD</filename>, for example:
                    <literallayout class='monospaced'>
     module_autoload_rfcomm = "rfcomm"
                    </literallayout>
                </para>

                <para>
                    should now be replaced with:
                    <literallayout class='monospaced'>
     KERNEL_MODULE_AUTOLOAD += "rfcomm"
                    </literallayout>
                    See the
                    <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-module_conf'><glossterm>module_conf</glossterm>
            <info>
                module_conf[doc] = "Specifies modprobe.d syntax lines for inclusion in the /etc/modprobe.d/modname.conf file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies
                    <ulink url='http://linux.die.net/man/5/modprobe.d'><filename>modprobe.d</filename></ulink>
                    syntax lines for inclusion in the
                    <filename>/etc/modprobe.d/modname.conf</filename> file.
                </para>

                <para>
                    You can use this variable anywhere that it can be
                    recognized by the kernel recipe or out-of-tree kernel
                    module recipe (e.g. a machine configuration file, a
                    distribution configuration file, an append file for the
                    recipe, or the recipe itself).
                    If you use this variable, you must also be sure to list
                    the module name in the
                    <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
                    variable.
                </para>

                <para>
                    Here is the general syntax:
                    <literallayout class='monospaced'>
     module_conf_<replaceable>module_name</replaceable> = "<replaceable>modprobe.d-syntax</replaceable>"
                    </literallayout>
                    You must use the kernel module name override.
                </para>

                <para>
                    Run <filename>man modprobe.d</filename> in the shell to
                    find out more information on the exact syntax
                    you want to provide with <filename>module_conf</filename>.
                </para>

                <para>
                    Including <filename>module_conf</filename> causes the
                    OpenEmbedded build system to populate the
                    <filename>/etc/modprobe.d/modname.conf</filename>
                    file with <filename>modprobe.d</filename> syntax lines.
                    Here is an example that adds the options
                    <filename>arg1</filename> and <filename>arg2</filename>
                    to a module named <filename>mymodule</filename>:
                    <literallayout class='monospaced'>
     module_conf_mymodule = "options mymodule arg1=val1 arg2=val2"
                    </literallayout>
                </para>

                <para>
                    For information on how to specify kernel modules to
                    auto-load on boot, see the
                    <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MODULE_TARBALL_DEPLOY'><glossterm>MODULE_TARBALL_DEPLOY</glossterm>
            <info>
                MODULE_TARBALL_DEPLOY[doc] = "Controls creation of the modules-*.tgz file. Set this variable to "0" to disable creation of this file, which contains all of the kernel modules resulting from a kernel build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Controls creation of the <filename>modules-*.tgz</filename>
                    file.
                    Set this variable to "0" to disable creation of this
                    file, which contains all of the kernel modules resulting
                    from a kernel build.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MODULE_TARBALL_LINK_NAME'><glossterm>MODULE_TARBALL_LINK_NAME</glossterm>
            <info>
                MODULE_TARBALL_LINK_NAME[doc] = "The link name of the kernel module tarball."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The link name of the kernel module tarball.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     MODULE_TARBALL_LINK_NAME ?= "${KERNEL_ARTIFACT_LINK_NAME}"
                    </literallayout>
                    The value of the <filename>KERNEL_ARTIFACT_LINK_NAME</filename>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
                    </literallayout>
                </para>

                <para>
                    See the
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    variable for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-MODULE_TARBALL_NAME'><glossterm>MODULE_TARBALL_NAME</glossterm>
            <info>
                MODULE_TARBALL_NAME[doc] = "The base name of the kernel module tarball."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name of the kernel module tarball.
                    This variable is set in the
                    <filename>meta/classes/kernel-artifact-names.bbclass</filename>
                    file as follows:
                    <literallayout class='monospaced'>
     MODULE_TARBALL_NAME ?= "${KERNEL_ARTIFACT_NAME}"
                    </literallayout>
                    The value of the
                    <link linkend='var-KERNEL_ARTIFACT_NAME'><filename>KERNEL_ARTIFACT_NAME</filename></link>
                    variable, which is set in the same file, has the following
                    value:
                    <literallayout class='monospaced'>
     KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

<!--
        <glossentry id='var-MULTIMACH_HOST_SYS'><glossterm>MULTIMACH_HOST_SYS</glossterm>
            <info>
                MULTIMACH_HOST_SYS[doc] = "Separates files for different machines such that you can build for multiple host machines using the same output directories."
            </info>
            <glossdef>
                <para role="glossdeffirst">
-->
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
<!--
                    Serves the same purpose as
                    <link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>,
                    but for the "HOST" system, in situations that involve a
                    "HOST" and a "TARGET" system.
                    See the
                    <link linkend='var-STAGING_DIR_TARGET'><filename>STAGING_DIR_TARGET</filename></link>
                    variable for more information.
                </para>

                <para>
                    The default value of this variable is:
                    <literallayout class='monospaced'>
     ${PACKAGE_ARCH}${HOST_VENDOR}-${HOST_OS}
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>
-->

        <glossentry id='var-MULTIMACH_TARGET_SYS'><glossterm>MULTIMACH_TARGET_SYS</glossterm>
            <info>
                MULTIMACH_TARGET_SYS[doc] = "Separates files for different machines such that you can build for multiple target machines using the same output directories."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Uniquely identifies the type of the target system for
                    which packages are being built.
                    This variable allows output for different types of target
                    systems to be put into different subdirectories of the same
                    output directory.
                </para>

                <para>
                    The default value of this variable is:
                    <literallayout class='monospaced'>
     ${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}
                    </literallayout>
                    Some classes (e.g.
                    <link linkend='ref-classes-cross-canadian'><filename>cross-canadian</filename></link>)
                    modify the <filename>MULTIMACH_TARGET_SYS</filename> value.
                </para>

                <para>
                    See the
                    <link linkend='var-STAMP'><filename>STAMP</filename></link>
                    variable for an example.
                    See the
                    <link linkend='var-STAGING_DIR_TARGET'><filename>STAGING_DIR_TARGET</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-n'><title>N</title>

        <glossentry id='var-NATIVELSBSTRING'><glossterm>NATIVELSBSTRING</glossterm>
            <info>
                NATIVELSBSTRING[doc] = "A string identifying the host distribution."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A string identifying the host distribution.
                    Strings consist of the host distributor ID
                    followed by the release, as reported by the
                    <filename>lsb_release</filename> tool
                    or as read from <filename>/etc/lsb-release</filename>.
                    For example, when running a build on Ubuntu 12.10, the value
                    is "Ubuntu-12.10".
                    If this information is unable to be determined, the value
                    resolves to "Unknown".
                </para>

                <para>
                    This variable is used by default to isolate native shared
                    state packages for different distributions (e.g. to avoid
                    problems with <filename>glibc</filename> version
                    incompatibilities).
                    Additionally, the variable is checked against
                    <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>
                    if that variable is set.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-NM'><glossterm>NM</glossterm>
            <info>
                NM[doc] = "Minimal command and arguments to run 'nm'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments to run
                    <filename>nm</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-NO_GENERIC_LICENSE'><glossterm>NO_GENERIC_LICENSE</glossterm>
            <info>
                NO_GENERIC_LICENSE[doc] = "Used to allow copying a license that does not exist in common licenses."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Avoids QA errors when you use a non-common, non-CLOSED
                    license in a recipe.
                    Packages exist, such as the linux-firmware package, with
                    many licenses that are not in any way common.
                    Also, new licenses are added occasionally to avoid
                    introducing a lot of common license files, which are only
                    applicable to a specific package.
                    <filename>NO_GENERIC_LICENSE</filename> is used to allow
                    copying a license that does not exist in common licenses.
                </para>

                <para>
                    The following example shows how to add
                    <filename>NO_GENERIC_LICENSE</filename> to a recipe:
                    <literallayout class='monospaced'>
     NO_GENERIC_LICENSE[<replaceable>license_name</replaceable>] = "<replaceable>license_file_in_fetched_source</replaceable>"
                    </literallayout>
                    The following is an example that uses the
                    <filename>LICENSE.Abilis.txt</filename> file as the license
                    from the fetched source:
                    <literallayout class='monospaced'>
     NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENSE.Abilis.txt"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-NO_RECOMMENDATIONS'><glossterm>NO_RECOMMENDATIONS</glossterm>
            <info>
                NO_RECOMMENDATIONS[doc] = "When set to '1', no recommended packages will be installed. Some recommended packages might be required for certain system functionality, such as kernel-modules. It is up to the user to add packages to IMAGE_INSTALL as needed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Prevents installation of all "recommended-only" packages.
                    Recommended-only packages are packages installed only
                    through the
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
                    variable).
                    Setting the <filename>NO_RECOMMENDATIONS</filename> variable
                    to "1" turns this feature on:
                    <literallayout class='monospaced'>
     NO_RECOMMENDATIONS = "1"
                    </literallayout>
                </para>

                <para>
                    You can set this variable globally in your
                    <filename>local.conf</filename> file or you can attach it to
                    a specific image recipe by using the recipe name override:
                    <literallayout class='monospaced'>
     NO_RECOMMENDATIONS_pn-<replaceable>target_image</replaceable> = "1"
                    </literallayout>
                </para>

                <para>
                    It is important to realize that if you choose to not install
                    packages using this variable and some other packages are
                    dependent on them (i.e. listed in a recipe's
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    variable), the OpenEmbedded build system ignores your
                    request and will install the packages to avoid dependency
                    errors.
                    <note>
                        Some recommended packages might be required for certain
                        system functionality, such as kernel modules.
                        It is up to you to add packages with the
                        <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
                        variable.
                    </note>
                </para>

                <para>
                    Support for this variable exists only when using the
                    IPK and RPM packaging backend.
                    Support does not exist for DEB.
                </para>

                <para>
                    See the
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
                    and the
                    <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
                    variables for related information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-NOAUTOPACKAGEDEBUG'><glossterm>NOAUTOPACKAGEDEBUG</glossterm>
            <info>
                NOAUTOPACKAGEDEBUG[doc] = "Disables auto package from splitting .debug files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Disables auto package from splitting
                    <filename>.debug</filename> files. If a recipe requires
                    <filename>FILES_${PN}-dbg</filename> to be set manually,
                    the <filename>NOAUTOPACKAGEDEBUG</filename> can be defined
                    allowing you to define the content of the debug package.
                    For example:
                    <literallayout class='monospaced'>
     NOAUTOPACKAGEDEBUG = "1"
     FILES_${PN}-dev = "${includedir}/${QT_DIR_NAME}/Qt/*"
     FILES_${PN}-dbg = "/usr/src/debug/"
     FILES_${QT_BASE_NAME}-demos-doc = "${docdir}/${QT_DIR_NAME}/qch/qt.qch"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>
    </glossdiv>

    <glossdiv id='var-glossary-o'><title>O</title>

        <glossentry id='var-OBJCOPY'><glossterm>OBJCOPY</glossterm>
            <info>
                OBJCOPY[doc] = "Minimal command and arguments to run 'objcopy'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments to run
                    <filename>objcopy</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-OBJDUMP'><glossterm>OBJDUMP</glossterm>
            <info>
                OBJDUMP[doc] = "Minimal command and arguments to run 'objdump'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments to run
                    <filename>objdump</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-OE_BINCONFIG_EXTRA_MANGLE'><glossterm>OE_BINCONFIG_EXTRA_MANGLE</glossterm>
            <info>
                OE_BINCONFIG_EXTRA_MANGLE[doc] = "When a recipe inherits the binconfig.bbclass class, this variable specifies additional arguments passed to the "sed" command."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-binconfig'><filename>binconfig</filename></link>
                    class, this variable
                    specifies additional arguments passed to the "sed" command.
                    The sed command alters any paths in configuration scripts
                    that have been set up during compilation.
                    Inheriting this class results in all paths in these scripts
                    being changed to point into the
                    <filename>sysroots/</filename> directory so that all builds
                    that use the script will use the correct directories
                    for the cross compiling layout.
                </para>

                <para>
                    See the <filename>meta/classes/binconfig.bbclass</filename>
                    in the
                    <link linkend='source-directory'>Source Directory</link>
                    for details on how this class applies these additional
                    sed command arguments.
                    For general information on the
                    <filename>binconfig</filename> class, see the
                    "<link linkend='ref-classes-binconfig'><filename>binconfig.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-OE_IMPORTS'><glossterm>OE_IMPORTS</glossterm>
            <info>
                OE_IMPORTS[doc] = "An internal variable used to tell the OpenEmbedded build system what Python modules to import for every Python function run by the system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An internal variable used to tell the OpenEmbedded build
                    system what Python modules to import for every Python
                    function run by the system.
                </para>

                <note>
                    Do not set this variable.
                    It is for internal use only.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-OE_INIT_ENV_SCRIPT'><glossterm>OE_INIT_ENV_SCRIPT</glossterm>
            <info>
                OE_INIT_ENV_SCRIPT[doc] = "The name of the build environment setup script for the purposes of setting up the environment within the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The name of the build environment setup script for the
                    purposes of setting up the environment within the
                    extensible SDK.
                    The default value is "oe-init-build-env".
                </para>

                <para>
                    If you use a custom script to set up your build
                    environment, set the
                    <filename>OE_INIT_ENV_SCRIPT</filename> variable to its
                    name.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-OE_TERMINAL'><glossterm>OE_TERMINAL</glossterm>
            <info>
                OE_TERMINAL[doc] = "Controls how the OpenEmbedded build system spawns interactive terminals on the host development system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Controls how the OpenEmbedded build system spawns
                    interactive terminals on the host development system
                    (e.g. using the BitBake command with the
                    <filename>-c devshell</filename> command-line option).
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>" section
                    in the Yocto Project Development Tasks Manual.
                 </para>

                 <para>
                    You can use the following values for the
                    <filename>OE_TERMINAL</filename> variable:
                    <literallayout class='monospaced'>
     auto
     gnome
     xfce
     rxvt
     screen
     konsole
     none
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-OEROOT'><glossterm>OEROOT</glossterm>
            <info>
                OEROOT[doc] = "The directory from which the top-level build environment setup script is sourced."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory from which the top-level build environment
                    setup script is sourced.
                    The Yocto Project provides a top-level build environment
                    setup script:
                    <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>.
                    When you run this script, the
                    <filename>OEROOT</filename> variable resolves to the
                    directory that contains the script.
                </para>

                <para>
                    For additional information on how this variable is used,
                    see the initialization script.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-OLDEST_KERNEL'><glossterm>OLDEST_KERNEL</glossterm>
            <info>
                OLDEST_KERNEL[doc] = "Declares the oldest version of the Linux kernel that the produced binaries must support."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Declares the oldest version of the Linux kernel that the
                    produced binaries must support.
                    This variable is passed into the build of the Embedded
                    GNU C Library (<filename>glibc</filename>).
                </para>

                <para>
                    The default for this variable comes from the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file.
                    You can override this default by setting the variable
                    in a custom distribution configuration file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-OVERRIDES'><glossterm>OVERRIDES</glossterm>
            <info>
                OVERRIDES[doc] = "A colon-separated list of overrides that currently apply."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A colon-separated list of overrides that currently apply.
                    Overrides are a BitBake mechanism that allows variables to
                    be selectively overridden at the end of parsing.
                    The set of overrides in <filename>OVERRIDES</filename>
                    represents the "state" during building, which includes
                    the current recipe being built, the machine for which
                    it is being built, and so forth.
                </para>

                <para>
                    As an example, if the string "an-override" appears as an
                    element in the colon-separated list in
                    <filename>OVERRIDES</filename>, then the following
                    assignment will override <filename>FOO</filename> with the
                    value "overridden" at the end of parsing:
                    <literallayout class='monospaced'>
     FOO_an-override = "overridden"
                    </literallayout>
                    See the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#conditional-syntax-overrides'>Conditional Syntax (Overrides)</ulink>"
                    section in the BitBake User Manual for more information on
                    the overrides mechanism.
                </para>

                <para>
                    The default value of <filename>OVERRIDES</filename>
                    includes the values of the
                    <link linkend='var-CLASSOVERRIDE'><filename>CLASSOVERRIDE</filename></link>,
                    <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>,
                    and
                    <link linkend='var-DISTROOVERRIDES'><filename>DISTROOVERRIDES</filename></link>
                    variables.
                    Another important override included by default is
                    <filename>pn-${PN}</filename>.
                    This override allows variables to be set for a single
                    recipe within configuration (<filename>.conf</filename>)
                    files.
                    Here is an example:
                    <literallayout class='monospaced'>
     FOO_pn-myrecipe = "myrecipe-specific value"
                    </literallayout>
                    <note><title>Tip</title>
                        An easy way to see what overrides apply is to search for
                        <filename>OVERRIDES</filename> in the output of the
                        <filename>bitbake -e</filename> command.
                        See the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-debugging-viewing-variable-values'>Viewing Variable Values</ulink>"
                        section in the Yocto Project Development Tasks
                        Manual for more information.
                    </note>
                </para>
            </glossdef>
        </glossentry>
    </glossdiv>

    <glossdiv id='var-glossary-p'><title>P</title>

        <glossentry id='var-P'><glossterm>P</glossterm>
            <info>
                P[doc] = "The recipe name and version. P is comprised of ${PN}-${PV}."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The recipe name and version.
                    <filename>P</filename> is comprised of the following:
                    <literallayout class='monospaced'>
     ${PN}-${PV}
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_ARCH'><glossterm>PACKAGE_ARCH</glossterm>
            <info>
                PACKAGE_ARCH[doc] = "The architecture of the resulting package or packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The architecture of the resulting package or packages.
                </para>

                <para>
                    By default, the value of this variable is set to
                    <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>
                    when building for the target,
                    <link linkend='var-BUILD_ARCH'><filename>BUILD_ARCH</filename></link>
                    when building for the
                    build host, and "${SDK_ARCH}-${SDKPKGSUFFIX}" when building
                    for the SDK.
                    <note>
                        See
                        <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>
                        for more information.
                    </note>
                    However, if your recipe's output packages are built
                    specific to the target machine rather than generally for
                    the architecture of the machine, you should set
                    <filename>PACKAGE_ARCH</filename> to the value of
                    <link linkend='var-MACHINE_ARCH'><filename>MACHINE_ARCH</filename></link>
                    in the recipe as follows:
                    <literallayout class='monospaced'>
     PACKAGE_ARCH = "${MACHINE_ARCH}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_ARCHS'><glossterm>PACKAGE_ARCHS</glossterm>
            <info>
                PACKAGE_ARCHS[doc] = "A list of architectures compatible with the given target in order of priority."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of architectures compatible with
                    the target machine.
                    This variable is set automatically and should not
                    normally be hand-edited.
                    Entries are separated using spaces and listed in order
                    of priority.
                    The default value for
                    <filename>PACKAGE_ARCHS</filename> is "all any noarch
                    ${PACKAGE_EXTRA_ARCHS} ${MACHINE_ARCH}".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_BEFORE_PN'><glossterm>PACKAGE_BEFORE_PN</glossterm>
            <info>
                PACKAGE_BEFORE_PN[doc] = "Enables easily adding packages to PACKAGES before ${PN} so that the packages can pick up files that would normally be included in the default package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Enables easily adding packages to
                    <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>
                    before <filename>${<link linkend='var-PN'>PN</link>}</filename>
                    so that those added packages can pick up files that would normally be
                    included in the default package.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_CLASSES'><glossterm>PACKAGE_CLASSES</glossterm>
            <info>
                PACKAGE_CLASSES[doc] = "This variable specifies the package manager to use when packaging data. It is set in the conf/local.conf file in the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable, which is set in the
                    <filename>local.conf</filename> configuration file found in
                    the <filename>conf</filename> folder of the
                    <link linkend='build-directory'>Build Directory</link>,
                    specifies the package manager the OpenEmbedded build system
                    uses when packaging data.
                </para>

                <para>
                    You can provide one or more of the following arguments for
                    the variable:
                    <literallayout class='monospaced'>
     PACKAGE_CLASSES ?= "package_rpm package_deb package_ipk package_tar"
                    </literallayout>
                    <note><title>Warning</title>
                        While it is a legal option, the
                        <filename>package_tar</filename> class has limited
                        functionality due to no support for package
                        dependencies by that backend.
                        Therefore, it is recommended that you do not use it.
                    </note>
                    The build system uses only the first argument in the list
                    as the package manager when creating your image or SDK.
                    However, packages will be created using any additional
                    packaging classes you specify.
                    For example, if you use the following in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     PACKAGE_CLASSES ?= "package_ipk"
                    </literallayout>
                    The OpenEmbedded build system uses the IPK package manager
                    to create your image or SDK.
                </para>

                <para>
                    For information on packaging and build performance effects
                    as a result of the package manager in use, see the
                    "<link linkend='ref-classes-package'><filename>package.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_DEBUG_SPLIT_STYLE'><glossterm>PACKAGE_DEBUG_SPLIT_STYLE</glossterm>
            <info>
                PACKAGE_DEBUG_SPLIT_STYLE[doc] = "Determines how to split up the binary and debug information when creating *-dbg packages to be used with the GNU Project Debugger (GDB)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Determines how to split up the binary and debug information
                    when creating <filename>*-dbg</filename> packages to be
                    used with the GNU Project Debugger (GDB).
                </para>

                <para>
                    With the
                    <filename>PACKAGE_DEBUG_SPLIT_STYLE</filename> variable,
                    you can control where debug information, which can include
                    or exclude source files, is stored:
                    <itemizedlist>
                        <listitem><para>
                            ".debug": Debug symbol files are placed next
                            to the binary in a <filename>.debug</filename>
                            directory on the target.
                            For example, if a binary is installed into
                            <filename>/bin</filename>, the corresponding debug
                            symbol files are installed in
                            <filename>/bin/.debug</filename>.
                            Source files are placed in
                            <filename>/usr/src/debug</filename>.
                            </para></listitem>
                        <listitem><para>
                            "debug-file-directory": Debug symbol files are
                            placed under <filename>/usr/lib/debug</filename>
                            on the target, and separated by the path from where
                            the binary is installed.
                            For example, if a binary is installed in
                            <filename>/bin</filename>, the corresponding debug
                            symbols are installed in
                            <filename>/usr/lib/debug/bin</filename>.
                            Source files are placed in
                            <filename>/usr/src/debug</filename>.
                            </para></listitem>
                        <listitem><para>
                            "debug-without-src": The same behavior as
                            ".debug" previously described with the exception
                            that no source files are installed.
                            </para></listitem>.
                        <listitem><para>
                            "debug-with-srcpkg": The same behavior as
                            ".debug" previously described with the exception
                            that all source files are placed in a separate
                            <filename>*-src</filename> pkg.
                            This is the default behavior.
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    You can find out more about debugging using GDB by reading
                    the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_EXCLUDE_COMPLEMENTARY'><glossterm>PACKAGE_EXCLUDE_COMPLEMENTARY</glossterm>
            <info>
                PACKAGE_EXCLUDE_COMPLEMENTARY[doc] = "Prevents specific packages from being installed when you are installing complementary packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Prevents specific packages from being installed when
                    you are installing complementary packages.
                </para>

                <para>
                    You might find that you want to prevent installing certain
                    packages when you are installing complementary packages.
                    For example, if you are using
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                    to install <filename>dev-pkgs</filename>, you might not want
                    to install all packages from a particular multilib.
                    If you find yourself in this situation, you can use the
                    <filename>PACKAGE_EXCLUDE_COMPLEMENTARY</filename> variable
                    to specify regular expressions to match the packages you
                    want to exclude.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_EXCLUDE'><glossterm>PACKAGE_EXCLUDE</glossterm>
            <info>
                PACKAGE_EXCLUDE[doc] = "Packages to exclude from the installation. If a listed package is required, an error is generated."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists packages that should not be installed into an image.
                    For example:
                    <literallayout class='monospaced'>
     PACKAGE_EXCLUDE = "<replaceable>package_name</replaceable> <replaceable>package_name</replaceable> <replaceable>package_name</replaceable> ..."
                    </literallayout>
                </para>

                <para>
                    You can set this variable globally in your
                    <filename>local.conf</filename> file or you can attach it to
                    a specific image recipe by using the recipe name override:
                    <literallayout class='monospaced'>
     PACKAGE_EXCLUDE_pn-<replaceable>target_image</replaceable> = "<replaceable>package_name</replaceable>"
                    </literallayout>
                </para>

                <para>
                    If you choose to not install
                    a package using this variable and some other package is
                    dependent on it (i.e. listed in a recipe's
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    variable), the OpenEmbedded build system generates a fatal
                    installation error.
                    Because the build system halts the process with a fatal
                    error, you can use the variable with an iterative
                    development process to remove specific components from a
                    system.
                </para>

                <para>
                    Support for this variable exists only when using the
                    IPK and RPM packaging backend.
                    Support does not exist for DEB.
                </para>

                <para>
                    See the
                    <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
                    and the
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
                    variables for related information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_EXTRA_ARCHS'><glossterm>PACKAGE_EXTRA_ARCHS</glossterm>
            <info>
                PACKAGE_EXTRA_ARCHS[doc] = "Specifies the list of architectures compatible with the device CPU. This variable is useful when you build for several different devices that use miscellaneous processors."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the list of architectures compatible with the device CPU.
                    This variable is useful when you build for several different devices that use
                    miscellaneous processors such as XScale and ARM926-EJS.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_FEED_ARCHS'><glossterm>PACKAGE_FEED_ARCHS</glossterm>
            <info>
                PACKAGE_FEED_ARCHS[doc] = "Optionally specifies user-defined package architectures when constructing package feed URIs."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Optionally specifies the package architectures used as
                    part of the package feed URIs during the build.
                    When used, the <filename>PACKAGE_FEED_ARCHS</filename>
                    variable is appended to the final package feed URI, which
                    is constructed using the
                    <link linkend='var-PACKAGE_FEED_URIS'><filename>PACKAGE_FEED_URIS</filename></link>
                    and
                    <link linkend='var-PACKAGE_FEED_BASE_PATHS'><filename>PACKAGE_FEED_BASE_PATHS</filename></link>
                    variables.
                    <note><title>Tip</title>
                        You can use the <filename>PACKAGE_FEEDS_ARCHS</filename>
                        variable to whitelist specific package architectures.
                        If you do not need to whitelist specific architectures,
                        which is a common case, you can omit this variable.
                        Omitting the variable results in all available
                        architectures for the current machine being included
                        into remote package feeds.
                    </note>
                </para>

                <para>
                    Consider the following example where the
                    <filename>PACKAGE_FEED_URIS</filename>,
                    <filename>PACKAGE_FEED_BASE_PATHS</filename>, and
                    <filename>PACKAGE_FEED_ARCHS</filename> variables are
                    defined in your <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     PACKAGE_FEED_URIS = "https://example.com/packagerepos/release \
                          https://example.com/packagerepos/updates"
     PACKAGE_FEED_BASE_PATHS = "rpm rpm-dev"
     PACKAGE_FEED_ARCHS = "all core2-64"
                    </literallayout>
                    Given these settings, the resulting package feeds are
                    as follows:
                    <literallayout class='monospaced'>
     https://example.com/packagerepos/release/rpm/all
     https://example.com/packagerepos/release/rpm/core2-64
     https://example.com/packagerepos/release/rpm-dev/all
     https://example.com/packagerepos/release/rpm-dev/core2-64
     https://example.com/packagerepos/updates/rpm/all
     https://example.com/packagerepos/updates/rpm/core2-64
     https://example.com/packagerepos/updates/rpm-dev/all
     https://example.com/packagerepos/updates/rpm-dev/core2-64
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_FEED_BASE_PATHS'><glossterm>PACKAGE_FEED_BASE_PATHS</glossterm>
            <info>
                PACKAGE_FEED_BASE_PATHS[doc] = "Specifies base path used when constructing package feed URIs."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the base path used when constructing package feed
                    URIs.
                    The <filename>PACKAGE_FEED_BASE_PATHS</filename> variable
                    makes up the middle portion of a package feed URI used
                    by the OpenEmbedded build system.
                    The base path lies between the
                    <link linkend='var-PACKAGE_FEED_URIS'><filename>PACKAGE_FEED_URIS</filename></link>
                    and
                    <link linkend='var-PACKAGE_FEED_ARCHS'><filename>PACKAGE_FEED_ARCHS</filename></link>
                    variables.
                </para>

                <para>
                    Consider the following example where the
                    <filename>PACKAGE_FEED_URIS</filename>,
                    <filename>PACKAGE_FEED_BASE_PATHS</filename>, and
                    <filename>PACKAGE_FEED_ARCHS</filename> variables are
                    defined in your <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     PACKAGE_FEED_URIS = "https://example.com/packagerepos/release \
                          https://example.com/packagerepos/updates"
     PACKAGE_FEED_BASE_PATHS = "rpm rpm-dev"
     PACKAGE_FEED_ARCHS = "all core2-64"
                    </literallayout>
                    Given these settings, the resulting package feeds are
                    as follows:
                    <literallayout class='monospaced'>
     https://example.com/packagerepos/release/rpm/all
     https://example.com/packagerepos/release/rpm/core2-64
     https://example.com/packagerepos/release/rpm-dev/all
     https://example.com/packagerepos/release/rpm-dev/core2-64
     https://example.com/packagerepos/updates/rpm/all
     https://example.com/packagerepos/updates/rpm/core2-64
     https://example.com/packagerepos/updates/rpm-dev/all
     https://example.com/packagerepos/updates/rpm-dev/core2-64
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_FEED_URIS'><glossterm>PACKAGE_FEED_URIS</glossterm>
            <info>
                PACKAGE_FEED_URIS[doc] = "Specifies the front portion of the package feed URI used by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the front portion of the package feed URI
                    used by the OpenEmbedded build system.
                    Each final package feed URI is comprised of
                    <filename>PACKAGE_FEED_URIS</filename>,
                    <link linkend='var-PACKAGE_FEED_BASE_PATHS'><filename>PACKAGE_FEED_BASE_PATHS</filename></link>,
                    and
                    <link linkend='var-PACKAGE_FEED_ARCHS'><filename>PACKAGE_FEED_ARCHS</filename></link>
                    variables.
                </para>

                <para>
                    Consider the following example where the
                    <filename>PACKAGE_FEED_URIS</filename>,
                    <filename>PACKAGE_FEED_BASE_PATHS</filename>, and
                    <filename>PACKAGE_FEED_ARCHS</filename> variables are
                    defined in your <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     PACKAGE_FEED_URIS = "https://example.com/packagerepos/release \
                          https://example.com/packagerepos/updates"
     PACKAGE_FEED_BASE_PATHS = "rpm rpm-dev"
     PACKAGE_FEED_ARCHS = "all core2-64"
                    </literallayout>
                    Given these settings, the resulting package feeds are
                    as follows:
                    <literallayout class='monospaced'>
     https://example.com/packagerepos/release/rpm/all
     https://example.com/packagerepos/release/rpm/core2-64
     https://example.com/packagerepos/release/rpm-dev/all
     https://example.com/packagerepos/release/rpm-dev/core2-64
     https://example.com/packagerepos/updates/rpm/all
     https://example.com/packagerepos/updates/rpm/core2-64
     https://example.com/packagerepos/updates/rpm-dev/all
     https://example.com/packagerepos/updates/rpm-dev/core2-64
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_INSTALL'><glossterm>PACKAGE_INSTALL</glossterm>
            <info>
                PACKAGE_INSTALL[doc] = "List of the packages to be installed into the image. The variable is generally not user-defined and uses IMAGE_INSTALL as part of the list."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The final list of packages passed to the package manager
                    for installation into the image.
                </para>

                <para>
                    Because the package manager controls actual installation
                    of all packages, the list of packages passed using
                    <filename>PACKAGE_INSTALL</filename> is not the final list
                    of packages that are actually installed.
                    This variable is internal to the image construction
                    code.
                    Consequently, in general, you should use the
                    <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
                    variable to specify packages for installation.
                    The exception to this is when working with
                    the
                    <link linkend='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename></link>
                    image.
                    When working with an initial RAM filesystem (initramfs)
                    image, use the <filename>PACKAGE_INSTALL</filename>
                    variable.
                    For information on creating an initramfs, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_INSTALL_ATTEMPTONLY'><glossterm>PACKAGE_INSTALL_ATTEMPTONLY</glossterm>
            <info>
                PACKAGE_INSTALL_ATTEMPTONLY[doc] = "List of packages attempted to be installed when creating an image. If a listed package fails to install, the build system does not generate an error. This variable is generally not user-defined."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of packages the OpenEmbedded build
                    system attempts to install when creating an image.
                    If a listed package fails to install, the build system
                    does not generate an error.
                    This variable is generally not user-defined.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_PREPROCESS_FUNCS'><glossterm>PACKAGE_PREPROCESS_FUNCS</glossterm>
            <info>
                PACKAGE_PREPROCESS_FUNCS[doc] = "Specifies a list of functions run to pre-process the PKGD directory prior to splitting the files out to individual packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions run to pre-process the
                    <link linkend='var-PKGD'><filename>PKGD</filename></link>
                    directory prior to splitting the files out to individual
                    packages.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGE_WRITE_DEPS'><glossterm>PACKAGE_WRITE_DEPS</glossterm>
            <info>
                PACKAGE_WRITE_DEPS[doc] = "Specifies post-installation and pre-installation script dependencies on native/cross tools."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of dependencies for post-installation and
                    pre-installation scripts on native/cross tools.
                    If your post-installation or pre-installation script can
                    execute at rootfs creation time rather than on the
                    target but depends on a native tool in order to execute,
                    you need to list the tools in
                    <filename>PACKAGE_WRITE_DEPS</filename>.
                </para>

                <para>
                    For information on running post-installation scripts, see
                    the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-post-installation-scripts'>Post-Installation Scripts</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGECONFIG'><glossterm>PACKAGECONFIG</glossterm>
            <info>
                PACKAGECONFIG[doc] = "This variable provides a means of enabling or disabling features of a recipe on a per-recipe basis."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable provides a means of enabling or disabling
                    features of a recipe on a per-recipe basis.
                    <filename>PACKAGECONFIG</filename> blocks are defined
                    in recipes when you specify features and then arguments
                    that define feature behaviors.
                    Here is the basic block structure (broken over multiple
                    lines for readability):
                    <literallayout class='monospaced'>
     PACKAGECONFIG ??= "f1 f2 f3 ..."
     PACKAGECONFIG[f1] = "\
                          --with-f1, \
                          --without-f1, \
                          build-deps-for-f1, \
                          runtime-deps-for-f1, \
                          runtime-recommends-for-f1, \
                          packageconfig-conflicts-for-f1 \
                          "
     PACKAGECONFIG[f2] = "\
                         ... and so on and so on ...
                    </literallayout>
                </para>

                <para>
                    The <filename>PACKAGECONFIG</filename>
                    variable itself specifies a space-separated list of the
                    features to enable.
                    Following the features, you can determine the behavior of
                    each feature by providing up to six order-dependent
                    arguments, which are separated by commas.
                    You can omit any argument you like but must retain the
                    separating commas.
                    The order is important and specifies the following:
                    <orderedlist>
                        <listitem><para>Extra arguments
                            that should be added to the configure script
                            argument list
                            (<link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
                            or
                            <link linkend='var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></link>)
                            if the feature is enabled.</para></listitem>
                        <listitem><para>Extra arguments
                            that should be added to <filename>EXTRA_OECONF</filename>
                            or <filename>PACKAGECONFIG_CONFARGS</filename>
                            if the feature is disabled.
                            </para></listitem>
                        <listitem><para>Additional build dependencies
                            (<link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>)
                            that should be added if the feature is enabled.
                            </para></listitem>
                        <listitem><para>Additional runtime dependencies
                            (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
                            that should be added if the feature is enabled.
                            </para></listitem>
                        <listitem><para>Additional runtime recommendations
                            (<link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>)
                            that should be added if the feature is enabled.
                            </para></listitem>
                        <listitem><para>Any conflicting (that is, mutually
                            exclusive) <filename>PACKAGECONFIG</filename>
                            settings for this feature.
                            </para></listitem>
                    </orderedlist>
                </para>

                <para>
                    Consider the following
                    <filename>PACKAGECONFIG</filename> block taken from the
                    <filename>librsvg</filename> recipe.
                    In this example the feature is <filename>gtk</filename>,
                    which has three arguments that determine the feature's
                    behavior.
                    <literallayout class='monospaced'>
     PACKAGECONFIG[gtk] = "--with-gtk3,--without-gtk3,gtk+3"
                    </literallayout>
                    The <filename>--with-gtk3</filename> and
                    <filename>gtk+3</filename> arguments apply only if
                    the feature is enabled.
                    In this case, <filename>--with-gtk3</filename> is
                    added to the configure script argument list and
                    <filename>gtk+3</filename> is added to
                    <filename>DEPENDS</filename>.
                    On the other hand, if the feature is disabled say through
                    a <filename>.bbappend</filename> file in another layer, then
                    the second argument <filename>--without-gtk3</filename> is
                    added to the configure script instead.
                </para>

                <para>
                    The basic <filename>PACKAGECONFIG</filename> structure
                    previously described holds true regardless of whether you
                    are creating a block or changing a block.
                    When creating a block, use the structure inside your
                    recipe.
                </para>

                <para>
                    If you want to change an existing
                    <filename>PACKAGECONFIG</filename> block, you can do so
                    one of two ways:
                    <itemizedlist>
                        <listitem><para><emphasis>Append file:</emphasis>
                            Create an append file named
                            <replaceable>recipename</replaceable><filename>.bbappend</filename>
                            in your layer and override the value of
                            <filename>PACKAGECONFIG</filename>.
                            You can either completely override the variable:
                            <literallayout class='monospaced'>
      PACKAGECONFIG = "f4 f5"
                            </literallayout>
                            Or, you can just append the variable:
                            <literallayout class='monospaced'>
     PACKAGECONFIG_append = " f4"
                            </literallayout></para></listitem>
                        <listitem><para><emphasis>Configuration file:</emphasis>
                            This method is identical to changing the block
                            through an append file except you edit your
                            <filename>local.conf</filename> or
                            <filename><replaceable>mydistro</replaceable>.conf</filename> file.
                            As with append files previously described,
                            you can either completely override the variable:
                            <literallayout class='monospaced'>
     PACKAGECONFIG_pn-<replaceable>recipename</replaceable> = "f4 f5"
                            </literallayout>
                            Or, you can just amend the variable:
                            <literallayout class='monospaced'>
     PACKAGECONFIG_append_pn-<replaceable>recipename</replaceable> = " f4"
                            </literallayout></para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGECONFIG_CONFARGS'><glossterm>PACKAGECONFIG_CONFARGS</glossterm>
            <info>
                PACKAGECONFIG_CONFARGS[doc] = "A space-separated list of configuration options generated from the PACKAGECONFIG setting."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A space-separated list of configuration options generated
                    from the
                    <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
                    setting.
                </para>

                <para>
                    Classes such as
                    <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
                    and
                    <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
                    use <filename>PACKAGECONFIG_CONFARGS</filename> to pass
                    <filename>PACKAGECONFIG</filename> options to
                    <filename>configure</filename> and
                    <filename>cmake</filename>, respectively.
                    If you are using
                    <filename>PACKAGECONFIG</filename> but not a class that
                    handles the <filename>do_configure</filename> task, then
                    you need to use
                    <filename>PACKAGECONFIG_CONFARGS</filename> appropriately.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGEGROUP_DISABLE_COMPLEMENTARY'><glossterm>PACKAGEGROUP_DISABLE_COMPLEMENTARY</glossterm>
            <info>
                PACKAGEGROUP_DISABLE_COMPLEMENTARY[doc] = "Prevents automatic creation of the normal complementary packages such as -dev and -dbg in a packagegroup recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For recipes inheriting the
                    <link linkend='ref-classes-packagegroup'><filename>packagegroup</filename></link>
                    class, setting
                    <filename>PACKAGEGROUP_DISABLE_COMPLEMENTARY</filename> to
                    "1" specifies that the normal complementary packages
                    (i.e. <filename>-dev</filename>,
                    <filename>-dbg</filename>, and so forth) should not be
                    automatically created by the
                    <filename>packagegroup</filename> recipe, which is the
                    default behavior.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGES'><glossterm>PACKAGES</glossterm>
            <info>
                PACKAGES[doc] = "The list of packages the recipe creates."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of packages the recipe creates.
                    The default value is the following:
                    <literallayout class='monospaced'>
     ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}
                    </literallayout>
                </para>

                <para>
                    During packaging, the
                    <link linkend='ref-tasks-package'><filename>do_package</filename></link>
                    task goes through <filename>PACKAGES</filename> and uses
                    the
                    <link linkend='var-FILES'><filename>FILES</filename></link>
                    variable corresponding to each package to assign files to
                    the package.
                    If a file matches the <filename>FILES</filename> variable
                    for more than one package in <filename>PACKAGES</filename>,
                    it will be assigned to the earliest (leftmost) package.
                </para>

                <para>
                    Packages in the variable's list that are empty (i.e. where
                    none of the patterns in
                    <filename>FILES_</filename><replaceable>pkg</replaceable>
                    match any files installed by the
                    <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                    task) are not generated, unless generation is forced through
                    the
                    <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGES_DYNAMIC'><glossterm>PACKAGES_DYNAMIC</glossterm>
            <info>
                PACKAGES_DYNAMIC[doc] = "A promise that your recipe satisfies runtime dependencies for optional modules that are found in other recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A promise that your recipe satisfies runtime dependencies
                    for optional modules that are found in other recipes.
                    <filename>PACKAGES_DYNAMIC</filename>
                    does not actually satisfy the dependencies, it only states that
                    they should be satisfied.
                    For example, if a hard, runtime dependency
                    (<link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
                    of another package is satisfied
                    at build time through the <filename>PACKAGES_DYNAMIC</filename>
                    variable, but a package with the module name is never actually
                    produced, then the other package will be broken.
                    Thus, if you attempt to include that package in an image,
                    you will get a dependency failure from the packaging system
                    during the
                    <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
                    task.
                </para>

                <para>
                    Typically, if there is a chance that such a situation can
                    occur and the package that is not created is valid
                    without the dependency being satisfied, then you should use
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
                    (a soft runtime dependency) instead of
                    <filename>RDEPENDS</filename>.
                </para>

                <para>
                    For an example of how to use the <filename>PACKAGES_DYNAMIC</filename>
                    variable when you are splitting packages, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#handling-optional-module-packaging'>Handling Optional Module Packaging</ulink>" section
                    in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGESPLITFUNCS'><glossterm>PACKAGESPLITFUNCS</glossterm>
            <info>
                PACKAGESPLITFUNCS[doc] = "Specifies a list of functions run to perform additional splitting of files into individual packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions run to perform additional
                    splitting of files into individual packages.
                    Recipes can either prepend to this variable or prepend
                    to the <filename>populate_packages</filename> function
                    in order to perform additional package splitting.
                    In either case, the function should set
                    <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>,
                    <link linkend='var-FILES'><filename>FILES</filename></link>,
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    and other packaging variables appropriately in order to
                    perform the desired splitting.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PARALLEL_MAKE'><glossterm>PARALLEL_MAKE</glossterm>
            <info>
                PARALLEL_MAKE[doc] = "Specifies extra options that are passed to the make command during the compile tasks. This variable is usually in the form -j x, where x represents the maximum number of parallel threads make can run."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Extra options passed to the <filename>make</filename>
                    command during the
                    <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
                    task in order to specify parallel compilation on the local
                    build host.
                    This variable is usually in the form "-j <replaceable>x</replaceable>",
                    where <replaceable>x</replaceable> represents the maximum
                    number of parallel threads <filename>make</filename> can
                    run.
                    <note><title>Caution</title>
                        In order for <filename>PARALLEL_MAKE</filename> to be
                        effective, <filename>make</filename> must be called
                        with
                        <filename>${</filename><link linkend='var-EXTRA_OEMAKE'><filename>EXTRA_OEMAKE</filename></link><filename>}</filename>.
                        An easy way to ensure this is to use the
                        <filename>oe_runmake</filename> function.
                    </note>
                </para>

                <para>
                    By default, the OpenEmbedded build system automatically
                    sets this variable to be equal to the number of cores the
                    build system uses.
                    <note>
                        If the software being built experiences dependency
                        issues during the <filename>do_compile</filename>
                        task that result in race conditions, you can clear
                        the <filename>PARALLEL_MAKE</filename> variable within
                        the recipe as a workaround.
                        For information on addressing race conditions, see the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#debugging-parallel-make-races'>Debugging Parallel Make Races</ulink>"
                        section in the Yocto Project Development Tasks Manual.
                    </note>
                    For single socket systems (i.e. one CPU), you should not
                    have to override this variable to gain optimal parallelism
                    during builds.
                    However, if you have very large systems that employ
                    multiple physical CPUs, you might want to make sure the
                    <filename>PARALLEL_MAKE</filename> variable is not
                    set higher than "-j 20".
                </para>

                <para>
                    For more information on speeding up builds, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#speeding-up-a-build'>Speeding Up a Build</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PARALLEL_MAKEINST'><glossterm>PARALLEL_MAKEINST</glossterm>
            <info>
                PARALLEL_MAKEINST[doc] = "Extra options passed to the make install command during the do_install task in order to specify parallel installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Extra options passed to the
                    <filename>make install</filename> command during the
                    <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                    task in order to specify parallel installation.
                    This variable defaults to the value of
                    <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>.
                    <note><title>Notes and Cautions</title>
                        <para>In order for <filename>PARALLEL_MAKEINST</filename>
                        to be
                        effective, <filename>make</filename> must be called
                        with
                        <filename>${</filename><link linkend='var-EXTRA_OEMAKE'><filename>EXTRA_OEMAKE</filename></link><filename>}</filename>.
                        An easy way to ensure this is to use the
                        <filename>oe_runmake</filename> function.</para>

                        <para>If the software being built experiences
                        dependency issues during the
                        <filename>do_install</filename> task that result in
                        race conditions, you can clear the
                        <filename>PARALLEL_MAKEINST</filename> variable within
                        the recipe as a workaround.
                        For information on addressing race conditions, see the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#debugging-parallel-make-races'>Debugging Parallel Make Races</ulink>"
                        section in the Yocto Project Development Tasks Manual.
                        </para>
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PATCHRESOLVE'><glossterm>PATCHRESOLVE</glossterm>
            <info>
                PATCHRESOLVE[doc] = "Enable or disable interactive patch resolution."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Determines the action to take when a patch fails.
                    You can set this variable to one of two values: "noop" and
                    "user".
                </para>

                <para>
                    The default value of "noop" causes the build to simply fail
                    when the OpenEmbedded build system cannot successfully
                    apply a patch.
                    Setting the value to "user" causes the build system to
                    launch a shell and places you in the right location so that
                    you can manually resolve the conflicts.
                </para>

                <para>
                    Set this variable in your
                    <filename>local.conf</filename> file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PATCHTOOL'><glossterm>PATCHTOOL</glossterm>
            <info>
                PATCHTOOL[doc] = "Specifies the utility used to apply patches for a recipe during do_patch."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the utility used to apply patches for a recipe
                    during the
                    <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
                    task.
                    You can specify one of three utilities: "patch", "quilt", or
                    "git".
                    The default utility used is "quilt" except for the
                    quilt-native recipe itself.
                    Because the quilt tool is not available at the
                    time quilt-native is being patched, it uses "patch".
                </para>

                <para>
                    If you wish to use an alternative patching tool, set the
                    variable in the recipe using one of the following:
                    <literallayout class='monospaced'>
     PATCHTOOL = "patch"
     PATCHTOOL = "quilt"
     PATCHTOOL = "git"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PE'><glossterm>PE</glossterm>
            <info>
                PE[doc] = "The epoch of the recipe. The default value is '0'. The field is used to make upgrades possible when the versioning scheme changes in some backwards incompatible way."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The epoch of the recipe.
                    By default, this variable is unset.
                    The variable is used to make upgrades possible when the
                    versioning scheme changes in some backwards incompatible
                    way.
                </para>

                <para>
                    <filename>PE</filename> is the default value of the
                    <link linkend='var-PKGE'><filename>PKGE</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PF'><glossterm>PF</glossterm>
            <info>
                PF[doc] = "Specifies the recipe or package name and includes all version and revision numbers. This variable is comprised of ${PN}-${EXTENDPE}${PV}-${PR}."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the recipe or package name and includes all version and revision
                    numbers (i.e. <filename>glibc-2.13-r20+svnr15508/</filename> and
                    <filename>bash-4.2-r1/</filename>).
                    This variable is comprised of the following:
                    <literallayout class='monospaced'>
     ${<link linkend='var-PN'>PN</link>}-${<link linkend='var-EXTENDPE'>EXTENDPE</link>}${<link linkend='var-PV'>PV</link>}-${<link linkend='var-PR'>PR</link>}
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PIXBUF_PACKAGES'><glossterm>PIXBUF_PACKAGES</glossterm>
            <info>
                PIXBUF_PACKAGES[doc] = "When a recipe inherits the pixbufcache class, this variable identifies packages that contain the pixbuf loaders used with gdk-pixbuf."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-pixbufcache'><filename>pixbufcache</filename></link>
                    class, this variable identifies packages that contain
                    the pixbuf loaders used with
                    <filename>gdk-pixbuf</filename>.
                    By default, the <filename>pixbufcache</filename> class
                    assumes that the loaders are in the recipe's main package
                    (i.e. <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>).
                    Use this variable if the loaders you need are in a package
                    other than that main package.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKG'><glossterm>PKG</glossterm>
            <info>
                PKG[doc] = "The name of the resulting package created by the OpenEmbedded build system. When you use this variable, you must use a package name override."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The name of the resulting package created by the
                    OpenEmbedded build system.
                    <note>
                        When using the <filename>PKG</filename> variable, you
                        must use a package name override.
                    </note>
                </para>

                <para>
                    For example, when the
                    <link linkend='ref-classes-debian'><filename>debian</filename></link>
                    class renames the output package, it does so by setting
                    <filename>PKG_<replaceable>packagename</replaceable></filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKG_CONFIG_PATH'><glossterm>PKG_CONFIG_PATH</glossterm>
            <info>
                PKG_CONFIG_PATH[doc] = "Path to pkg-config files for the current build context."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The path to <filename>pkg-config</filename> files for the
                    current build context.
                    <filename>pkg-config</filename> reads this variable
                    from the environment.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKGD'><glossterm>PKGD</glossterm>
            <info>
                PKGD[doc] = "Points to the destination directory for files to be packaged before they are split into individual packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the destination directory for files to be
                    packaged before they are split into individual packages.
                    This directory defaults to the following:
                    <literallayout class='monospaced'>
     ${WORKDIR}/package
                    </literallayout>
                </para>

                <para>
                    Do not change this default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKGDATA_DIR'><glossterm>PKGDATA_DIR</glossterm>
            <info>
                PKGDATA_DIR[doc] = "Points to a shared, global-state directory that holds data generated during the packaging process."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to a shared, global-state directory that holds data
                    generated during the packaging process.
                    During the packaging process, the
                    <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link>
                    task packages data for each recipe and installs it into
                    this temporary, shared area.
                    This directory defaults to the following, which you should
                    not change:
                    <literallayout class='monospaced'>
     ${STAGING_DIR_HOST}/pkgdata
                    </literallayout>
                    For examples of how this data is used, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
                    section in the Yocto Project Overview and Concepts Manual
                    and the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#viewing-package-information-with-oe-pkgdata-util'>Viewing Package Information with <filename>oe-pkgdata-util</filename></ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    For more information on the shared, global-state directory,
                    see
                    <link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKGDEST'><glossterm>PKGDEST</glossterm>
            <info>
                PKGDEST[doc] = "Points to the parent directory for files to be packaged after they have been split into individual packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the parent directory for files to be packaged
                    after they have been split into individual packages.
                    This directory defaults to the following:
                    <literallayout class='monospaced'>
     ${WORKDIR}/packages-split
                    </literallayout>
                </para>

                <para>
                    Under this directory, the build system creates
                    directories for each package specified in
                    <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>.
                    Do not change this default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKGDESTWORK'><glossterm>PKGDESTWORK</glossterm>
            <info>
                PKGDESTWORK[doc] = "Points to a temporary work area where the do_package task saves package metadata."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to a temporary work area where the
                    <link linkend='ref-tasks-package'><filename>do_package</filename></link>
                    task saves package metadata.
                    The <filename>PKGDESTWORK</filename> location defaults to
                    the following:
                    <literallayout class='monospaced'>
     ${WORKDIR}/pkgdata
                    </literallayout>
                    Do not change this default.
                </para>

                <para>
                    The
                    <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link>
                    task copies the package metadata from
                    <filename>PKGDESTWORK</filename> to
                    <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>
                    to make it available globally.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKGE'><glossterm>PKGE</glossterm>
            <info>
                PKGE[doc] = "The epoch of the package(s) built by the recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The epoch of the package(s) built by the recipe.
                    By default, <filename>PKGE</filename> is set to
                    <link linkend='var-PE'><filename>PE</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKGR'><glossterm>PKGR</glossterm>
            <info>
                PKGR[doc] = "The revision of the package(s) built by the recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The revision of the package(s) built by the recipe.
                    By default, <filename>PKGR</filename> is set to
                    <link linkend='var-PR'><filename>PR</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PKGV'><glossterm>PKGV</glossterm>
            <info>
                PKGV[doc] = "The version of the package(s) built by the recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The version of the package(s) built by the
                    recipe.
                    By default, <filename>PKGV</filename> is set to
                    <link linkend='var-PV'><filename>PV</filename></link>.
                 </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PN'><glossterm>PN</glossterm>
            <info>
                PN[doc] = "PN refers to a recipe name in the context of a file used by the OpenEmbedded build system as input to create a package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable can have two separate functions depending on the context: a recipe
                    name or a resulting package name.
                </para>

                <para>
                    <filename>PN</filename> refers to a recipe name in the context of a file used
                    by the OpenEmbedded build system as input to create a package.
                    The name is normally extracted from the recipe file name.
                    For example, if the recipe is named
                    <filename>expat_2.0.1.bb</filename>, then the default value of <filename>PN</filename>
                    will be "expat".
                </para>

                <para>
                    The variable refers to a package name in the context of a file created or produced by the
                    OpenEmbedded build system.
                </para>

                <para>
                    If applicable, the <filename>PN</filename> variable also contains any special
                    suffix or prefix.
                    For example, using <filename>bash</filename> to build packages for the native
                    machine, <filename>PN</filename> is <filename>bash-native</filename>.
                    Using <filename>bash</filename> to build packages for the target and for Multilib,
                    <filename>PN</filename> would be <filename>bash</filename> and
                    <filename>lib64-bash</filename>, respectively.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PNBLACKLIST'><glossterm>PNBLACKLIST</glossterm>
            <info>
                PNBLACKLIST[doc] = "Lists recipes you do not want the OpenEmbedded build system to build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists recipes you do not want the OpenEmbedded build system
                    to build.
                    This variable works in conjunction with the
                    <link linkend='ref-classes-blacklist'><filename>blacklist</filename></link>
                    class, which is inherited globally.
                </para>

                <para>
                    To prevent a recipe from being built, use the
                    <filename>PNBLACKLIST</filename> variable in your
                    <filename>local.conf</filename> file.
                    Here is an example that prevents
                    <filename>myrecipe</filename> from being built:
                    <literallayout class='monospaced'>
     PNBLACKLIST[myrecipe] = "Not supported by our organization."
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-POPULATE_SDK_POST_HOST_COMMAND'><glossterm>POPULATE_SDK_POST_HOST_COMMAND</glossterm>
            <info>
                POPULATE_SDK_POST_HOST_COMMAND[doc] = "Specifies a list of functions to call once the OpenEmbedded build system has created host part of the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call once the
                    OpenEmbedded build system has created the host part of
                    the SDK.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     POPULATE_SDK_POST_HOST_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the SDK path to a command
                    within a function, you can use
                    <filename>${SDK_DIR}</filename>, which points to
                    the parent directory used by the OpenEmbedded build
                    system when creating SDK output.
                    See the
                    <link linkend='var-SDK_DIR'><filename>SDK_DIR</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-POPULATE_SDK_POST_TARGET_COMMAND'><glossterm>POPULATE_SDK_POST_TARGET_COMMAND</glossterm>
            <info>
                POPULATE_SDK_POST_TARGET_COMMAND[doc] = "Specifies a list of functions to call once the OpenEmbedded build system has created target part of the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call once the
                    OpenEmbedded build system has created the target part of
                    the SDK.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     POPULATE_SDK_POST_TARGET_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the SDK path to a command
                    within a function, you can use
                    <filename>${SDK_DIR}</filename>, which points to
                    the parent directory used by the OpenEmbedded build
                    system when creating SDK output.
                    See the
                    <link linkend='var-SDK_DIR'><filename>SDK_DIR</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PR'><glossterm>PR</glossterm>
            <info>
                PR[doc] = "The revision of the recipe. The default value for this variable is 'r0'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The revision of the recipe. The default value for this
                    variable is "r0".
                    Subsequent revisions of the recipe conventionally have the
                    values "r1", "r2", and so forth.
                    When
                    <link linkend='var-PV'><filename>PV</filename></link>
                    increases, <filename>PR</filename> is conventionally reset
                    to "r0".
                    <note>
                        The OpenEmbedded build system does not need the aid of
                        <filename>PR</filename> to know when to rebuild a
                        recipe.
                        The build system uses the task
                        <ulink url='&YOCTO_DOCS_OM_URL;#overview-checksums'>input checksums</ulink>
                        along with the
                        <link linkend='structure-build-tmp-stamps'>stamp</link>
                        and
                        <ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>shared state cache</ulink>
                        mechanisms.
                    </note>
                    The <filename>PR</filename> variable primarily becomes
                    significant when a package manager dynamically installs
                    packages on an already built image.
                    In this case, <filename>PR</filename>, which is the default
                    value of
                    <link linkend='var-PKGR'><filename>PKGR</filename></link>,
                    helps the package manager distinguish which package is the
                    most recent one in cases where many packages have the same
                    <filename>PV</filename> (i.e. <filename>PKGV</filename>).
                    A component having many packages with the same
                    <filename>PV</filename> usually means that the packages all
                    install the same upstream version, but with later
                    (<filename>PR</filename>) version packages including
                    packaging fixes.
                    <note>
                        <filename>PR</filename> does not need to be increased
                        for changes that do not change the package contents or
                        metadata.
                    </note>
                    Because manually managing <filename>PR</filename> can be
                    cumbersome and error-prone, an automated solution exists.
                    See the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>Working With a PR Service</ulink>"
                    section in the Yocto Project Development Tasks Manual
                    for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PREFERRED_PROVIDER'><glossterm>PREFERRED_PROVIDER</glossterm>
            <info>
                PREFERRED_PROVIDER[doc] = "If multiple recipes provide an item, this variable determines which recipe should be given preference."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If multiple recipes provide the same item, this variable
                    determines which recipe is preferred and thus provides
                    the item (i.e. the preferred provider).
                    You should always suffix this variable with the name of the
                    provided item.
                    And, you should define the variable using the preferred
                    recipe's name
                    (<link linkend='var-PN'><filename>PN</filename></link>).
                    Here is a common example:
                    <literallayout class='monospaced'>
     PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
                    </literallayout>
                    In the previous example, multiple recipes are providing
                    "virtual/kernel".
                    The <filename>PREFERRED_PROVIDER</filename> variable is
                    set with the name (<filename>PN</filename>) of the recipe
                    you prefer to provide "virtual/kernel".
                </para>

                <para>
                    Following are more examples:
                    <literallayout class='monospaced'>
     PREFERRED_PROVIDER_virtual/xserver = "xserver-xf86"
     PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
                    </literallayout>
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#metadata-virtual-providers'>Using Virtual Providers</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    <note>
                        If you use a <filename>virtual/*</filename> item
                        with <filename>PREFERRED_PROVIDER</filename>, then any
                        recipe that
                        <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
                        that item but is not selected (defined) by
                        <filename>PREFERRED_PROVIDER</filename> is prevented
                        from building, which is usually desirable since this
                        mechanism is designed to select between mutually
                        exclusive alternative providers.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PREFERRED_VERSION'><glossterm>PREFERRED_VERSION</glossterm>
            <info>
                PREFERRED_VERSION[doc] = "If there are multiple versions of recipes available, this variable determines which recipe should be given preference."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If multiple versions of recipes exist, this
                    variable determines which version is given preference.
                    You must always suffix the variable with the
                    <link linkend='var-PN'><filename>PN</filename></link>
                    you want to select, and you should set the
                    <link linkend='var-PV'><filename>PV</filename></link>
                    accordingly for precedence.
                </para>

                <para>
                    The <filename>PREFERRED_VERSION</filename> variable
                    supports limited wildcard use through the
                    "<filename>%</filename>" character.
                    You can use the character to match any number of
                    characters, which can be useful when specifying versions
                    that contain long revision numbers that potentially change.
                    Here are two examples:
                    <literallayout class='monospaced'>
     PREFERRED_VERSION_python = "3.4.0"
     PREFERRED_VERSION_linux-yocto = "5.0%"
                    </literallayout>
                    <note><title>Important</title>
                        The use of the "<filename>%</filename>" character
                        is limited in that it only works at the end of the
                        string.
                        You cannot use the wildcard character in any other
                        location of the string.
                    </note>
                </para>

                <para>
                    The specified version is matched against
                    <link linkend='var-PV'><filename>PV</filename></link>,
                    which does not necessarily match the version part of
                    the recipe's filename.
                    For example, consider two recipes
                    <filename>foo_1.2.bb</filename> and
                    <filename>foo_git.bb</filename> where
                    <filename>foo_git.bb</filename> contains the following
                    assignment:
                    <literallayout class='monospaced'>
     PV = "1.1+git${SRCPV}"
                    </literallayout>
                    In this case, the correct way to select
                    <filename>foo_git.bb</filename> is by using an
                    assignment such as the following:
                    <literallayout class='monospaced'>
     PREFERRED_VERSION_foo = "1.1+git%"
                    </literallayout>
                    Compare that previous example against the following
                    incorrect example, which does not work:
                    <literallayout class='monospaced'>
     PREFERRED_VERSION_foo = "git"
                    </literallayout>
                </para>

                <para>
                    Sometimes the <filename>PREFERRED_VERSION</filename>
                    variable can be set by configuration files in a way that
                    is hard to change.
                    You can use
                    <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    to set a machine-specific override.
                    Here is an example:
                    <literallayout class='monospaced'>
     PREFERRED_VERSION_linux-yocto_qemux86 = "5.0%"
                    </literallayout>
                    Although not recommended, worst case, you can also use the
                    "forcevariable" override, which is the strongest override
                    possible.
                    Here is an example:
                    <literallayout class='monospaced'>
     PREFERRED_VERSION_linux-yocto_forcevariable = "5.0%"
                    </literallayout>
                    <note>
                        The <filename>_forcevariable</filename> override is
                        not handled specially.
                        This override only works because the default value of
                        <filename>OVERRIDES</filename> includes
                        "forcevariable".
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PREMIRRORS'><glossterm>PREMIRRORS</glossterm>
            <info>
                PREMIRRORS[doc] = "Specifies additional paths from which the OpenEmbedded build system gets source code."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies additional paths from which the OpenEmbedded
                    build system gets source code.
                    When the build system searches for source code, it first
                    tries the local download directory.
                    If that location fails, the build system tries locations
                    defined by <filename>PREMIRRORS</filename>, the upstream
                    source, and then locations specified by
                    <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
                    in that order.
                </para>

                <para>
                    Assuming your distribution
                    (<link linkend='var-DISTRO'><filename>DISTRO</filename></link>)
                    is "poky", the default value for
                    <filename>PREMIRRORS</filename> is defined in the
                    <filename>conf/distro/poky.conf</filename> file in the
                    <filename>meta-poky</filename> Git repository.
                </para>

                <para>
                    Typically, you could add a specific server for the
                    build system to attempt before any others by adding
                    something like the following to the
                    <filename>local.conf</filename> configuration file in the
                    <link linkend='build-directory'>Build Directory</link>:
                    <literallayout class='monospaced'>
     PREMIRRORS_prepend = "\
     git://.*/.* http://www.yoctoproject.org/sources/ \n \
     ftp://.*/.* http://www.yoctoproject.org/sources/ \n \
     http://.*/.* http://www.yoctoproject.org/sources/ \n \
     https://.*/.* http://www.yoctoproject.org/sources/ \n"
                    </literallayout>
                    These changes cause the build system to intercept
                    Git, FTP, HTTP, and HTTPS requests and direct them to
                    the <filename>http://</filename> sources mirror.
                    You can use <filename>file://</filename> URLs to point
                    to local directories or network shares as well.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PRIORITY'><glossterm>PRIORITY</glossterm>
            <info>
                PRIORITY[doc] = "Indicates the importance of a package.  The default value is 'optional'.  Other standard values are 'required', 'standard', and 'extra'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Indicates the importance of a package.
                </para>

                <para>
                    <filename>PRIORITY</filename> is considered to be part of
                    the distribution policy because the importance of any given
                    recipe depends on the purpose for which the distribution
                    is being produced.
                    Thus, <filename>PRIORITY</filename> is not normally set
                    within recipes.
                </para>

                <para>
                    You can set <filename>PRIORITY</filename> to "required",
                    "standard", "extra", and "optional", which is the default.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PRIVATE_LIBS'><glossterm>PRIVATE_LIBS</glossterm>
            <info>
                PRIVATE_LIBS[doc] = "Specifies libraries installed within a recipe that should be ignored by the OpenEmbedded build system's shared library resolver."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies libraries installed within a recipe that
                    should be ignored by the OpenEmbedded build system's
                    shared library resolver.
                    This variable is typically used when software being
                    built by a recipe has its own private versions of a
                    library normally provided by another recipe.
                    In this case, you would not want the package containing
                    the private libraries to be set as a dependency on other
                    unrelated packages that should instead depend on the
                    package providing the standard version of the library.
                </para>

                <para>
                    Libraries specified in this variable should be specified
                    by their file name.
                    For example, from the Firefox recipe in meta-browser:
                    <literallayout class='monospaced'>
     PRIVATE_LIBS = "libmozjs.so \
                     libxpcom.so \
                     libnspr4.so \
                     libxul.so \
                     libmozalloc.so \
                     libplc4.so \
                     libplds4.so"
                    </literallayout>
                </para>

                <para>
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PROVIDES'><glossterm>PROVIDES</glossterm>
            <info>
                PROVIDES[doc] = "A list of aliases that a recipe also provides. These aliases are useful for satisfying dependencies of other recipes during the build as specified by DEPENDS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of aliases by which a particular recipe can be
                    known.
                    By default, a recipe's own
                    <filename><link linkend='var-PN'>PN</link></filename>
                    is implicitly already in its <filename>PROVIDES</filename>
                    list and therefore does not need to mention that it provides itself.
                    If a recipe uses <filename>PROVIDES</filename>, the
                    additional aliases are synonyms for the recipe and can
                    be useful for satisfying dependencies of other recipes during
                    the build as specified by
                    <filename><link linkend='var-DEPENDS'>DEPENDS</link></filename>.
                </para>

                <para>
                    Consider the following example
                    <filename>PROVIDES</filename> statement from the recipe
                    file <filename>eudev_3.2.9.bb</filename>:
                    <literallayout class='monospaced'>
     PROVIDES = "udev"
                    </literallayout>
                    The <filename>PROVIDES</filename> statement results in
                    the "eudev" recipe also being available as simply "udev".

                    <note>
                        Given that a recipe's own recipe name is already
                        implicitly in its own <filename>PROVIDES</filename> list,
                        it is unnecessary to add aliases with the "+=" operator;
                        using a simple assignment will be sufficient. In other
                        words, while you could write:
                        <literallayout class='monospaced'>
     PROVIDES += "udev"
                        </literallayout>
                        in the above, the "+=" is overkill and unnecessary.
                    </note>
                </para>

                <para>
                    In addition to providing recipes under alternate names,
                    the <filename>PROVIDES</filename> mechanism is also used
                    to implement virtual targets.
                    A virtual target is a name that corresponds to some
                    particular functionality (e.g. a Linux kernel).
                    Recipes that provide the functionality in question list the
                    virtual target in <filename>PROVIDES</filename>.
                    Recipes that depend on the functionality in question can
                    include the virtual target in <filename>DEPENDS</filename>
                    to leave the choice of provider open.
                </para>

                <para>
                    Conventionally, virtual targets have names on the form
                    "virtual/function" (e.g. "virtual/kernel").
                    The slash is simply part of the name and has no
                    syntactical significance.
                </para>

                <para>
                    The
                    <link linkend='var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></link>
                    variable is used to select which particular recipe
                    provides a virtual target.
                    <note>
                        <para>A corresponding mechanism for virtual runtime
                        dependencies (packages) exists.
                        However, the mechanism does not depend on any special
                        functionality beyond ordinary variable assignments.
                        For example,
                        <filename>VIRTUAL-RUNTIME_dev_manager</filename>
                        refers to the package of the component that manages
                        the <filename>/dev</filename> directory.</para>

                        <para>Setting the "preferred provider" for runtime
                        dependencies is as simple as using the following
                        assignment in a configuration file:</para>
                        <literallayout class='monospaced'>
     VIRTUAL-RUNTIME_dev_manager = "udev"
                        </literallayout>
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PRSERV_HOST'><glossterm>PRSERV_HOST</glossterm>
            <info>
                PRSERV_HOST[doc] = "The network based PR service host and port."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The network based
                    <link linkend='var-PR'><filename>PR</filename></link>
                    service host and port.
                </para>

                <para>
                    The <filename>conf/local.conf.sample.extended</filename>
                    configuration file in the
                    <link linkend='source-directory'>Source Directory</link>
                    shows how the <filename>PRSERV_HOST</filename> variable is
                    set:
                    <literallayout class='monospaced'>
     PRSERV_HOST = "localhost:0"
                    </literallayout>
                    You must set the variable if you want to automatically
                    start a local
                    <ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>PR service</ulink>.
                    You can set <filename>PRSERV_HOST</filename> to other
                    values to use a remote PR service.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PTEST_ENABLED'><glossterm>PTEST_ENABLED</glossterm>
            <info>
                PRSERV_HOST[doc] = "Specifies whether or not Package Test (ptest) functionality is enabled when building a recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies whether or not
                    <ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Package Test</ulink>
                    (ptest) functionality is enabled when building a recipe.
                    You should not set this variable directly.
                    Enabling and disabling building Package Tests
                    at build time should be done by adding "ptest" to (or
                    removing it from)
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
                 </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PV'><glossterm>PV</glossterm>
            <info>
                PV[doc] = "The version of the recipe. The version is normally extracted from the recipe filename."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The version of the recipe.
                    The version is normally extracted from the recipe filename.
                    For example, if the recipe is named
                    <filename>expat_2.0.1.bb</filename>, then the default value
                    of <filename>PV</filename> will be "2.0.1".
                    <filename>PV</filename> is generally not overridden within
                    a recipe unless it is building an unstable (i.e.
                    development) version from a source code repository
                    (e.g. Git or Subversion).
                 </para>

                 <para>
                     <filename>PV</filename> is the default value of the
                     <link linkend='var-PKGV'><filename>PKGV</filename></link>
                     variable.
                 </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PYTHON_ABI'><glossterm>PYTHON_ABI</glossterm>
            <info>
                PYTHON_ABI[doc] = "When used by recipes that inherit the distutils3, setuptools3, distutils, or setuptools classes, denotes the Application Binary Interface (ABI) currently in use for Python."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When used by recipes that inherit the
                    <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>,
                    <link linkend='ref-classes-setuptools3'><filename>setuptools3</filename></link>,
                    <link linkend='ref-classes-distutils'><filename>distutils</filename></link>,
                    or
                    <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
                    classes, denotes the Application Binary Interface (ABI)
                    currently in use for Python.
                    By default, the ABI is "m".
                    You do not have to set this variable as the OpenEmbedded
                    build system sets it for you.
                </para>

                <para>
                    The OpenEmbedded build system uses the ABI to construct
                    directory names used when installing the Python headers
                    and libraries in sysroot
                    (e.g. <filename>.../python3.3m/...</filename>).
                </para>

                <para>
                    Recipes that inherit the <filename>distutils</filename>
                    class during cross-builds also use this variable to
                    locate the headers and libraries of the appropriate Python
                    that the extension is targeting.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PYTHON_PN'><glossterm>PYTHON_PN</glossterm>
            <info>
                PYTHON_PN[doc] = "When used by recipes that inherit the distutils3, setuptools3, distutils, or setuptools classes, specifies the major Python version being built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When used by recipes that inherit the
                    <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>,
                    <link linkend='ref-classes-setuptools3'><filename>setuptools3</filename></link>,
                    <link linkend='ref-classes-distutils'><filename>distutils</filename></link>,
                    or
                    <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
                    classes, specifies the major Python version being built.
                    For Python 3.x, <filename>PYTHON_PN</filename> would be
                    "python3".
                    You do not have to set this variable as the
                    OpenEmbedded build system automatically sets it for you.
                </para>

                <para>
                    The variable allows recipes to use common infrastructure
                    such as the following:
                    <literallayout class='monospaced'>
     DEPENDS += "${PYTHON_PN}-native"
                    </literallayout>
                    In the previous example, the version of the dependency
                    is <filename>PYTHON_PN</filename>.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-r'><title>R</title>

        <glossentry id='var-RANLIB'><glossterm>RANLIB</glossterm>
            <info>
                RANLIB[doc] = "Minimal command and arguments to run 'ranlib'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments to run
                    <filename>ranlib</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RCONFLICTS'><glossterm>RCONFLICTS</glossterm>
            <info>
                RCONFLICTS[doc] = "The list of packages that conflict with another package. Note that the package will not be installed if the conflicting packages are not first removed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of packages that conflict with packages.
                    Note that packages will not be installed if conflicting
                    packages are not first removed.
                </para>

                <para>
                   Like all package-controlling variables, you must always use
                   them in conjunction with a package name override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RCONFLICTS_${PN} = "<replaceable>another_conflicting_package_name</replaceable>"
                   </literallayout>
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned dependencies.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RCONFLICTS</filename> variable:
                    <literallayout class='monospaced'>
     RCONFLICTS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <filename>operator</filename>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For example, the following sets up a dependency on version
                    1.2 or greater of the package <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RCONFLICTS_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RDEPENDS'><glossterm>RDEPENDS</glossterm>
            <info>
                RDEPENDS[doc] = "Lists runtime dependencies of a package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists runtime dependencies of a package.
                    These dependencies are other packages that must be
                    installed in order for the package to function correctly.
                    As an example, the following assignment declares that the
                    package <filename>foo</filename> needs the packages
                    <filename>bar</filename> and <filename>baz</filename> to
                    be installed:
                    <literallayout class='monospaced'>
     RDEPENDS_foo = "bar baz"
                    </literallayout>
                    The most common types of package runtime dependencies are
                    automatically detected and added.
                    Therefore, most recipes do not need to set
                    <filename>RDEPENDS</filename>.
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>

                <para>
                    The practical effect of the above
                    <filename>RDEPENDS</filename> assignment is that
                    <filename>bar</filename> and <filename>baz</filename>
                    will be declared as dependencies inside the package
                    <filename>foo</filename> when it is written out by one of
                    the
                    <link linkend='ref-tasks-package_write_deb'><filename>do_package_write_*</filename></link>
                    tasks.
                    Exactly how this is done depends on which package format
                    is used, which is determined by
                    <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>.
                    When the corresponding package manager installs the
                    package, it will know to also install the packages on
                    which it depends.
                </para>

                <para>
                    To ensure that the packages <filename>bar</filename> and
                    <filename>baz</filename> get built, the previous
                    <filename>RDEPENDS</filename> assignment also causes a task
                    dependency to be added.
                    This dependency is from the recipe's
                    <link linkend='ref-tasks-build'><filename>do_build</filename></link>
                    (not to be confused with
                    <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>)
                    task to the <filename>do_package_write_*</filename>
                    task of the recipes that build <filename>bar</filename> and
                    <filename>baz</filename>.
                </para>

                <para>
                    The names of the packages you list within
                    <filename>RDEPENDS</filename> must be the names of other
                    packages - they cannot be recipe names.
                    Although package names and recipe names usually match,
                    the important point here is that you are
                    providing package names within the
                    <filename>RDEPENDS</filename> variable.
                    For an example of the default list of packages created from
                    a recipe, see the
                    <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                    variable.
                </para>

                <para>
                    Because the <filename>RDEPENDS</filename> variable applies
                    to packages being built, you should always use the variable
                    in a form with an attached package name (remember that a
                    single recipe can build multiple packages).
                    For example, suppose you are building a development package
                    that depends on the <filename>perl</filename> package.
                    In this case, you would use the following
                    <filename>RDEPENDS</filename> statement:
                    <literallayout class='monospaced'>
     RDEPENDS_${PN}-dev += "perl"
                    </literallayout>
                    In the example, the development package depends on
                    the <filename>perl</filename> package.
                    Thus, the <filename>RDEPENDS</filename> variable has the
                    <filename>${PN}-dev</filename> package name as part of the
                    variable.
                    <note>
                        <title>Caution</title>
                        <filename>RDEPENDS_${PN}-dev</filename> includes
                        <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>
                        by default.
                        This default is set in the BitBake configuration file
                        (<filename>meta/conf/bitbake.conf</filename>).
                        Be careful not to accidentally remove
                        <filename>${PN}</filename> when modifying
                        <filename>RDEPENDS_${PN}-dev</filename>.
                        Use the "+=" operator rather than the "=" operator.
                    </note>
                </para>

                <para>
                    The package names you use with
                    <filename>RDEPENDS</filename> must appear as they would in
                    the <filename>PACKAGES</filename> variable.
                    The
                    <link linkend='var-PKG'><filename>PKG</filename></link>
                    variable allows a different name to be used for
                    the final package (e.g. the
                    <link linkend='ref-classes-debian'><filename>debian</filename></link>
                    class uses this to rename packages), but this final package
                    name cannot be used with <filename>RDEPENDS</filename>,
                    which makes sense as <filename>RDEPENDS</filename> is meant
                    to be independent of the package format used.
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned dependencies.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RDEPENDS</filename> variable:
                    <literallayout class='monospaced'>
     RDEPENDS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <replaceable>operator</replaceable>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For <replaceable>version</replaceable>, provide the version
                    number.
                    <note><title>Tip</title>
                        You can use
                        <link linkend='var-EXTENDPKGV'><filename>EXTENDPKGV</filename></link>
                        to provide a full package version specification.
                    </note>
                    For example, the following sets up a dependency on version
                    1.2 or greater of the package <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RDEPENDS_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>

                <para>
                    For information on build-time dependencies, see the
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    variable.
                    You can also see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#tasks'>Tasks</ulink>" and
                    "<ulink url='&YOCTO_DOCS_BB_URL;#dependencies'>Dependencies</ulink>"
                    sections in the BitBake User Manual for additional
                    information on tasks and dependencies.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-REQUIRED_DISTRO_FEATURES'><glossterm>REQUIRED_DISTRO_FEATURES</glossterm>
            <info>
                REQUIRED_DISTRO_FEATURES[doc] = "When a recipe inherits the distro_features_check class, this variable identifies distribution features that must exist in the current configuration in order for the OpenEmbedded build system to build the recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-distro_features_check'><filename>distro_features_check</filename></link>
                    class, this
                    variable identifies distribution features that must
                    exist in the current configuration in order for the
                    OpenEmbedded build system to build the recipe.
                    In other words, if the
                    <filename>REQUIRED_DISTRO_FEATURES</filename> variable
                    lists a feature that does not appear in
                    <filename>DISTRO_FEATURES</filename> within the
                    current configuration, an error occurs and the
                    build stops.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RM_WORK_EXCLUDE'><glossterm>RM_WORK_EXCLUDE</glossterm>
            <info>
                RM_WORK_EXCLUDE[doc] = "With rm_work enabled, this variable specifies a list of packages whose work directories should not be removed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    With <filename>rm_work</filename> enabled, this
                    variable specifies a list of recipes whose work directories
                    should not be removed.
                    See the "<link linkend='ref-classes-rm-work'><filename>rm_work.bbclass</filename></link>"
                    section for more details.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOT_HOME'><glossterm>ROOT_HOME</glossterm>
            <info>
                ROOT_HOME[doc] = "Defines the root home directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the root home directory.
                    By default, this directory is set as follows in the
                    BitBake configuration file:
                    <literallayout class='monospaced'>
     ROOT_HOME ??= "/home/root"
                    </literallayout>
                    <note>
                        This default value is likely used because some
                        embedded solutions prefer to have a read-only root
                        filesystem and prefer to keep writeable data in one
                        place.
                    </note>
                </para>

                <para>
                    You can override the default by setting the variable
                    in any layer or in the <filename>local.conf</filename> file.
                    Because the default is set using a "weak" assignment
                    (i.e. "??="), you can use either of the following forms
                    to define your override:
                    <literallayout class='monospaced'>
     ROOT_HOME = "/root"
     ROOT_HOME ?= "/root"
                    </literallayout>
                    These override examples use <filename>/root</filename>,
                    which is probably the most commonly used override.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOTFS'><glossterm>ROOTFS</glossterm>
            <info>
                ROOTFS[doc] = "Indicates a filesystem image to include as the root filesystem."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Indicates a filesystem image to include as the root
                    filesystem.
                </para>

                <para>
                    The <filename>ROOTFS</filename> variable is an optional
                    variable used with the
                    <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOTFS_POSTINSTALL_COMMAND'><glossterm>ROOTFS_POSTINSTALL_COMMAND</glossterm>
            <info>
                ROOTFS_POSTINSTALL_COMMAND[doc] = "Specifies a list of functions to call after installing packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call after the
                    OpenEmbedded build system has installed packages.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     ROOTFS_POSTINSTALL_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the root filesystem path to a command
                    within a function, you can use
                    <filename>${IMAGE_ROOTFS}</filename>, which points to
                    the directory that becomes the root filesystem image.
                    See the
                    <link linkend='var-IMAGE_ROOTFS'><filename>IMAGE_ROOTFS</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOTFS_POSTPROCESS_COMMAND'><glossterm>ROOTFS_POSTPROCESS_COMMAND</glossterm>
            <info>
                ROOTFS_POSTPROCESS_COMMAND[doc] = "Specifies a list of functions to call once the OpenEmbedded build system has created the root filesystem."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call once the
                    OpenEmbedded build system has created the root filesystem.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     ROOTFS_POSTPROCESS_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the root filesystem path to a command
                    within a function, you can use
                    <filename>${IMAGE_ROOTFS}</filename>, which points to
                    the directory that becomes the root filesystem image.
                    See the
                    <link linkend='var-IMAGE_ROOTFS'><filename>IMAGE_ROOTFS</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOTFS_POSTUNINSTALL_COMMAND'><glossterm>ROOTFS_POSTUNINSTALL_COMMAND</glossterm>
            <info>
                ROOTFS_POSTUNINSTALL_COMMAND[doc] = "Specifies a list of functions to call after removal of unneeded packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call after the
                    OpenEmbedded build system has removed unnecessary
                    packages.
                    When runtime package management is disabled in the
                    image, several packages are removed including
                    <filename>base-passwd</filename>,
                    <filename>shadow</filename>, and
                    <filename>update-alternatives</filename>.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     ROOTFS_POSTUNINSTALL_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the root filesystem path to a command
                    within a function, you can use
                    <filename>${IMAGE_ROOTFS}</filename>, which points to
                    the directory that becomes the root filesystem image.
                    See the
                    <link linkend='var-IMAGE_ROOTFS'><filename>IMAGE_ROOTFS</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOTFS_PREPROCESS_COMMAND'><glossterm>ROOTFS_PREPROCESS_COMMAND</glossterm>
            <info>
                ROOTFS_PREPROCESS_COMMAND[doc] = "Specifies a list of functions to call before the OpenEmbedded build system has created the root filesystem."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call before the
                    OpenEmbedded build system has created the root filesystem.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     ROOTFS_PREPROCESS_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass the root filesystem path to a command
                    within a function, you can use
                    <filename>${IMAGE_ROOTFS}</filename>, which points to
                    the directory that becomes the root filesystem image.
                    See the
                    <link linkend='var-IMAGE_ROOTFS'><filename>IMAGE_ROOTFS</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RPROVIDES'><glossterm>RPROVIDES</glossterm>
            <info>
                RPROVIDES[doc] = "A list of package name aliases that a package also provides. These aliases are useful for satisfying runtime dependencies of other packages both during the build and on the target."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of package name aliases that a package also provides.
                    These aliases are useful for satisfying runtime dependencies
                    of other packages both during the build and on the target
                    (as specified by
                    <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>).
                    <note>
                        A package's own name is implicitly already in its
                        <filename>RPROVIDES</filename> list.
                    </note>
                </para>

                <para>
                   As with all package-controlling variables, you must always
                   use the variable in conjunction with a package name override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RPROVIDES_${PN} = "widget-abi-2"
                   </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RRECOMMENDS'><glossterm>RRECOMMENDS</glossterm>
            <info>
                RRECOMMENDS[doc] = "A list of packages that extends the usability of a package being built. The package being built does not depend on this list of packages in order to successfully build, but needs them for the extended usability."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of packages that extends the usability of a package
                    being built.
                    The package being built does not depend on this list of
                    packages in order to successfully build, but rather
                    uses them for extended usability.
                    To specify runtime dependencies for packages, see the
                    <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
                    variable.
                </para>

                <para>
                    The package manager will automatically install the
                    <filename>RRECOMMENDS</filename> list of packages when
                    installing the built package.
                    However, you can prevent listed packages from being
                    installed by using the
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>,
                    <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>,
                    and
                    <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
                    variables.
                </para>

                <para>
                    Packages specified in
                    <filename>RRECOMMENDS</filename> need not actually be
                    produced.
                    However, a recipe must exist that provides each package,
                    either through the
                    <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                    or
                    <link linkend='var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></link>
                    variables or the
                    <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>
                    variable, or an error will occur during the build.
                    If such a recipe does exist and the package is not produced,
                    the build continues without error.
                </para>

                <para>
                    Because the <filename>RRECOMMENDS</filename> variable
                    applies to packages being built, you should always attach
                    an override to the variable to specify the particular
                    package whose usability is being extended.
                    For example, suppose you are building a development package
                    that is extended to support wireless functionality.
                    In this case, you would use the following:
                    <literallayout class='monospaced'>
     RRECOMMENDS_${PN}-dev += "<replaceable>wireless_package_name</replaceable>"
                    </literallayout>
                    In the example, the package name
                    (<filename>${<link linkend='var-PN'>PN</link>}-dev</filename>)
                    must appear as it would in the
                    <filename>PACKAGES</filename> namespace before any renaming
                    of the output package by classes such as
                    <filename>debian.bbclass</filename>.
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned recommends.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RRECOMMENDS</filename> variable:
                    <literallayout class='monospaced'>
     RRECOMMENDS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <filename>operator</filename>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For example, the following sets up a recommend on version
                    1.2 or greater of the package <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RRECOMMENDS_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RREPLACES'><glossterm>RREPLACES</glossterm>
            <info>
                RREPLACES[doc] = "A list of packages replaced by a package. The package manager uses this variable to determine which package should be installed to replace other package(s) during an upgrade."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of packages replaced by a package.
                    The package manager uses this variable to determine which
                    package should be installed to replace other package(s)
                    during an upgrade.
                    In order to also have the other package(s) removed at the
                    same time, you must add the name of the other
                    package to the
                    <filename><link linkend='var-RCONFLICTS'>RCONFLICTS</link></filename> variable.
                </para>

                <para>
                   As with all package-controlling variables, you must use
                   this variable in conjunction with a package name
                   override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RREPLACES_${PN} = "<replaceable>other_package_being_replaced</replaceable>"
                   </literallayout>
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned replacements.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RREPLACES</filename> variable:
                    <literallayout class='monospaced'>
     RREPLACES_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <filename>operator</filename>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For example, the following sets up a replacement using
                    version 1.2 or greater of the package
                    <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RREPLACES_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RSUGGESTS'><glossterm>RSUGGESTS</glossterm>
            <info>
                RSUGGESTS[doc] = "A list of additional packages that you can suggest for installation by the package manager at the time a package is installed. Not all package managers support this functionality."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of additional packages that you can suggest for
                    installation by the package manager at the time a package
                    is installed.
                    Not all package managers support this functionality.
                </para>

                <para>
                   As with all package-controlling variables, you must always
                   use this variable in conjunction with a package name
                   override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RSUGGESTS_${PN} = "<replaceable>useful_package</replaceable> <replaceable>another_package</replaceable>"
                   </literallayout>
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-s'><title>S</title>

        <glossentry id='var-S'><glossterm>S</glossterm>
            <info>
                S[doc] = "The location in the Build Directory where unpacked package source code resides."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location in the
                    <link linkend='build-directory'>Build Directory</link>
                    where unpacked recipe source code resides.
                    By default, this directory is
                    <filename>${</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link><filename>}/${</filename><link linkend='var-BPN'><filename>BPN</filename></link><filename>}-${</filename><link linkend='var-PV'><filename>PV</filename></link><filename>}</filename>,
                    where <filename>${BPN}</filename> is the base recipe name
                    and <filename>${PV}</filename> is the recipe version.
                    If the source tarball extracts the code to a directory
                    named anything other than <filename>${BPN}-${PV}</filename>,
                    or if the source code is fetched from an SCM such as
                    Git or Subversion, then you must set <filename>S</filename>
                    in the recipe so that the OpenEmbedded build system
                    knows where to find the unpacked source.
                </para>

                <para>
                    As an example, assume a
                    <link linkend='source-directory'>Source Directory</link>
                    top-level folder named <filename>poky</filename> and a
                    default Build Directory at <filename>poky/build</filename>.
                    In this case, the work directory the build system uses
                    to keep the unpacked recipe for <filename>db</filename>
                    is the following:
                    <literallayout class='monospaced'>
     poky/build/tmp/work/qemux86-poky-linux/db/5.1.19-r3/db-5.1.19
                    </literallayout>
                    The unpacked source code resides in the
                    <filename>db-5.1.19</filename> folder.
                </para>

                <para>
                    This next example assumes a Git repository.
                    By default, Git repositories are cloned to
                    <filename>${WORKDIR}/git</filename> during
                    <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>.
                    Since this path is different from the default value of
                    <filename>S</filename>, you must set it specifically
                    so the source can be located:
                    <literallayout class='monospaced'>
     SRC_URI = "git://path/to/repo.git"
     S = "${WORKDIR}/git"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SANITY_REQUIRED_UTILITIES'><glossterm>SANITY_REQUIRED_UTILITIES</glossterm>
            <info>
                SANITY_REQUIRED_UTILITIES[doc] = "Specifies a list of command-line utilities that should be checked for during the initial sanity checking process when running BitBake."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of command-line utilities that should be
                    checked for during the initial sanity checking process when
                    running BitBake.
                    If any of the utilities are not installed on the build host,
                    then BitBake immediately exits with an error.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SANITY_TESTED_DISTROS'><glossterm>SANITY_TESTED_DISTROS</glossterm>
            <info>
                SANITY_TESTED_DISTROS[doc] = "A list of the host distribution identifiers that the build system has been tested against."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of the host distribution identifiers that the
                    build system has been tested against.
                    Identifiers consist of the host distributor ID
                    followed by the release,
                    as reported by the <filename>lsb_release</filename> tool
                    or as read from <filename>/etc/lsb-release</filename>.
                    Separate the list items with explicit newline
                    characters (<filename>\n</filename>).
                    If <filename>SANITY_TESTED_DISTROS</filename> is not empty
                    and the current value of
                    <link linkend='var-NATIVELSBSTRING'><filename>NATIVELSBSTRING</filename></link>
                    does not appear in the list, then the build system reports
                    a warning that indicates the current host distribution has
                    not been tested as a build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_ARCH'><glossterm>SDK_ARCH</glossterm>
            <info>
                SDK_ARCH[doc] = "The target architecture for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The target architecture for the SDK.
                    Typically, you do not directly set this variable.
                    Instead, use
                    <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_DEPLOY'><glossterm>SDK_DEPLOY</glossterm>
            <info>
                SDK_DEPLOY[doc] = "The directory set up and used by the populate_sdk_base to which the SDK is deployed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory set up and used by the
                    <link linkend='ref-classes-populate-sdk'><filename>populate_sdk_base</filename></link>
                    class to which the SDK is deployed.
                    The <filename>populate_sdk_base</filename> class defines
                    <filename>SDK_DEPLOY</filename> as follows:
                    <literallayout class='monospaced'>
     SDK_DEPLOY = "${TMPDIR}/deploy/sdk"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_DIR'><glossterm>SDK_DIR</glossterm>
            <info>
                SDK_DIR[doc] = "The parent directory used by the OpenEmbedded build system when creating SDK output."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The parent directory used by the OpenEmbedded build system
                    when creating SDK output.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the variable as follows:
                    <literallayout class='monospaced'>
     SDK_DIR = "${WORKDIR}/sdk"
                    </literallayout>
                    <note>
                        The <filename>SDK_DIR</filename> directory is a
                        temporary directory as it is part of
                        <filename>WORKDIR</filename>.
                        The final output directory is
                        <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_EXT_TYPE'><glossterm>SDK_EXT_TYPE</glossterm>
            <info>
                SDK_EXT_TYPE[doc] = "Controls whether or not shared state artifacts are copied into the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Controls whether or not shared state artifacts are copied
                    into the extensible SDK.
                    The default value of "full" copies all of the required
                    shared state artifacts into the extensible SDK.
                    The value "minimal" leaves these artifacts out of the
                    SDK.
                    <note>
                        If you set the variable to "minimal", you need to
                        ensure
                        <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
                        is set in the SDK's configuration to enable the
                        artifacts to be fetched as needed.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_HOST_MANIFEST'><glossterm>SDK_HOST_MANIFEST</glossterm>
            <info>
                SDK_HOST_MANIFEST[doc] = "The manifest file for the host part of the SDK. This file lists all the installed packages that make up the host part of the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The manifest file for the host part of the SDK.
                    This file lists all the installed packages that make up
                    the host part of the SDK.
                    The file contains package information on a line-per-package
                    basis as follows:
                    <literallayout class='monospaced'>
     <replaceable>packagename</replaceable> <replaceable>packagearch</replaceable> <replaceable>version</replaceable>
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the manifest file as follows:
                    <literallayout class='monospaced'>
     SDK_HOST_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.host.manifest"
                    </literallayout>
                    The location is derived using the
                    <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>
                    and
                    <link linkend='var-TOOLCHAIN_OUTPUTNAME'><filename>TOOLCHAIN_OUTPUTNAME</filename></link>
                    variables.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_INCLUDE_PKGDATA'><glossterm>SDK_INCLUDE_PKGDATA</glossterm>
            <info>
                SDK_INCLUDE_PKGDATA[doc] = "When set to "1", specifies to include the packagedata for all recipes in the "world" target in the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set to "1", specifies to include the packagedata for
                    all recipes in the "world" target in the extensible SDK.
                    Including this data allows the
                    <filename>devtool search</filename> command to find these
                    recipes in search results, as well as allows the
                    <filename>devtool add</filename> command to map
                    dependencies more effectively.
                    <note>
                        Enabling the <filename>SDK_INCLUDE_PKGDATA</filename>
                        variable significantly increases build time because
                        all of world needs to be built.
                        Enabling the variable also slightly increases the size
                        of the extensible SDK.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_INCLUDE_TOOLCHAIN'><glossterm>SDK_INCLUDE_TOOLCHAIN</glossterm>
            <info>
                SDK_INCLUDE_TOOLCHAIN[doc] = "When set to "1", specifies to include the toolchain in the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set to "1", specifies to include the toolchain in the
                    extensible SDK.
                    Including the toolchain is useful particularly when
                    <link linkend='var-SDK_EXT_TYPE'><filename>SDK_EXT_TYPE</filename></link>
                    is set to "minimal" to keep the SDK reasonably small
                    but you still want to provide a usable toolchain.
                    For example, suppose you want to use the toolchain from an
                    IDE or from other tools and you do not
                    want to perform additional steps to install the toolchain.
                </para>

                <para>
                    The <filename>SDK_INCLUDE_TOOLCHAIN</filename> variable
                    defaults to "0" if <filename>SDK_EXT_TYPE</filename>
                    is set to "minimal", and defaults to "1" if
                    <filename>SDK_EXT_TYPE</filename> is set to "full".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_INHERIT_BLACKLIST'><glossterm>SDK_INHERIT_BLACKLIST</glossterm>
            <info>
                SDK_INHERIT_BLACKLIST[doc] = "A list of classes to remove from the INHERIT value globally within the extensible SDK configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of classes to remove from the
                    <link linkend='var-INHERIT'><filename>INHERIT</filename></link>
                    value globally within the extensible SDK configuration.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate-sdk-ext</filename></link>
                    class sets the default value:
                    <literallayout class='monospaced'>
     SDK_INHERIT_BLACKLIST ?= "buildhistory icecc"
                    </literallayout>
                </para>

                <para>
                    Some classes are not generally applicable within
                    the extensible SDK context.
                    You can use this variable to disable those classes.
                </para>

                <para>
                    For additional information on how to customize the
                    extensible SDK's configuration, see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-configuring-the-extensible-sdk'>Configuring the Extensible SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_LOCAL_CONF_BLACKLIST'><glossterm>SDK_LOCAL_CONF_BLACKLIST</glossterm>
            <info>
                SDK_LOCAL_CONF_BLACKLIST[doc] = "A list of variables not allowed through from the build system configuration into the extensible SDK configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of variables not allowed through from the
                    OpenEmbedded build system configuration into the extensible
                    SDK configuration.
                    Usually, these are variables that are specific to the
                    machine on which the build system is running and thus
                    would be potentially problematic within the extensible SDK.
                    </para>

                    <para>By default,
                    <filename>SDK_LOCAL_CONF_BLACKLIST</filename> is set in the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate-sdk-ext</filename></link>
                    class and excludes the following variables:
                    <literallayout class='monospaced'>
     <link linkend='var-CONF_VERSION'>CONF_VERSION</link>
     <link linkend='var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</link>
     <ulink url='&YOCTO_DOCS_BB_URL;#var-BB_NUMBER_PARSE_THREADS'>BB_NUMBER_PARSE_THREADS</ulink>
     <link linkend='var-PARALLEL_MAKE'>PARALLEL_MAKE</link>
     <link linkend='var-PRSERV_HOST'>PRSERV_HOST</link>
     <link linkend='var-SSTATE_MIRRORS'>SSTATE_MIRRORS</link>
     <link linkend='var-DL_DIR'>DL_DIR</link>
     <link linkend='var-SSTATE_DIR'>SSTATE_DIR</link>
     <link linkend='var-TMPDIR'>TMPDIR</link>
     <link linkend='var-BB_SERVER_TIMEOUT'>BB_SERVER_TIMEOUT</link>
                    </literallayout>
                </para>

                <para>
                    For additional information on how to customize the
                    extensible SDK's configuration, see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-configuring-the-extensible-sdk'>Configuring the Extensible SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>

            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_LOCAL_CONF_WHITELIST'><glossterm>SDK_LOCAL_CONF_WHITELIST</glossterm>
            <info>
                SDK_LOCAL_CONF_WHITELIST[doc] = "A list of variables allowed through from the build system configuration into the extensible SDK configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of variables allowed through from the OpenEmbedded
                    build system configuration into the extensible SDK
                    configuration.
                    By default, the list of variables is empty and is set in
                    the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate-sdk-ext</filename></link>
                    class.
                </para>

                <para>
                    This list overrides the variables specified using the
                    <link linkend='var-SDK_LOCAL_CONF_BLACKLIST'><filename>SDK_LOCAL_CONF_BLACKLIST</filename></link>
                    variable as well as any variables identified by automatic
                    blacklisting due to the "/" character being found at the
                    start of the value, which is usually indicative of being a
                    path and thus might not be valid on the system where the
                    SDK is installed.
                </para>

                <para>
                    For additional information on how to customize the
                    extensible SDK's configuration, see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-configuring-the-extensible-sdk'>Configuring the Extensible SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_NAME'><glossterm>SDK_NAME</glossterm>
            <info>
                SDK_NAME[doc] = "The base name for SDK output files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name for SDK output files.
                    The name is derived from the
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>,
                    <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
                    <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>,
                    <link linkend='var-IMAGE_BASENAME'><filename>IMAGE_BASENAME</filename></link>,
                    and
                    <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>
                    variables:
                    <literallayout class='monospaced'>
     SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${IMAGE_BASENAME}-${TUNE_PKGARCH}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_OS'><glossterm>SDK_OS</glossterm>
            <info>
                SDK_OS[doc] = "The operating system for which the SDK will be built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the operating system for which the SDK
                    will be built.
                    The default value is the value of
                    <link linkend='var-BUILD_OS'><filename>BUILD_OS</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_OUTPUT'><glossterm>SDK_OUTPUT</glossterm>
            <info>
                SDK_OUTPUT[doc] = "The location used by the OpenEmbedded build system when creating SDK output."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location used by the OpenEmbedded build system when
                    creating SDK output.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the variable as follows:
                    <literallayout class='monospaced'>
     SDK_DIR = "${WORKDIR}/sdk"
     SDK_OUTPUT = "${SDK_DIR}/image"
     SDK_DEPLOY = "${DEPLOY_DIR}/sdk"
                    </literallayout>
                    <note>
                        The <filename>SDK_OUTPUT</filename> directory is a
                        temporary directory as it is part of
                        <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
                        by way of
                        <link linkend='var-SDK_DIR'><filename>SDK_DIR</filename></link>.
                        The final output directory is
                        <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_PACKAGE_ARCHS'><glossterm>SDK_PACKAGE_ARCHS</glossterm>
            <info>
                SDK_PACKAGE_ARCHS[doc] = "Specifies a list of architectures compatible with the SDK machine. This variable is set automatically and should not normally be hand-edited."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of architectures compatible with
                    the SDK machine.
                    This variable is set automatically and should not
                    normally be hand-edited.
                    Entries are separated using spaces and listed in order
                    of priority.
                    The default value for
                    <filename>SDK_PACKAGE_ARCHS</filename> is "all any noarch
                    ${SDK_ARCH}-${SDKPKGSUFFIX}".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_POSTPROCESS_COMMAND'><glossterm>SDK_POSTPROCESS_COMMAND</glossterm>
            <info>
                SDK_POSTPROCESS_COMMAND[doc] = "Specifies a list of functions to call once the OpenEmbedded build system creates the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call once the
                    OpenEmbedded build system creates the SDK.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     SDK_POSTPROCESS_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

                <para>
                    If you need to pass an SDK path to a command within a
                    function, you can use
                    <filename>${SDK_DIR}</filename>, which points to
                    the parent directory used by the OpenEmbedded build system
                    when creating SDK output.
                    See the
                    <link linkend='var-SDK_DIR'><filename>SDK_DIR</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_PREFIX'><glossterm>SDK_PREFIX</glossterm>
            <info>
                SDK_PREFIX[doc] = "The toolchain binary prefix used for nativesdk recipes."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The toolchain binary prefix used for
                    <filename>nativesdk</filename> recipes.
                    The OpenEmbedded build system uses the
                    <filename>SDK_PREFIX</filename> value to set the
                    <link linkend='var-TARGET_PREFIX'><filename>TARGET_PREFIX</filename></link>
                    when building <filename>nativesdk</filename> recipes.
                    The default value is "${SDK_SYS}-".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_RECRDEP_TASKS'><glossterm>SDK_RECRDEP_TASKS</glossterm>
            <info>
                SDK_RECRDEP_TASKS[doc] = "A list of shared state tasks added to the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of shared state tasks added to the extensible SDK.
                    By default, the following tasks are added:
                    <literallayout class='monospaced'>
     do_populate_lic
     do_package_qa
     do_populate_sysroot
     do_deploy
                    </literallayout>
                    Despite the default value of "" for the
                    <filename>SDK_RECRDEP_TASKS</filename> variable, the
                    above four tasks are always added to the SDK.
                    To specify tasks beyond these four, you need to use
                    the <filename>SDK_RECRDEP_TASKS</filename> variable (e.g.
                    you are defining additional tasks that are needed in
                    order to build
                    <link linkend='var-SDK_TARGETS'><filename>SDK_TARGETS</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_SYS'><glossterm>SDK_SYS</glossterm>
            <info>
                SDK_SYS[doc] = "Specifies the system, including the architecture and the operating system, for which the SDK will be built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the system, including the architecture and the
                    operating system, for which the SDK will be built.
                </para>

                <para>
                    The OpenEmbedded build system automatically sets this
                    variable based on
                    <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>,
                    <link linkend='var-SDK_VENDOR'><filename>SDK_VENDOR</filename></link>,
                    and
                    <link linkend='var-SDK_OS'><filename>SDK_OS</filename></link>.
                    You do not need to set the <filename>SDK_SYS</filename>
                    variable yourself.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_TARGET_MANIFEST'><glossterm>SDK_TARGET_MANIFEST</glossterm>
            <info>
                SDK_TARGET_MANIFEST[doc] = "The manifest file for the target part of the SDK. This file lists all the installed packages that make up the target part of the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The manifest file for the target part of the SDK.
                    This file lists all the installed packages that make up
                    the target part of the SDK.
                    The file contains package information on a line-per-package
                    basis as follows:
                    <literallayout class='monospaced'>
     <replaceable>packagename</replaceable> <replaceable>packagearch</replaceable> <replaceable>version</replaceable>
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the manifest file as follows:
                    <literallayout class='monospaced'>
     SDK_TARGET_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.target.manifest"
                    </literallayout>
                    The location is derived using the
                    <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>
                    and
                    <link linkend='var-TOOLCHAIN_OUTPUTNAME'><filename>TOOLCHAIN_OUTPUTNAME</filename></link>
                    variables.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_TARGETS'><glossterm>SDK_TARGETS</glossterm>
            <info>
                SDK_TARGETS[doc] = "A list of targets to install from shared state as part of the standard or extensible SDK installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of targets to install from shared state as part of
                    the standard or extensible SDK installation.
                    The default value is "${PN}" (i.e. the image from which
                    the SDK is built).
                </para>

                <para>
                    The <filename>SDK_TARGETS</filename> variable is an
                    internal variable and typically would not be changed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_TITLE'><glossterm>SDK_TITLE</glossterm>
            <info>
                SDK_TITLE[doc] = "The title to be printed when running the SDK installer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The title to be printed when running the SDK installer.
                    By default, this title is based on the
                    <link linkend='var-DISTRO_NAME'><filename>DISTRO_NAME</filename></link>
                    or
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>
                    variable and is set in the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SDK_TITLE ??= "${@d.getVar('DISTRO_NAME') or d.getVar('DISTRO')} SDK"
                    </literallayout>
                    For the default distribution "poky",
                    <filename>SDK_TITLE</filename> is set to
                    "Poky (Yocto Project Reference Distro)".
                </para>

                <para>
                    For information on how to change this default title,
                    see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-changing-the-sdk-installer-title'>Changing the Extensible SDK Installer Title</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_UPDATE_URL'><glossterm>SDK_UPDATE_URL</glossterm>
            <info>
                SDK_UPDATE_URL[doc] = "An optional URL for an update server for the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An optional URL for an update server for the extensible
                    SDK.
                    If set, the value is used as the default update server when
                    running <filename>devtool sdk-update</filename> within the
                    extensible SDK.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_VENDOR'><glossterm>SDK_VENDOR</glossterm>
            <info>
                SDK_VENDOR[doc] = "Specifies the name of the SDK vendor."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the SDK vendor.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_VERSION'><glossterm>SDK_VERSION</glossterm>
            <info>
                SDK_VERSION[doc] = "Specifies the version for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the version of the SDK.
                    The distribution configuration file (e.g.
                    <filename>/meta-poky/conf/distro/poky.conf</filename>)
                    defines the <filename>SDK_VERSION</filename> as follows:
                    <literallayout class='monospaced'>
     SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${DATE}','snapshot')}"
                    </literallayout>
                </para>

                <para>
                    For additional information, see the
                    <link linkend='var-DISTRO_VERSION'><filename>DISTRO_VERSION</filename></link>
                    and
                    <link linkend='var-DATE'><filename>DATE</filename></link>
                    variables.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKEXTPATH'><glossterm>SDKEXTPATH</glossterm>
            <info>
                SDKEXTPATH[doc] = "The default installation directory for the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The default installation directory for the Extensible SDK.
                    By default, this directory is based on the
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>
                    variable and is set in the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SDKEXTPATH ??= "~/${@d.getVar('DISTRO')}_sdk"
                    </literallayout>
                    For the default distribution "poky", the
                    <filename>SDKEXTPATH</filename> is set to "poky_sdk".
                </para>

                <para>
                    For information on how to change this default directory,
                    see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-changing-the-default-sdk-installation-directory'>Changing the Default SDK Installation Directory</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKIMAGE_FEATURES'><glossterm>SDKIMAGE_FEATURES</glossterm>
            <info>
                SDKIMAGE_FEATURES[doc] = "Equivalent to IMAGE_FEATURES. However, this variable applies to the SDK generated from an image using the command 'bitbake -c populate_sdk imagename'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Equivalent to
                    <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>.
                    However, this variable applies to the SDK generated from an
                    image using the following command:
                    <literallayout class='monospaced'>
     $ bitbake -c populate_sdk <replaceable>imagename</replaceable>
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKMACHINE'><glossterm>SDKMACHINE</glossterm>
            <info>
                SDKMACHINE[doc] = "Specifies the architecture (i.e. i686 or x86_64) for which to build SDK items."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The machine for which the SDK is built.
                    In other words, the SDK is built such that it
                    runs on the target you specify with the
                    <filename>SDKMACHINE</filename> value.
                    The value points to a corresponding
                    <filename>.conf</filename> file under
                    <filename>conf/machine-sdk/</filename>.
                </para>

                <para>
                     You can use "i686" and "x86_64" as possible values
                     for this variable. The variable defaults to "i686"
                     and is set in the local.conf file in the Build Directory.
                     <literallayout class='monospaced'>
     SDKMACHINE ?= "i686"
                     </literallayout>
                     <note>
                         You cannot set the <filename>SDKMACHINE</filename>
                         variable in your distribution configuration file.
                         If you do, the configuration will not take affect.
                     </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKPATH'><glossterm>SDKPATH</glossterm>
            <info>
                SDKPATH[doc] = "Defines the path offered to the user for installation of the SDK that is generated by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the path offered to the user for installation
                    of the SDK that is generated by the OpenEmbedded build
                    system.
                    The path appears as the default location for installing
                    the SDK when you run the SDK's installation script.
                    You can override the offered path when you run the
                    script.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKTARGETSYSROOT'><glossterm>SDKTARGETSYSROOT</glossterm>
            <info>
                SDKTARGETSYSROOT[doc] = "Full path to the sysroot used for cross-compilation within an SDK as it will be when installed into the default SDKPATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The full path to the sysroot used for cross-compilation
                    within an SDK as it will be when installed into the
                    default
                    <link linkend='var-SDKPATH'><filename>SDKPATH</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SECTION'><glossterm>SECTION</glossterm>
            <info>
                SECTION[doc] = "The section in which packages should be categorized. Package management utilities can make use of this variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The section in which packages should be categorized.
                    Package management utilities can make use of this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SELECTED_OPTIMIZATION'><glossterm>SELECTED_OPTIMIZATION</glossterm>
            <info>
                SELECTED_OPTIMIZATION[doc] = "The variable takes the value of FULL_OPTIMIZATION unless DEBUG_BUILD = '1'. In this case, the value of DEBUG_OPTIMIZATION is used."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the optimization flags passed to the C compiler
                    when building for the target.
                    The flags are passed through the default value of the
                    <link linkend='var-TARGET_CFLAGS'><filename>TARGET_CFLAGS</filename></link>
                    variable.
                </para>

                <para>
                    The <filename>SELECTED_OPTIMIZATION</filename> variable
                    takes the value of
                    <filename><link linkend='var-FULL_OPTIMIZATION'>FULL_OPTIMIZATION</link></filename>
                    unless <filename><link linkend='var-DEBUG_BUILD'>DEBUG_BUILD</link></filename> = "1".
                    If that is the case, the value of
                    <filename><link linkend='var-DEBUG_OPTIMIZATION'>DEBUG_OPTIMIZATION</link></filename> is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SERIAL_CONSOLE'><glossterm>SERIAL_CONSOLE</glossterm>
            <info>
                SERIAL_CONSOLE[doc] = "Defines the serial consoles (TTYs) to enable using getty."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines a serial console (TTY) to enable using
                    <ulink url='https://en.wikipedia.org/wiki/Getty_(Unix)'>getty</ulink>.
                    Provide a value that specifies the baud rate followed by
                    the TTY device name separated by a space.
                    You cannot specify more than one TTY device:
                    <literallayout class='monospaced'>
     SERIAL_CONSOLE = "115200 ttyS0"
                    </literallayout>
                    <note>
                        The <filename>SERIAL_CONSOLE</filename> variable
                        is deprecated.
                        Please use the
                        <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
                        variable.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SERIAL_CONSOLES'><glossterm>SERIAL_CONSOLES</glossterm>
            <info>
                SERIAL_CONSOLES[doc] = "Defines the serial consoles (TTYs) to enable using getty."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines a serial console (TTY) to enable using
                    <ulink url='https://en.wikipedia.org/wiki/Getty_(Unix)'>getty</ulink>.
                    Provide a value that specifies the baud rate followed by
                    the TTY device name separated by a semicolon.
                    Use spaces to separate multiple devices:
                    <literallayout class='monospaced'>
     SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SERIAL_CONSOLES_CHECK'><glossterm>SERIAL_CONSOLES_CHECK</glossterm>
            <info>
                SERIAL_CONSOLES_CHECK[doc] = "Selected SERIAL_CONSOLES to check against /proc/console before enabling using getty. Supported only by SysVinit."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies serial consoles, which must be listed in
                    <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>,
                    to check against <filename>/proc/console</filename>
                    before enabling them using getty.
                    This variable allows aliasing in the format:
                    &lt;device&gt;:&lt;alias&gt;.
                    If a device was listed as "sclp_line0"
                    in <filename>/dev/</filename> and "ttyS0" was listed
                    in <filename>/proc/console</filename>, you would do the
                    following:
                    <literallayout class='monospaced'>
     SERIAL_CONSOLES_CHECK = "slcp_line0:ttyS0"
                    </literallayout>
                    This variable is currently only supported with SysVinit
                    (i.e. not with systemd).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS'><glossterm>SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS</glossterm>
            <info>
                SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS[doc] = "A list of recipe dependencies that should not be used to determine signatures of tasks from one recipe when they depend on tasks from another recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recipe dependencies that should not be used to
                    determine signatures of tasks from one recipe when they
                    depend on tasks from another recipe.
                    For example:
                    <literallayout class='monospaced'>
    SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "intone->mplayer2"
                    </literallayout>
                </para>

                <para>
                    In the previous example, <filename>intone</filename>
                    depends on <filename>mplayer2</filename>.
                </para>

                <para>
                    You can use the special token <filename>"*"</filename> on
                    the left-hand side of the dependency to match all
                    recipes except the one on the right-hand side.
                    Here is an example:
                    <literallayout class='monospaced'>
    SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "*->quilt-native"
                    </literallayout>
                </para>

                <para>
                    In the previous example, all recipes except
                    <filename>quilt-native</filename> ignore task
                    signatures from the <filename>quilt-native</filename>
                    recipe when determining their task signatures.
                </para>

                <para>
                    Use of this variable is one mechanism to remove dependencies
                    that affect task signatures and thus force rebuilds when a
                    recipe changes.
                    <note><title>Caution</title>
                        If you add an inappropriate dependency for a recipe
                        relationship, the software might break during
                        runtime if the interface of the second recipe was
                        changed after the first recipe had been built.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SIGGEN_EXCLUDERECIPES_ABISAFE'><glossterm>SIGGEN_EXCLUDERECIPES_ABISAFE</glossterm>
            <info>
                SIGGEN_EXCLUDERECIPES_ABISAFE[doc] = "A list of recipes that are completely stable and will never change."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recipes that are completely stable and will
                    never change.
                    The ABI for the recipes in the list are presented by
                    output from the tasks run to build the recipe.
                    Use of this variable is one way to remove dependencies from
                    one recipe on another that affect task signatures and
                    thus force rebuilds when the recipe changes.
                    <note><title>Caution</title>
                        If you add an inappropriate variable to this list,
                        the software might break at runtime if the
                        interface of the recipe was changed after the other
                        had been built.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SITEINFO_BITS'><glossterm>SITEINFO_BITS</glossterm>
            <info>
                SITEINFO_BITS[doc] = "Specifies the number of bits for the target system CPU."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the number of bits for the target system CPU.
                    The value should be either "32" or "64".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SITEINFO_ENDIANNESS'><glossterm>SITEINFO_ENDIANNESS</glossterm>
            <info>
                SITEINFO_ENDIANNESS[doc] = "Specifies the endian byte order of the target system. The value should be either 'le' for 'little-endian' or 'be' for 'big-endian'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the endian byte order of the target system.
                    The value should be either "le" for little-endian or "be" for big-endian.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SKIP_FILEDEPS'><glossterm>SKIP_FILEDEPS</glossterm>
            <info>
                SKIP_FILEDEPS[doc] = "Enables you to remove all files from the 'Provides' section of an RPM package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Enables removal of all files from the "Provides" section of
                    an RPM package.
                    Removal of these files is required for packages containing
                    prebuilt binaries and libraries such as
                    <filename>libstdc++</filename> and
                    <filename>glibc</filename>.
                </para>

                <para>
                    To enable file removal, set the variable to "1" in your
                    <filename>conf/local.conf</filename> configuration file
                    in your:
                    <link linkend='build-directory'>Build Directory</link>.
                    <literallayout class='monospaced'>
     SKIP_FILEDEPS = "1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOC_FAMILY'><glossterm>SOC_FAMILY</glossterm>
            <info>
                SOC_FAMILY[doc] = "Groups together machines based upon the same family of SOC (System On Chip). You typically set this variable in a common .inc file that you include in the configuration files of all the machines."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Groups together machines based upon the same family
                    of SOC (System On Chip).
                    You typically set this variable in a common
                    <filename>.inc</filename> file that you include in the
                    configuration files of all the machines.
                    <note>
                        You must include
                        <filename>conf/machine/include/soc-family.inc</filename>
                        for this variable to appear in
                        <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOLIBS'><glossterm>SOLIBS</glossterm>
            <info>
                SOLIBS[doc] = "Defines the suffix for shared libraries used on the target platform."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the suffix for shared libraries used on the
                    target platform.
                    By default, this suffix is ".so.*" for all Linux-based
                    systems and is defined in the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file.
                </para>

                <para>
                    You will see this variable referenced in the default values
                    of <filename>FILES_${PN}</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOLIBSDEV'><glossterm>SOLIBSDEV</glossterm>
            <info>
                SOLIBSDEV[doc] = "Defines the suffix for the development symbolic link (symlink) for shared libraries on the target platform."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the suffix for the development symbolic link
                    (symlink) for shared libraries on the target platform.
                    By default, this suffix is ".so" for Linux-based
                    systems and is defined in the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file.
                </para>

                <para>
                    You will see this variable referenced in the default values
                    of <filename>FILES_${PN}-dev</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOURCE_MIRROR_FETCH'><glossterm>SOURCE_MIRROR_FETCH</glossterm>
            <info>
                SOURCE_MIRROR_FETCH[doc] = "Set as part of a source mirror generation script to skip COMPATIBLE_MACHINE and COMPATIBLE_HOST checks."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When you are fetching files to create a mirror of sources
                    (i.e. creating a source mirror), setting
                    <filename>SOURCE_MIRROR_FETCH</filename> to "1" in your
                    <filename>local.conf</filename> configuration file ensures
                    the source for all recipes are fetched regardless of
                    whether or not a recipe is compatible with the
                    configuration.
                    A recipe is considered incompatible with the currently
                    configured machine when either or both the
                    <link linkend='var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></link>
                    variable and
                    <link linkend='var-COMPATIBLE_HOST'><filename>COMPATIBLE_HOST</filename></link>
                    variables specify compatibility with a machine other
                    than that of the current machine or host.
                    <note><title>Warning</title>
                        Do not set the
                        <filename>SOURCE_MIRROR_FETCH</filename> variable
                        unless you are creating a source mirror.
                        In other words, do not set the variable during a
                        normal build.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOURCE_MIRROR_URL'><glossterm>SOURCE_MIRROR_URL</glossterm>
            <info>
                SOURCE_MIRROR_URL[doc] = "URL to source mirror that will be used before fetching from original SRC_URI."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines your own
                    <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
                    from which to first fetch source before attempting to fetch
                    from the upstream specified in
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
                </para>

                <para>
                    To use this variable, you must globally inherit the
                    <link linkend='ref-classes-own-mirrors'><filename>own-mirrors</filename></link>
                    class and then provide the URL to your mirrors.
                    Here is the general syntax:
                    <literallayout class='monospaced'>
     INHERIT += "own-mirrors"
     SOURCE_MIRROR_URL = "http://<replaceable>example</replaceable>.com/<replaceable>my_source_mirror</replaceable>"
                    </literallayout>
                    <note>
                        You can specify only a single URL in
                        <filename>SOURCE_MIRROR_URL</filename>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SPDXLICENSEMAP'><glossterm>SPDXLICENSEMAP</glossterm>
            <info>
                SPDXLICENSEMAP[doc] = "Maps commonly used license names to their SPDX counterparts found in meta/files/common-licenses/."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Maps commonly used license names to their SPDX counterparts
                    found in <filename>meta/files/common-licenses/</filename>.
                    For the default <filename>SPDXLICENSEMAP</filename>
                    mappings, see the
                    <filename>meta/conf/licenses.conf</filename> file.
                </para>

                <para>
                    For additional information, see the
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SPECIAL_PKGSUFFIX'><glossterm>SPECIAL_PKGSUFFIX</glossterm>
            <info>
                SPECIAL_PKGSUFFIX[doc] = "A list of prefixes for PN used by the OpenEmbedded build system to create variants of recipes or packages. The list specifies the prefixes to strip off during certain circumstances such as the generation of the BPN variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of prefixes for <link linkend='var-PN'><filename>PN</filename></link> used by the
                    OpenEmbedded build system to create variants of recipes or packages.
                    The list specifies the prefixes to strip off during certain circumstances
                    such as the generation of the <link linkend='var-BPN'><filename>BPN</filename></link> variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SPL_BINARY'><glossterm>SPL_BINARY</glossterm>
            <info>
                SPL_BINARY[doc] = "The file type of the Secondary Program Loader (SPL)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The file type for the Secondary Program Loader (SPL).
                    Some devices use an SPL from which to boot (e.g. the
                    BeagleBone development board).
                    For such cases, you can declare the file type of the
                    SPL binary in the <filename>u-boot.inc</filename> include
                    file, which is used in the U-Boot recipe.
                </para>

                <para>
                    The SPL file type is set to "null" by default in the
                    <filename>u-boot.inc</filename> file as follows:
                    <literallayout class='monospaced'>
     # Some versions of u-boot build an SPL (Second Program Loader) image that
     # should be packaged along with the u-boot binary as well as placed in the
     # deploy directory.  For those versions they can set the following variables
     # to allow packaging the SPL.
     SPL_BINARY ?= ""
     SPL_BINARYNAME ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}"
     SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}"
     SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}"
                    </literallayout>
                    The <filename>SPL_BINARY</filename> variable helps form
                    various <filename>SPL_*</filename> variables used by
                    the OpenEmbedded build system.
                </para>

                <para>
                    See the BeagleBone machine configuration example in the
                    "<ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-bitbake-layers-script'>Creating a new BSP Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
                    section in the Yocto Project Board Support Package
                    Developer's Guide for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRC_URI'><glossterm>SRC_URI</glossterm>
            <info>
                SRC_URI[doc] = "The list of source files - local or remote. This variable tells the OpenEmbedded build system what bits to pull in for the build and how to pull them in."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of source files - local or remote.
                    This variable tells the OpenEmbedded build system which bits
                    to pull in for the build and how to pull them in.
                    For example, if the recipe or append file only needs to
                    fetch a tarball from the Internet, the recipe or
                    append file uses a single <filename>SRC_URI</filename>
                    entry.
                    On the other hand, if the recipe or append file needs to
                    fetch a tarball, apply two patches, and include a custom
                    file, the recipe or append file would include four
                    instances of the variable.
                </para>

                <para>
                    The following list explains the available URI protocols.
                    URI protocols are highly dependent on particular BitBake
                    Fetcher submodules.
                    Depending on the fetcher BitBake uses, various URL
                    parameters are employed.
                    For specifics on the supported Fetchers, see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#bb-fetchers'>Fetchers</ulink>"
                    section in the BitBake User Manual.
                    <itemizedlist>
                        <listitem><para><emphasis><filename>file://</filename> -</emphasis>
                            Fetches files, which are usually files shipped with
                            the
                            <link linkend='metadata'>Metadata</link>,
                            from the local machine (e.g.
                            <ulink url='&YOCTO_DOCS_OM_URL;#patching-dev-environment'>patch</ulink>
                            files).
                            The path is relative to the
                            <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                            variable.
                            Thus, the build system searches, in order, from the
                            following directories, which are assumed to be a
                            subdirectories of the directory in which the
                            recipe file (<filename>.bb</filename>) or
                            append file (<filename>.bbappend</filename>)
                            resides:
                            <itemizedlist>
                                <listitem><para><emphasis><filename>${BPN}</filename> -</emphasis>
                                    The base recipe name without any special
                                    suffix or version numbers.
                                    </para></listitem>
                                <listitem><para><emphasis><filename>${BP}</filename> -</emphasis>
                                    <filename>${<link linkend='var-BPN'>BPN</link>}-${PV}</filename>.
                                    The base recipe name and version but without
                                    any special package name suffix.
                                    </para></listitem>
                                <listitem><para><emphasis>files -</emphasis>
                                    Files within a directory, which is named
                                    <filename>files</filename> and is also
                                    alongside the recipe or append file.
                                    </para></listitem>
                            </itemizedlist>
                            <note>
                                If you want the build system to pick up files
                                specified through a
                                <filename>SRC_URI</filename>
                                statement from your append file, you need to be
                                sure to extend the
                                <filename>FILESPATH</filename>
                                variable by also using the
                                <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
                                variable from within your append file.
                            </note>
                            </para></listitem>
                        <listitem><para><emphasis><filename>bzr://</filename> -</emphasis> Fetches files from a
                            Bazaar revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>git://</filename> -</emphasis> Fetches files from a
                            Git revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>osc://</filename> -</emphasis> Fetches files from
                            an OSC (OpenSUSE Build service) revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>repo://</filename> -</emphasis> Fetches files from
                            a repo (Git) repository.</para></listitem>
                        <listitem><para><emphasis><filename>ccrc://</filename> -</emphasis>
                            Fetches files from a ClearCase repository.
                            </para></listitem>
                        <listitem><para><emphasis><filename>http://</filename> -</emphasis> Fetches files from
                            the Internet using <filename>http</filename>.</para></listitem>
                        <listitem><para><emphasis><filename>https://</filename> -</emphasis> Fetches files
                            from the Internet using <filename>https</filename>.</para></listitem>
                        <listitem><para><emphasis><filename>ftp://</filename> -</emphasis> Fetches files
                            from the Internet using <filename>ftp</filename>.</para></listitem>
                        <listitem><para><emphasis><filename>cvs://</filename> -</emphasis> Fetches files from
                            a CVS revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>hg://</filename> -</emphasis> Fetches files from
                            a Mercurial (<filename>hg</filename>) revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>p4://</filename> -</emphasis> Fetches files from
                            a Perforce (<filename>p4</filename>) revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>ssh://</filename> -</emphasis> Fetches files from
                            a secure shell.</para></listitem>
                        <listitem><para><emphasis><filename>svn://</filename> -</emphasis> Fetches files from
                            a Subversion (<filename>svn</filename>) revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>npm://</filename> -</emphasis> Fetches JavaScript
                            modules from a registry.
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    Standard and recipe-specific options for <filename>SRC_URI</filename> exist.
                    Here are standard options:
                    <itemizedlist>
                        <listitem><para><emphasis><filename>apply</filename> -</emphasis> Whether to apply
                            the patch or not.
                            The default action is to apply the patch.</para></listitem>
                        <listitem><para><emphasis><filename>striplevel</filename> -</emphasis> Which
                            striplevel to use when applying the patch.
                            The default level is 1.</para></listitem>
                        <listitem><para><emphasis><filename>patchdir</filename> -</emphasis> Specifies
                            the directory in which the patch should be applied.
                            The default is <filename>${</filename><link linkend='var-S'><filename>S</filename></link><filename>}</filename>.
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    Here are options specific to recipes building code from a revision control system:
                    <itemizedlist>
                        <listitem><para><emphasis><filename>mindate</filename> -</emphasis>
                            Apply the patch only if
                            <link linkend='var-SRCDATE'><filename>SRCDATE</filename></link>
                            is equal to or greater than <filename>mindate</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>maxdate</filename> -</emphasis>
                            Apply the patch only if <filename>SRCDATE</filename>
                            is not later than <filename>maxdate</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>minrev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is equal to or greater than <filename>minrev</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>maxrev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is not later than <filename>maxrev</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>rev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is equal to <filename>rev</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>notrev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is not equal to <filename>rev</filename>.
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    Here are some additional options worth mentioning:
                    <itemizedlist>
                        <listitem><para><emphasis><filename>unpack</filename> -</emphasis> Controls
                            whether or not to unpack the file if it is an archive.
                            The default action is to unpack the file.</para></listitem>
                        <listitem><para><emphasis><filename>destsuffix</filename> -</emphasis> Places the file
                            (or extracts its contents) into the specified
                            subdirectory of <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
                            when the Git fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>subdir</filename> -</emphasis> Places the file
                            (or extracts its contents) into the specified
                            subdirectory of <filename>WORKDIR</filename>
                            when the local (<filename>file://</filename>)
                            fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>localdir</filename> -</emphasis> Places the file
                            (or extracts its contents) into the specified
                            subdirectory of <filename>WORKDIR</filename> when
                            the CVS fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>subpath</filename> -</emphasis>
                            Limits the checkout to a specific subpath of the
                            tree when using the Git fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>name</filename> -</emphasis> Specifies a
                            name to be used for association with <filename>SRC_URI</filename> checksums
                            when you have more than one file specified in <filename>SRC_URI</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>downloadfilename</filename> -</emphasis> Specifies
                            the filename used when storing the downloaded file.</para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRC_URI_OVERRIDES_PACKAGE_ARCH'><glossterm>SRC_URI_OVERRIDES_PACKAGE_ARCH</glossterm>
            <info>
                SRC_URI_OVERRIDES_PACKAGE_ARCH[doc] = "By default, the OpenEmbedded build system automatically detects whether SRC_URI contains files that are machine-specific. If so, the build system automatically changes PACKAGE_ARCH. Setting this variable to '0' disables this behavior."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    By default, the OpenEmbedded build system automatically detects whether
                    <filename><link linkend='var-SRC_URI'>SRC_URI</link></filename>
                    contains files that are machine-specific.
                    If so, the build system automatically changes
                    <filename><link linkend='var-PACKAGE_ARCH'>PACKAGE_ARCH</link></filename>.
                    Setting this variable to "0" disables this behavior.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRCDATE'><glossterm>SRCDATE</glossterm>
            <info>
                SRCDATE[doc] = "The date of the source code used to build the package. This variable applies only if the source was fetched from a Source Code Manager (SCM)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The date of the source code used to build the package.
                    This variable applies only if the source was fetched from a Source Code Manager (SCM).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRCPV'><glossterm>SRCPV</glossterm>
            <info>
                SRCPV[doc] = "Returns the version string of the current package. This string is used to help define the value of PV."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Returns the version string of the current package.
                    This string is used to help define the value of
                    <link linkend='var-PV'><filename>PV</filename></link>.
                </para>

                <para>
                    The <filename>SRCPV</filename> variable is defined in the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file in the
                    <link linkend='source-directory'>Source Directory</link>
                    as follows:
                    <literallayout class='monospaced'>
     SRCPV = "${@bb.fetch2.get_srcrev(d)}"
                    </literallayout>
                </para>

                <para>
                    Recipes that need to define <filename>PV</filename> do so
                    with the help of the <filename>SRCPV</filename>.
                    For example, the <filename>ofono</filename> recipe
                    (<filename>ofono_git.bb</filename>) located in
                    <filename>meta/recipes-connectivity</filename> in the
                    Source Directory defines <filename>PV</filename> as
                    follows:
                    <literallayout class='monospaced'>
     PV = "0.12-git${SRCPV}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRCREV'><glossterm>SRCREV</glossterm>
            <info>
                SRCREV[doc] = "The revision of the source code used to build the package. This variable applies to Subversion, Git, Mercurial, and Bazaar only."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The revision of the source code used to build the package.
                    This variable applies to Subversion, Git, Mercurial, and
                    Bazaar only.
                    Note that if you want to build a fixed revision and you
                    want to avoid performing a query on the remote repository
                    every time BitBake parses your recipe, you should specify
                    a <filename>SRCREV</filename> that is a
                    full revision identifier and not just a tag.
                    <note>
                        For information on limitations when inheriting the
                        latest revision of software using
                        <filename>SRCREV</filename>, see the
                        <link linkend='var-AUTOREV'><filename>AUTOREV</filename></link>
                        variable description and the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#automatically-incrementing-a-binary-package-revision-number'>Automatically Incrementing a Binary Package Revision Number</ulink>"
                        section, which is in the Yocto Project Development
                        Tasks Manual.
                    </note>
                </para>

            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_DIR'><glossterm>SSTATE_DIR</glossterm>
            <info>
                SSTATE_DIR[doc] = "The directory for the shared state cache."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory for the shared state cache.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_MIRROR_ALLOW_NETWORK'><glossterm>SSTATE_MIRROR_ALLOW_NETWORK</glossterm>
            <info>
                SSTATE_MIRROR_ALLOW_NETWORK[doc] = "If set to "1", allows fetches from mirrors that are specified in SSTATE_MIRRORS to work even when fetching from the network is disabled by setting BB_NO_NETWORK to "1"."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "1", allows fetches from
                    mirrors that are specified in
                    <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
                    to work even when fetching from the network is
                    disabled by setting <filename>BB_NO_NETWORK</filename>
                    to "1".
                    Using the
                    <filename>SSTATE_MIRROR_ALLOW_NETWORK</filename>
                    variable is useful if you have set
                    <filename>SSTATE_MIRRORS</filename> to point to an
                    internal server for your shared state cache, but
                    you want to disable any other fetching from the network.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_MIRRORS'><glossterm>SSTATE_MIRRORS</glossterm>
            <info>
                SSTATE_MIRRORS[doc] = "Configures the OpenEmbedded build system to search other mirror locations for prebuilt cache data objects before building out the data. You can specify a filesystem directory or a remote URL such as HTTP or FTP."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Configures the OpenEmbedded build system to search other
                    mirror locations for prebuilt cache data objects before
                    building out the data.
                    This variable works like fetcher
                    <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
                    and <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
                    and points to the cache locations to check for the shared
                    state (sstate) objects.
                </para>

                <para>
                    You can specify a filesystem directory or a remote URL such
                    as HTTP or FTP.
                    The locations you specify need to contain the shared state
                    cache (sstate-cache) results from previous builds.
                    The sstate-cache you point to can also be from builds on
                    other machines.
                </para>

                <para>
                    When pointing to sstate build artifacts on another machine
                    that uses a different GCC version for native builds,
                    you must configure <filename>SSTATE_MIRRORS</filename>
                    with a regular expression that maps local search paths
                    to server paths.
                    The paths need to take into account
                    <link linkend='var-NATIVELSBSTRING'><filename>NATIVELSBSTRING</filename></link>
                    set by the
                    <link linkend='ref-classes-uninative'><filename>uninative</filename></link>
                    class.
                    For example, the following maps the local search path
                    <filename>universal-4.9</filename> to the server-provided
                    path <replaceable>server_url_sstate_path</replaceable>:
                    <literallayout class='monospaced'>
     SSTATE_MIRRORS ?= file://universal-4.9/(.*) http://<replaceable>server_url_sstate_path</replaceable>/universal-4.8/\1 \n
                    </literallayout>
                </para>

                <para>
                    If a mirror uses the same structure as
                    <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>,
                    you need to add
                    "PATH" at the end as shown in the examples below.
                    The build system substitutes the correct path within the
                    directory structure.
                    <literallayout class='monospaced'>
     SSTATE_MIRRORS ?= "\
     file://.* http://<replaceable>someserver</replaceable>.tld/share/sstate/PATH;downloadfilename=PATH \n \
     file://.* file:///<replaceable>some-local-dir</replaceable>/sstate/PATH"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_SCAN_FILES'><glossterm>SSTATE_SCAN_FILES</glossterm>
            <info>
                SSTATE_SCAN_FILES[doc] = "Controls the list of files the OpenEmbedded build system scans for hardcoded installation paths."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Controls the list of files the OpenEmbedded build system
                    scans for hardcoded installation paths. The variable uses a
                    space-separated list of filenames (not paths) with standard
                    wildcard characters allowed.
                </para>

                <para>
                    During a build, the OpenEmbedded build system creates a
                    shared state (sstate) object during the first stage of
                    preparing the sysroots. That object is scanned for
                    hardcoded paths for original installation locations.
                    The list of files that are scanned for paths is controlled
                    by the <filename>SSTATE_SCAN_FILES</filename> variable.
                    Typically, recipes add files they want to be scanned to the
                    value of <filename>SSTATE_SCAN_FILES</filename> rather than
                    the variable being comprehensively set. The
                    <link linkend='ref-classes-sstate'><filename>sstate</filename></link>
                    class specifies the default list of files.
                </para>

                <para>
                    For details on the process, see the
                    <link linkend='ref-classes-staging'><filename>staging</filename></link>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BASE_LIBDIR_NATIVE'><glossterm>STAGING_BASE_LIBDIR_NATIVE</glossterm>
            <info>
                STAGING_BASE_LIBDIR_NATIVE[doc] = "Specifies the path to the /lib subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/lib</filename>
                    subdirectory of the sysroot directory for the
                    build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BASELIBDIR'><glossterm>STAGING_BASELIBDIR</glossterm>
            <info>
                STAGING_BASELIBDIR[doc] = "Specifies the path to the /lib subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/lib</filename>
                    subdirectory of the sysroot directory for the target
                    for which the current recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BINDIR'><glossterm>STAGING_BINDIR</glossterm>
            <info>
                STAGING_BINDIR[doc] = "Specifies the path to the /usr/bin subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the
                    <filename>/usr/bin</filename> subdirectory of the
                    sysroot directory for the target for which the current
                    recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BINDIR_CROSS'><glossterm>STAGING_BINDIR_CROSS</glossterm>
            <info>
                STAGING_BINDIR_CROSS[doc] = "Specifies the path to the directory containing binary configuration scripts. These scripts provide configuration information for other software that wants to make use of libraries or include files provided by the software associated with the script."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the directory containing binary
                    configuration scripts.
                    These scripts provide configuration information for
                    other software that wants to make use of libraries or
                    include files provided by the software associated with
                    the script.
                    <note>
                        This style of build configuration has been largely
                        replaced by <filename>pkg-config</filename>.
                        Consequently, if <filename>pkg-config</filename>
                        is supported by the library to which you are linking,
                        it is recommended you use
                        <filename>pkg-config</filename> instead of a
                        provided configuration script.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BINDIR_NATIVE'><glossterm>STAGING_BINDIR_NATIVE</glossterm>
            <info>
                STAGING_BINDIR_NATIVE[doc] = "Specifies the path to the /usr/bin subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the
                    <filename>/usr/bin</filename> subdirectory of the
                    sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DATADIR'><glossterm>STAGING_DATADIR</glossterm>
            <info>
                STAGING_DATADIR[doc] = "Specifies the path to the /usr/share subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                 <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                     Specifies the path to the <filename>/usr/share</filename>
                     subdirectory of the sysroot directory for the target
                     for which the current recipe is being built
                     (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DATADIR_NATIVE'><glossterm>STAGING_DATADIR_NATIVE</glossterm>
            <info>
                STAGING_DATADIR_NATIVE[doc] = "Specifies the path to the /usr/share subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/share</filename>
                    subdirectory of the sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR'><glossterm>STAGING_DIR</glossterm>
            <info>
                STAGING_DIR[doc] = "Helps construct the recipe-sysroots directory, which is used during packaging."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Helps construct the <filename>recipe-sysroots</filename>
                    directory, which is used during packaging.
                </para>

                <para>
                    For information on how staging for recipe-specific
                    sysroots occurs, see the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task, the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#new-sharing-files-between-recipes'>Sharing Files Between Recipes</ulink>"
                    section in the Yocto Project Development Tasks Manual, the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#configuration-compilation-and-staging-dev-environment'>Configuration, Compilation, and Staging</ulink>"
                    section in the Yocto Project Overview and Concepts Manual,
                    and the
                    <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>
                    variable.
                    <note>
                        Recipes should never write files directly under
                        the <filename>STAGING_DIR</filename> directory because
                        the OpenEmbedded build system
                        manages the directory automatically.
                        Instead, files should be installed to
                        <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>
                        within your recipe's
                        <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                        task and then the OpenEmbedded build system will
                        stage a subset of those files into the sysroot.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR_HOST'><glossterm>STAGING_DIR_HOST</glossterm>
            <info>
                STAGING_DIR_HOST[doc] = "Specifies the path to the sysroot directory for the system that the component is built to run on."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the sysroot directory for the system
                    on which the component is built to run (the system that
                    hosts the component).
                    For most recipes, this sysroot is the one in which that
                    recipe's
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task copies files.
                    Exceptions include <filename>-native</filename> recipes,
                    where the <filename>do_populate_sysroot</filename> task
                    instead uses
                    <link linkend='var-STAGING_DIR_NATIVE'><filename>STAGING_DIR_NATIVE</filename></link>.
                    Depending on the type of recipe and the build target,
                    <filename>STAGING_DIR_HOST</filename> can have the
                    following values:
                    <itemizedlist>
                        <listitem><para>
                            For recipes building for the target machine, the
                            value is
                            "${<link linkend='var-STAGING_DIR'>STAGING_DIR</link>}/${<link linkend='var-MACHINE'>MACHINE</link>}".
                            </para></listitem>
                        <listitem><para>
                            For native recipes building for the build host, the
                            value is empty given the assumption that when
                            building for the build host, the build host's own
                            directories should be used.
                            <note>
                                <para><filename>-native</filename> recipes are
                                not installed into host paths like such as
                                <filename>/usr</filename>.
                                Rather, these recipes are installed into
                                <filename>STAGING_DIR_NATIVE</filename>.
                                When compiling <filename>-native</filename>
                                recipes, standard build environment variables
                                such as
                                <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
                                and
                                <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
                                are set up so that both host paths and
                                <filename>STAGING_DIR_NATIVE</filename> are
                                searched for libraries and headers using, for
                                example, GCC's <filename>-isystem</filename>
                                option.</para>

                                <para>Thus, the emphasis is that the
                                <filename>STAGING_DIR*</filename> variables
                                should be viewed as input variables by tasks
                                such as
                                <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>,
                                <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>,
                                and
                                <link linkend='ref-tasks-install'><filename>do_install</filename></link>.
                                Having the real system root correspond to
                                <filename>STAGING_DIR_HOST</filename> makes
                                conceptual sense for
                                <filename>-native</filename> recipes, as
                                they make use of host headers and libraries.
                                </para>
                            </note>
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR_NATIVE'><glossterm>STAGING_DIR_NATIVE</glossterm>
            <info>
                STAGING_DIR_NATIVE[doc] = "Specifies the path to the sysroot directory used when building components that run on the build host itself."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the sysroot directory used when
                    building components that run on the build host itself.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR_TARGET'><glossterm>STAGING_DIR_TARGET</glossterm>
            <info>
                STAGING_DIR_TARGET[doc] = "Specifies the path to the sysroot used for the system for which the component generates code."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the sysroot used for the system for
                    which the component generates code.
                    For components that do not generate code, which is the
                    majority, <filename>STAGING_DIR_TARGET</filename> is set
                    to match
                    <link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>.
                </para>

                <para>
                    Some recipes build binaries that can run on the target
                    system but those binaries in turn generate code for
                    another different system (e.g. cross-canadian recipes).
                    Using terminology from GNU, the primary system is referred
                    to as the "HOST" and the secondary, or different, system is
                    referred to as the "TARGET".
                    Thus, the binaries run on the "HOST" system
                    and generate binaries for the "TARGET" system.
                    The <filename>STAGING_DIR_HOST</filename> variable points
                    to the sysroot used for the "HOST" system, while
                    <filename>STAGING_DIR_TARGET</filename>
                    points to the sysroot used for the "TARGET" system.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_ETCDIR_NATIVE'><glossterm>STAGING_ETCDIR_NATIVE</glossterm>
            <info>
                STAGING_ETCDIR_NATIVE[doc] = "Specifies the path to the /etc subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/etc</filename>
                    subdirectory of the sysroot directory for the
                    build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_EXECPREFIXDIR'><glossterm>STAGING_EXECPREFIXDIR</glossterm>
            <info>
                STAGING_EXECPREFIXDIR[doc] = "Specifies the path to the /usr subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr</filename>
                    subdirectory of the sysroot directory for the target
                    for which the current recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_INCDIR'><glossterm>STAGING_INCDIR</glossterm>
            <info>
                STAGING_INCDIR[doc] = "Specifies the path to the /usr/include subdirectory of the sysroot directory for the target for which the current recipe being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the
                    <filename>/usr/include</filename> subdirectory of the
                    sysroot directory for the target for which the current
                    recipe being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_INCDIR_NATIVE'><glossterm>STAGING_INCDIR_NATIVE</glossterm>
            <info>
                STAGING_INCDIR_NATIVE[doc] = "Specifies the path to the /usr/include subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/include</filename>
                    subdirectory of the sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_KERNEL_BUILDDIR'><glossterm>STAGING_KERNEL_BUILDDIR</glossterm>
            <info>
                STAGING_KERNEL_BUILDDIR[doc] = "Points to the directory containing the kernel build artifacts."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the directory containing the kernel build
                    artifacts.
                    Recipes building software that needs to access kernel
                    build artifacts
                    (e.g. <filename>systemtap-uprobes</filename>) can look in
                    the directory specified with the
                    <filename>STAGING_KERNEL_BUILDDIR</filename> variable to
                    find these artifacts after the kernel has been built.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_KERNEL_DIR'><glossterm>STAGING_KERNEL_DIR</glossterm>
            <info>
                STAGING_KERNEL_DIR[doc] = "The directory with kernel headers that are required to build out-of-tree modules."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory with kernel headers that are required to build out-of-tree
                    modules.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_LIBDIR'><glossterm>STAGING_LIBDIR</glossterm>
            <info>
                STAGING_LIBDIR[doc] = "Specifies the path to the /usr/lib subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/lib</filename>
                    subdirectory of the sysroot directory for the target for
                    which the current recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_LIBDIR_NATIVE'><glossterm>STAGING_LIBDIR_NATIVE</glossterm>
            <info>
                STAGING_LIBDIR_NATIVE[doc] = "Specifies the path to the /usr/lib subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/lib</filename>
                    subdirectory of the sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAMP'><glossterm>STAMP</glossterm>
            <info>
                STAMP[doc] = "Specifies the base path used to create recipe stamp files. The path to an actual stamp file is constructed by evaluating this string and then appending additional information."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the base path used to create recipe stamp files.
                    The path to an actual stamp file is constructed by evaluating this
                    string and then appending additional information.
                    Currently, the default assignment for <filename>STAMP</filename>
                    as set in the <filename>meta/conf/bitbake.conf</filename> file
                    is:
                    <literallayout class='monospaced'>
     STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
                    </literallayout>
                </para>

                <para>
                    For information on how BitBake uses stamp files to determine
                    if a task should be rerun, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#stamp-files-and-the-rerunning-of-tasks'>Stamp Files and the Rerunning of Tasks</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>

                <para>
                    See <link linkend='var-STAMPS_DIR'><filename>STAMPS_DIR</filename></link>,
                    <link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>,
                    <link linkend='var-PN'><filename>PN</filename></link>,
                    <link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>,
                    <link linkend='var-PV'><filename>PV</filename></link>, and
                    <link linkend='var-PR'><filename>PR</filename></link> for related variable
                    information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAMPS_DIR'><glossterm>STAMPS_DIR</glossterm>
            <info>
                STAMPS_DIR[doc] = "Specifies the base directory in which the OpenEmbedded build system places stamps."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the base directory in which the OpenEmbedded
                    build system places stamps.
                    The default directory is
                    <filename>${TMPDIR}/stamps</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STRIP'><glossterm>STRIP</glossterm>
            <info>
                STRIP[doc] = "Minimal command and arguments to run 'strip' (strip symbols)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments to run
                    <filename>strip</filename>, which is used to strip
                    symbols.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SUMMARY'><glossterm>SUMMARY</glossterm>
            <info>
                SUMMARY[doc] = "The short (80 characters or less) summary of the binary package for packaging systems such as opkg, rpm, or dpkg. By default, SUMMARY is used to define the DESCRIPTION variable if DESCRIPTION is not set in the recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The short (72 characters or less) summary of the binary package for packaging
                    systems such as <filename>opkg</filename>, <filename>rpm</filename>, or
                    <filename>dpkg</filename>.
                    By default, <filename>SUMMARY</filename> is used to define
                    the <link linkend='var-DESCRIPTION'><filename>DESCRIPTION</filename></link>
                    variable if <filename>DESCRIPTION</filename> is not set
                    in the recipe.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SVNDIR'><glossterm>SVNDIR</glossterm>
            <info>
                SVNDIR[doc] = "The directory where Subversion checkouts are stored."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory in which files checked out of a Subversion
                    system are stored.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_DEFAULT_CONSOLE'><glossterm>SYSLINUX_DEFAULT_CONSOLE</glossterm>
            <info>
                SYSLINUX_DEFAULT_CONSOLE[doc] = "Specifies the kernel boot default console."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the kernel boot default console.
                    If you want to use a console other than the default,
                    set this variable in your recipe as follows where "X" is
                    the console number you want to use:
                    <literallayout class='monospaced'>
     SYSLINUX_DEFAULT_CONSOLE = "console=ttyX"
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class initially sets this variable to null but then checks
                    for a value later.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_OPTS'><glossterm>SYSLINUX_OPTS</glossterm>
            <info>
                SYSLINUX_OPTS[doc] = "Lists additional options to add to the syslinux file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists additional options to add to the syslinux file.
                    You need to set this variable in your recipe.
                    If you want to list multiple options, separate the options
                    with a semicolon character (<filename>;</filename>).
                </para>

                <para>
                    The
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class uses this variable to create a set of options.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_SERIAL'><glossterm>SYSLINUX_SERIAL</glossterm>
            <info>
                SYSLINUX_SERIAL[doc] = "Specifies the alternate serial port or turns it off."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the alternate serial port or turns it off.
                    To turn off serial, set this variable to an empty string
                    in your recipe.
                    The variable's default value is set in the
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SYSLINUX_SERIAL ?= "0 115200"
                    </literallayout>
                </para>

                <para>
                    The class checks for and uses the variable as needed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_SPLASH'><glossterm>SYSLINUX_SPLASH</glossterm>
            <info>
                SYSLINUX_SPLASH[doc] = "An .LSS file used as the background for the VGA boot menu when you use the boot menu."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An <filename>.LSS</filename> file used as the background
                    for the VGA boot menu when you use the boot menu.
                    You need to set this variable in your recipe.
                </para>

                <para>
                    The
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class checks for this variable and if found, the
                    OpenEmbedded build system installs the splash screen.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_SERIAL_TTY'><glossterm>SYSLINUX_SERIAL_TTY</glossterm>
            <info>
                SYSLINUX_SERIAL_TTY[doc] = "Specifies the alternate console=tty... kernel boot argument."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the alternate console=tty... kernel boot argument.
                    The variable's default value is set in the
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SYSLINUX_SERIAL_TTY ?= "console=ttyS0,115200"
                    </literallayout>
                </para>

                <para>
                    The class checks for and uses the variable as needed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DESTDIR'><glossterm>SYSROOT_DESTDIR</glossterm>
            <info>
                SYSROOT_DESTDIR[doc] = "Points to the temporary work directory (default ${WORKDIR}/sysroot-destdir) where the files populated into the sysroot are assembled during the do_populate_sysroot task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the temporary directory under the work directory
                    (default
                    "<filename>${</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link><filename>}/sysroot-destdir</filename>")
                    where the files populated into the sysroot are assembled
                    during the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DIRS'><glossterm>SYSROOT_DIRS</glossterm>
            <info>
                SYSROOT_DIRS[doc] = "Directories that are staged into the sysroot by the do_populate_sysroot task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Directories that are staged into the sysroot by the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task.
                    By default, the following directories are staged:
                    <literallayout class='monospaced'>
     SYSROOT_DIRS = " \
         ${includedir} \
         ${libdir} \
         ${base_libdir} \
         ${nonarch_base_libdir} \
         ${datadir} \
     "
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DIRS_BLACKLIST'><glossterm>SYSROOT_DIRS_BLACKLIST</glossterm>
            <info>
                SYSROOT_DIRS_BLACKLIST[doc] = "Directories that are not staged into the sysroot by the do_populate_sysroot task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Directories that are not staged into the sysroot by the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task.
                    You can use this variable to exclude certain subdirectories
                    of directories listed in
                    <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>
                    from staging.
                    By default, the following directories are not staged:
                    <literallayout class='monospaced'>
     SYSROOT_DIRS_BLACKLIST = " \
         ${mandir} \
         ${docdir} \
         ${infodir} \
         ${datadir}/locale \
         ${datadir}/applications \
         ${datadir}/fonts \
         ${datadir}/pixmaps \
     "
                     </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DIRS_NATIVE'><glossterm>SYSROOT_DIRS_NATIVE</glossterm>
            <info>
                SYSROOT_DIRS_NATIVE[doc] = "Extra directories staged into the sysroot by the do_populate_sysroot task for -native recipes, in addition to those specified in SYSROOT_DIRS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Extra directories staged into the sysroot by the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task for <filename>-native</filename> recipes, in addition
                    to those specified in
                    <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>.
                    By default, the following extra directories are staged:
                    <literallayout class='monospaced'>
     SYSROOT_DIRS_NATIVE = " \
         ${bindir} \
         ${sbindir} \
         ${base_bindir} \
         ${base_sbindir} \
         ${libexecdir} \
         ${sysconfdir} \
         ${localstatedir} \
     "
                    </literallayout>
                    <note>
                        Programs built by <filename>-native</filename> recipes
                        run directly from the sysroot
                        (<link linkend='var-STAGING_DIR_NATIVE'><filename>STAGING_DIR_NATIVE</filename></link>),
                        which is why additional directories containing program
                        executables and supporting files need to be staged.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_PREPROCESS_FUNCS'><glossterm>SYSROOT_PREPROCESS_FUNCS</glossterm>
            <info>
                SYSROOT_PREPROCESS_FUNCS[doc] = "A list of functions to execute after files are staged into the sysroot. These functions are usually used to apply additional processing on the staged files, or to stage additional files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of functions to execute after files are staged into
                    the sysroot.
                    These functions are usually used to apply additional
                    processing on the staged files, or to stage additional
                    files.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_AUTO_ENABLE'><glossterm>SYSTEMD_AUTO_ENABLE</glossterm>
            <info>
                SYSTEMD_AUTO_ENABLE[doc] = "For recipes that inherit the systemd class, this variable specifies whether the specified service in SYSTEMD_SERVICE should start automatically or not."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class, this variable specifies whether the specified service
                    in
                    <link linkend='var-SYSTEMD_SERVICE'><filename>SYSTEMD_SERVICE</filename></link>
                    should start automatically or not.
                    By default, the service is enabled to automatically start
                    at boot time.
                    The default setting is in the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SYSTEMD_AUTO_ENABLE ??= "enable"
                    </literallayout>
                </para>

                <para>
                    You can disable the service by setting the variable to
                    "disable".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_BOOT_CFG'><glossterm>SYSTEMD_BOOT_CFG</glossterm>
            <info>
                SYSTEMD_BOOT_CFG[doc] = "When EFI_PROVIDER is set to "systemd-boot", the SYSTEMD_BOOT_CFG variable specifies the configuration file that should be used."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When
                    <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
                    is set to "systemd-boot", the
                    <filename>SYSTEMD_BOOT_CFG</filename> variable specifies the
                    configuration file that should be used.
                    By default, the
                    <link linkend='ref-classes-systemd-boot'><filename>systemd-boot</filename></link>
                    class sets the <filename>SYSTEMD_BOOT_CFG</filename> as
                    follows:
                    <literallayout class='monospaced'>
     SYSTEMD_BOOT_CFG ?= "${<link linkend='var-S'>S</link>}/loader.conf"
                    </literallayout>
                </para>

                <para>
                    For information on Systemd-boot, see the
                    <ulink url='http://www.freedesktop.org/wiki/Software/systemd/systemd-boot/'>Systemd-boot documentation</ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_BOOT_ENTRIES'><glossterm>SYSTEMD_BOOT_ENTRIES</glossterm>
            <info>
                SYSTEMD_BOOT_ENTRIES[doc] = "When EFI_PROVIDER is set to "systemd-boot", the SYSTEMD_BOOT_ENTRIES variable specifies a list of entry files (*.conf) to install that contain one boot entry per file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When
                    <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
                    is set to "systemd-boot", the
                    <filename>SYSTEMD_BOOT_ENTRIES</filename> variable specifies
                    a list of entry files
                    (<filename>*.conf</filename>) to install that contain
                    one boot entry per file.
                    By default, the
                    <link linkend='ref-classes-systemd-boot'><filename>systemd-boot</filename></link>
                    class sets the <filename>SYSTEMD_BOOT_ENTRIES</filename> as
                    follows:
                    <literallayout class='monospaced'>
     SYSTEMD_BOOT_ENTRIES ?= ""
                    </literallayout>
                </para>

                <para>
                    For information on Systemd-boot, see the
                    <ulink url='http://www.freedesktop.org/wiki/Software/systemd/systemd-boot/'>Systemd-boot documentation</ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_BOOT_TIMEOUT'><glossterm>SYSTEMD_BOOT_TIMEOUT</glossterm>
            <info>
                SYSTEMD_BOOT_TIMEOUT[doc] = "When EFI_PROVIDER is set to "systemd-boot", the SYSTEMD_BOOT_TIMEOUT variable specifies the boot menu timeout in seconds."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When
                    <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
                    is set to "systemd-boot", the
                    <filename>SYSTEMD_BOOT_TIMEOUT</filename> variable specifies
                    the boot menu timeout in seconds.
                    By default, the
                    <link linkend='ref-classes-systemd-boot'><filename>systemd-boot</filename></link>
                    class sets the <filename>SYSTEMD_BOOT_TIMEOUT</filename> as
                    follows:
                    <literallayout class='monospaced'>
     SYSTEMD_BOOT_TIMEOUT ?= "10"
                    </literallayout>
                </para>

                <para>
                    For information on Systemd-boot, see the
                    <ulink url='http://www.freedesktop.org/wiki/Software/systemd/systemd-boot/'>Systemd-boot documentation</ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_PACKAGES'><glossterm>SYSTEMD_PACKAGES</glossterm>
            <info>
                SYSTEMD_PACKAGES[doc] = "For recipes that inherit the systemd class, this variable locates the systemd unit files when they are not found in the main recipe's package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class, this variable locates the systemd unit files when
                    they are not found in the main recipe's package.
                    By default, the
                    <filename>SYSTEMD_PACKAGES</filename> variable is set
                    such that the systemd unit files are assumed to reside in
                    the recipes main package:
                    <literallayout class='monospaced'>
     SYSTEMD_PACKAGES ?= "${PN}"
                    </literallayout>
                </para>

                <para>
                    If these unit files are not in this recipe's main
                    package, you need to use
                    <filename>SYSTEMD_PACKAGES</filename> to list the package
                    or packages in which the build system can find the systemd
                    unit files.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_SERVICE'><glossterm>SYSTEMD_SERVICE</glossterm>
            <info>
                SYSTEMD_SERVICE[doc] = "For recipes that inherit the systemd class, this variable specifies the systemd service name for a package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class, this variable specifies the systemd service name for
                    a package.
                </para>

                <para>
                    When you specify this file in your recipe, use a package
                    name override to indicate the package to which the value
                    applies.
                    Here is an example from the connman recipe:
                    <literallayout class='monospaced'>
     SYSTEMD_SERVICE_${PN} = "connman.service"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSVINIT_ENABLED_GETTYS'><glossterm>SYSVINIT_ENABLED_GETTYS</glossterm>
            <info>
                SYSVINIT_ENABLED_GETTYS[doc] = "Specifies which virtual terminals should run a getty, the default is '1'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When using
                    <ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-enabling-system-services'>SysVinit</ulink>,
                    specifies a space-separated list of the virtual terminals
                    that should run a
                    <ulink url='http://en.wikipedia.org/wiki/Getty_%28Unix%29'>getty</ulink>
                    (allowing login), assuming
                    <link linkend='var-USE_VT'><filename>USE_VT</filename></link>
                    is not set to "0".
                </para>

                <para>
                    The default value for
                    <filename>SYSVINIT_ENABLED_GETTYS</filename> is "1"
                    (i.e. only run a getty on the first virtual terminal).
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-t'><title>T</title>

        <glossentry id='var-T'><glossterm>T</glossterm>
            <info>
                T[doc] = "This variable points to a directory were BitBake places temporary files, which consist mostly of task logs and scripts, when building a particular recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable points to a directory were BitBake places
                    temporary files, which consist mostly of task logs and
                    scripts, when building a particular recipe.
                    The variable is typically set as follows:
                    <literallayout class='monospaced'>
     T = "${WORKDIR}/temp"
                    </literallayout>
                </para>

                <para>
                    The <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
                    is the directory into which BitBake unpacks and builds the
                    recipe.
                    The default <filename>bitbake.conf</filename> file sets this variable.</para>
                    <para>The <filename>T</filename> variable is not to be confused with
                    the <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link> variable,
                    which points to the root of the directory tree where BitBake
                    places the output of an entire build.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_ARCH'><glossterm>TARGET_ARCH</glossterm>
            <info>
                TARGET_ARCH[doc] = "The architecture of the device being built. The OpenEmbedded build system supports the following architectures: arm, mips, ppc, x86, x86-64."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The target machine's architecture.
                    The OpenEmbedded build system supports many
                    architectures.
                    Here is an example list of architectures supported.
                    This list is by no means complete as the architecture
                    is configurable:
                    <literallayout class='monospaced'>
     arm
     i586
     x86_64
     powerpc
     powerpc64
     mips
     mipsel
                    </literallayout>
                </para>

                <para>
                    For additional information on machine architectures, see
                    the
                    <link linkend='var-TUNE_ARCH'><filename>TUNE_ARCH</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_AS_ARCH'><glossterm>TARGET_AS_ARCH</glossterm>
            <info>
                TARGET_AS_ARCH[doc] = "Specifies architecture-specific assembler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific assembler flags for the
                    target system.
                    <filename>TARGET_AS_ARCH</filename> is initialized from
                    <link linkend='var-TUNE_ASARGS'><filename>TUNE_ASARGS</filename></link>
                    by default in the BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>):
                    <literallayout class='monospaced'>
     TARGET_AS_ARCH = "${TUNE_ASARGS}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_CC_ARCH'><glossterm>TARGET_CC_ARCH</glossterm>
            <info>
                TARGET_CC_ARCH[doc] = "Specifies architecture-specific C compiler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific C compiler flags for the
                    target system.
                    <filename>TARGET_CC_ARCH</filename> is initialized from
                    <link linkend='var-TUNE_CCARGS'><filename>TUNE_CCARGS</filename></link>
                    by default.
                    <note>
                        It is a common workaround to append
                        <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                        to <filename>TARGET_CC_ARCH</filename>
                        in recipes that build software for the target that
                        would not otherwise respect the exported
                        <filename>LDFLAGS</filename> variable.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_CC_KERNEL_ARCH'><glossterm>TARGET_CC_KERNEL_ARCH</glossterm>
            <info>
                TARGET_CC_KERNEL_ARCH[doc] = "This is a specific kernel compiler flag for a CPU or Application Binary Interface (ABI) tune."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This is a specific kernel compiler flag for a CPU or
                    Application Binary Interface (ABI) tune.
                    The flag is used rarely and only for cases where a
                    userspace
                    <link linkend='var-TUNE_CCARGS'><filename>TUNE_CCARGS</filename></link>
                    is not compatible with the kernel compilation.
                    The <filename>TARGET_CC_KERNEL_ARCH</filename> variable
                    allows the kernel (and associated modules) to use a
                    different configuration.
                    See the
                    <filename>meta/conf/machine/include/arm/feature-arm-thumb.inc</filename>
                    file in the
                    <link linkend='source-directory'>Source Directory</link>
                    for an example.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_CFLAGS'><glossterm>TARGET_CFLAGS</glossterm>
            <info>
                TARGET_CFLAGS[doc] = "Flags passed to the C compiler for the target system. This variable evaluates to the same as CFLAGS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C compiler when building
                    for the target.
                    When building in the target context,
                    <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>

                <para>
                    Additionally, the SDK's environment setup script sets
                    the <filename>CFLAGS</filename> variable in the environment
                    to the <filename>TARGET_CFLAGS</filename> value so that
                    executables built using the SDK also have the flags
                    applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_CPPFLAGS'><glossterm>TARGET_CPPFLAGS</glossterm>
            <info>
                TARGET_CPPFLAGS[doc] = "Specifies the flags to pass to the C pre-processor (i.e. to both the C and the C++ compilers) when building for the target."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C pre-processor
                    (i.e. to both the C and the C++ compilers) when building
                    for the target.
                    When building in the target context,
                    <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>

                <para>
                    Additionally, the SDK's environment setup script sets
                    the <filename>CPPFLAGS</filename> variable in the
                    environment to the <filename>TARGET_CPPFLAGS</filename>
                    value so that executables built using the SDK also have
                    the flags applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_CXXFLAGS'><glossterm>TARGET_CXXFLAGS</glossterm>
            <info>
                TARGET_CXXFLAGS[doc] = "Specifies the flags to pass to the C++ compiler when building for the target."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the C++ compiler when
                    building for the target.
                    When building in the target context,
                    <link linkend='var-CXXFLAGS'><filename>CXXFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>

                <para>
                    Additionally, the SDK's environment setup script sets
                    the <filename>CXXFLAGS</filename> variable in the
                    environment to the <filename>TARGET_CXXFLAGS</filename>
                    value so that executables built using the SDK also have
                    the flags applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_FPU'><glossterm>TARGET_FPU</glossterm>
            <info>
                TARGET_FPU[doc] = "Specifies the method for handling FPU code. For FPU-less targets, which include most ARM CPUs, the variable must be set to 'soft'. If not, the kernel emulation gets used, which results in a performance penalty."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the method for handling FPU code.
                    For FPU-less targets, which include most ARM CPUs, the variable must be
                    set to "soft".
                    If not, the kernel emulation gets used, which results in a performance penalty.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_LD_ARCH'><glossterm>TARGET_LD_ARCH</glossterm>
            <info>
                TARGET_LD_ARCH[doc] = "Specifies architecture-specific linker flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific linker flags for the
                    target system.
                    <filename>TARGET_LD_ARCH</filename> is initialized from
                    <link linkend='var-TUNE_LDARGS'><filename>TUNE_LDARGS</filename></link>
                    by default in the BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>):
                    <literallayout class='monospaced'>
     TARGET_LD_ARCH = "${TUNE_LDARGS}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_LDFLAGS'><glossterm>TARGET_LDFLAGS</glossterm>
            <info>
                TARGET_LDFLAGS[doc] = "Specifies the flags to pass to the linker when building for the target."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the flags to pass to the linker when building
                    for the target.
                    When building in the target context,
                    <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                    is set to the value of this variable by default.
                </para>

                <para>
                    Additionally, the SDK's environment setup script sets
                    the
                    <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                    variable in the environment to the
                    <filename>TARGET_LDFLAGS</filename> value so that
                    executables built using the SDK also have the flags
                    applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_OS'><glossterm>TARGET_OS</glossterm>
            <info>
                TARGET_OS[doc] = "Specifies the target's operating system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target's operating system.
                    The variable can be set to "linux" for glibc-based systems
                    (GNU C Library) and to "linux-musl" for musl libc.
                    For ARM/EABI targets, "linux-gnueabi" and "linux-musleabi"
                    possible values exist.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_PREFIX'><glossterm>TARGET_PREFIX</glossterm>
            <info>
                TARGET_PREFIX[doc] = "The prefix used for the toolchain binary target tools."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the prefix used for the toolchain binary target
                    tools.
                </para>

                <para>
                    Depending on the type of recipe and the build target,
                    <filename>TARGET_PREFIX</filename> is set as follows:
                    <itemizedlist>
                        <listitem><para>
                            For recipes building for the target machine,
                            the value is
                            "${<link linkend='var-TARGET_SYS'>TARGET_SYS</link>}-".
                            </para></listitem>
                        <listitem><para>
                            For native recipes, the build system sets the
                            variable to the value of
                            <filename>BUILD_PREFIX</filename>.
                            </para></listitem>
                        <listitem><para>
                            For native SDK recipes
                            (<filename>nativesdk</filename>), the
                            build system sets the variable to the value of
                            <filename>SDK_PREFIX</filename>.
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_SYS'><glossterm>TARGET_SYS</glossterm>
            <info>
                TARGET_SYS[doc] = "The target system is comprised of TARGET_ARCH,TARGET_VENDOR and TARGET_OS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the system, including the architecture and the
                    operating system, for which the build is occurring in
                    the context of the current recipe.
                </para>

                <para>
                    The OpenEmbedded build system automatically sets this
                    variable based on
                    <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>,
                    <link linkend='var-TARGET_VENDOR'><filename>TARGET_VENDOR</filename></link>,
                    and
                    <link linkend='var-TARGET_OS'><filename>TARGET_OS</filename></link>
                    variables.
                    <note>
                        You do not need to set the
                        <filename>TARGET_SYS</filename> variable yourself.
                    </note>
                </para>

                <para>
                    Consider these two examples:
                    <itemizedlist>
                        <listitem><para>
                            Given a native recipe on a 32-bit, x86 machine
                            running Linux, the value is "i686-linux".
                            </para></listitem>
                        <listitem><para>
                            Given a recipe being built for a little-endian,
                            MIPS target running Linux, the value might be
                            "mipsel-linux".
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_VENDOR'><glossterm>TARGET_VENDOR</glossterm>
            <info>
                TARGET_VENDOR[doc] = "The name of the target vendor."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the target vendor.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TCLIBC'><glossterm>TCLIBC</glossterm>
            <info>
                TCLIBC[doc] = "Specifies GNU standard C library (libc) variant to use during the build process. You can select 'glibc', 'musl' or 'newlib'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the GNU standard C library
                    (<filename>libc</filename>) variant to use during the
                    build process.
                    This variable replaces <filename>POKYLIBC</filename>,
                    which is no longer supported.
                </para>

                <para>
                    You can select "glibc", "musl", "newlib", or "baremetal"
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TCLIBCAPPEND'><glossterm>TCLIBCAPPEND</glossterm>
            <info>
                TCLIBCAPPEND[doc] = "Specifies a suffix appended to TMPDIR that identifies the libc variant for the build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a suffix to be appended onto the
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    value.
                    The suffix identifies the <filename>libc</filename> variant
                    for building.
                    When you are building for multiple variants with the same
                    <link linkend='build-directory'>Build Directory</link>,
                    this mechanism ensures that output for different
                    <filename>libc</filename> variants is kept separate to
                    avoid potential conflicts.
                </para>

                <para>
                    In the <filename>defaultsetup.conf</filename> file, the
                    default value of <filename>TCLIBCAPPEND</filename> is
                    "-${TCLIBC}".
                    However, distros such as poky, which normally only support
                    one <filename>libc</filename> variant, set
                    <filename>TCLIBCAPPEND</filename> to "" in their distro
                    configuration file resulting in no suffix being applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TCMODE'><glossterm>TCMODE</glossterm>
            <info>
                TCMODE[doc] = "Enables an external toolchain (where provided by an additional layer) if set to a value other than 'default'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the toolchain selector.
                    <filename>TCMODE</filename> controls the characteristics
                    of the generated packages and images by telling the
                    OpenEmbedded build system which toolchain profile to use.
                    By default, the OpenEmbedded build system builds its own
                    internal toolchain.
                    The variable's default value is "default", which uses
                    that internal toolchain.
                    <note>
                        If <filename>TCMODE</filename> is set to a value
                        other than "default", then it is your responsibility
                        to ensure that the toolchain is compatible with the
                        default toolchain.
                        Using older or newer versions of these components
                        might cause build problems.
                        See the Release Notes for the Yocto Project release
                        for the specific components with which the toolchain
                        must be compatible.
                        To access the Release Notes, go to the
                        <ulink url='&YOCTO_HOME_URL;/software-overview/downloads/'>Downloads</ulink>
                        page on the Yocto Project website and click on the
                        "RELEASE INFORMATION" link for the appropriate
                        release.
                    </note>
                </para>

                <para>
                    The <filename>TCMODE</filename> variable is similar to
                    <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
                    which controls the variant of the GNU standard C library
                    (<filename>libc</filename>) used during the build process:
                    <filename>glibc</filename> or <filename>musl</filename>.
                </para>

                <para>
                    With additional layers, it is possible to use a pre-compiled
                    external toolchain.
                    One example is the Sourcery G++ Toolchain.
                    The support for this toolchain resides in the separate
                    <trademark class='registered'>Mentor Graphics</trademark>
                    <filename>meta-sourcery</filename> layer at
                    <ulink url='http://github.com/MentorEmbedded/meta-sourcery/'></ulink>.
                </para>

                <para>
                    The layer's <filename>README</filename> file contains
                    information on how to use the Sourcery G++ Toolchain as
                    an external toolchain.
                    In summary, you must be sure to add the layer to your
                    <filename>bblayers.conf</filename> file in front of the
                    <filename>meta</filename> layer and then set the
                    <filename>EXTERNAL_TOOLCHAIN</filename>
                    variable in your <filename>local.conf</filename> file
                    to the location in which you installed the toolchain.
                </para>

                <para>
                    The fundamentals used for this example apply to any
                    external toolchain.
                    You can use <filename>meta-sourcery</filename> as a
                    template for adding support for other external toolchains.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_EXPORT_DIR'><glossterm>TEST_EXPORT_DIR</glossterm>
            <info>
                TEST_EXPORT_DIR[doc] = "The location the OpenEmbedded build system uses to export tests when the TEST_EXPORT_ONLY variable is set to "1"."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location the OpenEmbedded build system uses to export
                    tests when the
                    <link linkend='var-TEST_EXPORT_ONLY'><filename>TEST_EXPORT_ONLY</filename></link>
                    variable is set to "1".
                </para>

                <para>
                    The <filename>TEST_EXPORT_DIR</filename> variable defaults
                    to <filename>"${TMPDIR}/testimage/${PN}"</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_EXPORT_ONLY'><glossterm>TEST_EXPORT_ONLY</glossterm>
            <info>
                TEST_EXPORT_ONLY[doc] = "Specifies to export the tests only. Set this variable to "1" if you do not want to run the tests but you want them to be exported in a manner that you to run them outside of the build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies to export the tests only.
                    Set this variable to "1" if you do not want to run the
                    tests but you want them to be exported in a manner that
                    you to run them outside of the build system.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_LOG_DIR'><glossterm>TEST_LOG_DIR</glossterm>
            <info>
                TEST_LOG_DIR[doc] = "Holds the SSH log and the boot log for QEMU machines. The TEST_LOG_DIR variable defaults to "${WORKDIR}/testimage"."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Holds the SSH log and the boot log for QEMU machines.
                    The <filename>TEST_LOG_DIR</filename> variable defaults
                    to <filename>"${WORKDIR}/testimage"</filename>.
                    <note>
                        Actual test results reside in the task log
                        (<filename>log.do_testimage</filename>), which is in
                        the <filename>${WORKDIR}/temp/</filename> directory.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_POWERCONTROL_CMD'><glossterm>TEST_POWERCONTROL_CMD</glossterm>
            <info>
                TEST_POWERCONTROL_CMD[doc] = "For automated hardware testing, specifies the command to use to control the power of the target machine under test"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies the command to
                    use to control the power of the target machine under test.
                    Typically, this command would point to a script that
                    performs the appropriate action (e.g. interacting
                    with a web-enabled power strip).
                    The specified command should expect to receive as the last
                    argument "off", "on" or "cycle" specifying to power off,
                    on, or cycle (power off and then power on) the device,
                    respectively.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_POWERCONTROL_EXTRA_ARGS'><glossterm>TEST_POWERCONTROL_EXTRA_ARGS</glossterm>
            <info>
                TEST_POWERCONTROL_EXTRA_ARGS[doc] = "For automated hardware testing, specifies additional arguments to pass through to the command specified in TEST_POWERCONTROL_CMD"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies additional
                    arguments to pass through to the command specified in
                    <link linkend='var-TEST_POWERCONTROL_CMD'><filename>TEST_POWERCONTROL_CMD</filename></link>.
                    Setting <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
                    is optional.
                    You can use it if you wish, for example, to separate the
                    machine-specific and non-machine-specific parts of the
                    arguments.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_QEMUBOOT_TIMEOUT'><glossterm>TEST_QEMUBOOT_TIMEOUT</glossterm>
            <info>
                TEST_QEMUBOOT_TIMEOUT[doc] = "The time in seconds allowed for an image to boot before automated runtime tests begin to run against an image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The time in seconds allowed for an image to boot before
                    automated runtime tests begin to run against an
                    image.
                    The default timeout period to allow the boot process to
                    reach the login prompt is 500 seconds.
                    You can specify a different value in the
                    <filename>local.conf</filename> file.
                </para>

                <para>
                    For more information on testing images, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SERIALCONTROL_CMD'><glossterm>TEST_SERIALCONTROL_CMD</glossterm>
            <info>
                TEST_SERIALCONTROL_CMD[doc] = "For automated hardware testing, specifies the command to use to connect to the serial console of the target machine under test."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies the command
                    to use to connect to the serial console of the target
                    machine under test.
                    This command simply needs to connect to the serial console
                    and forward that connection to standard input and output
                    as any normal terminal program does.
                </para>

                <para>
                    For example, to use the Picocom terminal program on
                    serial device <filename>/dev/ttyUSB0</filename> at
                    115200bps, you would set the variable as follows:
                    <literallayout class='monospaced'>
     TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SERIALCONTROL_EXTRA_ARGS'><glossterm>TEST_SERIALCONTROL_EXTRA_ARGS</glossterm>
            <info>
                TEST_SERIALCONTROL_EXTRA_ARGS[doc] = "For automated hardware testing, specifies additional arguments to pass through to the command specified in TEST_SERIALCONTROL_CMD."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies additional
                    arguments to pass through to the command specified in
                    <link linkend='var-TEST_SERIALCONTROL_CMD'><filename>TEST_SERIALCONTROL_CMD</filename></link>.
                    Setting <filename>TEST_SERIALCONTROL_EXTRA_ARGS</filename>
                    is optional.
                    You can use it if you wish, for example, to separate the
                    machine-specific and non-machine-specific parts of the
                    command.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SERVER_IP'><glossterm>TEST_SERVER_IP</glossterm>
            <info>
                TEST_SERVER_IP[doc] = "The IP address of the build machine (host machine). This IP address is usually automatically detected."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The IP address of the build machine (host machine).
                    This IP address is usually automatically detected.
                    However, if detection fails, this variable needs to be set
                    to the IP address of the build machine (i.e. where
                    the build is taking place).
                    <note>
                        The <filename>TEST_SERVER_IP</filename> variable
                        is only used for a small number of tests such as
                        the "dnf" test suite, which needs to download
                        packages from
                        <filename>WORKDIR/oe-rootfs-repo</filename>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_TARGET'><glossterm>TEST_TARGET</glossterm>
            <info>
                TEST_TARGET[doc] = "For automated runtime testing, specifies the method of deploying the image and running tests on the target machine."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target controller to use when running tests
                    against a test image.
                    The default controller to use is "qemu":
                    <literallayout class='monospaced'>
     TEST_TARGET = "qemu"
                    </literallayout>
                </para>

                <para>
                    A target controller is a class that defines how an
                    image gets deployed on a target and how a target is started.
                    A layer can extend the controllers by adding a module
                    in the layer's <filename>/lib/oeqa/controllers</filename>
                    directory and by inheriting the
                    <filename>BaseTarget</filename> class, which is an abstract
                    class that cannot be used as a value of
                    <filename>TEST_TARGET</filename>.
                </para>

                <para>
                    You can provide the following arguments with
                    <filename>TEST_TARGET</filename>:
                    <itemizedlist>
                        <listitem><para><emphasis>"qemu":</emphasis>
                            Boots a QEMU image and runs the tests.
                            See the
                            "<ulink url='&YOCTO_DOCS_DEV_URL;#qemu-image-enabling-tests'>Enabling Runtime Tests on QEMU</ulink>"
                            section in the Yocto Project Development Tasks
                            Manual for more information.
                            </para></listitem>
                        <listitem><para><emphasis>"simpleremote":</emphasis>
                            Runs the tests on target hardware that is already
                            up and running.
                            The hardware can be on the network or it can be
                            a device running an image on QEMU.
                            You must also set
                            <link linkend='var-TEST_TARGET_IP'><filename>TEST_TARGET_IP</filename></link>
                            when you use "simpleremote".
                            <note>
                                This argument is defined in
                                <filename>meta/lib/oeqa/controllers/simpleremote.py</filename>.
                            </note>
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    For information on running tests on hardware, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#hardware-image-enabling-tests'>Enabling Runtime Tests on Hardware</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_TARGET_IP'><glossterm>TEST_TARGET_IP</glossterm>
            <info>
                TEST_TARGET_IP[doc] = "The IP address of your hardware under test."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The IP address of your hardware under test.
                    The <filename>TEST_TARGET_IP</filename> variable has no
                    effect when
                    <link linkend='var-TEST_TARGET'><filename>TEST_TARGET</filename></link>
                    is set to "qemu".
                </para>

                <para>
                    When you specify the IP address, you can also include a
                    port.
                    Here is an example:
                    <literallayout class='monospaced'>
     TEST_TARGET_IP = "192.168.1.4:2201"
                    </literallayout>
                    Specifying a port is useful when SSH is started on a
                    non-standard port or in cases when your hardware under test
                    is behind a firewall or network that is not directly
                    accessible from your host and you need to do port address
                    translation.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SUITES'><glossterm>TEST_SUITES</glossterm>
            <info>
                TEST_SUITES[doc] = "An ordered list of tests (modules) to run against an image when performing automated runtime testing."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An ordered list of tests (modules) to run against
                    an image when performing automated runtime testing.
                </para>

                <para>
                    The OpenEmbedded build system provides a core set of tests
                    that can be used against images.
                    <note>
                        Currently, there is only support for running these tests
                        under QEMU.
                    </note>
                    Tests include <filename>ping</filename>,
                    <filename>ssh</filename>, <filename>df</filename> among
                    others.
                    You can add your own tests to the list of tests by
                    appending <filename>TEST_SUITES</filename> as follows:
                    <literallayout class='monospaced'>
     TEST_SUITES_append = " <replaceable>mytest</replaceable>"
                    </literallayout>
                    Alternatively, you can provide the "auto" option to
                    have all applicable tests run against the image.
                    <literallayout class='monospaced'>
     TEST_SUITES_append = " auto"
                    </literallayout>
                    Using this option causes the build system to automatically
                    run tests that are applicable to the image.
                    Tests that are not applicable are skipped.
                </para>

                <para>
                    The order in which tests are run is important.
                    Tests that depend on another test must appear later in the
                    list than the test on which they depend.
                    For example, if you append the list of tests with two
                    tests (<filename>test_A</filename> and
                    <filename>test_B</filename>) where
                    <filename>test_B</filename> is dependent on
                    <filename>test_A</filename>, then you must order the tests
                    as follows:
                    <literallayout class='monospaced'>
     TEST_SUITES = " test_A test_B"
                    </literallayout>
                </para>

                <para>
                    For more information on testing images, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TESTIMAGE_AUTO'><glossterm>TESTIMAGE_AUTO</glossterm>
            <info>
                TESTIMAGE_AUTO[doc] = "Enables automatic testing of an image once it is built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Automatically runs the series of automated tests for
                    images when an image is successfully built.
                    Setting <filename>TESTIMAGE_AUTO</filename> to "1"
                    causes any image that successfully builds to automatically
                    boot under QEMU.
                    Using the variable also adds in dependencies so that any
                    SDK for which testing is requested is automatically built
                    first.
                </para>

                <para>
                    These tests are written in Python making use of the
                    <filename>unittest</filename> module, and the majority of
                    them run commands on the target system over
                    <filename>ssh</filename>.
                    You can set this variable to "1" in your
                    <filename>local.conf</filename> file in the
                    <link linkend='build-directory'>Build Directory</link>
                    to have the OpenEmbedded build system automatically run
                    these tests after an image successfully builds:
                    <literallayout class='monospaced'>
     TESTIMAGE_AUTO = "1"
                    </literallayout>
                    For more information on enabling, running, and writing
                    these tests, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
                    section in the Yocto Project Development Tasks Manual and
                    the
                    "<link linkend='ref-classes-testimage*'><filename>testimage*.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-THISDIR'><glossterm>THISDIR</glossterm>
            <info>
                THISDIR[doc] = "The directory in which the file BitBake is currently parsing is located."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory in which the file BitBake is currently
                    parsing is located.
                    Do not manually set this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TIME'><glossterm>TIME</glossterm>
            <info>
                TIME[doc] = "The time the build was started using HMS format."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The time the build was started.
                    Times appear using the hour, minute, and second (HMS)
                    format (e.g. "140159" for one minute and fifty-nine
                    seconds past 1400 hours).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TMPDIR'><glossterm>TMPDIR</glossterm>
            <info>
                TMPDIR[doc] = "The temporary directory the OpenEmbedded build system uses when it does its work building images. By default, the TMPDIR variable is named tmp within the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable is the base directory the OpenEmbedded
                    build system uses for all build output and intermediate
                    files (other than the shared state cache).
                    By default, the <filename>TMPDIR</filename> variable points
                    to <filename>tmp</filename> within the
                    <link linkend='build-directory'>Build Directory</link>.
                </para>

                <para>
                    If you want to establish this directory in a location other
                    than the default, you can uncomment and edit the following
                    statement in the
                    <filename>conf/local.conf</filename> file in the
                    <link linkend='source-directory'>Source Directory</link>:
                    <literallayout class='monospaced'>
     #TMPDIR = "${TOPDIR}/tmp"
                    </literallayout>
                    An example use for this scenario is to set
                    <filename>TMPDIR</filename> to a local disk, which does
                    not use NFS, while having the Build Directory use NFS.
                </para>

                <para>
                    The filesystem used by <filename>TMPDIR</filename> must
                    have standard filesystem semantics (i.e. mixed-case files
                    are unique, POSIX file locking, and persistent inodes).
                    Due to various issues with NFS and bugs in some
                    implementations, NFS does not meet this minimum
                    requirement.
                    Consequently, <filename>TMPDIR</filename> cannot be on
                    NFS.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOOLCHAIN_HOST_TASK'><glossterm>TOOLCHAIN_HOST_TASK</glossterm>
            <info>
                TOOLCHAIN_HOST_TASK[doc] = "This variable lists packages the OpenEmbedded build system uses when building an SDK, which contains a cross-development environment."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable lists packages the OpenEmbedded build system
                    uses when building an SDK, which contains a
                    cross-development environment.
                    The packages specified by this variable are part of the
                    toolchain set that runs on the
                    <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
                    and each package should usually have the prefix
                    <filename>nativesdk-</filename>.
                    For example, consider the following command when
                    building an SDK:
                    <literallayout class='monospaced'>
     $ bitbake -c populate_sdk <replaceable>imagename</replaceable>
                    </literallayout>
                    In this case, a default list of packages is set in this
                    variable, but you can add additional packages to the list.
                    See the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-adding-individual-packages'>Adding Individual Packages to the Standard SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual
                    for more information.
                </para>

                <para>
                    For background information on cross-development toolchains
                    in the Yocto Project development environment, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                    For information on setting up a cross-development
                    environment, see the
                    <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
                    manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOOLCHAIN_OUTPUTNAME'><glossterm>TOOLCHAIN_OUTPUTNAME</glossterm>
            <info>
                TOOLCHAIN_OUTPUTNAME[doc] = "Defines the name used for the toolchain output."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable defines the name used for the toolchain
                    output.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class sets the
                    <filename>TOOLCHAIN_OUTPUTNAME</filename> variable as
                    follows:
                    <literallayout class='monospaced'>
     TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-toolchain-${SDK_VERSION}"
                    </literallayout>
                    See the
                    <link linkend='var-SDK_NAME'><filename>SDK_NAME</filename></link>
                    and
                    <link linkend='var-SDK_VERSION'><filename>SDK_VERSION</filename></link>
                    variables for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOOLCHAIN_TARGET_TASK'><glossterm>TOOLCHAIN_TARGET_TASK</glossterm>
            <info>
                TOOLCHAIN_TARGET_TASK[doc] = "This variable lists packages the OpenEmbedded build system uses when it creates the target part of an SDK, which includes libraries and headers."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable lists packages the OpenEmbedded build system
                    uses when it creates the target part of an SDK
                    (i.e. the part built for the target hardware), which
                    includes libraries and headers.
                    Use this variable to add individual packages to the
                    part of the SDK that runs on the target.
                    See the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-adding-individual-packages'>Adding Individual Packages to the Standard SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual for
                    more information.
                </para>

                <para>
                    For background information on cross-development toolchains
                    in the Yocto Project development environment, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                    For information on setting up a cross-development
                    environment, see the
                    <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
                    manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOPDIR'><glossterm>TOPDIR</glossterm>
            <info>
                TOPDIR[doc] = "The Build Directory. BitBake automatically sets this variable. The OpenEmbedded build system uses the Build Directory when building images."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The top-level
                    <link linkend='build-directory'>Build Directory</link>.
                    BitBake automatically sets this variable when you
                    initialize your build environment using
                    <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TRANSLATED_TARGET_ARCH'><glossterm>TRANSLATED_TARGET_ARCH</glossterm>
            <info>
                TRANSLATED_TARGET_ARCH[doc] = "A sanitized version of TARGET_ARCH. This variable is used where the architecture is needed in a value where underscores are not allowed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A sanitized version of
                    <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>.
                    This variable is used where the architecture is needed in
                    a value where underscores are not allowed, for example
                    within package filenames.
                    In this case, dash characters replace any underscore
                    characters used in <filename>TARGET_ARCH</filename>.
                </para>

                <para>
                    Do not edit this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_ARCH'><glossterm>TUNE_ARCH</glossterm>
            <info>
                TUNE_ARCH[doc] = "The GNU canonical architecture for a specific architecture (i.e. arm, armeb, mips, mips64, and so forth)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The GNU canonical architecture for a specific architecture
                    (i.e. <filename>arm</filename>,
                    <filename>armeb</filename>,
                    <filename>mips</filename>,
                    <filename>mips64</filename>, and so forth).
                    BitBake uses this value to setup configuration.
                </para>

                <para>
                    <filename>TUNE_ARCH</filename> definitions are specific to
                    a given architecture.
                    The definitions can be a single static definition, or
                    can be dynamically adjusted.
                    You can see details for a given CPU family by looking at
                    the architecture's <filename>README</filename> file.
                    For example, the
                    <filename>meta/conf/machine/include/mips/README</filename>
                    file in the
                    <link linkend='source-directory'>Source Directory</link>
                    provides information for <filename>TUNE_ARCH</filename>
                    specific to the <filename>mips</filename> architecture.
                </para>

                <para>
                    <filename>TUNE_ARCH</filename> is tied closely to
                    <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>,
                    which defines the target machine's architecture.
                    The BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>) sets
                    <filename>TARGET_ARCH</filename> as follows:
                    <literallayout class='monospaced'>
     TARGET_ARCH = "${TUNE_ARCH}"
                    </literallayout>
                </para>

                <para>
                    The following list, which is by no means complete since
                    architectures are configurable, shows supported machine
                    architectures:
                    <literallayout class='monospaced'>
     arm
     i586
     x86_64
     powerpc
     powerpc64
     mips
     mipsel
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_ASARGS'><glossterm>TUNE_ASARGS</glossterm>
            <info>
                TUNE_ASARGS[doc] = "Specifies architecture-specific assembler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific assembler flags for
                    the target system.
                    The set of flags is based on the selected tune features.
                    <filename>TUNE_ASARGS</filename> is set using
                    the tune include files, which are typically under
                    <filename>meta/conf/machine/include/</filename> and are
                    influenced through
                    <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
                    For example, the
                    <filename>meta/conf/machine/include/x86/arch-x86.inc</filename>
                    file defines the flags for the x86 architecture as follows:
                    <literallayout class='monospaced'>
     TUNE_ASARGS += "${@bb.utils.contains("TUNE_FEATURES", "mx32", "-x32", "", d)}"
                    </literallayout>
                    <note>
                        Board Support Packages (BSPs) select the tune.
                        The selected tune, in turn, affects the tune variables
                        themselves (i.e. the tune can supply its own
                        set of flags).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_CCARGS'><glossterm>TUNE_CCARGS</glossterm>
            <info>
                TUNE_CCARGS[doc] = "Specifies architecture-specific C compiler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific C compiler flags for
                    the target system.
                    The set of flags is based on the selected tune features.
                    <filename>TUNE_CCARGS</filename> is set using
                    the tune include files, which are typically under
                    <filename>meta/conf/machine/include/</filename> and are
                    influenced through
                    <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
                    <note>
                        Board Support Packages (BSPs) select the tune.
                        The selected tune, in turn, affects the tune variables
                        themselves (i.e. the tune can supply its own
                        set of flags).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_LDARGS'><glossterm>TUNE_LDARGS</glossterm>
            <info>
                TUNE_LDARGS[doc] = "Specifies architecture-specific linker flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific linker flags for
                    the target system.
                    The set of flags is based on the selected tune features.
                    <filename>TUNE_LDARGS</filename> is set using
                    the tune include files, which are typically under
                    <filename>meta/conf/machine/include/</filename> and are
                    influenced through
                    <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
                    For example, the
                    <filename>meta/conf/machine/include/x86/arch-x86.inc</filename>
                    file defines the flags for the x86 architecture as follows:
                    <literallayout class='monospaced'>
     TUNE_LDARGS += "${@bb.utils.contains("TUNE_FEATURES", "mx32", "-m elf32_x86_64", "", d)}"
                    </literallayout>
                    <note>
                        Board Support Packages (BSPs) select the tune.
                        The selected tune, in turn, affects the tune variables
                        themselves (i.e. the tune can supply its own
                        set of flags).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_FEATURES'><glossterm>TUNE_FEATURES</glossterm>
            <info>
                TUNE_FEATURES[doc] = "Features used to "tune" a compiler for optimal use given a specific processor."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Features used to "tune" a compiler for optimal use
                    given a specific processor.
                    The features are defined within the tune files and allow
                    arguments (i.e. <filename>TUNE_*ARGS</filename>) to be
                    dynamically generated based on the features.
                </para>

                <para>
                    The OpenEmbedded build system verifies the features
                    to be sure they are not conflicting and that they are
                    supported.
                </para>

                <para>
                    The BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>) defines
                    <filename>TUNE_FEATURES</filename> as follows:
                    <literallayout class='monospaced'>
     TUNE_FEATURES ??= "${TUNE_FEATURES_tune-${DEFAULTTUNE}}"
                    </literallayout>
                    See the
                    <link linkend='var-DEFAULTTUNE'><filename>DEFAULTTUNE</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_PKGARCH'><glossterm>TUNE_PKGARCH</glossterm>
            <info>
                TUNE_PKGARCH[doc] = "The package architecture understood by the packaging system to define the architecture, ABI, and tuning of output packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The package architecture understood by the packaging
                    system to define the architecture, ABI, and tuning of
                    output packages.
                    The specific tune is defined using the "_tune" override
                    as follows:
                    <literallayout class='monospaced'>
     TUNE_PKGARCH_tune-<replaceable>tune</replaceable> = "<replaceable>tune</replaceable>"
                    </literallayout>
                </para>

                <para>
                    These tune-specific package architectures are defined in
                    the machine include files.
                    Here is an example of the "core2-32" tuning as used
                    in the
                    <filename>meta/conf/machine/include/tune-core2.inc</filename>
                    file:
                    <literallayout class='monospaced'>
     TUNE_PKGARCH_tune-core2-32 = "core2-32"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEABI'><glossterm>TUNEABI</glossterm>
            <info>
                TUNEABI[doc] = "An underlying ABI used by a particular tuning in a given toolchain layer. This feature allows providers using prebuilt libraries to check compatibility of a tuning against their selection of libraries."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An underlying Application Binary Interface (ABI) used by
                    a particular tuning in a given toolchain layer.
                    Providers that use prebuilt libraries can use the
                    <filename>TUNEABI</filename>,
                    <link linkend='var-TUNEABI_OVERRIDE'><filename>TUNEABI_OVERRIDE</filename></link>,
                    and
                    <link linkend='var-TUNEABI_WHITELIST'><filename>TUNEABI_WHITELIST</filename></link>
                    variables to check compatibility of tunings against their
                    selection of libraries.
                </para>

                <para>
                    If <filename>TUNEABI</filename> is undefined, then every
                    tuning is allowed.
                    See the
                    <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
                    class to see how the variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEABI_OVERRIDE'><glossterm>TUNEABI_OVERRIDE</glossterm>
            <info>
                TUNEABI_OVERRIDE[doc] = "If set, ignores TUNEABI_WHITELIST."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set, the OpenEmbedded system ignores the
                    <link linkend='var-TUNEABI_WHITELIST'><filename>TUNEABI_WHITELIST</filename></link>
                    variable.
                    Providers that use prebuilt libraries can use the
                    <filename>TUNEABI_OVERRIDE</filename>,
                    <filename>TUNEABI_WHITELIST</filename>,
                    and
                    <link linkend='var-TUNEABI'><filename>TUNEABI</filename></link>
                    variables to check compatibility of a tuning against their
                    selection of libraries.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
                    class to see how the variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEABI_WHITELIST'><glossterm>TUNEABI_WHITELIST</glossterm>
            <info>
                TUNEABI_WHITELIST[doc] = "A whitelist of permissible TUNEABI values.  If the variable is not set, all values are allowed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A whitelist of permissible
                    <link linkend='var-TUNEABI'><filename>TUNEABI</filename></link>
                    values.
                    If <filename>TUNEABI_WHITELIST</filename> is not set,
                    all tunes are allowed.
                    Providers that use prebuilt libraries can use the
                    <filename>TUNEABI_WHITELIST</filename>,
                    <link linkend='var-TUNEABI_OVERRIDE'><filename>TUNEABI_OVERRIDE</filename></link>,
                    and <filename>TUNEABI</filename> variables to check
                    compatibility of a tuning against their selection of
                    libraries.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
                    class to see how the variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNECONFLICTS'><glossterm>TUNECONFLICTS[<replaceable>feature</replaceable>]</glossterm>
            <info>
                TUNECONFLICTS[doc] = "Specifies CPU or Application Binary Interface (ABI) tuning features that conflict with specified feature."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies CPU or Application Binary Interface (ABI)
                    tuning features that conflict with <replaceable>feature</replaceable>.
                </para>

                <para>
                    Known tuning conflicts are specified in the machine include
                    files in the
                    <link linkend='source-directory'>Source Directory</link>.
                    Here is an example from the
                    <filename>meta/conf/machine/include/mips/arch-mips.inc</filename>
                    include file that lists the "o32" and "n64" features as
                    conflicting with the "n32" feature:
                    <literallayout class='monospaced'>
     TUNECONFLICTS[n32] = "o32 n64"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEVALID'><glossterm>TUNEVALID[<replaceable>feature</replaceable>]</glossterm>
            <info>
               TUNEVALID[doc] = "Descriptions, stored as flags, of valid tuning features."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a valid CPU or Application Binary Interface (ABI)
                    tuning feature.
                    The specified feature is stored as a flag.
                    Valid features are specified in the machine include files
                    (e.g. <filename>meta/conf/machine/include/arm/arch-arm.inc</filename>).
                    Here is an example from that file:
                    <literallayout class='monospaced'>
     TUNEVALID[bigendian] = "Enable big-endian mode."
                    </literallayout>
                </para>

                <para>
                    See the machine include files in the
                    <link linkend='source-directory'>Source Directory</link>
                    for these features.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-u'><title>U</title>

        <glossentry id='var-UBOOT_CONFIG'><glossterm>UBOOT_CONFIG</glossterm>
            <info>
               UBOOT_CONFIG[doc] = "Configures the UBOOT_MACHINE and can also define IMAGE_FSTYPES for individual cases."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Configures the
                    <link linkend='var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></link>
                    and can also define
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    for individual cases.
                </para>

                <para>
                    Following is an example from the
                    <filename>meta-fsl-arm</filename> layer.
                    <literallayout class='monospaced'>
     UBOOT_CONFIG ??= "sd"
     UBOOT_CONFIG[sd] = "mx6qsabreauto_config,sdcard"
     UBOOT_CONFIG[eimnor] = "mx6qsabreauto_eimnor_config"
     UBOOT_CONFIG[nand] = "mx6qsabreauto_nand_config,ubifs"
     UBOOT_CONFIG[spinor] = "mx6qsabreauto_spinor_config"
                    </literallayout>
                    In this example, "sd" is selected as the configuration
                    of the possible four for the
                    <filename>UBOOT_MACHINE</filename>.
                    The "sd" configuration defines "mx6qsabreauto_config"
                    as the value for <filename>UBOOT_MACHINE</filename>, while
                    the "sdcard" specifies the
                    <filename>IMAGE_FSTYPES</filename> to use for the U-boot
                    image.
                </para>

                <para>
                    For more information on how the
                    <filename>UBOOT_CONFIG</filename> is handled, see the
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/uboot-config.bbclass'><filename>uboot-config</filename></ulink>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_ENTRYPOINT'><glossterm>UBOOT_ENTRYPOINT</glossterm>
            <info>
               UBOOT_ENTRYPOINT[doc] = "Specifies the entry point for the U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the entry point for the U-Boot image.
                    During U-Boot image creation, the
                    <filename>UBOOT_ENTRYPOINT</filename> variable is passed
                    as a command-line parameter to the
                    <filename>uboot-mkimage</filename> utility.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_LOADADDRESS'><glossterm>UBOOT_LOADADDRESS</glossterm>
            <info>
               UBOOT_LOADADDRESS[doc] = "Specifies the load address for the U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the load address for the U-Boot image.
                    During U-Boot image creation, the
                    <filename>UBOOT_LOADADDRESS</filename> variable is passed
                    as a command-line parameter to the
                    <filename>uboot-mkimage</filename> utility.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_LOCALVERSION'><glossterm>UBOOT_LOCALVERSION</glossterm>
            <info>
               UBOOT_LOCALVERSION[doc] = "Appends a string to the name of the local version of the U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Appends a string to the name of the local version of the
                    U-Boot image.
                    For example, assuming the version of the U-Boot image
                    built was "2013.10", the full version string reported by
                    U-Boot would be "2013.10-yocto" given the following
                    statement:
                    <literallayout class='monospaced'>
     UBOOT_LOCALVERSION = "-yocto"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_MACHINE'><glossterm>UBOOT_MACHINE</glossterm>
            <info>
               UBOOT_MACHINE[doc] = "Specifies the value passed on the make command line when building a U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the value passed on the
                    <filename>make</filename> command line when building
                    a U-Boot image.
                    The value indicates the target platform configuration.
                    You typically set this variable from the machine
                    configuration file (i.e.
                    <filename>conf/machine/<replaceable>machine_name</replaceable>.conf</filename>).
                </para>

                <para>
                    Please see the "Selection of Processor Architecture and
                    Board Type" section in the U-Boot README for valid values
                    for this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_MAKE_TARGET'><glossterm>UBOOT_MAKE_TARGET</glossterm>
            <info>
               UBOOT_MAKE_TARGET[doc] = "Specifies the target called in the Makefile."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target called in the
                    <filename>Makefile</filename>.
                    The default target is "all".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_SUFFIX'><glossterm>UBOOT_SUFFIX</glossterm>
            <info>
               UBOOT_SUFFIX[doc] = "Points to the generated U-Boot extension."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the generated U-Boot extension.
                    For example, <filename>u-boot.sb</filename> has a
                    <filename>.sb</filename> extension.
                </para>

                <para>
                    The default U-Boot extension is
                    <filename>.bin</filename>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_TARGET'><glossterm>UBOOT_TARGET</glossterm>
            <info>
               UBOOT_TARGET[doc] = "Specifies the target used for building U-Boot."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target used for building U-Boot.
                    The target is passed directly as part of the "make" command
                    (e.g. SPL and AIS).
                    If you do not specifically set this variable, the
                    OpenEmbedded build process passes and uses "all" for the
                    target during the U-Boot building process.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UNKNOWN_CONFIGURE_WHITELIST'><glossterm>UNKNOWN_CONFIGURE_WHITELIST</glossterm>
            <info>
               UNKNOWN_CONFIGURE_WHITELIST[doc] = "Specifies a list of options that, if reported by the configure script as being invalid, should not generate a warning during the do_configure task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of options that, if reported by the
                    configure script as being invalid, should not generate a
                    warning during the
                    <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
                    task.
                    Normally, invalid configure options are simply not passed
                    to the configure script (e.g. should be removed from
                    <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
                    or
                    <link linkend='var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></link>).
                    However, common options, for example, exist that are passed
                    to all configure scripts at a class level that might not
                    be valid for some configure scripts.
                    It follows that no benefit exists in seeing a warning about
                    these options.
                    For these cases, the options are added to
                    <filename>UNKNOWN_CONFIGURE_WHITELIST</filename>.
                </para>

                <para>
                    The configure arguments check that uses
                    <filename>UNKNOWN_CONFIGURE_WHITELIST</filename> is part
                    of the
                    <link linkend='ref-classes-insane'><filename>insane</filename></link>
                    class and is only enabled if the recipe inherits the
                    <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPDATERCPN'><glossterm>UPDATERCPN</glossterm>
            <info>
               UPDATERCPN[doc] = "Specifies the package that contains the initscript that is enabled."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For recipes inheriting the
                    <link linkend='ref-classes-update-rc.d'><filename>update-rc.d</filename></link>
                    class, <filename>UPDATERCPN</filename> specifies
                    the package that contains the initscript that is
                    enabled.
                </para>

                <para>
                    The default value is "${PN}".
                    Given that almost all recipes that install initscripts
                    package them in the main package for the recipe, you
                    rarely need to set this variable in individual recipes.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPSTREAM_CHECK_GITTAGREGEX'><glossterm>UPSTREAM_CHECK_GITTAGREGEX</glossterm>
            <info>
               UPSTREAM_CHECK_GITTAGREGEX[doc] = "Filters relevant Git tags when fetching source from an upstream Git repository."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    You can perform a per-recipe check for what the latest
                    upstream source code version is by calling
                    <filename>bitbake -c checkpkg</filename> <replaceable>recipe</replaceable>.
                    If the recipe source code is provided from Git
                    repositories, the OpenEmbedded build system determines the
                    latest upstream version by picking the latest tag from the
                    list of all repository tags.
                </para>

                <para>
                    You can use the
                    <filename>UPSTREAM_CHECK_GITTAGREGEX</filename>
                    variable to provide a regular expression to filter only the
                    relevant tags should the default filter not work
                    correctly.
                    <literallayout class='monospaced'>
     UPSTREAM_CHECK_GITTAGREGEX = "git_tag_regex"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPSTREAM_CHECK_REGEX'><glossterm>UPSTREAM_CHECK_REGEX</glossterm>
            <info>
               UPSTREAM_CHECK_REGEX[doc] = "The regular expression the package checking system uses to parse the page pointed to by UPSTREAM_CHECK_URI."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Use the <filename>UPSTREAM_CHECK_REGEX</filename> variable
                    to specify a different regular expression instead of the
                    default one when the package checking system is parsing
                    the page found using
                    <link linkend='var-UPSTREAM_CHECK_URI'><filename>UPSTREAM_CHECK_URI</filename></link>.
                    <literallayout class='monospaced'>
     UPSTREAM_CHECK_REGEX = "package_regex"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPSTREAM_CHECK_URI'><glossterm>UPSTREAM_CHECK_URI</glossterm>
            <info>
               UPSTREAM_CHECK_URI[doc] = "The URL used by the package checking system to get the latest version of the package when source files are fetched from an upstream Git repository."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    You can perform a per-recipe check for what the latest
                    upstream source code version is by calling
                    <filename>bitbake -c checkpkg</filename> <replaceable>recipe</replaceable>.
                    If the source code is provided from tarballs, the latest
                    version is determined by fetching the directory listing
                    where the tarball is and attempting to find a later tarball.
                    When this approach does not work, you can use
                    <filename>UPSTREAM_CHECK_URI</filename> to
                    provide a different URI that contains the link to the
                    latest tarball.
                    <literallayout class='monospaced'>
     UPSTREAM_CHECK_URI = "recipe_url"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USE_DEVFS'><glossterm>USE_DEVFS</glossterm>
            <info>
               USE_DEVFS[doc] = "Determines if devtmpfs is used for /dev population."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Determines if <filename>devtmpfs</filename> is used for
                    <filename>/dev</filename> population.
                    The default value used for <filename>USE_DEVFS</filename>
                    is "1" when no value is specifically set.
                    Typically, you would set <filename>USE_DEVFS</filename>
                    to "0" for a statically populated <filename>/dev</filename>
                    directory.
                </para>

                <para>
                    See the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#selecting-dev-manager'>Selecting a Device Manager</ulink>"
                    section in the Yocto Project Development Tasks Manual for
                    information on how to use this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USE_VT'><glossterm>USE_VT</glossterm>
            <info>
               USE_VT[doc] = "When using SysVinit, determines whether or not to run a getty on any virtual terminals in order to enable logging in through those terminals."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When using
                    <ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-enabling-system-services'>SysVinit</ulink>,
                    determines whether or not to run a
                    <ulink url='http://en.wikipedia.org/wiki/Getty_%28Unix%29'>getty</ulink>
                    on any virtual terminals in order to enable logging in
                    through those terminals.
                </para>

                <para>
                    The default value used for <filename>USE_VT</filename>
                    is "1" when no default value is specifically set.
                    Typically, you would set <filename>USE_VT</filename>
                    to "0" in the machine configuration file for machines
                    that do not have a graphical display attached and
                    therefore do not need virtual terminal functionality.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USER_CLASSES'><glossterm>USER_CLASSES</glossterm>
            <info>
               USER_CLASSES[doc] = "List of additional classes to use when building images that enable extra features."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of classes to globally inherit.
                    These classes are used by the OpenEmbedded build system
                    to enable extra features (e.g.
                    <filename>buildstats</filename>,
                    <filename>image-mklibs</filename>, and so forth).
                </para>

                <para>
                    The default list is set in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USER_CLASSES ?= "buildstats image-mklibs image-prelink"
                    </literallayout>
                    For more information, see
                    <filename>meta-poky/conf/local.conf.sample</filename> in
                    the
                    <link linkend='source-directory'>Source Directory</link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_ERROR_DYNAMIC'><glossterm>USERADD_ERROR_DYNAMIC</glossterm>
            <info>
               USERADD_ERROR_DYNAMIC[doc] = "If set to 'error', forces the OpenEmbedded build system to produce an error if the user identification (uid) and group identification (gid) values are not defined in any of the files listed in USERADD_UID_TABLES and USERADD_GID_TABLES. If set to 'warn', a warning will be issued instead."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->

                    If set to <filename>error</filename>, forces the
                    OpenEmbedded build system to produce an error if the user
                    identification (<filename>uid</filename>) and group
                    identification (<filename>gid</filename>) values are not
                    defined in any of the files listed
                    in <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>
                    and <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>. If
                    set to <filename>warn</filename>, a warning will be issued
                    instead.
                </para>

                <para>
                    The default behavior for the build system is to dynamically
                    apply <filename>uid</filename> and
                    <filename>gid</filename> values.
                    Consequently, the <filename>USERADD_ERROR_DYNAMIC</filename>
                    variable is by default not set.
                    If you plan on using statically assigned
                    <filename>gid</filename> and <filename>uid</filename>
                    values, you should set
                    the <filename>USERADD_ERROR_DYNAMIC</filename> variable in
                    your <filename>local.conf</filename> file as
                    follows:
                    <literallayout class='monospaced'>
     USERADD_ERROR_DYNAMIC = "error"
                    </literallayout>
                    Overriding the default behavior implies you are going to
                    also take steps to set static <filename>uid</filename> and
                    <filename>gid</filename> values through use of the
                    <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>,
                    <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>,
                    and
                    <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
                    variables.
                </para>

                <note>
                    There is a difference in behavior between
                    setting <filename>USERADD_ERROR_DYNAMIC</filename>
                    to <filename>error</filename> and setting it
                    to <filename>warn</filename>. When it is set
                    to <filename>warn</filename>, the build system will report a
                    warning for every undefined <filename>uid</filename> and
                    <filename>gid</filename> in any recipe. But when it is set
                    to <filename>error</filename>, it will only report errors
                    for recipes that are actually built. This saves you from
                    having to add static IDs for recipes that you know will
                    never be built.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_GID_TABLES'><glossterm>USERADD_GID_TABLES</glossterm>
            <info>
               USERADD_GID_TABLES[doc] = "Specifies a password file to use for obtaining static group identification (gid) values when the OpenEmbedded build system adds a group to the system during package installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a password file to use for obtaining static
                    group identification (<filename>gid</filename>) values
                    when the OpenEmbedded build system adds a group to the
                    system during package installation.
                </para>

                <para>
                    When applying static group identification
                    (<filename>gid</filename>) values, the OpenEmbedded build
                    system looks in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
                    for a <filename>files/group</filename> file and then applies
                    those <filename>uid</filename> values.
                    Set the variable as follows in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADD_GID_TABLES = "files/group"
                    </literallayout>
                </para>

                <note>
                    Setting the
                    <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
                    variable to "useradd-staticids" causes the build system
                    to use static <filename>gid</filename> values.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_PACKAGES'><glossterm>USERADD_PACKAGES</glossterm>
            <info>
               USERADD_PACKAGES[doc] = "When a recipe inherits the useradd class, this variable specifies the individual packages within the recipe that require users and/or groups to be added."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
                    class, this variable
                    specifies the individual packages within the recipe that
                    require users and/or groups to be added.
                </para>

                <para>
                    You must set this variable if the recipe inherits the
                    class.
                    For example, the following enables adding a user for the
                    main package in a recipe:
                    <literallayout class='monospaced'>
     USERADD_PACKAGES = "${PN}"
                    </literallayout>
                    <note>
                        It follows that if you are going to use the
                        <filename>USERADD_PACKAGES</filename> variable,
                        you need to set one or more of the
                        <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
                        <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
                        or
                        <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
                        variables.
                    </note>
                </para>

            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_PARAM'><glossterm>USERADD_PARAM</glossterm>
            <info>
               USERADD_PARAM[doc] = "When a recipe inherits the useradd class, this variable specifies for a package what parameters should pass to the useradd command if you add a user to the system when the package is installed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
                    class, this variable
                    specifies for a package what parameters should pass
                    to the <filename>useradd</filename> command
                    if you add a user to the system when the package
                    is installed.
                </para>

                <para>
                    Here is an example from the <filename>dbus</filename>
                    recipe:
                    <literallayout class='monospaced'>
     USERADD_PARAM_${PN} = "--system --home ${localstatedir}/lib/dbus \
                            --no-create-home --shell /bin/false \
                            --user-group messagebus"
                    </literallayout>
                    For information on the standard Linux shell command
                    <filename>useradd</filename>, see
                    <ulink url='http://linux.die.net/man/8/useradd'></ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_UID_TABLES'><glossterm>USERADD_UID_TABLES</glossterm>
            <info>
               USERADD_UID_TABLES[doc] = "Specifies a password file to use for obtaining static user identification (uid) values when the OpenEmbedded build system adds a user to the system during package installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a password file to use for obtaining static
                    user identification (<filename>uid</filename>) values
                    when the OpenEmbedded build system adds a user to the
                    system during package installation.
                </para>

                <para>
                    When applying static user identification
                    (<filename>uid</filename>) values, the OpenEmbedded build
                    system looks in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
                    for a <filename>files/passwd</filename> file and then applies
                    those <filename>uid</filename> values.
                    Set the variable as follows in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADD_UID_TABLES = "files/passwd"
                    </literallayout>
                </para>

                <note>
                    Setting the
                    <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
                    variable to "useradd-staticids" causes the build system
                    to use static <filename>uid</filename> values.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADDEXTENSION'><glossterm>USERADDEXTENSION</glossterm>
            <info>
               USERADDEXTENSION[doc] = "When set to 'useradd-staticids', causes the OpenEmbedded build system to base all user and group additions on a static passwd and group files found in BBPATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set to "useradd-staticids", causes the
                    OpenEmbedded build system to base all user and group
                    additions on a static
                    <filename>passwd</filename> and
                    <filename>group</filename> files found in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>.
                </para>

                <para>
                    To use static user identification (<filename>uid</filename>)
                    and group identification (<filename>gid</filename>)
                    values, set the variable
                    as follows in your <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADDEXTENSION = "useradd-staticids"
                    </literallayout>
                    <note>
                        Setting this variable to use static
                        <filename>uid</filename> and <filename>gid</filename>
                        values causes the OpenEmbedded build system to employ
                        the
                        <link linkend='ref-classes-useradd'><filename>useradd-staticids</filename></link>
                        class.
                    </note>
                </para>

                <para>
                    If you use static <filename>uid</filename> and
                    <filename>gid</filename> information, you must also
                    specify the <filename>files/passwd</filename> and
                    <filename>files/group</filename> files by setting the
                    <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>
                    and
                    <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
                    variables.
                    Additionally, you should also set the
                    <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-v'><title>V</title>

        <glossentry id='var-VOLATILE_LOG_DIR'><glossterm>VOLATILE_LOG_DIR</glossterm>
            <info>
               VOLATILE_LOG_DIR[doc] = "Specifies the persistence of the target's /var/log directory, which is used to house postinstall target log files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the persistence of the target's
                    <filename>/var/log</filename> directory, which is used to
                    house postinstall target log files.
                </para>

                <para>
                    By default, <filename>VOLATILE_LOG_DIR</filename> is set
                    to "yes", which means the file is not persistent.
                    You can override this setting by setting the
                    variable to "no" to make the log directory persistent.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-w'><title>W</title>

        <glossentry id='var-WARN_QA'><glossterm>WARN_QA</glossterm>
            <info>
               WARN_QA[doc] = "Specifies the quality assurance checks whose failures are reported as warnings by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the quality assurance checks whose failures are
                    reported as warnings by the OpenEmbedded build system.
                    You set this variable in your distribution configuration
                    file.
                    For a list of the checks you can control with this variable,
                    see the
                    "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-WKS_FILE_DEPENDS'><glossterm>WKS_FILE_DEPENDS</glossterm>
            <info>
               WKS_FILE_DEPENDS[doc] = "Lists a recipe's build-time dependencies specific to Wic."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    When placed in the recipe that builds your image, this
                    variable lists build-time dependencies.
                    The <filename>WKS_FILE_DEPENDS</filename> variable is only
                    applicable when Wic images are active (i.e. when
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    contains entries related to Wic).
                    If your recipe does not create Wic images, the variable
                    has no effect.
                </para>

                <para>
                    The <filename>WKS_FILE_DEPENDS</filename> variable is
                    similar to the
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    variable.
                    When you use the variable in your recipe that builds the
                    Wic image, dependencies you list in the
                    <filename>WIC_FILE_DEPENDS</filename> variable are added to
                    the <filename>DEPENDS</filename> variable.
                </para>

                <para>
                    With the <filename>WKS_FILE_DEPENDS</filename> variable,
                    you have the possibility to specify a list of additional
                    dependencies (e.g. native tools, bootloaders, and so forth),
                    that are required to build Wic images.
                    Following is an example:
                    <literallayout class='monospaced'>
     WKS_FILE_DEPENDS = "<replaceable>some-native-tool</replaceable>"
                    </literallayout>
                    In the previous example,
                    <replaceable>some-native-tool</replaceable> would be
                    replaced with an actual native tool on which the build
                    would depend.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-WKS_FILE'><glossterm>WKS_FILE</glossterm>
            <info>
               WKS_FILE[doc] = "Specifies the name of the wic kickstart file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the location of the Wic
                    kickstart file that is used by the OpenEmbedded build
                    system to create a partitioned image
                    (<replaceable>image</replaceable><filename>.wic</filename>).
                    For information on how to create a partitioned image, see
                    the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-partitioned-images-using-wic'>Creating Partitioned Images Using Wic</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    For details on the kickstart file format, see the
                    "<link linkend='ref-kickstart'>OpenEmbedded Kickstart (<filename>.wks</filename>) Reference</link>"
                    Chapter.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-WORKDIR'><glossterm>WORKDIR</glossterm>
            <info>
               WORKDIR[doc] = "The pathname of the working directory in which the OpenEmbedded build system builds a recipe. This directory is located within the TMPDIR directory structure and changes as different packages are built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The pathname of the work directory in which the OpenEmbedded
                    build system builds a recipe.
                    This directory is located within the
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    directory structure and is specific to the recipe being
                    built and the system for which it is being built.
                </para>

                <para>
                    The <filename>WORKDIR</filename> directory is defined as
                    follows:
                    <literallayout class='monospaced'>
     ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
                    </literallayout>
                    The actual directory depends on several things:
                    <itemizedlist>
                        <listitem><filename>TMPDIR</filename>:
                            The top-level build output directory</listitem>
                        <listitem><link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>:
                            The target system identifier</listitem>
                        <listitem><link linkend='var-PN'><filename>PN</filename></link>:
                            The recipe name</listitem>
                        <listitem><link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>:
                            The epoch - (if
                            <link linkend='var-PE'><filename>PE</filename></link>
                            is not specified, which is usually the case for most
                            recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
                        <listitem><link linkend='var-PV'><filename>PV</filename></link>:
                            The recipe version</listitem>
                        <listitem><link linkend='var-PR'><filename>PR</filename></link>:
                            The recipe revision</listitem>
                    </itemizedlist>
                </para>

                <para>
                    As an example, assume a Source Directory top-level folder
                    name <filename>poky</filename>, a default Build Directory at
                    <filename>poky/build</filename>, and a
                    <filename>qemux86-poky-linux</filename> machine target
                    system.
                    Furthermore, suppose your recipe is named
                    <filename>foo_1.3.0-r0.bb</filename>.
                    In this case, the work directory the build system uses to
                    build the package would be as follows:
                    <literallayout class='monospaced'>
     poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-x'><title>X</title>

        <glossentry id='var-XSERVER'><glossterm>XSERVER</glossterm>
            <info>
               XSERVER[doc] = "Specifies the packages that should be installed to provide an X server and drivers for the current machine."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the packages that should be installed to
                    provide an X server and drivers for the current machine,
                    assuming your image directly includes
                    <filename>packagegroup-core-x11-xserver</filename> or,
                    perhaps indirectly, includes "x11-base" in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
                </para>

                <para>
                    The default value of <filename>XSERVER</filename>, if not
                    specified in the machine configuration, is
                    "xserver-xorg xf86-video-fbdev xf86-input-evdev".
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

<!--            <glossdiv id='var-glossary-y'><title>Y</title>-->
<!--            </glossdiv>-->

<!--            <glossdiv id='var-glossary-z'><title>Z</title>-->
<!--            </glossdiv>-->

</glossary>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
