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