<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >

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

<title>Variables Glossary</title>

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     where:

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

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

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

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

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

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

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

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

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

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

     where:

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

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

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

        <glossentry id='var-BB_GENERATE_MIRROR_TARBALLS'><glossterm>BB_GENERATE_MIRROR_TARBALLS</glossterm>
            <info>
                BB_GENERATE_MIRROR_TARBALLS[doc] = "Causes tarballs of the Git repositories to be placed in the DL_DIR directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Causes tarballs of the Git repositories, including the
                    Git 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
                    the Git 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>
            </glossdef>
        </glossentry>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <glossentry id='var-BBMULTICONFIG'><glossterm>BBMULTICONFIG</glossterm>
            <info>
                BBMULTICONFIG[doc] = "Specifies each separate configuration when you are building targets with multiple configurations."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies each 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'>
     BBMULTIFONFIG = "configA configB configC"
                    </literallayout>
                    Each configuration file you use must reside in the
                    <link linkend='build-directory'>Build Directory</link>
                    <filename>conf/multiconfig</filename> directory
                    (e.g.
                    <replaceable>build_directory</replaceable><filename>/conf/multiconfig/configA.conf</filename>).
                </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <glossentry id='var-DISK_SIGNATURE'><glossterm>DISK_SIGNATURE</glossterm>
            <info>
                DISK_SIGNATURE[doc] = "A 32-bit MBR disk signature used by directdisk images."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A 32-bit MBR disk signature used by
                    <filename>directdisk</filename> images.
                </para>

                <para>
                    By default, the signature is set to an automatically
                    generated random value that allows the OpenEmbedded
                    build system to create a boot loader.
                    You can override the signature in the image recipe
                    by setting <filename>DISK_SIGNATURE</filename> to an
                    8-digit hex string.
                    You might want to override
                    <filename>DISK_SIGNATURE</filename> if you want the disk
                    signature to remain constant between image builds.
                </para>

                <para>
                    When using Linux 3.8 or later, you can use
                    <filename>DISK_SIGNATURE</filename> to specify the root
                    by UUID to allow the kernel to locate the root device
                    even if the device name changes due to differences in
                    hardware configuration.
                    By default, <filename>ROOT_VM</filename> is set
                    as follows:
                    <literallayout class='monospaced'>
     ROOT_VM ?= "root=/dev/sda2"
                    </literallayout>
                    However, you can change this to locate the root device
                    using the disk signature instead:
                    <literallayout class='monospaced'>
     ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
                    </literallayout>
                </para>

                <para>
                    As previously mentioned, it is possible to set the
                    <filename>DISK_SIGNATURE</filename> variable in your
                    <filename>local.conf</filename> file to a fixed
                    value if you do not want <filename>syslinux.cfg</filename>
                    changing for each build.
                    You might find this useful when you want to upgrade the
                    root filesystem on a device without having to recreate or
                    modify the master boot record.
                </para>
            </glossdef>
        </glossentry>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    </literallayout>
                </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <glossentry id='var-FILESOVERRIDES'><glossterm>FILESOVERRIDES</glossterm>
            <info>
                FILESOVERRIDES[doc] = "A subset of OVERRIDES used by the OpenEmbedded build system for creating FILESPATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A subset of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    used by the OpenEmbedded build system for creating
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
                    You can find more information on how overrides are handled
                    in the
                    <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
                </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                <note><title>Notes</title>
                    <itemizedlist>
                        <listitem><para>
                            If you add "live" to
                            <filename>IMAGE_FSTYPES</filename> inside an image
                            recipe, be sure that you do so prior to the
                            "inherit image" line of the recipe or the live
                            image will not build.
                            </para></listitem>
                        <listitem><para>
                            Due to the way the OpenEmbedded build system
                            processes this variable, you cannot update its
                            contents by using <filename>_append</filename> or
                            <filename>_prepend</filename>.
                            You must use the <filename>+=</filename>
                            operator to add one or more options to the
                            <filename>IMAGE_FSTYPES</filename> variable.
                            </para></listitem>
                    </itemizedlist>
                </note>
            </glossdef>
        </glossentry>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    where:

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

      overhead = IMAGE_OVERHEAD_FACTOR

      rootfs-size = IMAGE_ROOTFS_SIZE

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

      xspace = IMAGE_ROOTFS_EXTRA_SPACE
                    </literallayout>
                </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <glossentry id='var-KERNEL_DEVICETREE'><glossterm>KERNEL_DEVICETREE</glossterm>
            <info>
                KERNEL_DEVICETREE[doc] = "Specifies the name of the generated Linux kernel device tree (i.e. the .dtb) file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the generated Linux kernel device tree
                    (i.e. the <filename>.dtb</filename>) file.
                    <note>
                        Legacy support exists for specifying the full path
                        to the device tree.
                        However, providing just the <filename>.dtb</filename>
                        file is preferred.
                    </note>
                    In order to use this variable, you must have the include
                    files in your kernel recipe:
                    <literallayout class='monospaced'>
     require recipes-kernel/linux/linux-dtb.inc
                    </literallayout>
                    or
                    <literallayout class='monospaced'>
     require recipes-kernel/linux/linux-yocto.inc
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            </glossdef>
        </glossentry>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    </glossdiv>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                <para>
                    With the
                    <filename>PACKAGE_DEBUG_SPLIT_STYLE</filename> variable,
                    you can control where debug information, which can include
                    or exclude source files, is stored:
                    <itemizedlist>
                        <listitem><para>
                            ".debug": Debug symbol files are placed next
                            to the binary in a <filename>.debug</filename>
                            directory on the target.
                            For example, if a binary is installed into
                            <filename>/bin</filename>, the corresponding debug
                            symbol files are installed in
                            <filename>/bin/.debug</filename>.
                            Source files are placed in
                            <filename>/usr/src/debug</filename>.
                            This is the default behavior.
                            </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.
                            </para></listitem>
                    </itemizedlist>
                </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <glossentry id='var-PACKAGE_GROUP'><glossterm>PACKAGE_GROUP</glossterm>
            <info>
                PACKAGE_GROUP[doc] = "Defines one or more packages to include in an image when a specific item is included in IMAGE_FEATURES."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The <filename>PACKAGE_GROUP</filename> variable has been
                    renamed to
                    <link linkend='var-FEATURE_PACKAGES'><filename>FEATURE_PACKAGES</filename></link>.
                    See the variable description for
                    <filename>FEATURE_PACKAGES</filename> for information.
                </para>

                <para>
                    If if you use the <filename>PACKAGE_GROUP</filename>
                    variable, the OpenEmbedded build system issues a warning
                    message.
                </para>
            </glossdef>
        </glossentry>

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

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

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

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

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

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

        <glossentry id='var-PACKAGECONFIG'><glossterm>PACKAGECONFIG</glossterm>
            <info>
                PACKAGECONFIG[doc] = "This variable provides a means of enabling or disabling features of a recipe on a per-recipe basis."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable provides a means of enabling or disabling
                    features of a recipe on a per-recipe basis.
                    <filename>PACKAGECONFIG</filename> blocks are defined
                    in recipes when you specify features and then arguments
                    that define feature behaviors.
                    Here is the basic block structure:
                    <literallayout class='monospaced'>
     PACKAGECONFIG ??= "f1 f2 f3 ..."
     PACKAGECONFIG[f1] = "--with-f1,--without-f1,build-deps-f1,rt-deps-f1,rt-recs-f1"
     PACKAGECONFIG[f2] = "--with-f2,--without-f2,build-deps-f2,rt-deps-f2,rt-recs-f2"
     PACKAGECONFIG[f3] = "--with-f3,--without-f3,build-deps-f3,rt-deps-f3,rt-recs-f3"
                    </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 five 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>
                    </orderedlist>
                </para>

                <para>
                    Consider the following
                    <filename>PACKAGECONFIG</filename> block taken from the
                    <filename>librsvg</filename> recipe.
                    In this example the feature is <filename>croco</filename>,
                    which has three arguments that determine the feature's
                    behavior.
                    <literallayout class='monospaced'>
     PACKAGECONFIG ??= "croco"
     PACKAGECONFIG[croco] = "--with-croco,--without-croco,libcroco"
                    </literallayout>
                    The <filename>--with-croco</filename> and
                    <filename>libcroco</filename> arguments apply only if
                    the feature is enabled.
                    In this case, <filename>--with-croco</filename> is
                    added to the configure script argument list and
                    <filename>libcroco</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-croco</filename> is
                    added to the configure script rather than
                    <filename>--with-croco</filename>.
                </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                <para>
                    The <filename>PREFERRED_VERSION</filename> variable
                    supports limited wildcard use through the
                    "<filename>%</filename>" character.
                    You can use the character to match any number of
                    characters, which can be useful when specifying versions
                    that contain long revision numbers that potentially change.
                    Here are two examples:
                    <literallayout class='monospaced'>
     PREFERRED_VERSION_python = "3.4.0"
     PREFERRED_VERSION_linux-yocto = "4.12%"
                    </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 = "4.12%"
                    </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 = "4.12%"
                    </literallayout>
                    <note>
                        The <filename>_forcevariable</filename> override is
                        not handled specially.
                        This override only works because the default value of
                        <filename>OVERRIDES</filename> includes
                        "forcevariable".
                    </note>
                </para>
            </glossdef>
        </glossentry>

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

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

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

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

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

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

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

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

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

        <glossentry id='var-PROVIDES'><glossterm>PROVIDES</glossterm>
            <info>
                PROVIDES[doc] = "A list of aliases that a recipe also provides. These aliases are useful for satisfying dependencies of other recipes during the build as specified by DEPENDS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of aliases by which a particular recipe can be
                    known.
                    By default, a recipe's own
                    <filename><link linkend='var-PN'>PN</link></filename>
                    is implicitly already in its <filename>PROVIDES</filename>
                    list.
                    If a recipe uses <filename>PROVIDES</filename>, the
                    additional aliases are synonyms for the recipe and can
                    be useful 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 a recipe
                    file <filename>libav_0.8.11.bb</filename>:
                    <literallayout class='monospaced'>
     PROVIDES += "libpostproc"
                    </literallayout>
                    The <filename>PROVIDES</filename> statement results in
                    the "libav" recipe also being known as "libpostproc".
                </para>

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

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

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

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

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

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

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

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

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

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

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

                <para>
                    Recipes that inherit the <filename>distutils</filename>
                    class during cross-builds also use this variable to
                    locate the headers and libraries of the appropriate Python
                    that the extension is targeting.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PYTHON_PN'><glossterm>PYTHON_PN</glossterm>
            <info>
                PYTHON_PN[doc] = "When used by recipes that inherit the distutils3, setuptools3, distutils, or setuptools classes, specifies the major Python version being built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When used by recipes that inherit the
                    <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>,
                    <link linkend='ref-classes-setuptools3'><filename>setuptools3</filename></link>,
                    <link linkend='ref-classes-distutils'><filename>distutils</filename></link>,
                    or
                    <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
                    classes, specifies the major Python version being built.
                    For Python 2.x, <filename>PYTHON_PN</filename> would
                    be "python2".  For Python 3.x, the variable would be
                    "python3".
                    You do not have to set this variable as the
                    OpenEmbedded build system automatically sets it for you.
                </para>

                <para>
                    The variable allows recipes to use common infrastructure
                    such as the following:
                    <literallayout class='monospaced'>
     DEPENDS += "${PYTHON_PN}-native"
                    </literallayout>
                    In the previous example, the version of the dependency
                    is <filename>PYTHON_PN</filename>.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-r'><title>R</title>

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

        <glossentry id='var-RCONFLICTS'><glossterm>RCONFLICTS</glossterm>
            <info>
                RCONFLICTS[doc] = "The list of packages that conflict with another package. Note that the package will not be installed if the conflicting packages are not first removed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of packages that conflict with packages.
                    Note that packages will not be installed if conflicting
                    packages are not first removed.
                </para>

                <para>
                   Like all package-controlling variables, you must always use
                   them in conjunction with a package name override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RCONFLICTS_${PN} = "<replaceable>another_conflicting_package_name</replaceable>"
                   </literallayout>
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned dependencies.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RCONFLICTS</filename> variable:
                    <literallayout class='monospaced'>
     RCONFLICTS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <filename>operator</filename>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For example, the following sets up a dependency on version
                    1.2 or greater of the package <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RCONFLICTS_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RDEPENDS'><glossterm>RDEPENDS</glossterm>
            <info>
                RDEPENDS[doc] = "Lists runtime dependencies of a package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists runtime dependencies of a package.
                    These dependencies are other packages that must be
                    installed in order for the package to function correctly.
                    As an example, the following assignment declares that the
                    package <filename>foo</filename> needs the packages
                    <filename>bar</filename> and <filename>baz</filename> to
                    be installed:
                    <literallayout class='monospaced'>
     RDEPENDS_foo = "bar baz"
                    </literallayout>
                    The most common types of package runtime dependencies are
                    automatically detected and added.
                    Therefore, most recipes do not need to set
                    <filename>RDEPENDS</filename>.
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>

                <para>
                    The practical effect of the above
                    <filename>RDEPENDS</filename> assignment is that
                    <filename>bar</filename> and <filename>baz</filename>
                    will be declared as dependencies inside the package
                    <filename>foo</filename> when it is written out by one of
                    the
                    <link linkend='ref-tasks-package_write_deb'><filename>do_package_write_*</filename></link>
                    tasks.
                    Exactly how this is done depends on which package format
                    is used, which is determined by
                    <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>.
                    When the corresponding package manager installs the
                    package, it will know to also install the packages on
                    which it depends.
                </para>

                <para>
                    To ensure that the packages <filename>bar</filename> and
                    <filename>baz</filename> get built, the previous
                    <filename>RDEPENDS</filename> assignment also causes a task
                    dependency to be added.
                    This dependency is from the recipe's
                    <link linkend='ref-tasks-build'><filename>do_build</filename></link>
                    (not to be confused with
                    <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>)
                    task to the <filename>do_package_write_*</filename>
                    task of the recipes that build <filename>bar</filename> and
                    <filename>baz</filename>.
                </para>

                <para>
                    The names of the packages you list within
                    <filename>RDEPENDS</filename> must be the names of other
                    packages - they cannot be recipe names.
                    Although package names and recipe names usually match,
                    the important point here is that you are
                    providing package names within the
                    <filename>RDEPENDS</filename> variable.
                    For an example of the default list of packages created from
                    a recipe, see the
                    <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                    variable.
                </para>

                <para>
                    Because the <filename>RDEPENDS</filename> variable applies
                    to packages being built, you should always use the variable
                    in a form with an attached package name (remember that a
                    single recipe can build multiple packages).
                    For example, suppose you are building a development package
                    that depends on the <filename>perl</filename> package.
                    In this case, you would use the following
                    <filename>RDEPENDS</filename> statement:
                    <literallayout class='monospaced'>
     RDEPENDS_${PN}-dev += "perl"
                    </literallayout>
                    In the example, the development package depends on
                    the <filename>perl</filename> package.
                    Thus, the <filename>RDEPENDS</filename> variable has the
                    <filename>${PN}-dev</filename> package name as part of the
                    variable.
                    <note>
                        <title>Caution</title>
                        <filename>RDEPENDS_${PN}-dev</filename> includes
                        <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>
                        by default.
                        This default is set in the BitBake configuration file
                        (<filename>meta/conf/bitbake.conf</filename>).
                        Be careful not to accidentally remove
                        <filename>${PN}</filename> when modifying
                        <filename>RDEPENDS_${PN}-dev</filename>.
                        Use the "+=" operator rather than the "=" operator.
                    </note>
                </para>

                <para>
                    The package names you use with
                    <filename>RDEPENDS</filename> must appear as they would in
                    the <filename>PACKAGES</filename> variable.
                    The
                    <link linkend='var-PKG'><filename>PKG</filename></link>
                    variable allows a different name to be used for
                    the final package (e.g. the
                    <link linkend='ref-classes-debian'><filename>debian</filename></link>
                    class uses this to rename packages), but this final package
                    name cannot be used with <filename>RDEPENDS</filename>,
                    which makes sense as <filename>RDEPENDS</filename> is meant
                    to be independent of the package format used.
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned dependencies.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RDEPENDS</filename> variable:
                    <literallayout class='monospaced'>
     RDEPENDS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <replaceable>operator</replaceable>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For <replaceable>version</replaceable>, provide the version
                    number.
                    <note><title>Tip</title>
                        You can use
                        <link linkend='var-EXTENDPKGV'><filename>EXTENDPKGV</filename></link>
                        to provide a full package version specification.
                    </note>
                    For example, the following sets up a dependency on version
                    1.2 or greater of the package <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RDEPENDS_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>

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

        <glossentry id='var-REQUIRED_DISTRO_FEATURES'><glossterm>REQUIRED_DISTRO_FEATURES</glossterm>
            <info>
                REQUIRED_DISTRO_FEATURES[doc] = "When a recipe inherits the distro_features_check class, this variable identifies distribution features that must exist in the current configuration in order for the OpenEmbedded build system to build the recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-distro_features_check'><filename>distro_features_check</filename></link>
                    class, this
                    variable identifies distribution features that must
                    exist in the current configuration in order for the
                    OpenEmbedded build system to build the recipe.
                    In other words, if the
                    <filename>REQUIRED_DISTRO_FEATURES</filename> variable
                    lists a feature that does not appear in
                    <filename>DISTRO_FEATURES</filename> within the
                    current configuration, an error occurs and the
                    build stops.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RM_WORK_EXCLUDE'><glossterm>RM_WORK_EXCLUDE</glossterm>
            <info>
                RM_WORK_EXCLUDE[doc] = "With rm_work enabled, this variable specifies a list of packages whose work directories should not be removed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    With <filename>rm_work</filename> enabled, this
                    variable specifies a list of recipes whose work directories
                    should not be removed.
                    See the "<link linkend='ref-classes-rm-work'><filename>rm_work.bbclass</filename></link>"
                    section for more details.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOT_HOME'><glossterm>ROOT_HOME</glossterm>
            <info>
                ROOT_HOME[doc] = "Defines the root home directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the root home directory.
                    By default, this directory is set as follows in the
                    BitBake configuration file:
                    <literallayout class='monospaced'>
     ROOT_HOME ??= "/home/root"
                    </literallayout>
                    <note>
                        This default value is likely used because some
                        embedded solutions prefer to have a read-only root
                        filesystem and prefer to keep writeable data in one
                        place.
                    </note>
                </para>

                <para>
                    You can override the default by setting the variable
                    in any layer or in the <filename>local.conf</filename> file.
                    Because the default is set using a "weak" assignment
                    (i.e. "??="), you can use either of the following forms
                    to define your override:
                    <literallayout class='monospaced'>
     ROOT_HOME = "/root"
     ROOT_HOME ?= "/root"
                    </literallayout>
                    These override examples use <filename>/root</filename>,
                    which is probably the most commonly used override.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-ROOTFS'><glossterm>ROOTFS</glossterm>
            <info>
                ROOTFS[doc] = "Indicates a filesystem image to include as the root filesystem."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Indicates a filesystem image to include as the root
                    filesystem.
                </para>

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

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

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

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

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

        <glossentry id='var-ROOTFS_POSTUNINSTALL_COMMAND'><glossterm>ROOTFS_POSTUNINSTALL_COMMAND</glossterm>
            <info>
                ROOTFS_POSTUNINSTALL_COMMAND[doc] = "Specifies a list of functions to call after removal of unneeded packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of functions to call after the
                    OpenEmbedded build system has removed unnecessary
                    packages.
                    When runtime package management is disabled in the
                    image, several packages are removed including
                    <filename>base-passwd</filename>,
                    <filename>shadow</filename>, and
                    <filename>update-alternatives</filename>.
                    You can specify functions separated by semicolons:
                    <literallayout class='monospaced'>
     ROOTFS_POSTUNINSTALL_COMMAND += "<replaceable>function</replaceable>; ... "
                    </literallayout>
                </para>

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

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

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

        <glossentry id='var-RPROVIDES'><glossterm>RPROVIDES</glossterm>
            <info>
                RPROVIDES[doc] = "A list of package name aliases that a package also provides. These aliases are useful for satisfying runtime dependencies of other packages both during the build and on the target."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of package name aliases that a package also provides.
                    These aliases are useful for satisfying runtime dependencies
                    of other packages both during the build and on the target
                    (as specified by
                    <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>).
                    <note>
                        A package's own name is implicitly already in its
                        <filename>RPROVIDES</filename> list.
                    </note>
                </para>

                <para>
                   As with all package-controlling variables, you must always
                   use the variable in conjunction with a package name override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RPROVIDES_${PN} = "widget-abi-2"
                   </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RRECOMMENDS'><glossterm>RRECOMMENDS</glossterm>
            <info>
                RRECOMMENDS[doc] = "A list of packages that extends the usability of a package being built. The package being built does not depend on this list of packages in order to successfully build, but needs them for the extended usability."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of packages that extends the usability of a package
                    being built.
                    The package being built does not depend on this list of
                    packages in order to successfully build, but rather
                    uses them for extended usability.
                    To specify runtime dependencies for packages, see the
                    <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
                    variable.
                </para>

                <para>
                    The package manager will automatically install the
                    <filename>RRECOMMENDS</filename> list of packages when
                    installing the built package.
                    However, you can prevent listed packages from being
                    installed by using the
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>,
                    <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>,
                    and
                    <link linkend='var-PACKAGE_EXCLUDE'><filename>PACKAGE_EXCLUDE</filename></link>
                    variables.
                </para>

                <para>
                    Packages specified in
                    <filename>RRECOMMENDS</filename> need not actually be
                    produced.
                    However, a recipe must exist that provides each package,
                    either through the
                    <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                    or
                    <link linkend='var-PACKAGES_DYNAMIC'><filename>PACKAGES_DYNAMIC</filename></link>
                    variables or the
                    <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>
                    variable, or an error will occur during the build.
                    If such a recipe does exist and the package is not produced,
                    the build continues without error.
                </para>

                <para>
                    Because the <filename>RRECOMMENDS</filename> variable
                    applies to packages being built, you should always attach
                    an override to the variable to specify the particular
                    package whose usability is being extended.
                    For example, suppose you are building a development package
                    that is extended to support wireless functionality.
                    In this case, you would use the following:
                    <literallayout class='monospaced'>
     RRECOMMENDS_${PN}-dev += "<replaceable>wireless_package_name</replaceable>"
                    </literallayout>
                    In the example, the package name
                    (<filename>${<link linkend='var-PN'>PN</link>}-dev</filename>)
                    must appear as it would in the
                    <filename>PACKAGES</filename> namespace before any renaming
                    of the output package by classes such as
                    <filename>debian.bbclass</filename>.
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned recommends.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RRECOMMENDS</filename> variable:
                    <literallayout class='monospaced'>
     RRECOMMENDS_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <filename>operator</filename>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For example, the following sets up a recommend on version
                    1.2 or greater of the package <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RRECOMMENDS_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RREPLACES'><glossterm>RREPLACES</glossterm>
            <info>
                RREPLACES[doc] = "A list of packages replaced by a package. The package manager uses this variable to determine which package should be installed to replace other package(s) during an upgrade."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of packages replaced by a package.
                    The package manager uses this variable to determine which
                    package should be installed to replace other package(s)
                    during an upgrade.
                    In order to also have the other package(s) removed at the
                    same time, you must add the name of the other
                    package to the
                    <filename><link linkend='var-RCONFLICTS'>RCONFLICTS</link></filename> variable.
                </para>

                <para>
                   As with all package-controlling variables, you must use
                   this variable in conjunction with a package name
                   override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RREPLACES_${PN} = "<replaceable>other_package_being_replaced</replaceable>"
                   </literallayout>
                </para>

                <para>
                    BitBake, which the OpenEmbedded build system uses, supports
                    specifying versioned replacements.
                    Although the syntax varies depending on the packaging
                    format, BitBake hides these differences from you.
                    Here is the general syntax to specify versions with
                    the <filename>RREPLACES</filename> variable:
                    <literallayout class='monospaced'>
     RREPLACES_${PN} = "<replaceable>package</replaceable> (<replaceable>operator</replaceable> <replaceable>version</replaceable>)"
                    </literallayout>
                    For <filename>operator</filename>, you can specify the
                    following:
                    <literallayout class='monospaced'>
     =
     &lt;
     &gt;
     &lt;=
     &gt;=
                    </literallayout>
                    For example, the following sets up a replacement using
                    version 1.2 or greater of the package
                    <filename>foo</filename>:
                    <literallayout class='monospaced'>
     RREPLACES_${PN} = "foo (>= 1.2)"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RSUGGESTS'><glossterm>RSUGGESTS</glossterm>
            <info>
                RSUGGESTS[doc] = "A list of additional packages that you can suggest for installation by the package manager at the time a package is installed. Not all package managers support this functionality."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of additional packages that you can suggest for
                    installation by the package manager at the time a package
                    is installed.
                    Not all package managers support this functionality.
                </para>

                <para>
                   As with all package-controlling variables, you must always
                   use this variable in conjunction with a package name
                   override.
                   Here is an example:
                   <literallayout class='monospaced'>
     RSUGGESTS_${PN} = "<replaceable>useful_package</replaceable> <replaceable>another_package</replaceable>"
                   </literallayout>
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-s'><title>S</title>

        <glossentry id='var-S'><glossterm>S</glossterm>
            <info>
                S[doc] = "The location in the Build Directory where unpacked package source code resides."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location in the
                    <link linkend='build-directory'>Build Directory</link>
                    where unpacked recipe source code resides.
                    By default, this directory is
                    <filename>${</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link><filename>}/${</filename><link linkend='var-BPN'><filename>BPN</filename></link><filename>}-${</filename><link linkend='var-PV'><filename>PV</filename></link><filename>}</filename>,
                    where <filename>${BPN}</filename> is the base recipe name
                    and <filename>${PV}</filename> is the recipe version.
                    If the source tarball extracts the code to a directory
                    named anything other than <filename>${BPN}-${PV}</filename>,
                    or if the source code is fetched from an SCM such as
                    Git or Subversion, then you must set <filename>S</filename>
                    in the recipe so that the OpenEmbedded build system
                    knows where to find the unpacked source.
                </para>

                <para>
                    As an example, assume a
                    <link linkend='source-directory'>Source Directory</link>
                    top-level folder named <filename>poky</filename> and a
                    default Build Directory at <filename>poky/build</filename>.
                    In this case, the work directory the build system uses
                    to keep the unpacked recipe for <filename>db</filename>
                    is the following:
                    <literallayout class='monospaced'>
     poky/build/tmp/work/qemux86-poky-linux/db/5.1.19-r3/db-5.1.19
                    </literallayout>
                    The unpacked source code resides in the
                    <filename>db-5.1.19</filename> folder.
                </para>

                <para>
                    This next example assumes a Git repository.
                    By default, Git repositories are cloned to
                    <filename>${WORKDIR}/git</filename> during
                    <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>.
                    Since this path is different from the default value of
                    <filename>S</filename>, you must set it specifically
                    so the source can be located:
                    <literallayout class='monospaced'>
     SRC_URI = "git://path/to/repo.git"
     S = "${WORKDIR}/git"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SANITY_REQUIRED_UTILITIES'><glossterm>SANITY_REQUIRED_UTILITIES</glossterm>
            <info>
                SANITY_REQUIRED_UTILITIES[doc] = "Specifies a list of command-line utilities that should be checked for during the initial sanity checking process when running BitBake."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of command-line utilities that should be
                    checked for during the initial sanity checking process when
                    running BitBake.
                    If any of the utilities are not installed on the build host,
                    then BitBake immediately exits with an error.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SANITY_TESTED_DISTROS'><glossterm>SANITY_TESTED_DISTROS</glossterm>
            <info>
                SANITY_TESTED_DISTROS[doc] = "A list of the host distribution identifiers that the build system has been tested against."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of the host distribution identifiers that the
                    build system has been tested against.
                    Identifiers consist of the host distributor ID
                    followed by the release,
                    as reported by the <filename>lsb_release</filename> tool
                    or as read from <filename>/etc/lsb-release</filename>.
                    Separate the list items with explicit newline
                    characters (<filename>\n</filename>).
                    If <filename>SANITY_TESTED_DISTROS</filename> is not empty
                    and the current value of
                    <link linkend='var-NATIVELSBSTRING'><filename>NATIVELSBSTRING</filename></link>
                    does not appear in the list, then the build system reports
                    a warning that indicates the current host distribution has
                    not been tested as a build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_ARCH'><glossterm>SDK_ARCH</glossterm>
            <info>
                SDK_ARCH[doc] = "The target architecture for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The target architecture for the SDK.
                    Typically, you do not directly set this variable.
                    Instead, use
                    <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_DEPLOY'><glossterm>SDK_DEPLOY</glossterm>
            <info>
                SDK_DEPLOY[doc] = "The directory set up and used by the populate_sdk_base to which the SDK is deployed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory set up and used by the
                    <link linkend='ref-classes-populate-sdk'><filename>populate_sdk_base</filename></link>
                    class to which the SDK is deployed.
                    The <filename>populate_sdk_base</filename> class defines
                    <filename>SDK_DEPLOY</filename> as follows:
                    <literallayout class='monospaced'>
     SDK_DEPLOY = "${TMPDIR}/deploy/sdk"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_DIR'><glossterm>SDK_DIR</glossterm>
            <info>
                SDK_DIR[doc] = "The parent directory used by the OpenEmbedded build system when creating SDK output."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The parent directory used by the OpenEmbedded build system
                    when creating SDK output.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the variable as follows:
                    <literallayout class='monospaced'>
     SDK_DIR = "${WORKDIR}/sdk"
                    </literallayout>
                    <note>
                        The <filename>SDK_DIR</filename> directory is a
                        temporary directory as it is part of
                        <filename>WORKDIR</filename>.
                        The final output directory is
                        <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_EXT_TYPE'><glossterm>SDK_EXT_TYPE</glossterm>
            <info>
                SDK_EXT_TYPE[doc] = "Controls whether or not shared state artifacts are copied into the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Controls whether or not shared state artifacts are copied
                    into the extensible SDK.
                    The default value of "full" copies all of the required
                    shared state artifacts into the extensible SDK.
                    The value "minimal" leaves these artifacts out of the
                    SDK.
                    <note>
                        If you set the variable to "minimal", you need to
                        ensure
                        <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
                        is set in the SDK's configuration to enable the
                        artifacts to be fetched as needed.
                    </note>
                </para>
            </glossdef>
        </glossentry>

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

                <para>
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the manifest file as follows:
                    <literallayout class='monospaced'>
     SDK_HOST_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.host.manifest"
                    </literallayout>
                    The location is derived using the
                    <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>
                    and
                    <link linkend='var-TOOLCHAIN_OUTPUTNAME'><filename>TOOLCHAIN_OUTPUTNAME</filename></link>
                    variables.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_INCLUDE_PKGDATA'><glossterm>SDK_INCLUDE_PKGDATA</glossterm>
            <info>
                SDK_INCLUDE_PKGDATA[doc] = "When set to "1", specifies to include the packagedata for all recipes in the "world" target in the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set to "1", specifies to include the packagedata for
                    all recipes in the "world" target in the extensible SDK.
                    Including this data allows the
                    <filename>devtool search</filename> command to find these
                    recipes in search results, as well as allows the
                    <filename>devtool add</filename> command to map
                    dependencies more effectively.
                    <note>
                        Enabling the <filename>SDK_INCLUDE_PKGDATA</filename>
                        variable significantly increases build time because
                        all of world needs to be built.
                        Enabling the variable also slightly increases the size
                        of the extensible SDK.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_INCLUDE_TOOLCHAIN'><glossterm>SDK_INCLUDE_TOOLCHAIN</glossterm>
            <info>
                SDK_INCLUDE_TOOLCHAIN[doc] = "When set to "1", specifies to include the toolchain in the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set to "1", specifies to include the toolchain in the
                    extensible SDK.
                    Including the toolchain is useful particularly when
                    <link linkend='var-SDK_EXT_TYPE'><filename>SDK_EXT_TYPE</filename></link>
                    is set to "minimal" to keep the SDK reasonably small
                    but you still want to provide a usable toolchain.
                    For example, suppose you want to use the toolchain from an
                    IDE (e.g. Eclipse) or from other tools and you do not
                    want to perform additional steps to install the toolchain.
                </para>

                <para>
                    The <filename>SDK_INCLUDE_TOOLCHAIN</filename> variable
                    defaults to "0" if <filename>SDK_EXT_TYPE</filename>
                    is set to "minimal", and defaults to "1" if
                    <filename>SDK_EXT_TYPE</filename> is set to "full".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_INHERIT_BLACKLIST'><glossterm>SDK_INHERIT_BLACKLIST</glossterm>
            <info>
                SDK_INHERIT_BLACKLIST[doc] = "A list of classes to remove from the INHERIT value globally within the extensible SDK configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of classes to remove from the
                    <link linkend='var-INHERIT'><filename>INHERIT</filename></link>
                    value globally within the extensible SDK configuration.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate-sdk-ext</filename></link>
                    class sets the default value:
                    <literallayout class='monospaced'>
     SDK_INHERIT_BLACKLIST ?= "buildhistory icecc"
                    </literallayout>
                </para>

                <para>
                    Some classes are not generally applicable within
                    the extensible SDK context.
                    You can use this variable to disable those classes.
                </para>

                <para>
                    For additional information on how to customize the
                    extensible SDK's configuration, see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-configuring-the-extensible-sdk'>Configuring the Extensible SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_LOCAL_CONF_BLACKLIST'><glossterm>SDK_LOCAL_CONF_BLACKLIST</glossterm>
            <info>
                SDK_LOCAL_CONF_BLACKLIST[doc] = "A list of variables not allowed through from the build system configuration into the extensible SDK configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of variables not allowed through from the
                    OpenEmbedded build system configuration into the extensible
                    SDK configuration.
                    Usually, these are variables that are specific to the
                    machine on which the build system is running and thus
                    would be potentially problematic within the extensible SDK.
                    </para>

                    <para>By default,
                    <filename>SDK_LOCAL_CONF_BLACKLIST</filename> is set in the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate-sdk-ext</filename></link>
                    class and excludes the following variables:
                    <literallayout class='monospaced'>
     <link linkend='var-CONF_VERSION'>CONF_VERSION</link>
     <link linkend='var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</link>
     <ulink url='&YOCTO_DOCS_BB_URL;#var-BB_NUMBER_PARSE_THREADS'>BB_NUMBER_PARSE_THREADS</ulink>
     <link linkend='var-PARALLEL_MAKE'>PARALLEL_MAKE</link>
     <link linkend='var-PRSERV_HOST'>PRSERV_HOST</link>
     <link linkend='var-SSTATE_MIRRORS'>SSTATE_MIRRORS</link>
     <link linkend='var-DL_DIR'>DL_DIR</link>
     <link linkend='var-SSTATE_DIR'>SSTATE_DIR</link>
     <link linkend='var-TMPDIR'>TMPDIR</link>
     <link linkend='var-BB_SERVER_TIMEOUT'>BB_SERVER_TIMEOUT</link>
                    </literallayout>
                </para>

                <para>
                    For additional information on how to customize the
                    extensible SDK's configuration, see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-configuring-the-extensible-sdk'>Configuring the Extensible SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>

            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_LOCAL_CONF_WHITELIST'><glossterm>SDK_LOCAL_CONF_WHITELIST</glossterm>
            <info>
                SDK_LOCAL_CONF_WHITELIST[doc] = "A list of variables allowed through from the build system configuration into the extensible SDK configuration."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of variables allowed through from the OpenEmbedded
                    build system configuration into the extensible SDK
                    configuration.
                    By default, the list of variables is empty and is set in
                    the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate-sdk-ext</filename></link>
                    class.
                </para>

                <para>
                    This list overrides the variables specified using the
                    <link linkend='var-SDK_LOCAL_CONF_BLACKLIST'><filename>SDK_LOCAL_CONF_BLACKLIST</filename></link>
                    variable as well as any variables identified by automatic
                    blacklisting due to the "/" character being found at the
                    start of the value, which is usually indicative of being a
                    path and thus might not be valid on the system where the
                    SDK is installed.
                </para>

                <para>
                    For additional information on how to customize the
                    extensible SDK's configuration, see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-configuring-the-extensible-sdk'>Configuring the Extensible SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_NAME'><glossterm>SDK_NAME</glossterm>
            <info>
                SDK_NAME[doc] = "The base name for SDK output files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The base name for SDK output files.
                    The name is derived from the
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>,
                    <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
                    <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>,
                    <link linkend='var-IMAGE_BASENAME'><filename>IMAGE_BASENAME</filename></link>,
                    and
                    <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>
                    variables:
                    <literallayout class='monospaced'>
     SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${IMAGE_BASENAME}-${TUNE_PKGARCH}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_OS'><glossterm>SDK_OS</glossterm>
            <info>
                SDK_OS[doc] = "The operating system for which the SDK will be built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the operating system for which the SDK
                    will be built.
                    The default value is the value of
                    <link linkend='var-BUILD_OS'><filename>BUILD_OS</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_OUTPUT'><glossterm>SDK_OUTPUT</glossterm>
            <info>
                SDK_OUTPUT[doc] = "The location used by the OpenEmbedded build system when creating SDK output."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location used by the OpenEmbedded build system when
                    creating SDK output.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the variable as follows:
                    <literallayout class='monospaced'>
     SDK_DIR = "${WORKDIR}/sdk"
     SDK_OUTPUT = "${SDK_DIR}/image"
     SDK_DEPLOY = "${DEPLOY_DIR}/sdk"
                    </literallayout>
                    <note>
                        The <filename>SDK_OUTPUT</filename> directory is a
                        temporary directory as it is part of
                        <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
                        by way of
                        <link linkend='var-SDK_DIR'><filename>SDK_DIR</filename></link>.
                        The final output directory is
                        <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

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

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

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

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

        <glossentry id='var-SDK_RECRDEP_TASKS'><glossterm>SDK_RECRDEP_TASKS</glossterm>
            <info>
                SDK_RECRDEP_TASKS[doc] = "A list of shared state tasks added to the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of shared state tasks added to the extensible SDK.
                    By default, the following tasks are added:
                    <literallayout class='monospaced'>
     do_populate_lic
     do_package_qa
     do_populate_sysroot
     do_deploy
                    </literallayout>
                    Despite the default value of "" for the
                    <filename>SDK_RECRDEP_TASKS</filename> variable, the
                    above four tasks are always added to the SDK.
                    To specify tasks beyond these four, you need to use
                    the <filename>SDK_RECRDEP_TASKS</filename> variable (e.g.
                    you are defining additional tasks that are needed in
                    order to build
                    <link linkend='var-SDK_TARGETS'><filename>SDK_TARGETS</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_SYS'><glossterm>SDK_SYS</glossterm>
            <info>
                SDK_SYS[doc] = "Specifies the system, including the architecture and the operating system, for which the SDK will be built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the system, including the architecture and the
                    operating system, for which the SDK will be built.
                </para>

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

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

                <para>
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class defines the manifest file as follows:
                    <literallayout class='monospaced'>
     SDK_TARGET_MANIFEST = "${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.target.manifest"
                    </literallayout>
                    The location is derived using the
                    <link linkend='var-SDK_DEPLOY'><filename>SDK_DEPLOY</filename></link>
                    and
                    <link linkend='var-TOOLCHAIN_OUTPUTNAME'><filename>TOOLCHAIN_OUTPUTNAME</filename></link>
                    variables.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_TARGETS'><glossterm>SDK_TARGETS</glossterm>
            <info>
                SDK_TARGETS[doc] = "A list of targets to install from shared state as part of the standard or extensible SDK installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of targets to install from shared state as part of
                    the standard or extensible SDK installation.
                    The default value is "${PN}" (i.e. the image from which
                    the SDK is built).
                </para>

                <para>
                    The <filename>SDK_TARGETS</filename> variable is an
                    internal variable and typically would not be changed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_TITLE'><glossterm>SDK_TITLE</glossterm>
            <info>
                SDK_TITLE[doc] = "The title to be printed when running the SDK installer."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The title to be printed when running the SDK installer.
                    By default, this title is based on the
                    <link linkend='var-DISTRO_NAME'><filename>DISTRO_NAME</filename></link>
                    or
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>
                    variable and is set in the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SDK_TITLE ??= "${@d.getVar('DISTRO_NAME') or d.getVar('DISTRO')} SDK"
                    </literallayout>
                    For the default distribution "poky",
                    <filename>SDK_TITLE</filename> is set to
                    "Poky (Yocto Project Reference Distro)".
                </para>

                <para>
                    For information on how to change this default title,
                    see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-changing-the-sdk-installer-title'>Changing the Extensible SDK Installer Title</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_UPDATE_URL'><glossterm>SDK_UPDATE_URL</glossterm>
            <info>
                SDK_UPDATE_URL[doc] = "An optional URL for an update server for the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An optional URL for an update server for the extensible
                    SDK.
                    If set, the value is used as the default update server when
                    running <filename>devtool sdk-update</filename> within the
                    extensible SDK.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_VENDOR'><glossterm>SDK_VENDOR</glossterm>
            <info>
                SDK_VENDOR[doc] = "Specifies the name of the SDK vendor."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the SDK vendor.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDK_VERSION'><glossterm>SDK_VERSION</glossterm>
            <info>
                SDK_VERSION[doc] = "Specifies the version for the SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the version of the SDK.
                    The distribution configuration file (e.g.
                    <filename>/meta-poky/conf/distro/poky.conf</filename>)
                    defines the <filename>SDK_VERSION</filename> as follows:
                    <literallayout class='monospaced'>
     SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
                    </literallayout>
                </para>

                <para>
                    For additional information, see the
                    <link linkend='var-DISTRO_VERSION'><filename>DISTRO_VERSION</filename></link>
                    and
                    <link linkend='var-DATE'><filename>DATE</filename></link>
                    variables.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKEXTPATH'><glossterm>SDKEXTPATH</glossterm>
            <info>
                SDKEXTPATH[doc] = "The default installation directory for the extensible SDK."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The default installation directory for the Extensible SDK.
                    By default, this directory is based on the
                    <link linkend='var-DISTRO'><filename>DISTRO</filename></link>
                    variable and is set in the
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SDKEXTPATH ??= "~/${@d.getVar('DISTRO')}_sdk"
                    </literallayout>
                    For the default distribution "poky", the
                    <filename>SDKEXTPATH</filename> is set to "poky_sdk".
                </para>

                <para>
                    For information on how to change this default directory,
                    see the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-changing-the-default-sdk-installation-directory'>Changing the Default SDK Installation Directory</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKIMAGE_FEATURES'><glossterm>SDKIMAGE_FEATURES</glossterm>
            <info>
                SDKIMAGE_FEATURES[doc] = "Equivalent to IMAGE_FEATURES. However, this variable applies to the SDK generated from an image using the command 'bitbake -c populate_sdk imagename'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Equivalent to
                    <filename><link linkend='var-IMAGE_FEATURES'>IMAGE_FEATURES</link></filename>.
                    However, this variable applies to the SDK generated from an
                    image using the following command:
                    <literallayout class='monospaced'>
     $ bitbake -c populate_sdk <replaceable>imagename</replaceable>
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKMACHINE'><glossterm>SDKMACHINE</glossterm>
            <info>
                SDKMACHINE[doc] = "Specifies the architecture (i.e. i686 or x86_64) for which to build SDK items."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The machine for which the SDK is built.
                    In other words, the SDK is built such that it
                    runs on the target you specify with the
                    <filename>SDKMACHINE</filename> value.
                    The value points to a corresponding
                    <filename>.conf</filename> file under
                    <filename>conf/machine-sdk/</filename>.
                </para>

                <para>
                     You can use "i686" and "x86_64" as possible values
                     for this variable. The variable defaults to "i686"
                     and is set in the local.conf file in the Build Directory.
                     <literallayout class='monospaced'>
     SDKMACHINE ?= "i686"
                     </literallayout>
                     <note>
                         You cannot set the <filename>SDKMACHINE</filename>
                         variable in your distribution configuration file.
                         If you do, the configuration will not take affect.
                     </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKPATH'><glossterm>SDKPATH</glossterm>
            <info>
                SDKPATH[doc] = "Defines the path offered to the user for installation of the SDK that is generated by the OpenEmbedded build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the path offered to the user for installation
                    of the SDK that is generated by the OpenEmbedded build
                    system.
                    The path appears as the default location for installing
                    the SDK when you run the SDK's installation script.
                    You can override the offered path when you run the
                    script.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SDKTARGETSYSROOT'><glossterm>SDKTARGETSYSROOT</glossterm>
            <info>
                SDKTARGETSYSROOT[doc] = "Full path to the sysroot used for cross-compilation within an SDK as it will be when installed into the default SDKPATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The full path to the sysroot used for cross-compilation
                    within an SDK as it will be when installed into the
                    default
                    <link linkend='var-SDKPATH'><filename>SDKPATH</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SECTION'><glossterm>SECTION</glossterm>
            <info>
                SECTION[doc] = "The section in which packages should be categorized. Package management utilities can make use of this variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The section in which packages should be categorized.
                    Package management utilities can make use of this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SELECTED_OPTIMIZATION'><glossterm>SELECTED_OPTIMIZATION</glossterm>
            <info>
                SELECTED_OPTIMIZATION[doc] = "The variable takes the value of FULL_OPTIMIZATION unless DEBUG_BUILD = '1'. In this case, the value of DEBUG_OPTIMIZATION is used."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the optimization flags passed to the C compiler
                    when building for the target.
                    The flags are passed through the default value of the
                    <link linkend='var-TARGET_CFLAGS'><filename>TARGET_CFLAGS</filename></link>
                    variable.
                </para>

                <para>
                    The <filename>SELECTED_OPTIMIZATION</filename> variable
                    takes the value of
                    <filename><link linkend='var-FULL_OPTIMIZATION'>FULL_OPTIMIZATION</link></filename>
                    unless <filename><link linkend='var-DEBUG_BUILD'>DEBUG_BUILD</link></filename> = "1".
                    If that is the case, the value of
                    <filename><link linkend='var-DEBUG_OPTIMIZATION'>DEBUG_OPTIMIZATION</link></filename> is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SERIAL_CONSOLE'><glossterm>SERIAL_CONSOLE</glossterm>
            <info>
                SERIAL_CONSOLE[doc] = "Defines the serial consoles (TTYs) to enable using getty."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines a serial console (TTY) to enable using
                    <ulink url='https://en.wikipedia.org/wiki/Getty_(Unix)'>getty</ulink>.
                    Provide a value that specifies the baud rate followed by
                    the TTY device name separated by a space.
                    You cannot specify more than one TTY device:
                    <literallayout class='monospaced'>
     SERIAL_CONSOLE = "115200 ttyS0"
                    </literallayout>
                    <note>
                        The <filename>SERIAL_CONSOLE</filename> variable
                        is deprecated.
                        Please use the
                        <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
                        variable.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SERIAL_CONSOLES'><glossterm>SERIAL_CONSOLES</glossterm>
            <info>
                SERIAL_CONSOLES[doc] = "Defines the serial consoles (TTYs) to enable using getty."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines a serial console (TTY) to enable using
                    <ulink url='https://en.wikipedia.org/wiki/Getty_(Unix)'>getty</ulink>.
                    Provide a value that specifies the baud rate followed by
                    the TTY device name separated by a semicolon.
                    Use spaces to separate multiple devices:
                    <literallayout class='monospaced'>
     SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SERIAL_CONSOLES_CHECK'><glossterm>SERIAL_CONSOLES_CHECK</glossterm>
            <info>
                SERIAL_CONSOLES_CHECK[doc] = "Selected SERIAL_CONSOLES to check against /proc/console before enabling using getty. Supported only by SysVinit."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies serial consoles, which must be listed in
                    <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>,
                    to check against <filename>/proc/console</filename>
                    before enabling them using getty.
                    This variable allows aliasing in the format:
                    &lt;device&gt;:&lt;alias&gt;.
                    If a device was listed as "sclp_line0"
                    in <filename>/dev/</filename> and "ttyS0" was listed
                    in <filename>/proc/console</filename>, you would do the
                    following:
                    <literallayout class='monospaced'>
     SERIAL_CONSOLES_CHECK = "slcp_line0:ttyS0"
                    </literallayout>
                    This variable is currently only supported with SysVinit
                    (i.e. not with systemd).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS'><glossterm>SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS</glossterm>
            <info>
                SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS[doc] = "A list of recipe dependencies that should not be used to determine signatures of tasks from one recipe when they depend on tasks from another recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recipe dependencies that should not be used to
                    determine signatures of tasks from one recipe when they
                    depend on tasks from another recipe.
                    For example:
                    <literallayout class='monospaced'>
    SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "intone->mplayer2"
                    </literallayout>
                </para>

                <para>
                    In the previous example, <filename>intone</filename>
                    depends on <filename>mplayer2</filename>.
                </para>

                <para>
                    You can use the special token <filename>"*"</filename> on
                    the left-hand side of the dependency to match all
                    recipes except the one on the right-hand side.
                    Here is an example:
                    <literallayout class='monospaced'>
    SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "*->quilt-native"
                    </literallayout>
                </para>

                <para>
                    In the previous example, all recipes except
                    <filename>quilt-native</filename> ignore task
                    signatures from the <filename>quilt-native</filename>
                    recipe when determining their task signatures.
                </para>

                <para>
                    Use of this variable is one mechanism to remove dependencies
                    that affect task signatures and thus force rebuilds when a
                    recipe changes.
                    <note><title>Caution</title>
                        If you add an inappropriate dependency for a recipe
                        relationship, the software might break during
                        runtime if the interface of the second recipe was
                        changed after the first recipe had been built.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SIGGEN_EXCLUDERECIPES_ABISAFE'><glossterm>SIGGEN_EXCLUDERECIPES_ABISAFE</glossterm>
            <info>
                SIGGEN_EXCLUDERECIPES_ABISAFE[doc] = "A list of recipes that are completely stable and will never change."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of recipes that are completely stable and will
                    never change.
                    The ABI for the recipes in the list are presented by
                    output from the tasks run to build the recipe.
                    Use of this variable is one way to remove dependencies from
                    one recipe on another that affect task signatures and
                    thus force rebuilds when the recipe changes.
                    <note><title>Caution</title>
                        If you add an inappropriate variable to this list,
                        the software might break at runtime if the
                        interface of the recipe was changed after the other
                        had been built.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SITEINFO_BITS'><glossterm>SITEINFO_BITS</glossterm>
            <info>
                SITEINFO_BITS[doc] = "Specifies the number of bits for the target system CPU."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the number of bits for the target system CPU.
                    The value should be either "32" or "64".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SITEINFO_ENDIANNESS'><glossterm>SITEINFO_ENDIANNESS</glossterm>
            <info>
                SITEINFO_ENDIANNESS[doc] = "Specifies the endian byte order of the target system. The value should be either 'le' for 'little-endian' or 'be' for 'big-endian'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the endian byte order of the target system.
                    The value should be either "le" for little-endian or "be" for big-endian.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SKIP_FILEDEPS'><glossterm>SKIP_FILEDEPS</glossterm>
            <info>
                SKIP_FILEDEPS[doc] = "Enables you to remove all files from
                the "Provides" section of an RPM package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Enables removal of all files from the "Provides" section of
                    an RPM package.
                    Removal of these files is required for packages containing
                    prebuilt binaries and libraries such as
                    <filename>libstdc++</filename> and
                    <filename>glibc</filename>.
                </para>

                <para>
                    To enable file removal, set the variable to "1" in your
                    <filename>conf/local.conf</filename> configuration file
                    in your:
                    <link linkend='build-directory'>Build Directory</link>.
                    <literallayout class='monospaced'>
     SKIP_FILEDEPS = "1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOC_FAMILY'><glossterm>SOC_FAMILY</glossterm>
            <info>
                SOC_FAMILY[doc] = "Groups together machines based upon the same family of SOC (System On Chip). You typically set this variable in a common .inc file that you include in the configuration files of all the machines."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Groups together machines based upon the same family
                    of SOC (System On Chip).
                    You typically set this variable in a common
                    <filename>.inc</filename> file that you include in the
                    configuration files of all the machines.
                    <note>
                        You must include
                        <filename>conf/machine/include/soc-family.inc</filename>
                        for this variable to appear in
                        <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOLIBS'><glossterm>SOLIBS</glossterm>
            <info>
                SOLIBS[doc] = "Defines the suffix for shared libraries used on the target platform."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the suffix for shared libraries used on the
                    target platform.
                    By default, this suffix is ".so.*" for all Linux-based
                    systems and is defined in the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file.
                </para>

                <para>
                    You will see this variable referenced in the default values
                    of <filename>FILES_${PN}</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOLIBSDEV'><glossterm>SOLIBSDEV</glossterm>
            <info>
                SOLIBSDEV[doc] = "Defines the suffix for the development symbolic link (symlink) for shared libraries on the target platform."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines the suffix for the development symbolic link
                    (symlink) for shared libraries on the target platform.
                    By default, this suffix is ".so" for Linux-based
                    systems and is defined in the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file.
                </para>

                <para>
                    You will see this variable referenced in the default values
                    of <filename>FILES_${PN}-dev</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOURCE_MIRROR_FETCH'><glossterm>SOURCE_MIRROR_FETCH</glossterm>
            <info>
                SOURCE_MIRROR_FETCH[doc] = "Set as part of a source mirror generation script to skip COMPATIBLE_MACHINE and COMPATIBLE_HOST checks."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When you are fetching files to create a mirror of sources
                    (i.e. creating a source mirror), setting
                    <filename>SOURCE_MIRROR_FETCH</filename> to "1" in your
                    <filename>local.conf</filename> configuration file ensures
                    the source for all recipes are fetched regardless of
                    whether or not a recipe is compatible with the
                    configuration.
                    A recipe is considered incompatible with the currently
                    configured machine when either or both the
                    <link linkend='var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></link>
                    variable and
                    <link linkend='var-COMPATIBLE_HOST'><filename>COMPATIBLE_HOST</filename></link>
                    variables specify compatibility with a machine other
                    than that of the current machine or host.
                    <note><title>Warning</title>
                        Do not set the
                        <filename>SOURCE_MIRROR_FETCH</filename> variable
                        unless you are creating a source mirror.
                        In other words, do not set the variable during a
                        normal build.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SOURCE_MIRROR_URL'><glossterm>SOURCE_MIRROR_URL</glossterm>
            <info>
                SOURCE_MIRROR_URL[doc] = "URL to source mirror that will be used before fetching from original SRC_URI."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Defines your own
                    <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
                    from which to first fetch source before attempting to fetch
                    from the upstream specified in
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
                </para>

                <para>
                    To use this variable, you must globally inherit the
                    <link linkend='ref-classes-own-mirrors'><filename>own-mirrors</filename></link>
                    class and then provide the URL to your mirrors.
                    Here is the general syntax:
                    <literallayout class='monospaced'>
     INHERIT += "own-mirrors"
     SOURCE_MIRROR_URL = "http://<replaceable>example</replaceable>.com/<replaceable>my_source_mirror</replaceable>"
                    </literallayout>
                    <note>
                        You can specify only a single URL in
                        <filename>SOURCE_MIRROR_URL</filename>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SPDXLICENSEMAP'><glossterm>SPDXLICENSEMAP</glossterm>
            <info>
                SPDXLICENSEMAP[doc] = "Maps commonly used license names to their SPDX counterparts found in meta/files/common-licenses/."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Maps commonly used license names to their SPDX counterparts
                    found in <filename>meta/files/common-licenses/</filename>.
                    For the default <filename>SPDXLICENSEMAP</filename>
                    mappings, see the
                    <filename>meta/conf/licenses.conf</filename> file.
                </para>

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

        <glossentry id='var-SPECIAL_PKGSUFFIX'><glossterm>SPECIAL_PKGSUFFIX</glossterm>
            <info>
                SPECIAL_PKGSUFFIX[doc] = "A list of prefixes for PN used by the OpenEmbedded build system to create variants of recipes or packages. The list specifies the prefixes to strip off during certain circumstances such as the generation of the BPN variable."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of prefixes for <link linkend='var-PN'><filename>PN</filename></link> used by the
                    OpenEmbedded build system to create variants of recipes or packages.
                    The list specifies the prefixes to strip off during certain circumstances
                    such as the generation of the <link linkend='var-BPN'><filename>BPN</filename></link> variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SPL_BINARY'><glossterm>SPL_BINARY</glossterm>
            <info>
                SPL_BINARY[doc] = "The file type of the Secondary Program Loader (SPL)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The file type for the Secondary Program Loader (SPL).
                    Some devices use an SPL from which to boot (e.g. the
                    BeagleBone development board).
                    For such cases, you can declare the file type of the
                    SPL binary in the <filename>u-boot.inc</filename> include
                    file, which is used in the U-Boot recipe.
                </para>

                <para>
                    The SPL file type is set to "null" by default in the
                    <filename>u-boot.inc</filename> file as follows:
                    <literallayout class='monospaced'>
     # Some versions of u-boot build an SPL (Second Program Loader) image that
     # should be packaged along with the u-boot binary as well as placed in the
     # deploy directory.  For those versions they can set the following variables
     # to allow packaging the SPL.
     SPL_BINARY ?= ""
     SPL_BINARYNAME ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}"
     SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}"
     SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}"
                    </literallayout>
                    The <filename>SPL_BINARY</filename> variable helps form
                    various <filename>SPL_*</filename> variables used by
                    the OpenEmbedded build system.
                </para>

                <para>
                    See the BeagleBone machine configuration example in the
                    "<ulink url='&YOCTO_DOCS_BSP_URL;#creating-a-new-bsp-layer-using-the-bitbake-layers-script'>Creating a new BSP Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
                    section in the Yocto Project Board Support Package
                    Developer's Guide for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRC_URI'><glossterm>SRC_URI</glossterm>
            <info>
                SRC_URI[doc] = "The list of source files - local or remote. This variable tells the OpenEmbedded build system what bits to pull in for the build and how to pull them in."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The list of source files - local or remote.
                    This variable tells the OpenEmbedded build system which bits
                    to pull in for the build and how to pull them in.
                    For example, if the recipe or append file only needs to
                    fetch a tarball from the Internet, the recipe or
                    append file uses a single <filename>SRC_URI</filename>
                    entry.
                    On the other hand, if the recipe or append file needs to
                    fetch a tarball, apply two patches, and include a custom
                    file, the recipe or append file would include four
                    instances of the variable.
                </para>

                <para>
                    The following list explains the available URI protocols.
                    URI protocols are highly dependent on particular BitBake
                    Fetcher submodules.
                    Depending on the fetcher BitBake uses, various URL
                    parameters are employed.
                    For specifics on the supported Fetchers, see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#bb-fetchers'>Fetchers</ulink>"
                    section in the BitBake User Manual.
                    <itemizedlist>
                        <listitem><para><emphasis><filename>file://</filename> -</emphasis>
                            Fetches files, which are usually files shipped with
                            the
                            <link linkend='metadata'>Metadata</link>,
                            from the local machine (e.g.
                            <ulink url='&YOCTO_DOCS_OM_URL;#patching-dev-environment'>patch</ulink>
                            files).
                            The path is relative to the
                            <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                            variable.
                            Thus, the build system searches, in order, from the
                            following directories, which are assumed to be a
                            subdirectories of the directory in which the
                            recipe file (<filename>.bb</filename>) or
                            append file (<filename>.bbappend</filename>)
                            resides:
                            <itemizedlist>
                                <listitem><para><emphasis><filename>${BPN}</filename> -</emphasis>
                                    The base recipe name without any special
                                    suffix or version numbers.
                                    </para></listitem>
                                <listitem><para><emphasis><filename>${BP}</filename> -</emphasis>
                                    <filename>${<link linkend='var-BPN'>BPN</link>}-${PV}</filename>.
                                    The base recipe name and version but without
                                    any special package name suffix.
                                    </para></listitem>
                                <listitem><para><emphasis>files -</emphasis>
                                    Files within a directory, which is named
                                    <filename>files</filename> and is also
                                    alongside the recipe or append file.
                                    </para></listitem>
                            </itemizedlist>
                            <note>
                                If you want the build system to pick up files
                                specified through a
                                <filename>SRC_URI</filename>
                                statement from your append file, you need to be
                                sure to extend the
                                <filename>FILESPATH</filename>
                                variable by also using the
                                <link linkend='var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></link>
                                variable from within your append file.
                            </note>
                            </para></listitem>
                        <listitem><para><emphasis><filename>bzr://</filename> -</emphasis> Fetches files from a
                            Bazaar revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>git://</filename> -</emphasis> Fetches files from a
                            Git revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>osc://</filename> -</emphasis> Fetches files from
                            an OSC (OpenSUSE Build service) revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>repo://</filename> -</emphasis> Fetches files from
                            a repo (Git) repository.</para></listitem>
                        <listitem><para><emphasis><filename>ccrc://</filename> -</emphasis>
                            Fetches files from a ClearCase repository.
                            </para></listitem>
                        <listitem><para><emphasis><filename>http://</filename> -</emphasis> Fetches files from
                            the Internet using <filename>http</filename>.</para></listitem>
                        <listitem><para><emphasis><filename>https://</filename> -</emphasis> Fetches files
                            from the Internet using <filename>https</filename>.</para></listitem>
                        <listitem><para><emphasis><filename>ftp://</filename> -</emphasis> Fetches files
                            from the Internet using <filename>ftp</filename>.</para></listitem>
                        <listitem><para><emphasis><filename>cvs://</filename> -</emphasis> Fetches files from
                            a CVS revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>hg://</filename> -</emphasis> Fetches files from
                            a Mercurial (<filename>hg</filename>) revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>p4://</filename> -</emphasis> Fetches files from
                            a Perforce (<filename>p4</filename>) revision control repository.</para></listitem>
                        <listitem><para><emphasis><filename>ssh://</filename> -</emphasis> Fetches files from
                            a secure shell.</para></listitem>
                        <listitem><para><emphasis><filename>svn://</filename> -</emphasis> Fetches files from
                            a Subversion (<filename>svn</filename>) revision control repository.</para></listitem>
                    </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>mindate</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>minrev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is equal to or greater than <filename>minrev</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>maxrev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is not later than <filename>maxrev</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>rev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is equal to <filename>rev</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>notrev</filename> -</emphasis>
                            Apply the patch only if <filename>SRCREV</filename>
                            is not equal to <filename>rev</filename>.
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    Here are some additional options worth mentioning:
                    <itemizedlist>
                        <listitem><para><emphasis><filename>unpack</filename> -</emphasis> Controls
                            whether or not to unpack the file if it is an archive.
                            The default action is to unpack the file.</para></listitem>
                        <listitem><para><emphasis><filename>destsuffix</filename> -</emphasis> Places the file
                            (or extracts its contents) into the specified
                            subdirectory of <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
                            when the Git fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>subdir</filename> -</emphasis> Places the file
                            (or extracts its contents) into the specified
                            subdirectory of <filename>WORKDIR</filename>
                            when the local (<filename>file://</filename>)
                            fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>localdir</filename> -</emphasis> Places the file
                            (or extracts its contents) into the specified
                            subdirectory of <filename>WORKDIR</filename> when
                            the CVS fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>subpath</filename> -</emphasis>
                            Limits the checkout to a specific subpath of the
                            tree when using the Git fetcher is used.
                            </para></listitem>
                        <listitem><para><emphasis><filename>name</filename> -</emphasis> Specifies a
                            name to be used for association with <filename>SRC_URI</filename> checksums
                            when you have more than one file specified in <filename>SRC_URI</filename>.
                            </para></listitem>
                        <listitem><para><emphasis><filename>downloadfilename</filename> -</emphasis> Specifies
                            the filename used when storing the downloaded file.</para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRC_URI_OVERRIDES_PACKAGE_ARCH'><glossterm>SRC_URI_OVERRIDES_PACKAGE_ARCH</glossterm>
            <info>
                SRC_URI_OVERRIDES_PACKAGE_ARCH[doc] = "By default, the OpenEmbedded build system automatically detects whether SRC_URI contains files that are machine-specific. If so, the build system automatically changes PACKAGE_ARCH. Setting this variable to '0' disables this behavior."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    By default, the OpenEmbedded build system automatically detects whether
                    <filename><link linkend='var-SRC_URI'>SRC_URI</link></filename>
                    contains files that are machine-specific.
                    If so, the build system automatically changes
                    <filename><link linkend='var-PACKAGE_ARCH'>PACKAGE_ARCH</link></filename>.
                    Setting this variable to "0" disables this behavior.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRCDATE'><glossterm>SRCDATE</glossterm>
            <info>
                SRCDATE[doc] = "The date of the source code used to build the package. This variable applies only if the source was fetched from a Source Code Manager (SCM)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The date of the source code used to build the package.
                    This variable applies only if the source was fetched from a Source Code Manager (SCM).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRCPV'><glossterm>SRCPV</glossterm>
            <info>
                SRCPV[doc] = "Returns the version string of the current package. This string is used to help define the value of PV."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Returns the version string of the current package.
                    This string is used to help define the value of
                    <link linkend='var-PV'><filename>PV</filename></link>.
                </para>

                <para>
                    The <filename>SRCPV</filename> variable is defined in the
                    <filename>meta/conf/bitbake.conf</filename> configuration
                    file in the
                    <link linkend='source-directory'>Source Directory</link>
                    as follows:
                    <literallayout class='monospaced'>
     SRCPV = "${@bb.fetch2.get_srcrev(d)}"
                    </literallayout>
                </para>

                <para>
                    Recipes that need to define <filename>PV</filename> do so
                    with the help of the <filename>SRCPV</filename>.
                    For example, the <filename>ofono</filename> recipe
                    (<filename>ofono_git.bb</filename>) located in
                    <filename>meta/recipes-connectivity</filename> in the
                    Source Directory defines <filename>PV</filename> as
                    follows:
                    <literallayout class='monospaced'>
     PV = "0.12-git${SRCPV}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRCREV'><glossterm>SRCREV</glossterm>
            <info>
                SRCREV[doc] = "The revision of the source code used to build the package. This variable applies to Subversion, Git, Mercurial, and Bazaar only."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The revision of the source code used to build the package.
                    This variable applies to Subversion, Git, Mercurial, and
                    Bazaar only.
                    Note that if you want to build a fixed revision and you
                    want to avoid performing a query on the remote repository
                    every time BitBake parses your recipe, you should specify
                    a <filename>SRCREV</filename> that is a
                    full revision identifier and not just a tag.
                    <note>
                        For information on limitations when inheriting the
                        latest revision of software using
                        <filename>SRCREV</filename>, see the
                        <link linkend='var-AUTOREV'><filename>AUTOREV</filename></link>
                        variable description and the
                        "<ulink url='&YOCTO_DOCS_DEV_URL;#automatically-incrementing-a-binary-package-revision-number'>Automatically Incrementing a Binary Package Revision Number</ulink>"
                        section, which is in the Yocto Project Development
                        Tasks Manual.
                    </note>
                </para>

            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_DIR'><glossterm>SSTATE_DIR</glossterm>
            <info>
                SSTATE_DIR[doc] = "The directory for the shared state cache."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory for the shared state cache.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_MIRROR_ALLOW_NETWORK'><glossterm>SSTATE_MIRROR_ALLOW_NETWORK</glossterm>
            <info>
                SSTATE_MIRROR_ALLOW_NETWORK[doc] = "If set to "1", allows fetches from mirrors that are specified in SSTATE_MIRRORS to work even when fetching from the network is disabled by setting BB_NO_NETWORK to "1"."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "1", allows fetches from
                    mirrors that are specified in
                    <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
                    to work even when fetching from the network is
                    disabled by setting <filename>BB_NO_NETWORK</filename>
                    to "1".
                    Using the
                    <filename>SSTATE_MIRROR_ALLOW_NETWORK</filename>
                    variable is useful if you have set
                    <filename>SSTATE_MIRRORS</filename> to point to an
                    internal server for your shared state cache, but
                    you want to disable any other fetching from the network.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_MIRRORS'><glossterm>SSTATE_MIRRORS</glossterm>
            <info>
                SSTATE_MIRRORS[doc] = "Configures the OpenEmbedded build system to search other mirror locations for prebuilt cache data objects before building out the data. You can specify a filesystem directory or a remote URL such as HTTP or FTP."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Configures the OpenEmbedded build system to search other
                    mirror locations for prebuilt cache data objects before
                    building out the data.
                    This variable works like fetcher
                    <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>
                    and <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
                    and points to the cache locations to check for the shared
                    state (sstate) objects.
                </para>

                <para>
                    You can specify a filesystem directory or a remote URL such
                    as HTTP or FTP.
                    The locations you specify need to contain the shared state
                    cache (sstate-cache) results from previous builds.
                    The sstate-cache you point to can also be from builds on
                    other machines.
                </para>

                <para>
                    When pointing to sstate build artifacts on another machine
                    that uses a different GCC version for native builds,
                    you must configure <filename>SSTATE_MIRROR</filename>
                    with a regular expression that maps local search paths
                    to server paths.
                    The paths need to take into account
                    <link linkend='var-NATIVELSBSTRING'><filename>NATIVELSBSTRING</filename></link>
                    set by the
                    <link linkend='ref-classes-uninative'><filename>uninative</filename></link>
                    class.
                    For example, the following maps the local search path
                    <filename>universal-4.9</filename> to the server-provided
                    path <replaceable>server_url_sstate_path</replaceable>:
                    <literallayout class='monospaced'>
     SSTATE_MIRRORS ?= file://universal-4.9/(.*) http://<replaceable>server_url_sstate_path</replaceable>/universal-4.8/\1 \n
                    </literallayout>
                </para>

                <para>
                    If a mirror uses the same structure as
                    <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>,
                    you need to add
                    "PATH" at the end as shown in the examples below.
                    The build system substitutes the correct path within the
                    directory structure.
                    <literallayout class='monospaced'>
     SSTATE_MIRRORS ?= "\
     file://.* http://<replaceable>someserver</replaceable>.tld/share/sstate/PATH;downloadfilename=PATH \n \
     file://.* file:///<replaceable>some-local-dir</replaceable>/sstate/PATH"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SSTATE_SCAN_FILES'><glossterm>SSTATE_SCAN_FILES</glossterm>
            <info>
                SSTATE_SCAN_FILES[doc] = "Controls the list of files the OpenEmbedded build system scans for hardcoded installation paths."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Controls the list of files the OpenEmbedded build system
                    scans for hardcoded installation paths. The variable uses a
                    space-separated list of filenames (not paths) with standard
                    wildcard characters allowed.
                </para>

                <para>
                    During a build, the OpenEmbedded build system creates a
                    shared state (sstate) object during the first stage of
                    preparing the sysroots. That object is scanned for
                    hardcoded paths for original installation locations.
                    The list of files that are scanned for paths is controlled
                    by the <filename>SSTATE_SCAN_FILES</filename> variable.
                    Typically, recipes add files they want to be scanned to the
                    value of <filename>SSTATE_SCAN_FILES</filename> rather than
                    the variable being comprehensively set. The
                    <link linkend='ref-classes-sstate'><filename>sstate</filename></link>
                    class specifies the default list of files.
                </para>

                <para>
                    For details on the process, see the
                    <link linkend='ref-classes-staging'><filename>staging</filename></link>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BASE_LIBDIR_NATIVE'><glossterm>STAGING_BASE_LIBDIR_NATIVE</glossterm>
            <info>
                STAGING_BASE_LIBDIR_NATIVE[doc] = "Specifies the path to the /lib subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/lib</filename>
                    subdirectory of the sysroot directory for the
                    build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BASELIBDIR'><glossterm>STAGING_BASELIBDIR</glossterm>
            <info>
                STAGING_BASELIBDIR[doc] = "Specifies the path to the /lib subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/lib</filename>
                    subdirectory of the sysroot directory for the target
                    for which the current recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BINDIR'><glossterm>STAGING_BINDIR</glossterm>
            <info>
                STAGING_BINDIR[doc] = "Specifies the path to the /usr/bin subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the
                    <filename>/usr/bin</filename> subdirectory of the
                    sysroot directory for the target for which the current
                    recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BINDIR_CROSS'><glossterm>STAGING_BINDIR_CROSS</glossterm>
            <info>
                STAGING_BINDIR_CROSS[doc] = "Specifies the path to the directory containing binary configuration scripts. These scripts provide configuration information for other software that wants to make use of libraries or include files provided by the software associated with the script."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the directory containing binary
                    configuration scripts.
                    These scripts provide configuration information for
                    other software that wants to make use of libraries or
                    include files provided by the software associated with
                    the script.
                    <note>
                        This style of build configuration has been largely
                        replaced by <filename>pkg-config</filename>.
                        Consequently, if <filename>pkg-config</filename>
                        is supported by the library to which you are linking,
                        it is recommended you use
                        <filename>pkg-config</filename> instead of a
                        provided configuration script.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_BINDIR_NATIVE'><glossterm>STAGING_BINDIR_NATIVE</glossterm>
            <info>
                STAGING_BINDIR_NATIVE[doc] = "Specifies the path to the /usr/bin subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the
                    <filename>/usr/bin</filename> subdirectory of the
                    sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DATADIR'><glossterm>STAGING_DATADIR</glossterm>
            <info>
                STAGING_DATADIR[doc] = "Specifies the path to the /usr/share subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                 <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                     Specifies the path to the <filename>/usr/share</filename>
                     subdirectory of the sysroot directory for the target
                     for which the current recipe is being built
                     (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DATADIR_NATIVE'><glossterm>STAGING_DATADIR_NATIVE</glossterm>
            <info>
                STAGING_DATADIR_NATIVE[doc] = "Specifies the path to the /usr/share subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/share</filename>
                    subdirectory of the sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR'><glossterm>STAGING_DIR</glossterm>
            <info>
                STAGING_DIR[doc] = "Helps construct the recipe-sysroots directory, which is used during packaging."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Helps construct the <filename>recipe-sysroots</filename>
                    directory, which is used during packaging.
                </para>

                <para>
                    For information on how staging for recipe-specific
                    sysroots occurs, see the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task, the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#new-sharing-files-between-recipes'>Sharing Files Between Recipes</ulink>"
                    section in the Yocto Project Development Tasks Manual, the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#configuration-compilation-and-staging-dev-environment'>Configuration, Compilation, and Staging</ulink>"
                    section in the Yocto Project Overview and Concepts Manual,
                    and the
                    <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>
                    variable.
                    <note>
                        Recipes should never write files directly under
                        the <filename>STAGING_DIR</filename> directory because
                        the OpenEmbedded build system
                        manages the directory automatically.
                        Instead, files should be installed to
                        <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>
                        within your recipe's
                        <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                        task and then the OpenEmbedded build system will
                        stage a subset of those files into the sysroot.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR_HOST'><glossterm>STAGING_DIR_HOST</glossterm>
            <info>
                STAGING_DIR_HOST[doc] = "Specifies the path to the sysroot directory for the system that the component is built to run on."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the sysroot directory for the system
                    on which the component is built to run (the system that
                    hosts the component).
                    For most recipes, this sysroot is the one in which that
                    recipe's
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task copies files.
                    Exceptions include <filename>-native</filename> recipes,
                    where the <filename>do_populate_sysroot</filename> task
                    instead uses
                    <link linkend='var-STAGING_DIR_NATIVE'><filename>STAGING_DIR_NATIVE</filename></link>.
                    Depending on the type of recipe and the build target,
                    <filename>STAGING_DIR_HOST</filename> can have the
                    following values:
                    <itemizedlist>
                        <listitem><para>
                            For recipes building for the target machine, the
                            value is
                            "${<link linkend='var-STAGING_DIR'>STAGING_DIR</link>}/${<link linkend='var-MACHINE'>MACHINE</link>}".
                            </para></listitem>
                        <listitem><para>
                            For native recipes building for the build host, the
                            value is empty given the assumption that when
                            building for the build host, the build host's own
                            directories should be used.
                            <note>
                                <para><filename>-native</filename> recipes are
                                not installed into host paths like such as
                                <filename>/usr</filename>.
                                Rather, these recipes are installed into
                                <filename>STAGING_DIR_NATIVE</filename>.
                                When compiling <filename>-native</filename>
                                recipes, standard build environment variables
                                such as
                                <link linkend='var-CPPFLAGS'><filename>CPPFLAGS</filename></link>
                                and
                                <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
                                are set up so that both host paths and
                                <filename>STAGING_DIR_NATIVE</filename> are
                                searched for libraries and headers using, for
                                example, GCC's <filename>-isystem</filename>
                                option.</para>

                                <para>Thus, the emphasis is that the
                                <filename>STAGING_DIR*</filename> variables
                                should be viewed as input variables by tasks
                                such as
                                <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>,
                                <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>,
                                and
                                <link linkend='ref-tasks-install'><filename>do_install</filename></link>.
                                Having the real system root correspond to
                                <filename>STAGING_DIR_HOST</filename> makes
                                conceptual sense for
                                <filename>-native</filename> recipes, as
                                they make use of host headers and libraries.
                                </para>
                            </note>
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR_NATIVE'><glossterm>STAGING_DIR_NATIVE</glossterm>
            <info>
                STAGING_DIR_NATIVE[doc] = "Specifies the path to the sysroot directory used when building components that run on the build host itself."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the sysroot directory used when
                    building components that run on the build host itself.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_DIR_TARGET'><glossterm>STAGING_DIR_TARGET</glossterm>
            <info>
                STAGING_DIR_TARGET[doc] = "Specifies the path to the sysroot used for the system for which the component generates code."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the sysroot used for the system for
                    which the component generates code.
                    For components that do not generate code, which is the
                    majority, <filename>STAGING_DIR_TARGET</filename> is set
                    to match
                    <link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>.
                </para>

                <para>
                    Some recipes build binaries that can run on the target
                    system but those binaries in turn generate code for
                    another different system (e.g. cross-canadian recipes).
                    Using terminology from GNU, the primary system is referred
                    to as the "HOST" and the secondary, or different, system is
                    referred to as the "TARGET".
                    Thus, the binaries run on the "HOST" system
                    and generate binaries for the "TARGET" system.
                    The <filename>STAGING_DIR_HOST</filename> variable points
                    to the sysroot used for the "HOST" system, while
                    <filename>STAGING_DIR_TARGET</filename>
                    points to the sysroot used for the "TARGET" system.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_ETCDIR_NATIVE'><glossterm>STAGING_ETCDIR_NATIVE</glossterm>
            <info>
                STAGING_ETCDIR_NATIVE[doc] = "Specifies the path to the /etc subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/etc</filename>
                    subdirectory of the sysroot directory for the
                    build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_EXECPREFIXDIR'><glossterm>STAGING_EXECPREFIXDIR</glossterm>
            <info>
                STAGING_EXECPREFIXDIR[doc] = "Specifies the path to the /usr subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr</filename>
                    subdirectory of the sysroot directory for the target
                    for which the current recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_INCDIR'><glossterm>STAGING_INCDIR</glossterm>
            <info>
                STAGING_INCDIR[doc] = "Specifies the path to the /usr/include subdirectory of the sysroot directory for the target for which the current recipe being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the
                    <filename>/usr/include</filename> subdirectory of the
                    sysroot directory for the target for which the current
                    recipe being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_INCDIR_NATIVE'><glossterm>STAGING_INCDIR_NATIVE</glossterm>
            <info>
                STAGING_INCDIR_NATIVE[doc] = "Specifies the path to the /usr/include subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/include</filename>
                    subdirectory of the sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_KERNEL_BUILDDIR'><glossterm>STAGING_KERNEL_BUILDDIR</glossterm>
            <info>
                STAGING_KERNEL_BUILDDIR[doc] = "Points to the directory containing the kernel build artifacts."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the directory containing the kernel build
                    artifacts.
                    Recipes building software that needs to access kernel
                    build artifacts
                    (e.g. <filename>systemtap-uprobes</filename>) can look in
                    the directory specified with the
                    <filename>STAGING_KERNEL_BUILDDIR</filename> variable to
                    find these artifacts after the kernel has been built.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_KERNEL_DIR'><glossterm>STAGING_KERNEL_DIR</glossterm>
            <info>
                STAGING_KERNEL_DIR[doc] = "The directory with kernel headers that are required to build out-of-tree modules."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory with kernel headers that are required to build out-of-tree
                    modules.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_LIBDIR'><glossterm>STAGING_LIBDIR</glossterm>
            <info>
                STAGING_LIBDIR[doc] = "Specifies the path to the /usr/lib subdirectory of the sysroot directory for the target for which the current recipe is being built (STAGING_DIR_HOST)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/lib</filename>
                    subdirectory of the sysroot directory for the target for
                    which the current recipe is being built
                    (<link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR_HOST</filename></link>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAGING_LIBDIR_NATIVE'><glossterm>STAGING_LIBDIR_NATIVE</glossterm>
            <info>
                STAGING_LIBDIR_NATIVE[doc] = "Specifies the path to the /usr/lib subdirectory of the sysroot directory for the build host."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the path to the <filename>/usr/lib</filename>
                    subdirectory of the sysroot directory for the build host.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAMP'><glossterm>STAMP</glossterm>
            <info>
                STAMP[doc] = "Specifies the base path used to create recipe stamp files. The path to an actual stamp file is constructed by evaluating this string and then appending additional information."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the base path used to create recipe stamp files.
                    The path to an actual stamp file is constructed by evaluating this
                    string and then appending additional information.
                    Currently, the default assignment for <filename>STAMP</filename>
                    as set in the <filename>meta/conf/bitbake.conf</filename> file
                    is:
                    <literallayout class='monospaced'>
     STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
                    </literallayout>
                </para>

                <para>
                    For information on how BitBake uses stamp files to determine
                    if a task should be rerun, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#stamp-files-and-the-rerunning-of-tasks'>Stamp Files and the Rerunning of Tasks</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                </para>

                <para>
                    See <link linkend='var-STAMPS_DIR'><filename>STAMPS_DIR</filename></link>,
                    <link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>,
                    <link linkend='var-PN'><filename>PN</filename></link>,
                    <link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>,
                    <link linkend='var-PV'><filename>PV</filename></link>, and
                    <link linkend='var-PR'><filename>PR</filename></link> for related variable
                    information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAMPS_DIR'><glossterm>STAMPS_DIR</glossterm>
            <info>
                STAMPS_DIR[doc] = "Specifies the base directory in which the OpenEmbedded build system places stamps."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the base directory in which the OpenEmbedded
                    build system places stamps.
                    The default directory is
                    <filename>${TMPDIR}/stamps</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STRIP'><glossterm>STRIP</glossterm>
            <info>
                STRIP[doc] = "Minimal command and arguments to run 'strip' (strip symbols)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The minimal command and arguments to run
                    <filename>strip</filename>, which is used to strip
                    symbols.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SUMMARY'><glossterm>SUMMARY</glossterm>
            <info>
                SUMMARY[doc] = "The short (80 characters or less) summary of the binary package for packaging systems such as opkg, rpm, or dpkg. By default, SUMMARY is used to define the DESCRIPTION variable if DESCRIPTION is not set in the recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The short (72 characters or less) summary of the binary package for packaging
                    systems such as <filename>opkg</filename>, <filename>rpm</filename>, or
                    <filename>dpkg</filename>.
                    By default, <filename>SUMMARY</filename> is used to define
                    the <link linkend='var-DESCRIPTION'><filename>DESCRIPTION</filename></link>
                    variable if <filename>DESCRIPTION</filename> is not set
                    in the recipe.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SVNDIR'><glossterm>SVNDIR</glossterm>
            <info>
                SVNDIR[doc] = "The directory where Subversion checkouts are stored."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory in which files checked out of a Subversion
                    system are stored.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_DEFAULT_CONSOLE'><glossterm>SYSLINUX_DEFAULT_CONSOLE</glossterm>
            <info>
                SYSLINUX_DEFAULT_CONSOLE[doc] = "Specifies the kernel boot default console."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the kernel boot default console.
                    If you want to use a console other than the default,
                    set this variable in your recipe as follows where "X" is
                    the console number you want to use:
                    <literallayout class='monospaced'>
     SYSLINUX_DEFAULT_CONSOLE = "console=ttyX"
                    </literallayout>
                </para>

                <para>
                    The
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class initially sets this variable to null but then checks
                    for a value later.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_OPTS'><glossterm>SYSLINUX_OPTS</glossterm>
            <info>
                SYSLINUX_OPTS[doc] = "Lists additional options to add to the syslinux file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Lists additional options to add to the syslinux file.
                    You need to set this variable in your recipe.
                    If you want to list multiple options, separate the options
                    with a semicolon character (<filename>;</filename>).
                </para>

                <para>
                    The
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class uses this variable to create a set of options.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_SERIAL'><glossterm>SYSLINUX_SERIAL</glossterm>
            <info>
                SYSLINUX_SERIAL[doc] = "Specifies the alternate serial port or turns it off."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the alternate serial port or turns it off.
                    To turn off serial, set this variable to an empty string
                    in your recipe.
                    The variable's default value is set in the
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SYSLINUX_SERIAL ?= "0 115200"
                    </literallayout>
                </para>

                <para>
                    The class checks for and uses the variable as needed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_SPLASH'><glossterm>SYSLINUX_SPLASH</glossterm>
            <info>
                SYSLINUX_SPLASH[doc] = "An .LSS file used as the background for the VGA boot menu when you use the boot menu."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An <filename>.LSS</filename> file used as the background
                    for the VGA boot menu when you use the boot menu.
                    You need to set this variable in your recipe.
                </para>

                <para>
                    The
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class checks for this variable and if found, the
                    OpenEmbedded build system installs the splash screen.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSLINUX_SERIAL_TTY'><glossterm>SYSLINUX_SERIAL_TTY</glossterm>
            <info>
                SYSLINUX_SERIAL_TTY[doc] = "Specifies the alternate console=tty... kernel boot argument."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the alternate console=tty... kernel boot argument.
                    The variable's default value is set in the
                    <link linkend='ref-classes-syslinux'><filename>syslinux</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SYSLINUX_SERIAL_TTY ?= "console=ttyS0,115200"
                    </literallayout>
                </para>

                <para>
                    The class checks for and uses the variable as needed.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DESTDIR'><glossterm>SYSROOT_DESTDIR</glossterm>
            <info>
                SYSROOT_DESTDIR[doc] = "Points to the temporary work directory (default ${WORKDIR}/sysroot-destdir) where the files populated into the sysroot are assembled during the do_populate_sysroot task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the temporary directory under the work directory
                    (default
                    "<filename>${</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link><filename>}/sysroot-destdir</filename>")
                    where the files populated into the sysroot are assembled
                    during the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DIRS'><glossterm>SYSROOT_DIRS</glossterm>
            <info>
                SYSROOT_DIRS[doc] = "Directories that are staged into the sysroot by the do_populate_sysroot task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Directories that are staged into the sysroot by the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task.
                    By default, the following directories are staged:
                    <literallayout class='monospaced'>
     SYSROOT_DIRS = " \
         ${includedir} \
         ${libdir} \
         ${base_libdir} \
         ${nonarch_base_libdir} \
         ${datadir} \
     "
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DIRS_BLACKLIST'><glossterm>SYSROOT_DIRS_BLACKLIST</glossterm>
            <info>
                SYSROOT_DIRS_BLACKLIST[doc] = "Directories that are not staged into the sysroot by the do_populate_sysroot task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Directories that are not staged into the sysroot by the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task.
                    You can use this variable to exclude certain subdirectories
                    of directories listed in
                    <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>
                    from staging.
                    By default, the following directories are not staged:
                    <literallayout class='monospaced'>
     SYSROOT_DIRS_BLACKLIST = " \
         ${mandir} \
         ${docdir} \
         ${infodir} \
         ${datadir}/locale \
         ${datadir}/applications \
         ${datadir}/fonts \
         ${datadir}/pixmaps \
     "
                     </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_DIRS_NATIVE'><glossterm>SYSROOT_DIRS_NATIVE</glossterm>
            <info>
                SYSROOT_DIRS_NATIVE[doc] = "Extra directories staged into the sysroot by the do_populate_sysroot task for -native recipes, in addition to those specified in SYSROOT_DIRS."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Extra directories staged into the sysroot by the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task for <filename>-native</filename> recipes, in addition
                    to those specified in
                    <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>.
                    By default, the following extra directories are staged:
                    <literallayout class='monospaced'>
     SYSROOT_DIRS_NATIVE = " \
         ${bindir} \
         ${sbindir} \
         ${base_bindir} \
         ${base_sbindir} \
         ${libexecdir} \
         ${sysconfdir} \
         ${localstatedir} \
     "
                    </literallayout>
                    <note>
                        Programs built by <filename>-native</filename> recipes
                        run directly from the sysroot
                        (<link linkend='var-STAGING_DIR_NATIVE'><filename>STAGING_DIR_NATIVE</filename></link>),
                        which is why additional directories containing program
                        executables and supporting files need to be staged.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSROOT_PREPROCESS_FUNCS'><glossterm>SYSROOT_PREPROCESS_FUNCS</glossterm>
            <info>
                SYSROOT_PREPROCESS_FUNCS[doc] = "A list of functions to execute after files are staged into the sysroot. These functions are usually used to apply additional processing on the staged files, or to stage additional files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of functions to execute after files are staged into
                    the sysroot.
                    These functions are usually used to apply additional
                    processing on the staged files, or to stage additional
                    files.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_AUTO_ENABLE'><glossterm>SYSTEMD_AUTO_ENABLE</glossterm>
            <info>
                SYSTEMD_AUTO_ENABLE[doc] = "For recipes that inherit the systemd class, this variable specifies whether the specified service in SYSTEMD_SERVICE should start automatically or not."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class, this variable specifies whether the specified service
                    in
                    <link linkend='var-SYSTEMD_SERVICE'><filename>SYSTEMD_SERVICE</filename></link>
                    should start automatically or not.
                    By default, the service is enabled to automatically start
                    at boot time.
                    The default setting is in the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class as follows:
                    <literallayout class='monospaced'>
     SYSTEMD_AUTO_ENABLE ??= "enable"
                    </literallayout>
                </para>

                <para>
                    You can disable the service by setting the variable to
                    "disable".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_BOOT_CFG'><glossterm>SYSTEMD_BOOT_CFG</glossterm>
            <info>
                SYSTEMD_BOOT_CFG[doc] = "When EFI_PROVIDER is set to "systemd-boot", the SYSTEMD_BOOT_CFG variable specifies the configuration file that should be used."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When
                    <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
                    is set to "systemd-boot", the
                    <filename>SYSTEMD_BOOT_CFG</filename> variable specifies the
                    configuration file that should be used.
                    By default, the
                    <link linkend='ref-classes-systemd-boot'><filename>systemd-boot</filename></link>
                    class sets the <filename>SYSTEMD_BOOT_CFG</filename> as
                    follows:
                    <literallayout class='monospaced'>
     SYSTEMD_BOOT_CFG ?= "${<link linkend='var-S'>S</link>}/loader.conf"
                    </literallayout>
                </para>

                <para>
                    For information on Systemd-boot, see the
                    <ulink url='http://www.freedesktop.org/wiki/Software/systemd/systemd-boot/'>Systemd-boot documentation</ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_BOOT_ENTRIES'><glossterm>SYSTEMD_BOOT_ENTRIES</glossterm>
            <info>
                SYSTEMD_BOOT_ENTRIES[doc] = "When EFI_PROVIDER is set to "systemd-boot", the SYSTEMD_BOOT_ENTRIES variable specifies a list of entry files (*.conf) to install that contain one boot entry per file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When
                    <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
                    is set to "systemd-boot", the
                    <filename>SYSTEMD_BOOT_ENTRIES</filename> variable specifies
                    a list of entry files
                    (<filename>*.conf</filename>) to install that contain
                    one boot entry per file.
                    By default, the
                    <link linkend='ref-classes-systemd-boot'><filename>systemd-boot</filename></link>
                    class sets the <filename>SYSTEMD_BOOT_ENTRIES</filename> as
                    follows:
                    <literallayout class='monospaced'>
     SYSTEMD_BOOT_ENTRIES ?= ""
                    </literallayout>
                </para>

                <para>
                    For information on Systemd-boot, see the
                    <ulink url='http://www.freedesktop.org/wiki/Software/systemd/systemd-boot/'>Systemd-boot documentation</ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_BOOT_TIMEOUT'><glossterm>SYSTEMD_BOOT_TIMEOUT</glossterm>
            <info>
                SYSTEMD_BOOT_TIMEOUT[doc] = "When EFI_PROVIDER is set to "systemd-boot", the SYSTEMD_BOOT_TIMEOUT variable specifies the boot menu timeout in seconds."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When
                    <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
                    is set to "systemd-boot", the
                    <filename>SYSTEMD_BOOT_TIMEOUT</filename> variable specifies
                    the boot menu timeout in seconds.
                    By default, the
                    <link linkend='ref-classes-systemd-boot'><filename>systemd-boot</filename></link>
                    class sets the <filename>SYSTEMD_BOOT_TIMEOUT</filename> as
                    follows:
                    <literallayout class='monospaced'>
     SYSTEMD_BOOT_TIMEOUT ?= "10"
                    </literallayout>
                </para>

                <para>
                    For information on Systemd-boot, see the
                    <ulink url='http://www.freedesktop.org/wiki/Software/systemd/systemd-boot/'>Systemd-boot documentation</ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_PACKAGES'><glossterm>SYSTEMD_PACKAGES</glossterm>
            <info>
                SYSTEMD_PACKAGES[doc] = "For recipes that inherit the systemd class, this variable locates the systemd unit files when they are not found in the main recipe's package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class, this variable locates the systemd unit files when
                    they are not found in the main recipe's package.
                    By default, the
                    <filename>SYSTEMD_PACKAGES</filename> variable is set
                    such that the systemd unit files are assumed to reside in
                    the recipes main package:
                    <literallayout class='monospaced'>
     SYSTEMD_PACKAGES ?= "${PN}"
                    </literallayout>
                </para>

                <para>
                    If these unit files are not in this recipe's main
                    package, you need to use
                    <filename>SYSTEMD_PACKAGES</filename> to list the package
                    or packages in which the build system can find the systemd
                    unit files.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSTEMD_SERVICE'><glossterm>SYSTEMD_SERVICE</glossterm>
            <info>
                SYSTEMD_SERVICE[doc] = "For recipes that inherit the systemd class, this variable specifies the systemd service name for a package."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-systemd'><filename>systemd</filename></link>
                    class, this variable specifies the systemd service name for
                    a package.
                </para>

                <para>
                    When you specify this file in your recipe, use a package
                    name override to indicate the package to which the value
                    applies.
                    Here is an example from the connman recipe:
                    <literallayout class='monospaced'>
     SYSTEMD_SERVICE_${PN} = "connman.service"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SYSVINIT_ENABLED_GETTYS'><glossterm>SYSVINIT_ENABLED_GETTYS</glossterm>
            <info>
                SYSVINIT_ENABLED_GETTYS[doc] = "Specifies which virtual terminals should run a getty, the default is '1'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When using
                    <ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-enabling-system-services'>SysVinit</ulink>,
                    specifies a space-separated list of the virtual terminals
                    that should run a
                    <ulink url='http://en.wikipedia.org/wiki/Getty_%28Unix%29'>getty</ulink>
                    (allowing login), assuming
                    <link linkend='var-USE_VT'><filename>USE_VT</filename></link>
                    is not set to "0".
                </para>

                <para>
                    The default value for
                    <filename>SYSVINIT_ENABLED_GETTYS</filename> is "1"
                    (i.e. only run a getty on the first virtual terminal).
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-t'><title>T</title>

        <glossentry id='var-T'><glossterm>T</glossterm>
            <info>
                T[doc] = "This variable points to a directory were BitBake places temporary files, which consist mostly of task logs and scripts, when building a particular recipe."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable points to a directory were BitBake places
                    temporary files, which consist mostly of task logs and
                    scripts, when building a particular recipe.
                    The variable is typically set as follows:
                    <literallayout class='monospaced'>
     T = "${WORKDIR}/temp"
                    </literallayout>
                </para>

                <para>
                    The <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
                    is the directory into which BitBake unpacks and builds the
                    recipe.
                    The default <filename>bitbake.conf</filename> file sets this variable.</para>
                    <para>The <filename>T</filename> variable is not to be confused with
                    the <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link> variable,
                    which points to the root of the directory tree where BitBake
                    places the output of an entire build.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_ARCH'><glossterm>TARGET_ARCH</glossterm>
            <info>
                TARGET_ARCH[doc] = "The architecture of the device being built. The OpenEmbedded build system supports the following architectures: arm, mips, ppc, x86, x86-64."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The target machine's architecture.
                    The OpenEmbedded build system supports many
                    architectures.
                    Here is an example list of architectures supported.
                    This list is by no means complete as the architecture
                    is configurable:
                    <literallayout class='monospaced'>
     arm
     i586
     x86_64
     powerpc
     powerpc64
     mips
     mipsel
                    </literallayout>
                </para>

                <para>
                    For additional information on machine architectures, see
                    the
                    <link linkend='var-TUNE_ARCH'><filename>TUNE_ARCH</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_AS_ARCH'><glossterm>TARGET_AS_ARCH</glossterm>
            <info>
                TARGET_AS_ARCH[doc] = "Specifies architecture-specific assembler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific assembler flags for the
                    target system.
                    <filename>TARGET_AS_ARCH</filename> is initialized from
                    <link linkend='var-TUNE_ASARGS'><filename>TUNE_ASARGS</filename></link>
                    by default in the BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>):
                    <literallayout class='monospaced'>
     TARGET_AS_ARCH = "${TUNE_ASARGS}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_CC_ARCH'><glossterm>TARGET_CC_ARCH</glossterm>
            <info>
                TARGET_CC_ARCH[doc] = "Specifies architecture-specific C compiler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific C compiler flags for the
                    target system.
                    <filename>TARGET_CC_ARCH</filename> is initialized from
                    <link linkend='var-TUNE_CCARGS'><filename>TUNE_CCARGS</filename></link>
                    by default.
                    <note>
                        It is a common workaround to append
                        <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                        to <filename>TARGET_CC_ARCH</filename>
                        in recipes that build software for the target that
                        would not otherwise respect the exported
                        <filename>LDFLAGS</filename> variable.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_CC_KERNEL_ARCH'><glossterm>TARGET_CC_KERNEL_ARCH</glossterm>
            <info>
                TARGET_CC_KERNEL_ARCH[doc] = "This is a specific kernel compiler flag for a CPU or Application Binary Interface (ABI) tune."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This is a specific kernel compiler flag for a CPU or
                    Application Binary Interface (ABI) tune.
                    The flag is used rarely and only for cases where a
                    userspace
                    <link linkend='var-TUNE_CCARGS'><filename>TUNE_CCARGS</filename></link>
                    is not compatible with the kernel compilation.
                    The <filename>TARGET_CC_KERNEL_ARCH</filename> variable
                    allows the kernel (and associated modules) to use a
                    different configuration.
                    See the
                    <filename>meta/conf/machine/include/arm/feature-arm-thumb.inc</filename>
                    file in the
                    <link linkend='source-directory'>Source Directory</link>
                    for an example.
                </para>
            </glossdef>
        </glossentry>

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

                <para>
                    Additionally, the SDK's environment setup script sets
                    the <filename>CFLAGS</filename> variable in the environment
                    to the <filename>TARGET_CFLAGS</filename> value so that
                    executables built using the SDK also have the flags
                    applied.
                </para>
            </glossdef>
        </glossentry>

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

                <para>
                    Additionally, the SDK's environment setup script sets
                    the <filename>CPPFLAGS</filename> variable in the
                    environment to the <filename>TARGET_CPPFLAGS</filename>
                    value so that executables built using the SDK also have
                    the flags applied.
                </para>
            </glossdef>
        </glossentry>

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

                <para>
                    Additionally, the SDK's environment setup script sets
                    the <filename>CXXFLAGS</filename> variable in the
                    environment to the <filename>TARGET_CXXFLAGS</filename>
                    value so that executables built using the SDK also have
                    the flags applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_FPU'><glossterm>TARGET_FPU</glossterm>
            <info>
                TARGET_FPU[doc] = "Specifies the method for handling FPU code. For FPU-less targets, which include most ARM CPUs, the variable must be set to 'soft'. If not, the kernel emulation gets used, which results in a performance penalty."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the method for handling FPU code.
                    For FPU-less targets, which include most ARM CPUs, the variable must be
                    set to "soft".
                    If not, the kernel emulation gets used, which results in a performance penalty.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_LD_ARCH'><glossterm>TARGET_LD_ARCH</glossterm>
            <info>
                TARGET_LD_ARCH[doc] = "Specifies architecture-specific linker flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific linker flags for the
                    target system.
                    <filename>TARGET_LD_ARCH</filename> is initialized from
                    <link linkend='var-TUNE_LDARGS'><filename>TUNE_LDARGS</filename></link>
                    by default in the BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>):
                    <literallayout class='monospaced'>
     TARGET_LD_ARCH = "${TUNE_LDARGS}"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

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

                <para>
                    Additionally, the SDK's environment setup script sets
                    the
                    <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                    variable in the environment to the
                    <filename>TARGET_LDFLAGS</filename> value so that
                    executables built using the SDK also have the flags
                    applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_OS'><glossterm>TARGET_OS</glossterm>
            <info>
                TARGET_OS[doc] = "Specifies the target's operating system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target's operating system.
                    The variable can be set to "linux" for glibc-based systems
                    (GNU C Library) and to "linux-musl" for musl libc.
                    For ARM/EABI targets, "linux-gnueabi" and "linux-musleabi"
                    possible values exist.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TARGET_PREFIX'><glossterm>TARGET_PREFIX</glossterm>
            <info>
                TARGET_PREFIX[doc] = "The prefix used for the toolchain binary target tools."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the prefix used for the toolchain binary target
                    tools.
                </para>

                <para>
                    Depending on the type of recipe and the build target,
                    <filename>TARGET_PREFIX</filename> is set as follows:
                    <itemizedlist>
                        <listitem><para>
                            For recipes building for the target machine,
                            the value is
                            "${<link linkend='var-TARGET_SYS'>TARGET_SYS</link>}-".
                            </para></listitem>
                        <listitem><para>
                            For native recipes, the build system sets the
                            variable to the value of
                            <filename>BUILD_PREFIX</filename>.
                            </para></listitem>
                        <listitem><para>
                            For native SDK recipes
                            (<filename>nativesdk</filename>), the
                            build system sets the variable to the value of
                            <filename>SDK_PREFIX</filename>.
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

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

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

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

        <glossentry id='var-TARGET_VENDOR'><glossterm>TARGET_VENDOR</glossterm>
            <info>
                TARGET_VENDOR[doc] = "The name of the target vendor."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the name of the target vendor.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TCLIBC'><glossterm>TCLIBC</glossterm>
            <info>
                TCLIBC[doc] = "Specifies GNU standard C library (libc) variant to use during the build process. You can select 'glibc', 'musl' or "newlib."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the GNU standard C library
                    (<filename>libc</filename>) variant to use during the
                    build process.
                    This variable replaces <filename>POKYLIBC</filename>,
                    which is no longer supported.
                </para>

                <para>
                    You can select "glibc", "musl", "newlib", or "baremetal"
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TCLIBCAPPEND'><glossterm>TCLIBCAPPEND</glossterm>
            <info>
                TCLIBCAPPEND[doc] = "Specifies a suffix appended to TMPDIR that identifies the libc variant for the build."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a suffix to be appended onto the
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    value.
                    The suffix identifies the <filename>libc</filename> variant
                    for building.
                    When you are building for multiple variants with the same
                    <link linkend='build-directory'>Build Directory</link>,
                    this mechanism ensures that output for different
                    <filename>libc</filename> variants is kept separate to
                    avoid potential conflicts.
                </para>

                <para>
                    In the <filename>defaultsetup.conf</filename> file, the
                    default value of <filename>TCLIBCAPPEND</filename> is
                    "-${TCLIBC}".
                    However, distros such as poky, which normally only support
                    one <filename>libc</filename> variant, set
                    <filename>TCLIBCAPPEND</filename> to "" in their distro
                    configuration file resulting in no suffix being applied.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TCMODE'><glossterm>TCMODE</glossterm>
            <info>
                TCMODE[doc] = "Enables an external toolchain (where provided by an additional layer) if set to a value other than 'default'."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the toolchain selector.
                    <filename>TCMODE</filename> controls the characteristics
                    of the generated packages and images by telling the
                    OpenEmbedded build system which toolchain profile to use.
                    By default, the OpenEmbedded build system builds its own
                    internal toolchain.
                    The variable's default value is "default", which uses
                    that internal toolchain.
                    <note>
                        If <filename>TCMODE</filename> is set to a value
                        other than "default", then it is your responsibility
                        to ensure that the toolchain is compatible with the
                        default toolchain.
                        Using older or newer versions of these components
                        might cause build problems.
                        See the Release Notes for the Yocto Project release
                        for the specific components with which the toolchain
                        must be compatible.
                        To access the Release Notes, go to the
                        <ulink url='&YOCTO_HOME_URL;/software-overview/downloads/'>Downloads</ulink>
                        page on the Yocto Project website and click on the
                        "RELEASE INFORMATION" link for the appropriate
                        release.
                    </note>
                </para>

                <para>
                    The <filename>TCMODE</filename> variable is similar to
                    <link linkend='var-TCLIBC'><filename>TCLIBC</filename></link>,
                    which controls the variant of the GNU standard C library
                    (<filename>libc</filename>) used during the build process:
                    <filename>glibc</filename> or <filename>musl</filename>.
                </para>

                <para>
                    With additional layers, it is possible to use a pre-compiled
                    external toolchain.
                    One example is the Sourcery G++ Toolchain.
                    The support for this toolchain resides in the separate
                    <trademark class='registered'>Mentor Graphics</trademark>
                    <filename>meta-sourcery</filename> layer at
                    <ulink url='http://github.com/MentorEmbedded/meta-sourcery/'></ulink>.
                </para>

                <para>
                    The layer's <filename>README</filename> file contains
                    information on how to use the Sourcery G++ Toolchain as
                    an external toolchain.
                    In summary, you must be sure to add the layer to your
                    <filename>bblayers.conf</filename> file in front of the
                    <filename>meta</filename> layer and then set the
                    <filename>EXTERNAL_TOOLCHAIN</filename>
                    variable in your <filename>local.conf</filename> file
                    to the location in which you installed the toolchain.
                </para>

                <para>
                    The fundamentals used for this example apply to any
                    external toolchain.
                    You can use <filename>meta-sourcery</filename> as a
                    template for adding support for other external toolchains.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_EXPORT_DIR'><glossterm>TEST_EXPORT_DIR</glossterm>
            <info>
                TEST_EXPORT_DIR[doc] = "The location the OpenEmbedded build system uses to export tests when the TEST_EXPORT_ONLY variable is set to "1"."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The location the OpenEmbedded build system uses to export
                    tests when the
                    <link linkend='var-TEST_EXPORT_ONLY'><filename>TEST_EXPORT_ONLY</filename></link>
                    variable is set to "1".
                </para>

                <para>
                    The <filename>TEST_EXPORT_DIR</filename> variable defaults
                    to <filename>"${TMPDIR}/testimage/${PN}"</filename>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_EXPORT_ONLY'><glossterm>TEST_EXPORT_ONLY</glossterm>
            <info>
                TEST_EXPORT_ONLY[doc] = "Specifies to export the tests only. Set this variable to "1" if you do not want to run the tests but you want them to be exported in a manner that you to run them outside of the build system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies to export the tests only.
                    Set this variable to "1" if you do not want to run the
                    tests but you want them to be exported in a manner that
                    you to run them outside of the build system.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_LOG_DIR'><glossterm>TEST_LOG_DIR</glossterm>
            <info>
                TEST_LOG_DIR[doc] = "Holds the SSH log and the boot log for QEMU machines. The TEST_LOG_DIR variable defaults to "${WORKDIR}/testimage"."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Holds the SSH log and the boot log for QEMU machines.
                    The <filename>TEST_LOG_DIR</filename> variable defaults
                    to <filename>"${WORKDIR}/testimage"</filename>.
                    <note>
                        Actual test results reside in the task log
                        (<filename>log.do_testimage</filename>), which is in
                        the <filename>${WORKDIR}/temp/</filename> directory.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_POWERCONTROL_CMD'><glossterm>TEST_POWERCONTROL_CMD</glossterm>
            <info>
                TEST_POWERCONTROL_CMD[doc] = "For automated hardware testing, specifies the command to use to control the power of the target machine under test"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies the command to
                    use to control the power of the target machine under test.
                    Typically, this command would point to a script that
                    performs the appropriate action (e.g. interacting
                    with a web-enabled power strip).
                    The specified command should expect to receive as the last
                    argument "off", "on" or "cycle" specifying to power off,
                    on, or cycle (power off and then power on) the device,
                    respectively.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_POWERCONTROL_EXTRA_ARGS'><glossterm>TEST_POWERCONTROL_EXTRA_ARGS</glossterm>
            <info>
                TEST_POWERCONTROL_EXTRA_ARGS[doc] = "For automated hardware testing, specifies additional arguments to pass through to the command specified in TEST_POWERCONTROL_CMD"
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies additional
                    arguments to pass through to the command specified in
                    <link linkend='var-TEST_POWERCONTROL_CMD'><filename>TEST_POWERCONTROL_CMD</filename></link>.
                    Setting <filename>TEST_POWERCONTROL_EXTRA_ARGS</filename>
                    is optional.
                    You can use it if you wish, for example, to separate the
                    machine-specific and non-machine-specific parts of the
                    arguments.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_QEMUBOOT_TIMEOUT'><glossterm>TEST_QEMUBOOT_TIMEOUT</glossterm>
            <info>
                TEST_QEMUBOOT_TIMEOUT[doc] = "The time in seconds allowed for an image to boot before automated runtime tests begin to run against an image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The time in seconds allowed for an image to boot before
                    automated runtime tests begin to run against an
                    image.
                    The default timeout period to allow the boot process to
                    reach the login prompt is 500 seconds.
                    You can specify a different value in the
                    <filename>local.conf</filename> file.
                </para>

                <para>
                    For more information on testing images, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SERIALCONTROL_CMD'><glossterm>TEST_SERIALCONTROL_CMD</glossterm>
            <info>
                TEST_SERIALCONTROL_CMD[doc] = "For automated hardware testing, specifies the command to use to connect to the serial console of the target machine under test."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies the command
                    to use to connect to the serial console of the target
                    machine under test.
                    This command simply needs to connect to the serial console
                    and forward that connection to standard input and output
                    as any normal terminal program does.
                </para>

                <para>
                    For example, to use the Picocom terminal program on
                    serial device <filename>/dev/ttyUSB0</filename> at
                    115200bps, you would set the variable as follows:
                    <literallayout class='monospaced'>
     TEST_SERIALCONTROL_CMD = "picocom /dev/ttyUSB0 -b 115200"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SERIALCONTROL_EXTRA_ARGS'><glossterm>TEST_SERIALCONTROL_EXTRA_ARGS</glossterm>
            <info>
                TEST_SERIALCONTROL_EXTRA_ARGS[doc] = "For automated hardware testing, specifies additional arguments to pass through to the command specified in TEST_SERIALCONTROL_CMD."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For automated hardware testing, specifies additional
                    arguments to pass through to the command specified in
                    <link linkend='var-TEST_SERIALCONTROL_CMD'><filename>TEST_SERIALCONTROL_CMD</filename></link>.
                    Setting <filename>TEST_SERIALCONTROL_EXTRA_ARGS</filename>
                    is optional.
                    You can use it if you wish, for example, to separate the
                    machine-specific and non-machine-specific parts of the
                    command.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SERVER_IP'><glossterm>TEST_SERVER_IP</glossterm>
            <info>
                TEST_SERVER_IP[doc] = "The IP address of the build machine (host machine). This IP address is usually automatically detected."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The IP address of the build machine (host machine).
                    This IP address is usually automatically detected.
                    However, if detection fails, this variable needs to be set
                    to the IP address of the build machine (i.e. where
                    the build is taking place).
                    <note>
                        The <filename>TEST_SERVER_IP</filename> variable
                        is only used for a small number of tests such as
                        the "dnf" test suite, which needs to download
                        packages from
                        <filename>WORKDIR/oe-rootfs-repo</filename>.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_TARGET'><glossterm>TEST_TARGET</glossterm>
            <info>
                TEST_TARGET[doc] = "For automated runtime testing, specifies the method of deploying the image and running tests on the target machine."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target controller to use when running tests
                    against a test image.
                    The default controller to use is "QemuTarget":
                    <literallayout class='monospaced'>
     TEST_TARGET = "QemuTarget"
                    </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>"QemuTarget":</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>"SimpleRemoteTarget":</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 "SimpleRemoteTarget".
                            <note>
                                This argument is defined in
                                <filename>meta/lib/oeqa/controllers/simpleremote.py</filename>.
                            </note>
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    For information on running tests on hardware, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#hardware-image-enabling-tests'>Enabling Runtime Tests on Hardware</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_TARGET_IP'><glossterm>TEST_TARGET_IP</glossterm>
            <info>
                TEST_TARGET_IP[doc] = "The IP address of your hardware under test."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The IP address of your hardware under test.
                    The <filename>TEST_TARGET_IP</filename> variable has no
                    effect when
                    <link linkend='var-TEST_TARGET'><filename>TEST_TARGET</filename></link>
                    is set to "qemu".
                </para>

                <para>
                    When you specify the IP address, you can also include a
                    port.
                    Here is an example:
                    <literallayout class='monospaced'>
     TEST_TARGET_IP = "192.168.1.4:2201"
                    </literallayout>
                    Specifying a port is useful when SSH is started on a
                    non-standard port or in cases when your hardware under test
                    is behind a firewall or network that is not directly
                    accessible from your host and you need to do port address
                    translation.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TEST_SUITES'><glossterm>TEST_SUITES</glossterm>
            <info>
                TEST_SUITES[doc] = "An ordered list of tests (modules) to run against an image when performing automated runtime testing."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An ordered list of tests (modules) to run against
                    an image when performing automated runtime testing.
                </para>

                <para>
                    The OpenEmbedded build system provides a core set of tests
                    that can be used against images.
                    <note>
                        Currently, there is only support for running these tests
                        under QEMU.
                    </note>
                    Tests include <filename>ping</filename>,
                    <filename>ssh</filename>, <filename>df</filename> among
                    others.
                    You can add your own tests to the list of tests by
                    appending <filename>TEST_SUITES</filename> as follows:
                    <literallayout class='monospaced'>
     TEST_SUITES_append = " <replaceable>mytest</replaceable>"
                    </literallayout>
                    Alternatively, you can provide the "auto" option to
                    have all applicable tests run against the image.
                    <literallayout class='monospaced'>
     TEST_SUITES_append = " auto"
                    </literallayout>
                    Using this option causes the build system to automatically
                    run tests that are applicable to the image.
                    Tests that are not applicable are skipped.
                </para>

                <para>
                    The order in which tests are run is important.
                    Tests that depend on another test must appear later in the
                    list than the test on which they depend.
                    For example, if you append the list of tests with two
                    tests (<filename>test_A</filename> and
                    <filename>test_B</filename>) where
                    <filename>test_B</filename> is dependent on
                    <filename>test_A</filename>, then you must order the tests
                    as follows:
                    <literallayout class='monospaced'>
     TEST_SUITES = " test_A test_B"
                    </literallayout>
                </para>

                <para>
                    For more information on testing images, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TESTIMAGE_AUTO'><glossterm>TESTIMAGE_AUTO</glossterm>
            <info>
                TESTIMAGE_AUTO[doc] = "Enables automatic testing of an image once it is built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Automatically runs the series of automated tests for
                    images when an image is successfully built.
                    Setting <filename>TESTIMAGE_AUTO</filename> to "1"
                    causes any image that successfully builds to automatically
                    boot under QEMU.
                    Using the variable also adds in dependencies so that any
                    SDK for which testing is requested is automatically built
                    first.
                </para>

                <para>
                    These tests are written in Python making use of the
                    <filename>unittest</filename> module, and the majority of
                    them run commands on the target system over
                    <filename>ssh</filename>.
                    You can set this variable to "1" in your
                    <filename>local.conf</filename> file in the
                    <link linkend='build-directory'>Build Directory</link>
                    to have the OpenEmbedded build system automatically run
                    these tests after an image successfully builds:
                    <literallayout class='monospaced'>
     TESTIMAGE_AUTO = "1"
                    </literallayout>
                    For more information on enabling, running, and writing
                    these tests, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
                    section in the Yocto Project Development Tasks Manual and
                    the
                    "<link linkend='ref-classes-testimage*'><filename>testimage*.bbclass</filename></link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-THISDIR'><glossterm>THISDIR</glossterm>
            <info>
                THISDIR[doc] = "The directory in which the file BitBake is currently parsing is located."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The directory in which the file BitBake is currently
                    parsing is located.
                    Do not manually set this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TIME'><glossterm>TIME</glossterm>
            <info>
                TIME[doc] = "The time the build was started using HMS format."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The time the build was started.
                    Times appear using the hour, minute, and second (HMS)
                    format (e.g. "140159" for one minute and fifty-nine
                    seconds past 1400 hours).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TMPDIR'><glossterm>TMPDIR</glossterm>
            <info>
                TMPDIR[doc] = "The temporary directory the OpenEmbedded build system uses when it does its work building images. By default, the TMPDIR variable is named tmp within the Build Directory."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable is the base directory the OpenEmbedded
                    build system uses for all build output and intermediate
                    files (other than the shared state cache).
                    By default, the <filename>TMPDIR</filename> variable points
                    to <filename>tmp</filename> within the
                    <link linkend='build-directory'>Build Directory</link>.
                </para>

                <para>
                    If you want to establish this directory in a location other
                    than the default, you can uncomment and edit the following
                    statement in the
                    <filename>conf/local.conf</filename> file in the
                    <link linkend='source-directory'>Source Directory</link>:
                    <literallayout class='monospaced'>
     #TMPDIR = "${TOPDIR}/tmp"
                    </literallayout>
                    An example use for this scenario is to set
                    <filename>TMPDIR</filename> to a local disk, which does
                    not use NFS, while having the Build Directory use NFS.
                </para>

                <para>
                    The filesystem used by <filename>TMPDIR</filename> must
                    have standard filesystem semantics (i.e. mixed-case files
                    are unique, POSIX file locking, and persistent inodes).
                    Due to various issues with NFS and bugs in some
                    implementations, NFS does not meet this minimum
                    requirement.
                    Consequently, <filename>TMPDIR</filename> cannot be on
                    NFS.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOOLCHAIN_HOST_TASK'><glossterm>TOOLCHAIN_HOST_TASK</glossterm>
            <info>
                TOOLCHAIN_HOST_TASK[doc] = "This variable lists packages the OpenEmbedded build system uses when building an SDK, which contains a cross-development environment."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable lists packages the OpenEmbedded build system
                    uses when building an SDK, which contains a
                    cross-development environment.
                    The packages specified by this variable are part of the
                    toolchain set that runs on the
                    <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>,
                    and each package should usually have the prefix
                    <filename>nativesdk-</filename>.
                    For example, consider the following command when
                    building an SDK:
                    <literallayout class='monospaced'>
     $ bitbake -c populate_sdk <replaceable>imagename</replaceable>
                    </literallayout>
                    In this case, a default list of packages is set in this
                    variable, but you can add additional packages to the list.
                    See the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-adding-individual-packages'>Adding Individual Packages to the Standard SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual
                    for more information.
                </para>

                <para>
                    For background information on cross-development toolchains
                    in the Yocto Project development environment, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                    For information on setting up a cross-development
                    environment, see the
                    <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
                    manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOOLCHAIN_OUTPUTNAME'><glossterm>TOOLCHAIN_OUTPUTNAME</glossterm>
            <info>
                TOOLCHAIN_OUTPUTNAME[doc] = "Defines the name used for the toolchain output."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable defines the name used for the toolchain
                    output.
                    The
                    <link linkend='ref-classes-populate-sdk-*'><filename>populate_sdk_base</filename></link>
                    class sets the
                    <filename>TOOLCHAIN_OUTPUTNAME</filename> variable as
                    follows:
                    <literallayout class='monospaced'>
     TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-toolchain-${SDK_VERSION}"
                    </literallayout>
                    See the
                    <link linkend='var-SDK_NAME'><filename>SDK_NAME</filename></link>
                    and
                    <link linkend='var-SDK_VERSION'><filename>SDK_VERSION</filename></link>
                    variables for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOOLCHAIN_TARGET_TASK'><glossterm>TOOLCHAIN_TARGET_TASK</glossterm>
            <info>
                TOOLCHAIN_TARGET_TASK[doc] = "This variable lists packages the OpenEmbedded build system uses when it creates the target part of an SDK, which includes libraries and headers."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    This variable lists packages the OpenEmbedded build system
                    uses when it creates the target part of an SDK
                    (i.e. the part built for the target hardware), which
                    includes libraries and headers.
                    Use this variable to add individual packages to the
                    part of the SDK that runs on the target.
                    See the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-adding-individual-packages'>Adding Individual Packages to the Standard SDK</ulink>"
                    section in the Yocto Project Application Development and
                    the Extensible Software Development Kit (eSDK) manual for
                    more information.
                </para>

                <para>
                    For background information on cross-development toolchains
                    in the Yocto Project development environment, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
                    section in the Yocto Project Overview and Concepts Manual.
                    For information on setting up a cross-development
                    environment, see the
                    <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
                    manual.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOPDIR'><glossterm>TOPDIR</glossterm>
            <info>
                TOPDIR[doc] = "The Build Directory. BitBake automatically sets this variable. The OpenEmbedded build system uses the Build Directory when building images."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The top-level
                    <link linkend='build-directory'>Build Directory</link>.
                    BitBake automatically sets this variable when you
                    initialize your build environment using
                    <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TRANSLATED_TARGET_ARCH'><glossterm>TRANSLATED_TARGET_ARCH</glossterm>
            <info>
                TRANSLATED_TARGET_ARCH[doc] = "A sanitized version of TARGET_ARCH. This variable is used where the architecture is needed in a value where underscores are not allowed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A sanitized version of
                    <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>.
                    This variable is used where the architecture is needed in
                    a value where underscores are not allowed, for example
                    within package filenames.
                    In this case, dash characters replace any underscore
                    characters used in <filename>TARGET_ARCH</filename>.
                </para>

                <para>
                    Do not edit this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_ARCH'><glossterm>TUNE_ARCH</glossterm>
            <info>
                TUNE_ARCH[doc] = "The GNU canonical architecture for a specific architecture (i.e. arm, armeb, mips, mips64, and so forth)."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The GNU canonical architecture for a specific architecture
                    (i.e. <filename>arm</filename>,
                    <filename>armeb</filename>,
                    <filename>mips</filename>,
                    <filename>mips64</filename>, and so forth).
                    BitBake uses this value to setup configuration.
                </para>

                <para>
                    <filename>TUNE_ARCH</filename> definitions are specific to
                    a given architecture.
                    The definitions can be a single static definition, or
                    can be dynamically adjusted.
                    You can see details for a given CPU family by looking at
                    the architecture's <filename>README</filename> file.
                    For example, the
                    <filename>meta/conf/machine/include/mips/README</filename>
                    file in the
                    <link linkend='source-directory'>Source Directory</link>
                    provides information for <filename>TUNE_ARCH</filename>
                    specific to the <filename>mips</filename> architecture.
                </para>

                <para>
                    <filename>TUNE_ARCH</filename> is tied closely to
                    <link linkend='var-TARGET_ARCH'><filename>TARGET_ARCH</filename></link>,
                    which defines the target machine's architecture.
                    The BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>) sets
                    <filename>TARGET_ARCH</filename> as follows:
                    <literallayout class='monospaced'>
     TARGET_ARCH = "${TUNE_ARCH}"
                    </literallayout>
                </para>

                <para>
                    The following list, which is by no means complete since
                    architectures are configurable, shows supported machine
                    architectures:
                    <literallayout class='monospaced'>
     arm
     i586
     x86_64
     powerpc
     powerpc64
     mips
     mipsel
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_ASARGS'><glossterm>TUNE_ASARGS</glossterm>
            <info>
                TUNE_ASARGS[doc] = "Specifies architecture-specific assembler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific assembler flags for
                    the target system.
                    The set of flags is based on the selected tune features.
                    <filename>TUNE_ASARGS</filename> is set using
                    the tune include files, which are typically under
                    <filename>meta/conf/machine/include/</filename> and are
                    influenced through
                    <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
                    For example, the
                    <filename>meta/conf/machine/include/x86/arch-x86.inc</filename>
                    file defines the flags for the x86 architecture as follows:
                    <literallayout class='monospaced'>
     TUNE_ASARGS += "${@bb.utils.contains("TUNE_FEATURES", "mx32", "-x32", "", d)}"
                    </literallayout>
                    <note>
                        Board Support Packages (BSPs) select the tune.
                        The selected tune, in turn, affects the tune variables
                        themselves (i.e. the tune can supply its own
                        set of flags).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_CCARGS'><glossterm>TUNE_CCARGS</glossterm>
            <info>
                TUNE_CCARGS[doc] = "Specifies architecture-specific C compiler flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific C compiler flags for
                    the target system.
                    The set of flags is based on the selected tune features.
                    <filename>TUNE_CCARGS</filename> is set using
                    the tune include files, which are typically under
                    <filename>meta/conf/machine/include/</filename> and are
                    influenced through
                    <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
                    <note>
                        Board Support Packages (BSPs) select the tune.
                        The selected tune, in turn, affects the tune variables
                        themselves (i.e. the tune can supply its own
                        set of flags).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_LDARGS'><glossterm>TUNE_LDARGS</glossterm>
            <info>
                TUNE_LDARGS[doc] = "Specifies architecture-specific linker flags for the target system."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies architecture-specific linker flags for
                    the target system.
                    The set of flags is based on the selected tune features.
                    <filename>TUNE_LDARGS</filename> is set using
                    the tune include files, which are typically under
                    <filename>meta/conf/machine/include/</filename> and are
                    influenced through
                    <link linkend='var-TUNE_FEATURES'><filename>TUNE_FEATURES</filename></link>.
                    For example, the
                    <filename>meta/conf/machine/include/x86/arch-x86.inc</filename>
                    file defines the flags for the x86 architecture as follows:
                    <literallayout class='monospaced'>
     TUNE_LDARGS += "${@bb.utils.contains("TUNE_FEATURES", "mx32", "-m elf32_x86_64", "", d)}"
                    </literallayout>
                    <note>
                        Board Support Packages (BSPs) select the tune.
                        The selected tune, in turn, affects the tune variables
                        themselves (i.e. the tune can supply its own
                        set of flags).
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_FEATURES'><glossterm>TUNE_FEATURES</glossterm>
            <info>
                TUNE_FEATURES[doc] = "Features used to "tune" a compiler for optimal use given a specific processor."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Features used to "tune" a compiler for optimal use
                    given a specific processor.
                    The features are defined within the tune files and allow
                    arguments (i.e. <filename>TUNE_*ARGS</filename>) to be
                    dynamically generated based on the features.
                </para>

                <para>
                    The OpenEmbedded build system verifies the features
                    to be sure they are not conflicting and that they are
                    supported.
                </para>

                <para>
                    The BitBake configuration file
                    (<filename>meta/conf/bitbake.conf</filename>) defines
                    <filename>TUNE_FEATURES</filename> as follows:
                    <literallayout class='monospaced'>
     TUNE_FEATURES ??= "${TUNE_FEATURES_tune-${DEFAULTTUNE}}"
                    </literallayout>
                    See the
                    <link linkend='var-DEFAULTTUNE'><filename>DEFAULTTUNE</filename></link>
                    variable for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNE_PKGARCH'><glossterm>TUNE_PKGARCH</glossterm>
            <info>
                TUNE_PKGARCH[doc] = "The package architecture understood by the packaging system to define the architecture, ABI, and tuning of output packages."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The package architecture understood by the packaging
                    system to define the architecture, ABI, and tuning of
                    output packages.
                    The specific tune is defined using the "_tune" override
                    as follows:
                    <literallayout class='monospaced'>
     TUNE_PKGARCH_tune-<replaceable>tune</replaceable> = "<replaceable>tune</replaceable>"
                    </literallayout>
                </para>

                <para>
                    These tune-specific package architectures are defined in
                    the machine include files.
                    Here is an example of the "core2-32" tuning as used
                    in the
                    <filename>meta/conf/machine/include/tune-core2.inc</filename>
                    file:
                    <literallayout class='monospaced'>
     TUNE_PKGARCH_tune-core2-32 = "core2-32"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEABI'><glossterm>TUNEABI</glossterm>
            <info>
                TUNEABI[doc] = "An underlying ABI used by a particular tuning in a given toolchain layer. This feature allows providers using prebuilt libraries to check compatibility of a tuning against their selection of libraries."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    An underlying Application Binary Interface (ABI) used by
                    a particular tuning in a given toolchain layer.
                    Providers that use prebuilt libraries can use the
                    <filename>TUNEABI</filename>,
                    <link linkend='var-TUNEABI_OVERRIDE'><filename>TUNEABI_OVERRIDE</filename></link>,
                    and
                    <link linkend='var-TUNEABI_WHITELIST'><filename>TUNEABI_WHITELIST</filename></link>
                    variables to check compatibility of tunings against their
                    selection of libraries.
                </para>

                <para>
                    If <filename>TUNEABI</filename> is undefined, then every
                    tuning is allowed.
                    See the
                    <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
                    class to see how the variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEABI_OVERRIDE'><glossterm>TUNEABI_OVERRIDE</glossterm>
            <info>
                TUNEABI_OVERRIDE[doc] = "If set, ignores TUNEABI_WHITELIST."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set, the OpenEmbedded system ignores the
                    <link linkend='var-TUNEABI_WHITELIST'><filename>TUNEABI_WHITELIST</filename></link>
                    variable.
                    Providers that use prebuilt libraries can use the
                    <filename>TUNEABI_OVERRIDE</filename>,
                    <filename>TUNEABI_WHITELIST</filename>,
                    and
                    <link linkend='var-TUNEABI'><filename>TUNEABI</filename></link>
                    variables to check compatibility of a tuning against their
                    selection of libraries.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
                    class to see how the variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEABI_WHITELIST'><glossterm>TUNEABI_WHITELIST</glossterm>
            <info>
                TUNEABI_WHITELIST[doc] = "A whitelist of permissible TUNEABI values.  If the variable is not set, all values are allowed."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A whitelist of permissible
                    <link linkend='var-TUNEABI'><filename>TUNEABI</filename></link>
                    values.
                    If <filename>TUNEABI_WHITELIST</filename> is not set,
                    all tunes are allowed.
                    Providers that use prebuilt libraries can use the
                    <filename>TUNEABI_WHITELIST</filename>,
                    <link linkend='var-TUNEABI_OVERRIDE'><filename>TUNEABI_OVERRIDE</filename></link>,
                    and <filename>TUNEABI</filename> variables to check
                    compatibility of a tuning against their selection of
                    libraries.
                </para>

                <para>
                    See the
                    <link linkend='ref-classes-sanity'><filename>sanity</filename></link>
                    class to see how the variable is used.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNECONFLICTS'><glossterm>TUNECONFLICTS[<replaceable>feature</replaceable>]</glossterm>
            <info>
                TUNECONFLICTS[doc] = "Specifies CPU or Application Binary Interface (ABI) tuning features that conflict with specified feature."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies CPU or Application Binary Interface (ABI)
                    tuning features that conflict with <replaceable>feature</replaceable>.
                </para>

                <para>
                    Known tuning conflicts are specified in the machine include
                    files in the
                    <link linkend='source-directory'>Source Directory</link>.
                    Here is an example from the
                    <filename>meta/conf/machine/include/mips/arch-mips.inc</filename>
                    include file that lists the "o32" and "n64" features as
                    conflicting with the "n32" feature:
                    <literallayout class='monospaced'>
     TUNECONFLICTS[n32] = "o32 n64"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TUNEVALID'><glossterm>TUNEVALID[<replaceable>feature</replaceable>]</glossterm>
            <info>
               TUNEVALID[doc] = "Descriptions, stored as flags, of valid tuning features."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a valid CPU or Application Binary Interface (ABI)
                    tuning feature.
                    The specified feature is stored as a flag.
                    Valid features are specified in the machine include files
                    (e.g. <filename>meta/conf/machine/include/arm/arch-arm.inc</filename>).
                    Here is an example from that file:
                    <literallayout class='monospaced'>
     TUNEVALID[bigendian] = "Enable big-endian mode."
                    </literallayout>
                </para>

                <para>
                    See the machine include files in the
                    <link linkend='source-directory'>Source Directory</link>
                    for these features.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-u'><title>U</title>

        <glossentry id='var-UBOOT_CONFIG'><glossterm>UBOOT_CONFIG</glossterm>
            <info>
               UBOOT_CONFIG[doc] = "Configures the UBOOT_MACHINE and can also define IMAGE_FSTYPES for individual cases."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Configures the
                    <link linkend='var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></link>
                    and can also define
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    for individual cases.
                </para>

                <para>
                    Following is an example from the
                    <filename>meta-fsl-arm</filename> layer.
                    <literallayout class='monospaced'>
     UBOOT_CONFIG ??= "sd"
     UBOOT_CONFIG[sd] = "mx6qsabreauto_config,sdcard"
     UBOOT_CONFIG[eimnor] = "mx6qsabreauto_eimnor_config"
     UBOOT_CONFIG[nand] = "mx6qsabreauto_nand_config,ubifs"
     UBOOT_CONFIG[spinor] = "mx6qsabreauto_spinor_config"
                    </literallayout>
                    In this example, "sd" is selected as the configuration
                    of the possible four for the
                    <filename>UBOOT_MACHINE</filename>.
                    The "sd" configuration defines "mx6qsabreauto_config"
                    as the value for <filename>UBOOT_MACHINE</filename>, while
                    the "sdcard" specifies the
                    <filename>IMAGE_FSTYPES</filename> to use for the U-boot
                    image.
                </para>

                <para>
                    For more information on how the
                    <filename>UBOOT_CONFIG</filename> is handled, see the
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/meta/classes/uboot-config.bbclass'><filename>uboot-config</filename></ulink>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_ENTRYPOINT'><glossterm>UBOOT_ENTRYPOINT</glossterm>
            <info>
               UBOOT_ENTRYPOINT[doc] = "Specifies the entry point for the U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the entry point for the U-Boot image.
                    During U-Boot image creation, the
                    <filename>UBOOT_ENTRYPOINT</filename> variable is passed
                    as a command-line parameter to the
                    <filename>uboot-mkimage</filename> utility.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_LOADADDRESS'><glossterm>UBOOT_LOADADDRESS</glossterm>
            <info>
               UBOOT_LOADADDRESS[doc] = "Specifies the load address for the U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the load address for the U-Boot image.
                    During U-Boot image creation, the
                    <filename>UBOOT_LOADADDRESS</filename> variable is passed
                    as a command-line parameter to the
                    <filename>uboot-mkimage</filename> utility.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_LOCALVERSION'><glossterm>UBOOT_LOCALVERSION</glossterm>
            <info>
               UBOOT_LOCALVERSION[doc] = "Appends a string to the name of the local version of the U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Appends a string to the name of the local version of the
                    U-Boot image.
                    For example, assuming the version of the U-Boot image
                    built was "2013.10, the full version string reported by
                    U-Boot would be "2013.10-yocto" given the following
                    statement:
                    <literallayout class='monospaced'>
     UBOOT_LOCALVERSION = "-yocto"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_MACHINE'><glossterm>UBOOT_MACHINE</glossterm>
            <info>
               UBOOT_MACHINE[doc] = "Specifies the value passed on the make command line when building a U-Boot image."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the value passed on the
                    <filename>make</filename> command line when building
                    a U-Boot image.
                    The value indicates the target platform configuration.
                    You typically set this variable from the machine
                    configuration file (i.e.
                    <filename>conf/machine/<replaceable>machine_name</replaceable>.conf</filename>).
                </para>

                <para>
                    Please see the "Selection of Processor Architecture and
                    Board Type" section in the U-Boot README for valid values
                    for this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_MAKE_TARGET'><glossterm>UBOOT_MAKE_TARGET</glossterm>
            <info>
               UBOOT_MAKE_TARGET[doc] = "Specifies the target called in the Makefile."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target called in the
                    <filename>Makefile</filename>.
                    The default target is "all".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_SUFFIX'><glossterm>UBOOT_SUFFIX</glossterm>
            <info>
               UBOOT_SUFFIX[doc] = "Points to the generated U-Boot extension."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Points to the generated U-Boot extension.
                    For example, <filename>u-boot.sb</filename> has a
                    <filename>.sb</filename> extension.
                </para>

                <para>
                    The default U-Boot extension is
                    <filename>.bin</filename>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UBOOT_TARGET'><glossterm>UBOOT_TARGET</glossterm>
            <info>
               UBOOT_TARGET[doc] = "Specifies the target used for building U-Boot."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the target used for building U-Boot.
                    The target is passed directly as part of the "make" command
                    (e.g. SPL and AIS).
                    If you do not specifically set this variable, the
                    OpenEmbedded build process passes and uses "all" for the
                    target during the U-Boot building process.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UNKNOWN_CONFIGURE_WHITELIST'><glossterm>UNKNOWN_CONFIGURE_WHITELIST</glossterm>
            <info>
               UNKNOWN_CONFIGURE_WHITELIST[doc] = "Specifies a list of options that, if reported by the configure script as being invalid, should not generate a warning during the do_configure task."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a list of options that, if reported by the
                    configure script as being invalid, should not generate a
                    warning during the
                    <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
                    task.
                    Normally, invalid configure options are simply not passed
                    to the configure script (e.g. should be removed from
                    <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
                    or
                    <link linkend='var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></link>).
                    However, common options, for example, exist that are passed
                    to all configure scripts at a class level that might not
                    be valid for some configure scripts.
                    It follows that no benefit exists in seeing a warning about
                    these options.
                    For these cases, the options are added to
                    <filename>UNKNOWN_CONFIGURE_WHITELIST</filename>.
                </para>

                <para>
                    The configure arguments check that uses
                    <filename>UNKNOWN_CONFIGURE_WHITELIST</filename> is part
                    of the
                    <link linkend='ref-classes-insane'><filename>insane</filename></link>
                    class and is only enabled if the recipe inherits the
                    <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
                    class.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPDATERCPN'><glossterm>UPDATERCPN</glossterm>
            <info>
               UPDATERCPN[doc] = "Specifies the package that contains the initscript that is enabled."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    For recipes inheriting the
                    <link linkend='ref-classes-update-rc.d'><filename>update-rc.d</filename></link>
                    class, <filename>UPDATERCPN</filename> specifies
                    the package that contains the initscript that is
                    enabled.
                </para>

                <para>
                    The default value is "${PN}".
                    Given that almost all recipes that install initscripts
                    package them in the main package for the recipe, you
                    rarely need to set this variable in individual recipes.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPSTREAM_CHECK_GITTAGREGEX'><glossterm>UPSTREAM_CHECK_GITTAGREGEX</glossterm>
            <info>
               UPSTREAM_CHECK_GITTAGREGEX[doc] = "Filters relevant Git tags when fetching source from an upstream Git repository."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When the
                    <link linkend='ref-classes-distrodata'><filename>distrodata</filename></link>
                    class is enabled globally, 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.
                    You can use the
                    <filename>UPSTREAM_CHECK_GITTAGREGEX</filename>
                    variable to provide a regular expression to filter only the
                    relevant tags should the default filter not work
                    correctly.
                    <literallayout class='monospaced'>
     UPSTREAM_CHECK_GITTAGREGEX = "git_tag_regex"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPSTREAM_CHECK_REGEX'><glossterm>UPSTREAM_CHECK_REGEX</glossterm>
            <info>
               UPSTREAM_CHECK_REGEX[doc] = "The regular expression the package checking system uses to parse the page pointed to by UPSTREAM_CHECK_URI."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When the
                    <link linkend='ref-classes-distrodata'><filename>distrodata</filename></link>
                    class is enabled globally, use the
                    <filename>UPSTREAM_CHECK_REGEX</filename> variable to
                    specify a different regular expression instead of the
                    default one when the package checking system is parsing
                    the page found using
                    <link linkend='var-UPSTREAM_CHECK_URI'><filename>UPSTREAM_CHECK_URI</filename></link>.
                    <literallayout class='monospaced'>
     UPSTREAM_CHECK_REGEX = "package_regex"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-UPSTREAM_CHECK_URI'><glossterm>UPSTREAM_CHECK_URI</glossterm>
            <info>
               UPSTREAM_CHECK_URI[doc] = "The URL used by the package checking system to get the latest version of the package when source files are fetched from an upstream Git repository."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When the
                    <link linkend='ref-classes-distrodata'><filename>distrodata</filename></link>
                    class is enabled globally, you can perform a per-recipe
                    check for what the latest upstream source code version is
                    by calling <filename>bitbake -c checkpkg</filename>
                    <replaceable>recipe</replaceable>.
                    If the source code is provided from tarballs, the latest
                    version is determined by fetching the directory listing
                    where the tarball is and attempting to find a later tarball.
                    When this approach does not work, you can use
                    <filename>UPSTREAM_CHECK_URI</filename> to
                    provide a different URI that contains the link to the
                    latest tarball.
                    <literallayout class='monospaced'>
     UPSTREAM_CHECK_URI = "recipe_url"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USE_DEVFS'><glossterm>USE_DEVFS</glossterm>
            <info>
               USE_DEVFS[doc] = "Determines if devtmpfs is used for /dev population."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Determines if <filename>devtmpfs</filename> is used for
                    <filename>/dev</filename> population.
                    The default value used for <filename>USE_DEVFS</filename>
                    is "1" when no value is specifically set.
                    Typically, you would set <filename>USE_DEVFS</filename>
                    to "0" for a statically populated <filename>/dev</filename>
                    directory.
                </para>

                <para>
                    See the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#selecting-dev-manager'>Selecting a Device Manager</ulink>"
                    section in the Yocto Project Development Tasks Manual for
                    information on how to use this variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USE_VT'><glossterm>USE_VT</glossterm>
            <info>
               USE_VT[doc] = "When using SysVinit, determines whether or not to run a getty on any virtual terminals in order to enable logging in through those terminals."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When using
                    <ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-enabling-system-services'>SysVinit</ulink>,
                    determines whether or not to run a
                    <ulink url='http://en.wikipedia.org/wiki/Getty_%28Unix%29'>getty</ulink>
                    on any virtual terminals in order to enable logging in
                    through those terminals.
                </para>

                <para>
                    The default value used for <filename>USE_VT</filename>
                    is "1" when no default value is specifically set.
                    Typically, you would set <filename>USE_VT</filename>
                    to "0" in the machine configuration file for machines
                    that do not have a graphical display attached and
                    therefore do not need virtual terminal functionality.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USER_CLASSES'><glossterm>USER_CLASSES</glossterm>
            <info>
               USER_CLASSES[doc] = "List of additional classes to use when building images that enable extra features."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    A list of classes to globally inherit.
                    These classes are used by the OpenEmbedded build system
                    to enable extra features (e.g.
                    <filename>buildstats</filename>,
                    <filename>image-mklibs</filename>, and so forth).
                </para>

                <para>
                    The default list is set in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USER_CLASSES ?= "buildstats image-mklibs image-prelink"
                    </literallayout>
                    For more information, see
                    <filename>meta-poky/conf/local.conf.sample</filename> in
                    the
                    <link linkend='source-directory'>Source Directory</link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_ERROR_DYNAMIC'><glossterm>USERADD_ERROR_DYNAMIC</glossterm>
            <info>
               USERADD_ERROR_DYNAMIC[doc] = "If set to 'error', forces the OpenEmbedded build system to produce an error if the user identification (uid) and group identification (gid) values are not defined in files/passwd and files/group files. If set to 'warn', a warning will be issued instead."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    If set to "error", 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 <filename>files/passwd</filename>
                    and <filename>files/group</filename> files.
                    If set to "warn", 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>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_GID_TABLES'><glossterm>USERADD_GID_TABLES</glossterm>
            <info>
               USERADD_GID_TABLES[doc] = "Specifies a password file to use for obtaining static group identification (gid) values when the OpenEmbedded build system adds a group to the system during package installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a password file to use for obtaining static
                    group identification (<filename>gid</filename>) values
                    when the OpenEmbedded build system adds a group to the
                    system during package installation.
                </para>

                <para>
                    When applying static group identification
                    (<filename>gid</filename>) values, the OpenEmbedded build
                    system looks in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
                    for a <filename>files/group</filename> file and then applies
                    those <filename>uid</filename> values.
                    Set the variable as follows in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADD_GID_TABLES = "files/group"
                    </literallayout>
                </para>

                <note>
                    Setting the
                    <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
                    variable to "useradd-staticids" causes the build system
                    to use static <filename>gid</filename> values.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_PACKAGES'><glossterm>USERADD_PACKAGES</glossterm>
            <info>
               USERADD_PACKAGES[doc] = "When a recipe inherits the useradd class, this variable specifies the individual packages within the recipe that require users and/or groups to be added."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When inheriting the
                    <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
                    class, this variable
                    specifies the individual packages within the recipe that
                    require users and/or groups to be added.
                </para>

                <para>
                    You must set this variable if the recipe inherits the
                    class.
                    For example, the following enables adding a user for the
                    main package in a recipe:
                    <literallayout class='monospaced'>
     USERADD_PACKAGES = "${PN}"
                    </literallayout>
                    <note>
                        If follows that if you are going to use the
                        <filename>USERADD_PACKAGES</filename> variable,
                        you need to set one or more of the
                        <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
                        <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
                        or
                        <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
                        variables.
                    </note>
                </para>

            </glossdef>
        </glossentry>

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

                <para>
                    Here is an example from the <filename>dbus</filename>
                    recipe:
                    <literallayout class='monospaced'>
     USERADD_PARAM_${PN} = "--system --home ${localstatedir}/lib/dbus \
                            --no-create-home --shell /bin/false \
                            --user-group messagebus"
                    </literallayout>
                    For information on the standard Linux shell command
                    <filename>useradd</filename>, see
                    <ulink url='http://linux.die.net/man/8/useradd'></ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_UID_TABLES'><glossterm>USERADD_UID_TABLES</glossterm>
            <info>
               USERADD_UID_TABLES[doc] = "Specifies a password file to use for obtaining static user identification (uid) values when the OpenEmbedded build system adds a user to the system during package installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a password file to use for obtaining static
                    user identification (<filename>uid</filename>) values
                    when the OpenEmbedded build system adds a user to the
                    system during package installation.
                </para>

                <para>
                    When applying static user identification
                    (<filename>uid</filename>) values, the OpenEmbedded build
                    system looks in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
                    for a <filename>files/passwd</filename> file and then applies
                    those <filename>uid</filename> values.
                    Set the variable as follows in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADD_UID_TABLES = "files/passwd"
                    </literallayout>
                </para>

                <note>
                    Setting the
                    <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
                    variable to "useradd-staticids" causes the build system
                    to use static <filename>uid</filename> values.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADDEXTENSION'><glossterm>USERADDEXTENSION</glossterm>
            <info>
               USERADDEXTENSION[doc] = "When set to 'useradd-staticids', causes the OpenEmbedded build system to base all user and group additions on a static passwd and group files found in BBPATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set to "useradd-staticids", causes the
                    OpenEmbedded build system to base all user and group
                    additions on a static
                    <filename>passwd</filename> and
                    <filename>group</filename> files found in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>.
                </para>

                <para>
                    To use static user identification (<filename>uid</filename>)
                    and group identification (<filename>gid</filename>)
                    values, set the variable
                    as follows in your <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADDEXTENSION = "useradd-staticids"
                    </literallayout>
                    <note>
                        Setting this variable to use static
                        <filename>uid</filename> and <filename>gid</filename>
                        values causes the OpenEmbedded build system to employ
                        the
                        <link linkend='ref-classes-useradd'><filename>useradd-staticids</filename></link>
                        class.
                    </note>
                </para>

                <para>
                    If you use static <filename>uid</filename> and
                    <filename>gid</filename> information, you must also
                    specify the <filename>files/passwd</filename> and
                    <filename>files/group</filename> files by setting the
                    <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>
                    and
                    <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
                    variables.
                    Additionally, you should also set the
                    <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-v'><title>V</title>

        <glossentry id='var-VOLATILE_LOG_DIR'><glossterm>VOLATILE_LOG_DIR</glossterm>
            <info>
               VOLATILE_LOG_DIR[doc] = "Specifies the persistence of the target's /var/log directory, which is used to house postinstall target log files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the persistence of the target's
                    <filename>/var/log</filename> directory, which is used to
                    house postinstall target log files.
                </para>

                <para>
                    By default, <filename>VOLATILE_LOG_DIR</filename> is set
                    to "yes", which means the file is not persistent.
                    You can override this setting by setting the
                    variable to "no" to make the log directory persistent.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-w'><title>W</title>

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

        <glossentry id='var-WKS_FILE_DEPENDS'><glossterm>WKS_FILE_DEPENDS</glossterm>
            <info>
               WKS_FILE_DEPENDS[doc] = "Lists a recipe's build-time dependencies specific to Wic."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    When placed in the recipe that builds your image, this
                    variable lists build-time dependencies.
                    The <filename>WKS_FILE_DEPENDS</filename> variable is only
                    applicable when Wic images are active (i.e. when
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    contains entries related to Wic).
                    If your recipe does not create Wic images, the variable
                    has no effect.
                </para>

                <para>
                    The <filename>WKS_FILE_DEPENDS</filename> variable is
                    similar to the
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    variable.
                    When you use the variable in your recipe that builds the
                    Wic image, dependencies you list in the
                    <filename>WIC_FILE_DEPENDS</filename> variable are added to
                    the <filename>DEPENDS</filename> variable.
                </para>

                <para>
                    With the <filename>WKS_FILE_DEPENDS</filename> variable,
                    you have the possibility to specify a list of additional
                    dependencies (e.g. native tools, bootloaders, and so forth),
                    that are required to build Wic images.
                    Following is an example:
                    <literallayout class='monospaced'>
     WKS_FILE_DEPENDS = "<replaceable>some-native-tool</replaceable>"
                    </literallayout>
                    In the previous example,
                    <replaceable>some-native-tool</replaceable> would be
                    replaced with an actual native tool on which the build
                    would depend.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-WKS_FILE'><glossterm>WKS_FILE</glossterm>
            <info>
               WKS_FILE[doc] = "Specifies the name of the wic kickstart file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the location of the Wic
                    kickstart file that is used by the OpenEmbedded build
                    system to create a partitioned image
                    (<replaceable>image</replaceable><filename>.wic</filename>).
                    For information on how to create a partitioned image, see
                    the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-partitioned-images-using-wic'>Creating Partitioned Images Using Wic</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    For details on the kickstart file format, see the
                    "<link linkend='ref-kickstart'>OpenEmbedded Kickstart (<filename>.wks</filename>) Reference</link>
                    Chapter.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-WORKDIR'><glossterm>WORKDIR</glossterm>
            <info>
               WORKDIR[doc] = "The pathname of the working directory in which the OpenEmbedded build system builds a recipe. This directory is located within the TMPDIR directory structure and changes as different packages are built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The pathname of the work directory in which the OpenEmbedded
                    build system builds a recipe.
                    This directory is located within the
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    directory structure and is specific to the recipe being
                    built and the system for which it is being built.
                </para>

                <para>
                    The <filename>WORKDIR</filename> directory is defined as
                    follows:
                    <literallayout class='monospaced'>
     ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
                    </literallayout>
                    The actual directory depends on several things:
                    <itemizedlist>
                        <listitem><filename>TMPDIR</filename>:
                            The top-level build output directory</listitem>
                        <listitem><link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>:
                            The target system identifier</listitem>
                        <listitem><link linkend='var-PN'><filename>PN</filename></link>:
                            The recipe name</listitem>
                        <listitem><link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>:
                            The epoch - (if
                            <link linkend='var-PE'><filename>PE</filename></link>
                            is not specified, which is usually the case for most
                            recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
                        <listitem><link linkend='var-PV'><filename>PV</filename></link>:
                            The recipe version</listitem>
                        <listitem><link linkend='var-PR'><filename>PR</filename></link>:
                            The recipe revision</listitem>
                    </itemizedlist>
                </para>

                <para>
                    As an example, assume a Source Directory top-level folder
                    name <filename>poky</filename>, a default Build Directory at
                    <filename>poky/build</filename>, and a
                    <filename>qemux86-poky-linux</filename> machine target
                    system.
                    Furthermore, suppose your recipe is named
                    <filename>foo_1.3.0-r0.bb</filename>.
                    In this case, the work directory the build system uses to
                    build the package would be as follows:
                    <literallayout class='monospaced'>
     poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-x'><title>X</title>

        <glossentry id='var-XSERVER'><glossterm>XSERVER</glossterm>
            <info>
               XSERVER[doc] = "Specifies the packages that should be installed
               to provide an X server and drivers for the current machine."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the packages that should be installed to
                    provide an X server and drivers for the current machine,
                    assuming your image directly includes
                    <filename>packagegroup-core-x11-xserver</filename> or,
                    perhaps indirectly, includes "x11-base" in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
                </para>

                <para>
                    The default value of <filename>XSERVER</filename>, if not
                    specified in the machine configuration, is
                    "xserver-xorg xf86-video-fbdev xf86-input-evdev".
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

<!--            <glossdiv id='var-glossary-y'><title>Y</title>-->
<!--            </glossdiv>-->

<!--            <glossdiv id='var-glossary-z'><title>Z</title>-->
<!--            </glossdiv>-->

</glossary>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
