<!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 by BitBake and gives an overview
    of their function and contents.
</para>

<note>
    Following are some points regarding the variables listed in this glossary:
    <itemizedlist>
        <listitem><para>The variables listed in this glossary
            are specific to BitBake.
            Consequently, the descriptions are limited to that context.
            </para></listitem>
        <listitem><para>Also, variables exist in other systems that use BitBake
            (e.g. The Yocto Project and OpenEmbedded) that have names identical
            to those found in this glossary.
            For such cases, the variables in those systems extend the
            functionality of the variable as it is described here in
            this glossary.
            </para></listitem>
        <listitem><para>Finally, there are variables mentioned in this
            glossary that do not appear in the BitBake glossary.
            These other variables are variables used in systems that use
            BitBake.
            </para></listitem>
    </itemizedlist>
</note>

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

    <para>
       <link linkend='var-ASSUME_PROVIDED'>A</link>
       <link linkend='var-B'>B</link>
       <link linkend='var-CACHE'>C</link>
       <link linkend='var-DEFAULT_PREFERENCE'>D</link>
       <link linkend='var-EXCLUDE_FROM_WORLD'>E</link>
       <link linkend='var-FAKEROOT'>F</link>
       <link linkend='var-GITDIR'>G</link>
       <link linkend='var-HGDIR'>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-LAYERDEPENDS'>L</link>
       <link linkend='var-MIRRORS'>M</link>
<!--               <link linkend='var-glossary-n'>N</link> -->
       <link linkend='var-OVERRIDES'>O</link>
       <link linkend='var-P4DIR'>P</link>
<!--       <link linkend='var-QMAKE_PROFILES'>Q</link> -->
       <link linkend='var-RDEPENDS'>R</link>
       <link linkend='var-SECTION'>S</link>
       <link linkend='var-T'>T</link>
<!--       <link linkend='var-UBOOT_CONFIG'>U</link> -->
<!--               <link linkend='var-glossary-v'>V</link> -->
<!--       <link linkend='var-WARN_QA'>W</link> -->
<!--               <link linkend='var-glossary-x'>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-ASSUME_PROVIDED'><glossterm>ASSUME_PROVIDED</glossterm>
            <glossdef>
                <para>
                    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>

    </glossdiv>


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

        <glossentry id='var-B'><glossterm>B</glossterm>
            <glossdef>
                <para>
                    The directory in which BitBake executes functions
                    during a recipe's build process.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_ALLOWED_NETWORKS'><glossterm>BB_ALLOWED_NETWORKS</glossterm>
            <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
                            <link linkend='var-BB_NO_NETWORK'><filename>BB_NO_NETWORK</filename></link>
                            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>
                            </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_CONSOLELOG'><glossterm>BB_CONSOLELOG</glossterm>
            <glossdef>
                <para>
                    Specifies the path to a log file into which BitBake's user
                    interface writes output during the build.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_CURRENTTASK'><glossterm>BB_CURRENTTASK</glossterm>
            <glossdef>
                <para>
                    Contains the name of the currently running task.
                    The name does not include the
                    <filename>do_</filename> prefix.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_DANGLINGAPPENDS_WARNONLY'><glossterm>BB_DANGLINGAPPENDS_WARNONLY</glossterm>
            <glossdef>
                <para>
                    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>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_DEFAULT_TASK'><glossterm>BB_DEFAULT_TASK</glossterm>
            <glossdef>
                <para>
                    The default task to use when none is specified (e.g.
                    with the <filename>-c</filename> command line option).
                    The task name specified should not include the
                    <filename>do_</filename> prefix.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_DISKMON_DIRS'><glossterm>BB_DISKMON_DIRS</glossterm>
            <glossdef>
                <para>
                    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.
                    When setting this variable, use the following form:
                    <literallayout class='monospaced'>
     BB_DISKMON_DIRS = "&lt;action&gt;,&lt;dir&gt;,&lt;threshold&gt; [...]"

     where:

        &lt;action&gt; 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
                      <link linkend='var-BB_DISKMON_WARNINTERVAL'>BB_DISKMON_WARNINTERVAL</link> variable,
                      which must be defined.

        &lt;dir&gt; 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.

        &lt;threshold&gt; 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 set
                    the <link linkend='var-BB_DISKMON_WARNINTERVAL'><filename>BB_DISKMON_WARNINTERVAL</filename></link> variable.
                    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 issues 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>${TMPDIR}</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>
            <glossdef>
                <para>
                    Defines the disk space and free inode warning intervals.
                </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 = "&lt;disk_space_interval&gt;,&lt;disk_inode_interval&gt;"

     where:

        &lt;disk_space_interval&gt; 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.

        &lt;disk_inode_interval&gt; 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 BitBake 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_ENV_WHITELIST'><glossterm>BB_ENV_WHITELIST</glossterm>
            <glossdef>
                <para>
                    Specifies the internal whitelist of variables to allow
                    through from the external environment into BitBake's
                    datastore.
                    If the value of this variable is not specified
                    (which is the default), the following list is used:
                    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>,
                    <link linkend='var-BB_PRESERVE_ENV'><filename>BB_PRESERVE_ENV</filename></link>,
                    <link linkend='var-BB_ENV_WHITELIST'><filename>BB_ENV_WHITELIST</filename></link>,
                    and
                    <link linkend='var-BB_ENV_EXTRAWHITE'><filename>BB_ENV_EXTRAWHITE</filename></link>.
                    <note>
                        You must set this variable in the external environment
                        in order for it to work.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_ENV_EXTRAWHITE'><glossterm>BB_ENV_EXTRAWHITE</glossterm>
            <glossdef>
                <para>
                    Specifies an additional set of variables to allow through
                    (whitelist) from the external environment into BitBake's
                    datastore.
                    This list of variables are on top of the internal list
                    set in
                    <link linkend='var-BB_ENV_WHITELIST'><filename>BB_ENV_WHITELIST</filename></link>.
                    <note>
                        You must set this variable in the external
                        environment in order for it to work.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_FETCH_PREMIRRORONLY'><glossterm>BB_FETCH_PREMIRRORONLY</glossterm>
            <glossdef>
                <para>
                    When set to "1", causes BitBake's fetcher module to only
                    search
                    <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
                    for files.
                    BitBake will not search the main
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                    or
                    <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_FILENAME'><glossterm>BB_FILENAME</glossterm>
            <glossdef>
                <para>
                    Contains the filename of the recipe that owns the currently
                    running task.
                    For example, if the <filename>do_fetch</filename> task that
                    resides in the <filename>my-recipe.bb</filename> is
                    executing, the <filename>BB_FILENAME</filename> variable
                    contains "/foo/path/my-recipe.bb".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_GENERATE_MIRROR_TARBALLS'><glossterm>BB_GENERATE_MIRROR_TARBALLS</glossterm>
            <glossdef>
                <para>
                    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.
                    Anyone wishing to create a source mirror would want to
                    enable this variable.
                </para>

                <para>
                    For performance reasons, creating and placing tarballs of
                    the Git repositories is not the default action by BitBake.
                    <literallayout class='monospaced'>
     BB_GENERATE_MIRROR_TARBALLS = "1"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_HASHCONFIG_WHITELIST'><glossterm>BB_HASHCONFIG_WHITELIST</glossterm>
            <glossdef>
                <para>
                    Lists variables that are excluded from base configuration
                    checksum, which is used to determine if the cache can
                    be reused.
                </para>

                <para>
                    One of the ways BitBake determines whether to re-parse the
                    main metadata is through checksums of the variables in the
                    datastore of the base configuration data.
                    There are variables that you typically want to exclude when
                    checking whether or not to re-parse and thus rebuild the
                    cache.
                    As an example, you would usually exclude
                    <filename>TIME</filename> and <filename>DATE</filename>
                    because these variables are always changing.
                    If you did not exclude them, BitBake would never reuse the
                    cache.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_HASHBASE_WHITELIST'><glossterm>BB_HASHBASE_WHITELIST</glossterm>
            <glossdef>
                <para>
                    Lists variables that are excluded from checksum and
                    dependency data.
                    Variables that are excluded can therefore change without
                    affecting the checksum mechanism.
                    A common example would be the variable for the path of
                    the build.
                    BitBake's output should not (and usually does not) depend
                    on the directory in which it was built.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_HASHCHECK_FUNCTION'><glossterm>BB_HASHCHECK_FUNCTION</glossterm>
            <glossdef>
                <para>
                    Specifies the name of the function to call during the
                    "setscene" part of the task's execution in order to
                    validate the list of task hashes.
                    The function returns the list of setscene tasks that should
                    be executed.
                </para>

                <para>
                    At this point in the execution of the code, the objective
                    is to quickly verify if a given setscene function is likely
                    to work or not.
                    It's easier to check the list of setscene functions in
                    one pass than to call many individual tasks.
                    The returned list need not be completely accurate.
                    A given setscene task can still later fail.
                    However, the more accurate the data returned, the more
                    efficient the build will be.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_INVALIDCONF'><glossterm>BB_INVALIDCONF</glossterm>
            <glossdef>
                <para>
                    Used in combination with the
                    <filename>ConfigParsed</filename> event to trigger
                    re-parsing the base metadata (i.e. all the
                    recipes).
                    The <filename>ConfigParsed</filename> event can set the
                    variable to trigger the re-parse.
                    You must be careful to avoid recursive loops with this
                    functionality.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_LOGFMT'><glossterm>BB_LOGFMT</glossterm>
            <glossdef>
                <para>
                    Specifies the name of the log files saved into
                    <filename>${</filename><link linkend='var-T'><filename>T</filename></link><filename>}</filename>.
                    By default, the <filename>BB_LOGFMT</filename> variable
                    is undefined and the log file names get created using the
                    following form:
                    <literallayout class='monospaced'>
     log.{task}.{pid}
                    </literallayout>
                    If you want to force log files to take a specific name,
                    you can set this variable in a configuration file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_NICE_LEVEL'><glossterm>BB_NICE_LEVEL</glossterm>
            <glossdef>
                <para>
                    Allows BitBake to run at a specific priority
                    (i.e. nice level).
                    System permissions usually mean that BitBake can reduce its
                    priority but not raise it again.
                    See
                    <link linkend='var-BB_TASK_NICE_LEVEL'><filename>BB_TASK_NICE_LEVEL</filename></link>
                    for additional information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_NO_NETWORK'><glossterm>BB_NO_NETWORK</glossterm>
            <glossdef>
                <para>
                    Disables network access in the BitBake fetcher modules.
                    With this access disabled, any command that attempts to
                    access the network becomes an error.
                </para>

                <para>
                    Disabling network access is useful for testing source
                    mirrors, running builds when not connected to the Internet,
                    and when operating in certain kinds of firewall
                    environments.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_NUMBER_THREADS'><glossterm>BB_NUMBER_THREADS</glossterm>
            <glossdef>
                <para>
                    The maximum number of tasks BitBake should run in parallel
                    at any one time.
                    If your host development system supports multiple cores,
                    a good rule of thumb is to set this variable to twice the
                    number of cores.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_NUMBER_PARSE_THREADS'><glossterm>BB_NUMBER_PARSE_THREADS</glossterm>
            <glossdef>
                <para>
                    Sets the number of threads BitBake uses when parsing.
                    By default, the number of threads is equal to the number
                    of cores on the system.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_ORIGENV'><glossterm>BB_ORIGENV</glossterm>
            <glossdef>
                <para>
                    Contains a copy of the original external environment in
                    which BitBake was run.
                    The copy is taken before any whitelisted variable values
                    are filtered into BitBake's datastore.
                    <note>
                        The contents of this variable is a datastore object
                        that can be queried using the normal datastore
                        operations.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_PRESERVE_ENV'><glossterm>BB_PRESERVE_ENV</glossterm>
            <glossdef>
                <para>
                    Disables whitelisting and instead allows all variables
                    through from the external environment into BitBake's
                    datastore.
                    <note>
                        You must set this variable in the external
                        environment in order for it to work.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_RUNFMT'><glossterm>BB_RUNFMT</glossterm>
            <glossdef>
                <para>
                    Specifies the name of the executable script files
                    (i.e. run files) saved into
                    <filename>${</filename><link linkend='var-T'><filename>T</filename></link><filename>}</filename>.
                    By default, the <filename>BB_RUNFMT</filename> variable
                    is undefined and the run file names get created using the
                    following form:
                    <literallayout class='monospaced'>
     run.{task}.{pid}
                    </literallayout>
                    If you want to force run files to take a specific name,
                    you can set this variable in a configuration file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_RUNTASK'><glossterm>BB_RUNTASK</glossterm>
            <glossdef>
                <para>
                    Contains the name of the currently executing task.
                    The value does not include the "do_" prefix.
                    For example, if the currently executing task is
                    <filename>do_config</filename>, the value is
                    "config".
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SCHEDULER'><glossterm>BB_SCHEDULER</glossterm>
            <glossdef>
                <para>
                    Selects the name of the scheduler to use for the
                    scheduling of BitBake tasks.
                    Three options exist:
                    <itemizedlist>
                        <listitem><para><emphasis>basic</emphasis> -
                            The basic framework from which everything derives.
                            Using this option causes tasks to be ordered
                            numerically as they are parsed.
                            </para></listitem>
                        <listitem><para><emphasis>speed</emphasis> -
                            Executes tasks first that have more tasks
                            depending on them.
                            The "speed" option is the default.
                            </para></listitem>
                        <listitem><para><emphasis>completion</emphasis> -
                            Causes the scheduler to try to complete a given
                            recipe once its build has started.
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SCHEDULERS'><glossterm>BB_SCHEDULERS</glossterm>
            <glossdef>
                <para>
                    Defines custom schedulers to import.
                    Custom schedulers need to be derived from the
                    <filename>RunQueueScheduler</filename> class.
                </para>

                <para>
                    For information how to select a scheduler, see the
                    <link linkend='var-BB_SCHEDULER'><filename>BB_SCHEDULER</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SETSCENE_DEPVALID'><glossterm>BB_SETSCENE_DEPVALID</glossterm>
            <glossdef>
                <para>
                    Specifies a function BitBake calls that determines
                    whether BitBake requires a setscene dependency to be met.
                </para>

                <para>
                    When running a setscene task, BitBake needs to
                    know which dependencies of that setscene task also need
                    to be run.
                    Whether dependencies also need to be run is highly
                    dependent on the metadata.
                    The function specified by this variable returns a
                    "True" or "False" depending on whether the dependency needs
                    to be met.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SETSCENE_VERIFY_FUNCTION2'><glossterm>BB_SETSCENE_VERIFY_FUNCTION2</glossterm>
            <glossdef>
                <para>
                    Specifies a function to call that verifies the list of
                    planned task execution before the main task execution
                    happens.
                    The function is called once BitBake has a list of setscene
                    tasks that have run and either succeeded or failed.
                </para>

                <para>
                    The function allows for a task list check to see if they
                    make sense.
                    Even if BitBake was planning to skip a task, the
                    returned value of the function can force BitBake to run
                    the task, which is necessary under certain metadata
                    defined circumstances.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SIGNATURE_EXCLUDE_FLAGS'><glossterm>BB_SIGNATURE_EXCLUDE_FLAGS</glossterm>
            <glossdef>
                <para>
                    Lists variable flags (varflags)
                    that can be safely excluded from checksum
                    and dependency data for keys in the datastore.
                    When generating checksum or dependency data for keys in the
                    datastore, the flags set against that key are normally
                    included in the checksum.
                </para>

                <para>
                    For more information on varflags, see the
                    "<link linkend='variable-flags'>Variable Flags</link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SIGNATURE_HANDLER'><glossterm>BB_SIGNATURE_HANDLER</glossterm>
            <glossdef>
                <para>
                    Defines the name of the signature handler BitBake uses.
                    The signature handler defines the way stamp files are
                    created and handled, if and how the signature is
                    incorporated into the stamps, and how the signature
                    itself is generated.
                </para>

                <para>
                    A new signature handler can be added by injecting a class
                    derived from the
                    <filename>SignatureGenerator</filename> class into the
                    global namespace.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_SRCREV_POLICY'><glossterm>BB_SRCREV_POLICY</glossterm>
            <glossdef>
                <para>
                    Defines the behavior of the fetcher when it interacts with
                    source control systems and dynamic source revisions.
                    The <filename>BB_SRCREV_POLICY</filename> variable is
                    useful when working without a network.
                </para>

                <para>
                    The variable can be set using one of two policies:
                    <itemizedlist>
                        <listitem><para><emphasis>cache</emphasis> -
                            Retains the value the system obtained previously
                            rather than querying the source control system
                            each time.
                            </para></listitem>
                        <listitem><para><emphasis>clear</emphasis> -
                            Queries the source controls system every time.
                            With this policy, there is no cache.
                            The "clear" policy is the default.
                            </para></listitem>
                    </itemizedlist>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_STAMP_POLICY'><glossterm>BB_STAMP_POLICY</glossterm>
            <glossdef>
                <para>
                    Defines the mode used for how timestamps of stamp files
                    are compared.
                    You can set the variable to one of the following modes:
                    <itemizedlist>
                        <listitem><para><emphasis>perfile</emphasis> -
                            Timestamp comparisons are only made
                            between timestamps of a specific recipe.
                            This is the default mode.
                            </para></listitem>
                        <listitem><para><emphasis>full</emphasis> -
                            Timestamp comparisons are made for all
                            dependencies.
                            </para></listitem>
                        <listitem><para><emphasis>whitelist</emphasis> -
                            Identical to "full" mode except timestamp
                            comparisons are made for recipes listed in the
                            <link linkend='var-BB_STAMP_WHITELIST'><filename>BB_STAMP_WHITELIST</filename></link>
                            variable.
                            </para></listitem>
                    </itemizedlist>
                    <note>
                        Stamp policies are largely obsolete with the
                        introduction of setscene tasks.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_STAMP_WHITELIST'><glossterm>BB_STAMP_WHITELIST</glossterm>
            <glossdef>
                <para>
                    Lists files whose stamp file timestamps are compared when
                    the stamp policy mode is set to "whitelist".
                    For information on stamp policies, see the
                    <link linkend='var-BB_STAMP_POLICY'><filename>BB_STAMP_POLICY</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_STRICT_CHECKSUM'><glossterm>BB_STRICT_CHECKSUM</glossterm>
            <glossdef>
                <para>
                    Sets a more strict checksum mechanism for non-local URLs.
                    Setting this variable to a value causes BitBake
                    to report an error if it encounters a non-local URL
                    that does not have at least one checksum specified.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_TASK_IONICE_LEVEL'><glossterm>BB_TASK_IONICE_LEVEL</glossterm>
            <glossdef>
                <para>
                    Allows adjustment of a task's Input/Output priority.
                    During Autobuilder testing, random failures can occur
                    for tasks due to I/O starvation.
                    These failures occur during various QEMU runtime timeouts.
                    You can use the <filename>BB_TASK_IONICE_LEVEL</filename>
                    variable to adjust the I/O priority of these tasks.
                    <note>
                        This variable works similarly to the
                        <link linkend='var-BB_TASK_NICE_LEVEL'><filename>BB_TASK_NICE_LEVEL</filename></link>
                        variable except with a task's I/O priorities.
                    </note>
                </para>

                <para>
                    Set the variable as follows:
                    <literallayout class='monospaced'>
     BB_TASK_IONICE_LEVEL = "<replaceable>class</replaceable>.<replaceable>prio</replaceable>"
                    </literallayout>
                    For <replaceable>class</replaceable>, the default value is
                    "2", which is a best effort.
                    You can use "1" for realtime and "3" for idle.
                    If you want to use realtime, you must have superuser
                    privileges.
                </para>

                <para>
                    For <replaceable>prio</replaceable>, you can use any
                    value from "0", which is the highest priority, to "7",
                    which is the lowest.
                    The default value is "4".
                    You do not need any special privileges to use this range
                    of priority values.
                    <note>
                        In order for your I/O priority settings to take effect,
                        you need the Completely Fair Queuing (CFQ) Scheduler
                        selected for the backing block device.
                        To select the scheduler, use the following command form
                        where <replaceable>device</replaceable> is the device
                        (e.g. sda, sdb, and so forth):
                        <literallayout class='monospaced'>
      $ sudo sh -c “echo cfq > /sys/block/<replaceable>device</replaceable>/queu/scheduler
                        </literallayout>
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_TASK_NICE_LEVEL'><glossterm>BB_TASK_NICE_LEVEL</glossterm>
            <glossdef>
                <para>
                    Allows specific tasks to change their priority
                    (i.e. nice level).
                </para>

                <para>
                    You can use this variable in combination with task
                    overrides to raise or lower priorities of specific tasks.
                    For example, on the
                    <ulink url='http://www.yoctoproject.org'>Yocto Project</ulink>
                    autobuilder, QEMU emulation in images is given a higher
                    priority as compared to build tasks to ensure that images
                    do not suffer timeouts on loaded systems.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_TASKHASH'><glossterm>BB_TASKHASH</glossterm>
            <glossdef>
                <para>
                    Within an executing task, this variable holds the hash
                    of the task as returned by the currently enabled
                    signature generator.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_VERBOSE_LOGS'><glossterm>BB_VERBOSE_LOGS</glossterm>
            <glossdef>
                <para>
                    Controls how verbose BitBake is during builds.
                    If set, shell scripts echo commands and shell script output
                    appears on standard out (stdout).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BB_WORKERCONTEXT'><glossterm>BB_WORKERCONTEXT</glossterm>
            <glossdef>
                <para>
                    Specifies if the current context is executing a task.
                    BitBake sets this variable to "1" when a task is
                    being executed.
                    The value is not set when the task is in server context
                    during parsing or event handling.
                </para>
            </glossdef>
        </glossentry>


        <glossentry id='var-BBCLASSEXTEND'><glossterm>BBCLASSEXTEND</glossterm>
            <glossdef>
                <para>
                    Allows you to extend a recipe so that it builds variants
                    of the software.
                    Some examples of these variants for recipes from the
                    OpenEmbedded-Core metadata are "natives" such as
                    <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 <filename>MACHINE</filename>;
                    "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
                    variable to your recipe.
                    Here are two examples.
                    The "native" variants are from the OpenEmbedded-Core
                    metadata:
                    <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-BBDEBUG'><glossterm>BBDEBUG</glossterm>
            <glossdef>
                <para>
                    Sets the BitBake debug output level to a specific value
                    as incremented by the <filename>-D</filename> command line
                    option.
                    <note>
                        You must set this variable in the external environment
                        in order for it to work.
                    </note>
                </para>
             </glossdef>
        </glossentry>

        <glossentry id='var-BBFILE_COLLECTIONS'><glossterm>BBFILE_COLLECTIONS</glossterm>
            <glossdef>
                <para>Lists the names of configured layers.
                    These names are used to find the other <filename>BBFILE_*</filename>
                    variables.
                    Typically, each layer appends 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>
            <glossdef>
                <para>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>
            <glossdef>
                <para>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>
            <glossdef>
                <para>List of recipe files BitBake uses to build software.</para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBINCLUDED'><glossterm>BBINCLUDED</glossterm>
            <glossdef>
                <para>
                    Contains a space-separated list of all of all files that
                    BitBake's parser included during parsing of the current
                    file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBINCLUDELOGS'><glossterm>BBINCLUDELOGS</glossterm>
            <glossdef>
                <para>
                    If set to a value, enables printing the task log when
                    reporting a failed task.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBINCLUDELOGS_LINES'><glossterm>BBINCLUDELOGS_LINES</glossterm>
            <glossdef>
                <para>
                    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>
            <glossdef>
                <para>Lists the layers to enable during the build.
                    This variable is defined in the <filename>bblayers.conf</filename> configuration
                    file in the build directory.
                    Here is an example:
                    <literallayout class='monospaced'>
     BBLAYERS = " \
       /home/scottrif/poky/meta \
       /home/scottrif/poky/meta-yocto \
       /home/scottrif/poky/meta-yocto-bsp \
       /home/scottrif/poky/meta-mykernel \
       "

                    </literallayout>
                    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-BBLAYERS_FETCH_DIR'><glossterm>BBLAYERS_FETCH_DIR</glossterm>
            <glossdef>
                <para>
                    Sets the base location where layers are stored.
                    This setting is used in conjunction with
                    <filename>bitbake-layers layerindex-fetch</filename> and
                    tells <filename>bitbake-layers</filename> where to place
                    the fetched layers.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBMASK'><glossterm>BBMASK</glossterm>
            <glossdef>
                <para>
                    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.
                    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/release/2.3/lib/re-syntax.html'></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-BBPATH'><glossterm>BBPATH</glossterm>
            <glossdef>
                <para>
                    Used by BitBake to locate class
                    (<filename>.bbclass</filename>) and configuration
                    (<filename>.conf</filename>) files.
                    This variable is analogous to the
                    <filename>PATH</filename> variable.
                </para>

                <para>
                    If you run BitBake from a directory outside of the
                    build directory,
                    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>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBSERVER'><glossterm>BBSERVER</glossterm>
            <glossdef>
                <para>
                    Points to the server that runs memory-resident BitBake.
                    The variable is only used when you employ memory-resident
                    BitBake.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBTARGETS'><glossterm>BBTARGETS</glossterm>
            <glossdef>
                <para>
                    Allows you to use a configuration file to add to the list
                    of command-line target recipes you want to build.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BBVERSIONS'><glossterm>BBVERSIONS</glossterm>
            <glossdef>
                <para>
                    Allows a single recipe to build multiple versions of a
                    project from a single recipe file.
                    You also able to specify conditional metadata
                    using the
                    <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    mechanism for a single version or for an optionally named
                    range of versions.
                </para>

                <para>
                    For more information on <filename>BBVERSIONS</filename>,
                    see the
                    "<link linkend='variants-class-extension-mechanism'>Variants - Class Extension Mechanism</link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BITBAKE_UI'><glossterm>BITBAKE_UI</glossterm>
            <glossdef>
                <para>
                    Used to specify the UI module to use when running BitBake.
                    Using this variable is equivalent to using the
                    <filename>-u</filename> command-line option.
                    <note>
                        You must set this variable in the external environment
                        in order for it to work.
                    </note>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BUILDNAME'><glossterm>BUILDNAME</glossterm>
            <glossdef>
                <para>
                    A name assigned to the build.
                    The name defaults to a datetime stamp of when the build was
                    started but can be defined by the metadata.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-BZRDIR'><glossterm>BZRDIR</glossterm>
            <glossdef>
                <para>
                    The directory in which files checked out of a Bazaar
                    system are stored.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

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

        <glossentry id='var-CACHE'><glossterm>CACHE</glossterm>
            <glossdef>
                <para>
                    Specifies the directory BitBake uses to store a cache
                    of the metadata so it does not need to be parsed every
                    time BitBake is started.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-CVSDIR'><glossterm>CVSDIR</glossterm>
            <glossdef>
                <para>
                    The directory in which files checked out under the
                    CVS system are stored.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

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

        <glossentry id='var-DEFAULT_PREFERENCE'><glossterm>DEFAULT_PREFERENCE</glossterm>
            <glossdef>
                <para>
                    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-DEPENDS'><glossterm>DEPENDS</glossterm>
            <glossdef>
                <para>
                    Lists a recipe's build-time dependencies
                    (i.e. other recipe files).
                </para>

                <para>
                    Consider this simple example for two recipes named "a" and
                    "b" that produce similarly named packages.
                    In this example, the <filename>DEPENDS</filename>
                    statement appears in the "a" recipe:
                    <literallayout class='monospaced'>
     DEPENDS = "b"
                    </literallayout>
                    Here, the dependency is such that the
                    <filename>do_configure</filename> task for recipe "a"
                    depends on the <filename>do_populate_sysroot</filename>
                    task of recipe "b".
                    This means anything that recipe "b" puts into sysroot
                    is available when recipe "a" is configuring itself.
                </para>

                <para>
                    For information on runtime dependencies, see the
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DESCRIPTION'><glossterm>DESCRIPTION</glossterm>
            <glossdef>
                <para>
                    A long description for the recipe.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-DL_DIR'><glossterm>DL_DIR</glossterm>
            <glossdef>
                <para>
                    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>
            </glossdef>

        </glossentry>
    </glossdiv>

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

        <glossentry id='var-EXCLUDE_FROM_WORLD'><glossterm>EXCLUDE_FROM_WORLD</glossterm>
            <glossdef>
                <para>
                    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>

    </glossdiv>

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

        <glossentry id='var-FAKEROOT'><glossterm>FAKEROOT</glossterm>
            <glossdef>
                <para>
                     Contains the command to use when running a shell script
                     in a fakeroot environment.
                     The <filename>FAKEROOT</filename> variable is obsolete
                     and has been replaced by the other
                     <filename>FAKEROOT*</filename> variables.
                     See these entries in the glossary for more information.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FAKEROOTBASEENV'><glossterm>FAKEROOTBASEENV</glossterm>
            <glossdef>
                <para>
                     Lists environment variables to set when executing
                     the command defined by
                     <link linkend='var-FAKEROOTCMD'><filename>FAKEROOTCMD</filename></link>
                     that starts the bitbake-worker process
                     in the fakeroot environment.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FAKEROOTCMD'><glossterm>FAKEROOTCMD</glossterm>
            <glossdef>
                <para>
                     Contains the command that starts the bitbake-worker
                     process in the fakeroot environment.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FAKEROOTDIRS'><glossterm>FAKEROOTDIRS</glossterm>
            <glossdef>
                <para>
                     Lists directories to create before running a task in
                     the fakeroot environment.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FAKEROOTENV'><glossterm>FAKEROOTENV</glossterm>
            <glossdef>
                <para>
                     Lists environment variables to set when running a task
                     in the fakeroot environment.
                     For additional information on environment variables and
                     the fakeroot environment, see the
                     <link linkend='var-FAKEROOTBASEENV'><filename>FAKEROOTBASEENV</filename></link>
                     variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FAKEROOTNOENV'><glossterm>FAKEROOTNOENV</glossterm>
            <glossdef>
                <para>
                     Lists environment variables to set when running a task
                     that is not in the fakeroot environment.
                     For additional information on environment variables and
                     the fakeroot environment, see the
                     <link linkend='var-FAKEROOTENV'><filename>FAKEROOTENV</filename></link>
                     variable.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FETCHCMD'><glossterm>FETCHCMD</glossterm>
            <glossdef>
                <para>
                    Defines the command the BitBake fetcher module
                    executes when running fetch operations.
                    You need to use an override suffix when you use the
                    variable (e.g. <filename>FETCHCMD_git</filename>
                    or <filename>FETCHCMD_svn</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILE'><glossterm>FILE</glossterm>
            <glossdef>
                <para>
                    Points at the current file.
                    BitBake sets this variable during the parsing process
                    to identify the file being parsed.
                    BitBake also sets this variable when a recipe is being
                    executed to identify the recipe file.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-FILESPATH'><glossterm>FILESPATH</glossterm>
            <glossdef>
                <para>
                    Specifies directories BitBake uses when searching for
                    patches and files.
                    The "local" fetcher module uses these directories when
                    handling <filename>file://</filename> URLs.
                    The variable behaves like a shell <filename>PATH</filename>
                    environment variable.
                    The value is a colon-separated list of directories that
                    are searched left-to-right in order.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>


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

        <glossentry id='var-GITDIR'><glossterm>GITDIR</glossterm>
            <glossdef>
                <para>
                    The directory in which a local copy of a Git repository
                    is stored when it is cloned.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>


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

        <glossentry id='var-HGDIR'><glossterm>HGDIR</glossterm>
            <glossdef>
                <para>
                    The directory in which files checked out of a Mercurial
                    system are stored.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-HOMEPAGE'><glossterm>HOMEPAGE</glossterm>
            <glossdef>
                <para>Website where more information about the software the recipe is building
                    can be found.</para>
            </glossdef>
        </glossentry>

    </glossdiv>

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

        <glossentry id='var-INHERIT'><glossterm>INHERIT</glossterm>
            <glossdef>
                <para>
                    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
                    "<link linkend="inherit-configuration-directive"><filename>INHERIT</filename> Configuration Directive</link>"
                    section.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

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

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

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

        <glossentry id='var-LAYERDEPENDS'><glossterm>LAYERDEPENDS</glossterm>
            <glossdef>
                <para>Lists the layers, separated by spaces, upon 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 with a colon, (e.g. "anotherlayer:3"
                    to be compared against
                    <link linkend='var-LAYERVERSION'><filename>LAYERVERSION</filename></link><filename>_anotherlayer</filename>
                    in this case).
                    BitBake produces an error if any dependency is missing or
                    the version numbers do not match exactly (if specified).</para>
                <para>
                    You use this variable in the <filename>conf/layer.conf</filename> file.
                    You must also use the specific layer name as a suffix
                    to the variable (e.g. <filename>LAYERDEPENDS_mylayer</filename>).</para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LAYERDIR'><glossterm>LAYERDIR</glossterm>
            <glossdef>
                <para>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-LAYERDIR_RE'><glossterm>LAYERDIR_RE</glossterm>
            <glossdef>
                <para>When used inside the <filename>layer.conf</filename> configuration
                    file, this variable provides the path of the current layer,
                    escaped for use in a regular expression
                    (<link linkend='var-BBFILE_PATTERN'><filename>BBFILE_PATTERN</filename></link>).
                    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-LAYERVERSION'><glossterm>LAYERVERSION</glossterm>
            <glossdef>
                <para>Optionally specifies the version of a layer as a single number.
                    You can use this variable within
                    <link linkend='var-LAYERDEPENDS'><filename>LAYERDEPENDS</filename></link>
                    for another layer in order to depend on a specific version
                    of the layer.</para>
                <para>
                    You use this variable in the <filename>conf/layer.conf</filename> file.
                    You must also use the specific layer name as a suffix
                    to the variable (e.g. <filename>LAYERDEPENDS_mylayer</filename>).</para>
            </glossdef>
        </glossentry>

        <glossentry id='var-LICENSE'><glossterm>LICENSE</glossterm>
            <glossdef>
                <para>
                    The list of source licenses for the recipe.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

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

        <glossentry id='var-MIRRORS'><glossterm>MIRRORS</glossterm>
            <glossdef>
                <para>
                    Specifies additional paths from which BitBake 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>
            </glossdef>
        </glossentry>

        <glossentry id='var-MULTI_PROVIDER_WHITELIST'><glossterm>MULTI_PROVIDER_WHITELIST</glossterm>
            <glossdef>
                <para>
                    Allows you to suppress BitBake warnings caused when
                    building two separate recipes that provide the same
                    output.
                </para>

                <para>
                    Bitbake normally issues a warning when building two
                    different recipes where each provides the same output.
                    This scenario is usually something the user does not
                    want.
                    However, cases do exist where it makes sense, particularly
                    in the <filename>virtual/*</filename> namespace.
                    You can use this variable to suppress BitBake's warnings.
                </para>

                <para>
                    To use the variable, list provider names (e.g.
                    recipe names, <filename>virtual/kernel</filename>,
                    and so forth).
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

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

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

        <glossentry id='var-OVERRIDES'><glossterm>OVERRIDES</glossterm>
            <glossdef>
                <para>
                    BitBake uses <filename>OVERRIDES</filename> to control
                    what variables are overridden after BitBake parses
                    recipes and configuration files.
                </para>

                <para>
                    Following is a simple example that uses an overrides
                    list based on machine architectures:
                    <literallayout class='monospaced'>
     OVERRIDES = "arm:x86:mips:powerpc"
                    </literallayout>
                    You can find information on how to use
                    <filename>OVERRIDES</filename> in the
                    "<link linkend='conditional-syntax-overrides'>Conditional Syntax (Overrides)</link>"
                    section.
                </para>
            </glossdef>
        </glossentry>
    </glossdiv>

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

        <glossentry id='var-P4DIR'><glossterm>P4DIR</glossterm>
            <glossdef>
                <para>
                    The directory in which a local copy of a Perforce depot
                    is stored when it is fetched.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGES'><glossterm>PACKAGES</glossterm>
            <glossdef>
                <para>The list of packages the recipe creates.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PACKAGES_DYNAMIC'><glossterm>PACKAGES_DYNAMIC</glossterm>
            <glossdef>
                <para>
                    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 during the build
                    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.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PE'><glossterm>PE</glossterm>
            <glossdef>
                <para>
                    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>
            </glossdef>
        </glossentry>

        <glossentry id='var-PERSISTENT_DIR'><glossterm>PERSISTENT_DIR</glossterm>
            <glossdef>
                <para>
                    Specifies the directory BitBake uses to store data that
                    should be preserved between builds.
                    In particular, the data stored is the data that uses
                    BitBake's persistent data API and the data used by the
                    PR Server and PR Service.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PF'><glossterm>PF</glossterm>
            <glossdef>
                <para>
                    Specifies the recipe or package name and includes all version and revision
                    numbers (i.e. <filename>eglibc-2.13-r20+svnr15508/</filename> and
                    <filename>bash-4.2-r1/</filename>).
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PN'><glossterm>PN</glossterm>
            <glossdef>
                <para>The recipe name.</para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PR'><glossterm>PR</glossterm>
            <glossdef>
                <para>The revision of the recipe.
                    </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PREFERRED_PROVIDER'><glossterm>PREFERRED_PROVIDER</glossterm>
            <glossdef>
                <para>
                    Determines which recipe should be given preference when
                    multiple recipes provide the same item.
                    You should always suffix the variable with the name of the
                    provided item, and you should set it to the
                    <link linkend='var-PN'><filename>PN</filename></link>
                    of the recipe to which you want to give precedence.
                    Some examples:
                    <literallayout class='monospaced'>
     PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
     PREFERRED_PROVIDER_virtual/xserver = "xserver-xf86"
     PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PREFERRED_PROVIDERS'><glossterm>PREFERRED_PROVIDERS</glossterm>
            <glossdef>
                <para>
                    Determines which recipe should be given preference for
                    cases where multiple recipes provide the same item.
                    Functionally,
                    <filename>PREFERRED_PROVIDERS</filename> is identical to
                    <link linkend='var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></link>.
                    However, the <filename>PREFERRED_PROVIDERS</filename>
                    variable lets you define preferences for multiple
                    situations using the following form:
                    <literallayout class='monospaced'>
     PREFERRED_PROVIDERS = "xxx:yyy aaa:bbb ..."
                    </literallayout>
                    This form is a convenient replacement for the following:
                    <literallayout class='monospaced'>
     PREFERRED_PROVIDER_xxx = "yyy"
     PREFERRED_PROVIDER_aaa = "bbb"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PREFERRED_VERSION'><glossterm>PREFERRED_VERSION</glossterm>
            <glossdef>
                <para>
                    If there are multiple versions of recipes available, this
                    variable determines which recipe should be 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
                    <link linkend='var-PV'><filename>PV</filename></link>
                    accordingly for precedence.
                    You can use the "<filename>%</filename>" character as a
                    wildcard to match any number of characters, which can be
                    useful when specifying versions that contain long revision
                    numbers that could potentially change.
                    Here are two examples:
                    <literallayout class='monospaced'>
     PREFERRED_VERSION_python = "2.7.3"
     PREFERRED_VERSION_linux-yocto = "4.12%"
                    </literallayout>
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PREMIRRORS'><glossterm>PREMIRRORS</glossterm>
            <glossdef>
                <para>
                    Specifies additional paths from which BitBake 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>
                    Typically, you would add a specific server for the
                    build system to attempt before any others by adding
                    something like the following to your configuration:
                    <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-PROVIDES'><glossterm>PROVIDES</glossterm>
            <glossdef>
                <para>
                    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
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    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>
            </glossdef>
        </glossentry>

        <glossentry id='var-PRSERV_HOST'><glossterm>PRSERV_HOST</glossterm>
            <glossdef>
                <para>
                    The network based
                    <link linkend='var-PR'><filename>PR</filename></link>
                    service host and port.
                </para>

                <para>
                    Following is an example of 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 PR service.
                    You can set <filename>PRSERV_HOST</filename> to other
                    values to use a remote PR service.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-PV'><glossterm>PV</glossterm>
            <glossdef>
                <para>The version of the recipe.
                 </para>
            </glossdef>
        </glossentry>

    </glossdiv>

<!--
    <glossdiv id='var-glossary-q'><title>Q</title>
    </glossdiv>
-->

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

        <glossentry id='var-RDEPENDS'><glossterm>RDEPENDS</glossterm>
            <glossdef>
                <para>
                    Lists a package's runtime dependencies (i.e. other packages)
                    that must be installed in order for the built package to run
                    correctly.
                    If a package in this list cannot be found during the build,
                    you will get a build error.
                </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.
                    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.
                </para>

                <para>
                    BitBake 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 <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'>
     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.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-REPODIR'><glossterm>REPODIR</glossterm>
            <glossdef>
                <para>
                    The directory in which a local copy of a
                    <filename>google-repo</filename> directory is stored
                    when it is synced.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-RPROVIDES'><glossterm>RPROVIDES</glossterm>
            <glossdef>
                <para>
                    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>).
                </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>
            <glossdef>
                <para>
                    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.
                    To specify runtime dependencies for packages, see the
                    <filename><link linkend='var-RDEPENDS'>RDEPENDS</link></filename>
                    variable.
                </para>

                <para>
                    BitBake 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>

    </glossdiv>

    <glossdiv id='var-glossary-s'><title>S</title>

        <glossentry id='var-SECTION'><glossterm>SECTION</glossterm>
            <glossdef>
                <para>The section in which packages should be categorized.</para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRC_URI'><glossterm>SRC_URI</glossterm>
            <glossdef>
                <para>
                    The list of source files - local or remote.
                    This variable tells BitBake which bits
                    to pull for the build and how to pull them.
                    For example, if the recipe or append file needs to
                    fetch a single tarball from the Internet, the recipe or
                    append file uses a <filename>SRC_URI</filename>
                    entry that specifies that tarball.
                    On the other hand, if the recipe or append file needs to
                    fetch a tarball and include a custom file, the recipe or
                    append file needs an <filename>SRC_URI</filename> variable
                    that specifies all those sources.</para>
                <para>The following list explains the available URI protocols:
                    <itemizedlist>
                        <listitem><para><emphasis><filename>file://</filename> -</emphasis>
                            Fetches files, which are usually files shipped with
                            the metadata,
                            from the local machine.
                            The path is relative to the
                            <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                            variable.</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>http://</filename> -</emphasis> Fetches files from
                            the Internet using HTTP.</para></listitem>
                        <listitem><para><emphasis><filename>https://</filename> -</emphasis> Fetches files
                            from the Internet using HTTPS.</para></listitem>
                        <listitem><para><emphasis><filename>ftp://</filename> -</emphasis> Fetches files
                            from the Internet using FTP.</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>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>subdir</filename> -</emphasis> Places the file
                            (or extracts its contents) into the specified
                            subdirectory.
                            This option is useful for unusual tarballs or other archives that
                            do not have their files already in a subdirectory within the archive.
                            </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-SRCDATE'><glossterm>SRCDATE</glossterm>
            <glossdef>
                <para>
                    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-SRCREV'><glossterm>SRCREV</glossterm>
            <glossdef>
                <para>
                    The revision of the source code used to build the package.
                    This variable applies only when using Subversion, Git, Mercurial and Bazaar.
                    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.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SRCREV_FORMAT'><glossterm>SRCREV_FORMAT</glossterm>
            <glossdef>
                <para>
                    Helps construct valid
                    <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
                    values when multiple source controlled URLs are used in
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
                </para>

                <para>
                    The system needs help constructing these values under these
                    circumstances.
                    Each component in the <filename>SRC_URI</filename>
                    is assigned a name and these are referenced
                    in the <filename>SRCREV_FORMAT</filename> variable.
                    Consider an example with URLs named "machine" and "meta".
                    In this case, <filename>SRCREV_FORMAT</filename> could look
                    like "machine_meta" and those names would have the SCM
                    versions substituted into each position.
                    Only one <filename>AUTOINC</filename> placeholder is added
                    and if needed.
                    And, this placeholder is placed at the start of the
                    returned string.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAMP'><glossterm>STAMP</glossterm>
            <glossdef>
                <para>
                    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.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-STAMPCLEAN'><glossterm>STAMPCLEAN</glossterm>
            <glossdef>
                <para>
                    Specifies the base path used to create recipe stamp files.
                    Unlike the
                    <link linkend='var-STAMP'><filename>STAMP</filename></link>
                    variable, <filename>STAMPCLEAN</filename> can contain
                    wildcards to match the range of files a clean operation
                    should remove.
                    BitBake uses a clean operation to remove any other stamps
                    it should be removing when creating a new stamp.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SUMMARY'><glossterm>SUMMARY</glossterm>
            <glossdef>
                <para>
                    A short summary for the recipe, which is 72 characters or less.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-SVNDIR'><glossterm>SVNDIR</glossterm>
            <glossdef>
                <para>
                    The directory in which files checked out of a Subversion
                    system are stored.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

    <glossdiv id='var-glossary-t'><title>T</title>

        <glossentry id='var-T'><glossterm>T</glossterm>
            <glossdef>
                <para>Points to a directory were BitBake places
                    temporary files, which consist mostly of task logs and
                    scripts, when building a particular recipe.
                </para>
            </glossdef>
        </glossentry>

        <glossentry id='var-TOPDIR'><glossterm>TOPDIR</glossterm>
            <glossdef>
                <para>
                    Points to the build directory.
                    BitBake automatically sets this variable.
                </para>
            </glossdef>
        </glossentry>

    </glossdiv>

<!--
    <glossdiv id='var-glossary-u'><title>U</title>
    </glossdiv>

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

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

    <glossdiv id='var-glossary-x'><title>X</title>
    </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
-->
