<!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>
                        It follows that if you are going to use the
                        <filename>USERADD_PACKAGES</filename> variable,
                        you need to set one or more of the
                        <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
                        <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
                        or
                        <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
                        variables.
                    </note>
                </para>

            </glossdef>
        </glossentry>

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

                <para>
                    Here is an example from the <filename>dbus</filename>
                    recipe:
                    <literallayout class='monospaced'>
     USERADD_PARAM_${PN} = "--system --home ${localstatedir}/lib/dbus \
                            --no-create-home --shell /bin/false \
                            --user-group messagebus"
                    </literallayout>
                    For information on the standard Linux shell command
                    <filename>useradd</filename>, see
                    <ulink url='http://linux.die.net/man/8/useradd'></ulink>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADD_UID_TABLES'><glossterm>USERADD_UID_TABLES</glossterm>
            <info>
               USERADD_UID_TABLES[doc] = "Specifies a password file to use for obtaining static user identification (uid) values when the OpenEmbedded build system adds a user to the system during package installation."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies a password file to use for obtaining static
                    user identification (<filename>uid</filename>) values
                    when the OpenEmbedded build system adds a user to the
                    system during package installation.
                </para>

                <para>
                    When applying static user identification
                    (<filename>uid</filename>) values, the OpenEmbedded build
                    system looks in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
                    for a <filename>files/passwd</filename> file and then applies
                    those <filename>uid</filename> values.
                    Set the variable as follows in your
                    <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADD_UID_TABLES = "files/passwd"
                    </literallayout>
                </para>

                <note>
                    Setting the
                    <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>
                    variable to "useradd-staticids" causes the build system
                    to use static <filename>uid</filename> values.
                </note>
            </glossdef>
        </glossentry>

        <glossentry id='var-USERADDEXTENSION'><glossterm>USERADDEXTENSION</glossterm>
            <info>
               USERADDEXTENSION[doc] = "When set to 'useradd-staticids', causes the OpenEmbedded build system to base all user and group additions on a static passwd and group files found in BBPATH."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    When set to "useradd-staticids", causes the
                    OpenEmbedded build system to base all user and group
                    additions on a static
                    <filename>passwd</filename> and
                    <filename>group</filename> files found in
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>.
                </para>

                <para>
                    To use static user identification (<filename>uid</filename>)
                    and group identification (<filename>gid</filename>)
                    values, set the variable
                    as follows in your <filename>local.conf</filename> file:
                    <literallayout class='monospaced'>
     USERADDEXTENSION = "useradd-staticids"
                    </literallayout>
                    <note>
                        Setting this variable to use static
                        <filename>uid</filename> and <filename>gid</filename>
                        values causes the OpenEmbedded build system to employ
                        the
                        <link linkend='ref-classes-useradd'><filename>useradd-staticids</filename></link>
                        class.
                    </note>
                </para>

                <para>
                    If you use static <filename>uid</filename> and
                    <filename>gid</filename> information, you must also
                    specify the <filename>files/passwd</filename> and
                    <filename>files/group</filename> files by setting the
                    <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>
                    and
                    <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>
                    variables.
                    Additionally, you should also set the
                    <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-v'><title>V</title>

        <glossentry id='var-VOLATILE_LOG_DIR'><glossterm>VOLATILE_LOG_DIR</glossterm>
            <info>
               VOLATILE_LOG_DIR[doc] = "Specifies the persistence of the target's /var/log directory, which is used to house postinstall target log files."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the persistence of the target's
                    <filename>/var/log</filename> directory, which is used to
                    house postinstall target log files.
                </para>

                <para>
                    By default, <filename>VOLATILE_LOG_DIR</filename> is set
                    to "yes", which means the file is not persistent.
                    You can override this setting by setting the
                    variable to "no" to make the log directory persistent.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-w'><title>W</title>

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

        <glossentry id='var-WKS_FILE_DEPENDS'><glossterm>WKS_FILE_DEPENDS</glossterm>
            <info>
               WKS_FILE_DEPENDS[doc] = "Lists a recipe's build-time dependencies specific to Wic."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    When placed in the recipe that builds your image, this
                    variable lists build-time dependencies.
                    The <filename>WKS_FILE_DEPENDS</filename> variable is only
                    applicable when Wic images are active (i.e. when
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    contains entries related to Wic).
                    If your recipe does not create Wic images, the variable
                    has no effect.
                </para>

                <para>
                    The <filename>WKS_FILE_DEPENDS</filename> variable is
                    similar to the
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    variable.
                    When you use the variable in your recipe that builds the
                    Wic image, dependencies you list in the
                    <filename>WIC_FILE_DEPENDS</filename> variable are added to
                    the <filename>DEPENDS</filename> variable.
                </para>

                <para>
                    With the <filename>WKS_FILE_DEPENDS</filename> variable,
                    you have the possibility to specify a list of additional
                    dependencies (e.g. native tools, bootloaders, and so forth),
                    that are required to build Wic images.
                    Following is an example:
                    <literallayout class='monospaced'>
     WKS_FILE_DEPENDS = "<replaceable>some-native-tool</replaceable>"
                    </literallayout>
                    In the previous example,
                    <replaceable>some-native-tool</replaceable> would be
                    replaced with an actual native tool on which the build
                    would depend.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-WKS_FILE'><glossterm>WKS_FILE</glossterm>
            <info>
               WKS_FILE[doc] = "Specifies the name of the wic kickstart file."
            </info>
            <glossdef>
                <para role="glossdeffirst">
                    Specifies the location of the Wic
                    kickstart file that is used by the OpenEmbedded build
                    system to create a partitioned image
                    (<replaceable>image</replaceable><filename>.wic</filename>).
                    For information on how to create a partitioned image, see
                    the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-partitioned-images-using-wic'>Creating Partitioned Images Using Wic</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    For details on the kickstart file format, see the
                    "<link linkend='ref-kickstart'>OpenEmbedded Kickstart (<filename>.wks</filename>) Reference</link>
                    Chapter.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-WORKDIR'><glossterm>WORKDIR</glossterm>
            <info>
               WORKDIR[doc] = "The pathname of the working directory in which the OpenEmbedded build system builds a recipe. This directory is located within the TMPDIR directory structure and changes as different packages are built."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    The pathname of the work directory in which the OpenEmbedded
                    build system builds a recipe.
                    This directory is located within the
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    directory structure and is specific to the recipe being
                    built and the system for which it is being built.
                </para>

                <para>
                    The <filename>WORKDIR</filename> directory is defined as
                    follows:
                    <literallayout class='monospaced'>
     ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
                    </literallayout>
                    The actual directory depends on several things:
                    <itemizedlist>
                        <listitem><filename>TMPDIR</filename>:
                            The top-level build output directory</listitem>
                        <listitem><link linkend='var-MULTIMACH_TARGET_SYS'><filename>MULTIMACH_TARGET_SYS</filename></link>:
                            The target system identifier</listitem>
                        <listitem><link linkend='var-PN'><filename>PN</filename></link>:
                            The recipe name</listitem>
                        <listitem><link linkend='var-EXTENDPE'><filename>EXTENDPE</filename></link>:
                            The epoch - (if
                            <link linkend='var-PE'><filename>PE</filename></link>
                            is not specified, which is usually the case for most
                            recipes, then <filename>EXTENDPE</filename> is blank)</listitem>
                        <listitem><link linkend='var-PV'><filename>PV</filename></link>:
                            The recipe version</listitem>
                        <listitem><link linkend='var-PR'><filename>PR</filename></link>:
                            The recipe revision</listitem>
                    </itemizedlist>
                </para>

                <para>
                    As an example, assume a Source Directory top-level folder
                    name <filename>poky</filename>, a default Build Directory at
                    <filename>poky/build</filename>, and a
                    <filename>qemux86-poky-linux</filename> machine target
                    system.
                    Furthermore, suppose your recipe is named
                    <filename>foo_1.3.0-r0.bb</filename>.
                    In this case, the work directory the build system uses to
                    build the package would be as follows:
                    <literallayout class='monospaced'>
     poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-x'><title>X</title>

        <glossentry id='var-XSERVER'><glossterm>XSERVER</glossterm>
            <info>
               XSERVER[doc] = "Specifies the packages that should be installed
               to provide an X server and drivers for the current machine."
            </info>
            <glossdef>
                <para role="glossdeffirst">
<!--                <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
                    Specifies the packages that should be installed to
                    provide an X server and drivers for the current machine,
                    assuming your image directly includes
                    <filename>packagegroup-core-x11-xserver</filename> or,
                    perhaps indirectly, includes "x11-base" in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
                </para>

                <para>
                    The default value of <filename>XSERVER</filename>, if not
                    specified in the machine configuration, is
                    "xserver-xorg xf86-video-fbdev xf86-input-evdev".
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

<!--            <glossdiv id='var-glossary-y'><title>Y</title>-->
<!--            </glossdiv>-->

<!--            <glossdiv id='var-glossary-z'><title>Z</title>-->
<!--            </glossdiv>-->

</glossary>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
