<!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; ] >
<!--SPDX-License-Identifier: CC-BY-2.0-UK-->

<!-- 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">
                    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">
                   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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">

                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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-FIT_HASH_ALG'><glossterm>FIT_HASH_ALG</glossterm>
            <info>
               FIT_HASH_ALG[doc] = "Specifies the hash algorithm used in creating the FIT Image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the hash algorithm used in creating the FIT Image.
                    For e.g. sha256.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FIT_SIGN_ALG'><glossterm>FIT_SIGN_ALG</glossterm>
            <info>
               FIT_SIGN_ALG[doc] = "Specifies the signature algorithm used in creating the FIT Image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the signature algorithm used in creating the FIT Image.
                    For e.g. rsa2048.
                </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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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> or <filename>bootimg-efi</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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                        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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
-->
<!--
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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_ADD_METADATA'><glossterm>PACKAGE_ADD_METADATA</glossterm>
            <info>
                PACKAGE_ADD_METADATA[doc] = "This variable defines additional metadata to add to packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable defines additional metdata to add to packages.
                </para>

                <para>
                    You may find you need to inject additional metadata into
                    packages. This variable allows you to do that by setting
                    the injected data as the value. Multiple fields can be
                    added by splitting the content with the literal separator
                    "\n".
                </para>

                <para>
                    The suffixes '_IPK', '_DEB', or '_RPM' can be applied to
                    the variable to do package type specific settings. It can
                    also be made package specific by using the package name as
                    a suffix.
                </para>

                <para>
                    You can find out more about applying this variable in
                    the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#adding-custom-metadata-to-packages'>Adding custom metadata to packages</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                     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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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_DTB_LOADADDRESS'><glossterm>UBOOT_DTB_LOADADDRESS</glossterm>
            <info>
               UBOOT_DTB_LOADADDRESS[doc] = "Specifies the load address for the dtb."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the load address for the dtb image used by U-boot.
                    During FIT image creation, the
                    <filename>UBOOT_DTB_LOADADDRESS</filename> variable is used
                    in <filename>kernel-fitimage</filename> class to specify the
                    load address to be used in creating the dtb sections of
                    Image Tree Source for the FIT image.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_DTBO_LOADADDRESS'><glossterm>UBOOT_DTBO_LOADADDRESS</glossterm>
            <info>
               UBOOT_DTBO_LOADADDRESS[doc] = "Specifies the load address for the dtbo."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the load address for the dtbo image used by U-boot.
                    During FIT image creation, the
                    <filename>UBOOT_DTBO_LOADADDRESS</filename> variable is used
                    in <filename>kernel-fitimage</filename> class to specify the
                    load address to be used in creating the dtbo sections of
                    Image Tree Source for the FIT image.
                </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">
                    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">
                    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">
                    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">
                    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">
                    Specifies the target called in the
                    <filename>Makefile</filename>.
                    The default target is "all".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_MKIMAGE_DTCOPTS'><glossterm>UBOOT_MKIMAGE_DTCOPTS</glossterm>
            <info>
               UBOOT_MKIMAGE_DTCOPTS[doc] = "Options for the device tree compiler passed to mkimage '-D' feature."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Options for the device tree compiler passed to mkimage '-D'
                    feature while creating FIT image in
                    <filename>kernel-fitimage</filename> class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_RD_LOADADDRESS'><glossterm>UBOOT_RD_LOADADDRESS</glossterm>
            <info>
               UBOOT_RD_LOADADDRESS[doc] = "Specifies the load address for the ramdisk image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the load address for the RAM disk image.
                    During FIT image creation, the
                    <filename>UBOOT_RD_LOADADDRESS</filename> variable is used
                    in <filename>kernel-fitimage</filename> class to specify the
                    load address to be used in creating the Image Tree Source for
                    the FIT image.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_RD_ENTRYPOINT'><glossterm>UBOOT_RD_ENTRYPOINT</glossterm>
            <info>
               UBOOT_RD_ENTRYPOINT[doc] = "Specifies the entrypoint for the ramdisk image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the entrypoint for the RAM disk image.
                    During FIT image creation, the
                    <filename>UBOOT_RD_ENTRYPOINT</filename> variable is used
                    in <filename>kernel-fitimage</filename> class to specify the
                    entrypoint to be used in creating the Image Tree Source for
                    the FIT image.
                </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">
                    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_SIGN_ENABLE'><glossterm>UBOOT_SIGN_ENABLE</glossterm>
            <info>
               UBOOT_SIGN_KEYDIR[doc] = "Enable signing of FIT image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Enable signing of FIT image. The default value is "0".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_SIGN_KEYDIR'><glossterm>UBOOT_SIGN_KEYDIR</glossterm>
            <info>
               UBOOT_SIGN_KEYDIR[doc] = "Location of the directory containing the RSA key and certificate used for signing FIT image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Location of the directory containing the RSA key and
                    certificate used for signing FIT image.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_SIGN_KEYNAME'><glossterm>UBOOT_SIGN_KEYNAME</glossterm>
            <info>
               UBOOT_SIGN_KEYNAME[doc] = "The name of keys used for signing U-boot FIT image"
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    The name of keys used for signing U-boot FIT image stored in
                    <filename><link linkend='var-UBOOT_SIGN_KEYDIR'>UBOOT_SIGN_KEYDIR</link></filename>
                    directory. For e.g. dev.key key and dev.crt certificate
                    stored in
                    <filename><link linkend='var-UBOOT_SIGN_KEYDIR'>UBOOT_SIGN_KEYDIR</link></filename>
                    directory will have
                    <filename><link linkend='var-UBOOT_SIGN_KEYNAME'>UBOOT_SIGN_KEYNAME</link></filename>
                    set to "dev".
                </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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">
                    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">

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