<!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; ] >

<chapter id='ref-classes'>
<title>Classes</title>

<para>
    Class files are used to abstract common functionality and share it amongst
    multiple recipe (<filename>.bb</filename>) files.
    To use a class file, you simply make sure the recipe inherits the class.
    In most cases, when a recipe inherits a class it is enough to enable its
    features.
    There are cases, however, where in the recipe you might need to set
    variables or override some default behavior.
</para>

<para>
    Any <link linkend='metadata'>Metadata</link> usually
    found in a recipe can also be placed in a class file.
    Class files are identified by the extension <filename>.bbclass</filename>
    and are usually placed in a <filename>classes/</filename> directory beneath
    the <filename>meta*/</filename> directory found in the
    <link linkend='source-directory'>Source Directory</link>.
    Class files can also be pointed to by
    <link linkend='var-BUILDDIR'><filename>BUILDDIR</filename></link>
    (e.g. <filename>build/</filename>) in the same way as
    <filename>.conf</filename> files in the <filename>conf</filename> directory.
    Class files are searched for in
    <link linkend='var-BBPATH'><filename>BBPATH</filename></link>
    using the same method by which <filename>.conf</filename> files are
    searched.
</para>

<para>
    This chapter discusses only the most useful and important classes.
    Other classes do exist within the <filename>meta/classes</filename>
    directory in the Source Directory.
    You can reference the <filename>.bbclass</filename> files directly
    for more information.
</para>

<section id='ref-classes-allarch'>
    <title><filename>allarch.bbclass</filename></title>

    <para>
        The <filename>allarch</filename> class is inherited
        by recipes that do not produce architecture-specific output.
        The class disables functionality that is normally needed for recipes
        that produce executable binaries (such as building the cross-compiler
        and a C library as pre-requisites, and splitting out of debug symbols
        during packaging).
        <note>
            <para>Unlike some distro recipes (e.g. Debian), OpenEmbedded recipes
            that produce packages that depend on tunings through use of the
            <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
            and
            <link linkend='var-TUNE_PKGARCH'><filename>TUNE_PKGARCH</filename></link>
            variables, should never be configured for all architectures
            using <filename>allarch</filename>.
            This is the case even if the recipes do not produce
            architecture-specific output.</para>
            <para>Configuring such recipes for all architectures causes the
            <link linkend='ref-tasks-package_write_deb'><filename>do_package_write_*</filename></link>
            tasks to have different signatures for the machines with different
            tunings.
            Additionally, unnecessary rebuilds occur every time an
            image for a different <filename>MACHINE</filename> is built
            even when the recipe never changes.</para>
        </note>
    </para>

    <para>
        By default, all recipes inherit the
        <link linkend='ref-classes-base'><filename>base</filename></link> and
        <link linkend='ref-classes-package'><filename>package</filename></link>
        classes, which enable functionality
        needed for recipes that produce executable output.
        If your recipe, for example, only produces packages that contain
        configuration files, media files, or scripts (e.g. Python and Perl),
        then it should inherit the <filename>allarch</filename> class.
    </para>
</section>

<section id='ref-classes-archiver'>
    <title><filename>archiver.bbclass</filename></title>

    <para>
        The <filename>archiver</filename> class supports releasing
        source code and other materials with the binaries.
    </para>

    <para>
        For more details on the source archiver, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
        section in the Yocto Project Development Tasks Manual.
        You can also see the
        <link linkend='var-ARCHIVER_MODE'><filename>ARCHIVER_MODE</filename></link>
        variable for information about the variable flags (varflags)
        that help control archive creation.
    </para>
</section>

<section id='ref-classes-autotools'>
    <title><filename>autotools*.bbclass</filename></title>

    <para>
        The <filename>autotools*</filename> classes support Autotooled
        packages.
    </para>

    <para>
        The <filename>autoconf</filename>, <filename>automake</filename>,
        and <filename>libtool</filename> packages bring standardization.
        This class defines a set of tasks (e.g.
        <filename>configure</filename>, <filename>compile</filename> and
        so forth) that
        work for all Autotooled packages.
        It should usually be enough to define a few standard variables
        and then simply <filename>inherit autotools</filename>.
        These classes can also work with software that emulates Autotools.
        For more information, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-autotooled-package'>Autotooled Package</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>

    <para>
        By default, the <filename>autotools*</filename> classes
        use out-of-tree builds (i.e.
        <filename>autotools.bbclass</filename> building with
        <filename>B != S</filename>).
    </para>

    <para>
        If the software being built by a recipe does not support
        using out-of-tree builds, you should have the recipe inherit the
        <filename>autotools-brokensep</filename> class.
        The <filename>autotools-brokensep</filename> class behaves the same
        as the <filename>autotools</filename> class but builds with
        <link linkend='var-B'><filename>B</filename></link> ==
        <link linkend='var-S'><filename>S</filename></link>.
        This method is useful when out-of-tree build support is either not
        present or is broken.
        <note>
            It is recommended that out-of-tree support be fixed and used
            if at all possible.
        </note>
    </para>

    <para>
        It's useful to have some idea of how the tasks defined by
        the <filename>autotools*</filename> classes work and what they do
        behind the scenes.
        <itemizedlist>
            <listitem><para><link linkend='ref-tasks-configure'><filename>do_configure</filename></link> -
                Regenerates the
                configure script (using <filename>autoreconf</filename>) and
                then launches it with a standard set of arguments used during
                cross-compilation.
                You can pass additional parameters to
                <filename>configure</filename> through the
                <filename><link linkend='var-EXTRA_OECONF'>EXTRA_OECONF</link></filename>
                or
                <link linkend='var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></link>
                variables.
                </para></listitem>
            <listitem><para><link linkend='ref-tasks-compile'><filename>do_compile</filename></link> -
                Runs <filename>make</filename> with arguments that specify the
                compiler and linker.
                You can pass additional arguments through
                the <filename><link linkend='var-EXTRA_OEMAKE'>EXTRA_OEMAKE</link></filename>
                variable.
                </para></listitem>
            <listitem><para><link linkend='ref-tasks-install'><filename>do_install</filename></link> -
                Runs <filename>make install</filename> and passes in
                <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>
                as <filename>DESTDIR</filename>.
                </para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='ref-classes-base'>
    <title><filename>base.bbclass</filename></title>

    <para>
        The <filename>base</filename> class is special in that every
        <filename>.bb</filename> file implicitly inherits the class.
        This class contains definitions for standard basic
        tasks such as fetching, unpacking, configuring (empty by default),
        compiling (runs any <filename>Makefile</filename> present), installing
        (empty by default) and packaging (empty by default).
        These classes are often overridden or extended by other classes
        such as the
        <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
        class or the
        <link linkend='ref-classes-package'><filename>package</filename></link>
        class.
    </para>

    <para>
        The class also contains some commonly used functions such as
        <filename>oe_runmake</filename>, which runs
        <filename>make</filename> with the arguments specified in
        <link linkend='var-EXTRA_OEMAKE'><filename>EXTRA_OEMAKE</filename></link>
        variable as well as the arguments passed directly to
        <filename>oe_runmake</filename>.
    </para>
</section>

<section id='ref-classes-bash-completion'>
    <title><filename>bash-completion.bbclass</filename></title>

    <para>
        Sets up packaging and dependencies appropriate for recipes that
        build software that includes bash-completion data.
    </para>
</section>

<section id='ref-classes-bin-package'>
    <title><filename>bin_package.bbclass</filename></title>

    <para>
        The <filename>bin_package</filename> class is a
        helper class for recipes that extract the contents of a binary package
        (e.g. an RPM) and install those contents rather than building the
        binary from source.
        The binary package is extracted and new packages in the configured
        output package format are created.
        Extraction and installation of proprietary binaries is a good example
        use for this class.
        <note>
            For RPMs and other packages that do not contain a subdirectory,
            you should specify an appropriate fetcher parameter to point to
            the subdirectory.
            For example, if BitBake is using the Git fetcher
            (<filename>git://</filename>), the "subpath" parameter limits
            the checkout to a specific subpath of the tree.
            Here is an example where <filename>${BP}</filename> is used so that
            the files are extracted into the subdirectory expected by the
            default value of
            <link linkend='var-S'><filename>S</filename></link>:
            <literallayout class='monospaced'>
     SRC_URI = "git://example.com/downloads/somepackage.rpm;subpath=${BP}"
            </literallayout>
            See the
            "<ulink url='&YOCTO_DOCS_BB_URL;#bb-fetchers'>Fetchers</ulink>"
            section in the BitBake User Manual for more information on
            supported BitBake Fetchers.
        </note>
    </para>
</section>

<section id='ref-classes-binconfig'>
    <title><filename>binconfig.bbclass</filename></title>

    <para>
        The <filename>binconfig</filename> class helps to correct paths in
        shell scripts.
    </para>

    <para>
        Before <filename>pkg-config</filename> had become widespread, libraries
        shipped shell scripts to give information about the libraries and
        include paths needed to build software (usually named
        <filename>LIBNAME-config</filename>).
        This class assists any recipe using such scripts.
    </para>

    <para>
        During staging, the OpenEmbedded build system installs such scripts
        into the <filename>sysroots/</filename> directory.
        Inheriting this class results in all paths in these scripts being
        changed to point into the <filename>sysroots/</filename> directory so
        that all builds that use the script use the correct directories
        for the cross compiling layout.
        See the
        <link linkend='var-BINCONFIG_GLOB'><filename>BINCONFIG_GLOB</filename></link>
        variable for more information.
    </para>
</section>

<section id='ref-classes-binconfig-disabled'>
    <title><filename>binconfig-disabled.bbclass</filename></title>

    <para>
        An alternative version of the
        <link linkend='ref-classes-binconfig'><filename>binconfig</filename></link>
        class, which disables binary configuration scripts by making them
        return an error in favor of using <filename>pkg-config</filename>
        to query the information.
        The scripts to be disabled should be specified using the
        <link linkend='var-BINCONFIG'><filename>BINCONFIG</filename></link>
        variable within the recipe inheriting the class.
    </para>
</section>

<section id='ref-classes-blacklist'>
    <title><filename>blacklist.bbclass</filename></title>

    <para>
        The <filename>blacklist</filename> class prevents
        the OpenEmbedded build system from building specific recipes
        (blacklists them).
        To use this class, inherit the class globally and set
        <link linkend='var-PNBLACKLIST'><filename>PNBLACKLIST</filename></link>
        for each recipe you wish to blacklist.
        Specify the <link linkend='var-PN'><filename>PN</filename></link>
        value as a variable flag (varflag) and provide a reason, which is
        reported, if the package is requested to be built as the value.
        For example, if you want to blacklist a recipe called "exoticware",
        you add the following to your <filename>local.conf</filename>
        or distribution configuration:
        <literallayout class='monospaced'>
     INHERIT += "blacklist"
     PNBLACKLIST[exoticware] = "Not supported by our organization."
        </literallayout>
    </para>
</section>

<section id='ref-classes-buildhistory'>
    <title><filename>buildhistory.bbclass</filename></title>

    <para>
        The <filename>buildhistory</filename> class records a
        history of build output metadata, which can be used to detect possible
        regressions as well as used for analysis of the build output.
        For more information on using Build History, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-build-output-quality'>Maintaining Build Output Quality</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='ref-classes-buildstats'>
    <title><filename>buildstats.bbclass</filename></title>

    <para>
        The <filename>buildstats</filename> class records
        performance statistics about each task executed during the build
        (e.g. elapsed time, CPU usage, and I/O usage).
    </para>

    <para>
        When you use this class, the output goes into the
        <link linkend='var-BUILDSTATS_BASE'><filename>BUILDSTATS_BASE</filename></link>
        directory, which defaults to <filename>${TMPDIR}/buildstats/</filename>.
        You can analyze the elapsed time using
        <filename>scripts/pybootchartgui/pybootchartgui.py</filename>, which
        produces a cascading chart of the entire build process and can be
        useful for highlighting bottlenecks.
    </para>

    <para>
        Collecting build statistics is enabled by default through the
        <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
        variable from your <filename>local.conf</filename> file.
        Consequently, you do not have to do anything to enable the class.
        However, if you want to disable the class, simply remove "buildstats"
        from the <filename>USER_CLASSES</filename> list.
    </para>
</section>

<section id='ref-classes-buildstats-summary'>
    <title><filename>buildstats-summary.bbclass</filename></title>

    <para>
        When inherited globally, prints statistics at the end of the build
        on sstate re-use.
        In order to function, this class requires the
        <link linkend='ref-classes-buildstats'><filename>buildstats</filename></link>
        class be enabled.
    </para>
</section>

<section id='ref-classes-ccache'>
    <title><filename>ccache.bbclass</filename></title>

    <para>
        The <filename>ccache</filename> class enables the C/C++ Compiler Cache
        for the build.
        This class is used to give a minor performance boost during the build.
        However, using the class can lead to unexpected side-effects.
        Thus, it is recommended that you do not use this class.
        See <ulink url='http://ccache.samba.org/'></ulink> for information on
        the C/C++ Compiler Cache.
    </para>
</section>

<section id='ref-classes-chrpath'>
    <title><filename>chrpath.bbclass</filename></title>

    <para>
        The <filename>chrpath</filename> class
        is a wrapper around the "chrpath" utility, which is used during the
        build process for <filename>nativesdk</filename>,
        <filename>cross</filename>, and
        <filename>cross-canadian</filename> recipes to change
        <filename>RPATH</filename> records within binaries in order to make
        them relocatable.
    </para>
</section>

<section id='ref-classes-clutter'>
    <title><filename>clutter.bbclass</filename></title>

    <para>
        The <filename>clutter</filename> class consolidates the
        major and minor version naming and other common items used by Clutter
        and related recipes.
        <note>
            Unlike some other classes related to specific libraries, recipes
            building other software that uses Clutter do not need to
            inherit this class unless they use the same recipe versioning
            scheme that the Clutter and related recipes do.
        </note>
    </para>
</section>

<section id='ref-classes-cmake'>
    <title><filename>cmake.bbclass</filename></title>

    <para>
        The <filename>cmake</filename> class allows for recipes that need to
        build software using the
        <ulink url='https://cmake.org/overview/'>CMake</ulink> build system.
        You can use the
        <link linkend='var-EXTRA_OECMAKE'><filename>EXTRA_OECMAKE</filename></link>
        variable to specify additional configuration options to be passed
        using the <filename>cmake</filename> command line.
    </para>

    <para>
        On the occasion that you would be installing custom CMake toolchain
        files supplied by the application being built, you should install them
        to the preferred CMake Module directory:
        <filename>${D}${datadir}/cmake/</filename> Modules during
        <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-install'><filename>do_install</filename></ulink>.
    </para>
</section>

<section id='ref-classes-cml1'>
    <title><filename>cml1.bbclass</filename></title>

    <para>
        The <filename>cml1</filename> class provides basic support for the
        Linux kernel style build configuration system.
    </para>
</section>

<section id='ref-classes-compress_doc'>
    <title><filename>compress_doc.bbclass</filename></title>

    <para>
        Enables compression for man pages and info pages.
        This class is intended to be inherited globally.
        The default compression mechanism is gz (gzip) but you can
        select an alternative mechanism by setting the
        <link linkend='var-DOC_COMPRESS'><filename>DOC_COMPRESS</filename></link>
        variable.
    </para>
</section>

<section id='ref-classes-copyleft_compliance'>
    <title><filename>copyleft_compliance.bbclass</filename></title>

    <para>
        The <filename>copyleft_compliance</filename> class
        preserves source code for the purposes of license compliance.
        This class is an alternative to the <filename>archiver</filename>
        class and is still used by some users even though it has been
        deprecated in favor of the
        <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
        class.
    </para>
</section>

<section id='ref-classes-copyleft_filter'>
    <title><filename>copyleft_filter.bbclass</filename></title>

    <para>
        A class used by the
        <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
        and
        <link linkend='ref-classes-copyleft_compliance'><filename>copyleft_compliance</filename></link>
        classes for filtering licenses.
        The <filename>copyleft_filter</filename> class is an internal class
        and is not intended to be used directly.
    </para>
</section>

<section id='ref-classes-core-image'>
    <title><filename>core-image.bbclass</filename></title>

    <para>
        The <filename>core-image</filename> class
        provides common definitions for the
        <filename>core-image-*</filename> image recipes, such as support for
        additional
        <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
    </para>
</section>

<section id='ref-classes-cpan'>
    <title><filename>cpan*.bbclass</filename></title>

    <para>
        The <filename>cpan*</filename> classes support Perl modules.
    </para>

    <para>
        Recipes for Perl modules are simple.
        These recipes usually only need to point to the source's archive and
        then inherit the proper class file.
        Building is split into two methods depending on which method the module
        authors used.
        <itemizedlist>
            <listitem><para>Modules that use old
                <filename>Makefile.PL</filename>-based build system require
                <filename>cpan.bbclass</filename> in their recipes.
                </para></listitem>
            <listitem><para>Modules that use
                <filename>Build.PL</filename>-based build system require
                using <filename>cpan_build.bbclass</filename> in their recipes.
                </para></listitem>
        </itemizedlist>
        Both build methods inherit the <filename>cpan-base</filename> class
        for basic Perl support.
    </para>
</section>

<section id='ref-classes-cross'>
    <title><filename>cross.bbclass</filename></title>

    <para>
        The <filename>cross</filename> class provides support for the recipes
        that build the cross-compilation tools.
    </para>
</section>

<section id='ref-classes-cross-canadian'>
    <title><filename>cross-canadian.bbclass</filename></title>

    <para>
        The <filename>cross-canadian</filename> class
        provides support for the recipes that build the Canadian
        Cross-compilation tools for SDKs.
        See the
        "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
        section in the Yocto Project Overview and Concepts Manual for more
        discussion on these cross-compilation tools.
    </para>
</section>

<section id='ref-classes-crosssdk'>
    <title><filename>crosssdk.bbclass</filename></title>

    <para>
        The <filename>crosssdk</filename> class
        provides support for the recipes that build the cross-compilation
        tools used for building SDKs.
        See the
        "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
        section in the Yocto Project Overview and Concepts Manual for more
        discussion on these cross-compilation tools.
    </para>
</section>

<section id='ref-classes-debian'>
    <title><filename>debian.bbclass</filename></title>

    <para>
        The <filename>debian</filename> class renames output packages so that
        they follow the Debian naming policy (i.e. <filename>glibc</filename>
        becomes <filename>libc6</filename> and <filename>glibc-devel</filename>
        becomes <filename>libc6-dev</filename>.)
        Renaming includes the library name and version as part of the package
        name.
    </para>

    <para>
        If a recipe creates packages for multiple libraries
        (shared object files of <filename>.so</filename> type), use the
        <link linkend='var-LEAD_SONAME'><filename>LEAD_SONAME</filename></link>
        variable in the recipe to specify the library on which to apply the
        naming scheme.
    </para>
</section>

<section id='ref-classes-deploy'>
    <title><filename>deploy.bbclass</filename></title>

    <para>
        The <filename>deploy</filename> class handles deploying files
        to the
        <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
        directory.
        The main function of this class is to allow the deploy step to be
        accelerated by shared state.
        Recipes that inherit this class should define their own
        <link linkend='ref-tasks-deploy'><filename>do_deploy</filename></link>
        function to copy the files to be deployed to
        <link linkend='var-DEPLOYDIR'><filename>DEPLOYDIR</filename></link>,
        and use <filename>addtask</filename> to add the task at the appropriate
        place, which is usually after
        <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
        or
        <link linkend='ref-tasks-install'><filename>do_install</filename></link>.
        The class then takes care of staging the files from
        <filename>DEPLOYDIR</filename> to
        <filename>DEPLOY_DIR_IMAGE</filename>.
    </para>
</section>

<section id='ref-classes-devshell'>
    <title><filename>devshell.bbclass</filename></title>

    <para>
        The <filename>devshell</filename> class adds the
        <filename>do_devshell</filename> task.
        Distribution policy dictates whether to include this class.
        See the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>" section
        in the Yocto Project Development Tasks Manual for more information about
        using <filename>devshell</filename>.
    </para>
</section>

<section id='ref-classes-devupstream'>
    <title><filename>devupstream.bbclass</filename></title>

    <para>
        The <filename>devupstream</filename> class uses
        <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link>
        to add a variant of the recipe that fetches from an alternative URI
        (e.g. Git) instead of a tarball.
        Following is an example:
        <literallayout class='monospaced'>
     BBCLASSEXTEND = "devupstream:target"
     SRC_URI_class-devupstream = "git://git.example.com/example"
     SRCREV_class-devupstream = "abcd1234"
        </literallayout>
        Adding the above statements to your recipe creates a variant that has
        <link linkend='var-DEFAULT_PREFERENCE'><filename>DEFAULT_PREFERENCE</filename></link>
        set to "-1".
        Consequently, you need to select the variant of the recipe to use it.
        Any development-specific adjustments can be done by using the
        <filename>class-devupstream</filename> override.
        Here is an example:
        <literallayout class='monospaced'>
     DEPENDS_append_class-devupstream = " gperf-native"

     do_configure_prepend_class-devupstream() {
        touch ${S}/README
     }
        </literallayout>
        The class currently only supports creating a development variant of
        the target recipe, not <filename>native</filename> or
        <filename>nativesdk</filename> variants.
    </para>

    <para>
        The <filename>BBCLASSEXTEND</filename> syntax
        (i.e. <filename>devupstream:target</filename>) provides support for
        <filename>native</filename> and <filename>nativesdk</filename>
        variants.
        Consequently, this functionality can be added in a future release.
    </para>

    <para>
        Support for other version control systems such as Subversion is
        limited due to BitBake's automatic fetch dependencies (e.g.
        <filename>subversion-native</filename>).
    </para>
</section>

<section id='ref-classes-distro_features_check'>
    <title><filename>distro_features_check.bbclass</filename></title>

    <para>
        The <filename>distro_features_check</filename> class
        allows individual recipes to check for required and conflicting
        <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
    </para>

    <para>
        This class provides support for the
        <link linkend='var-REQUIRED_DISTRO_FEATURES'><filename>REQUIRED_DISTRO_FEATURES</filename></link>
        and
        <link linkend='var-CONFLICT_DISTRO_FEATURES'><filename>CONFLICT_DISTRO_FEATURES</filename></link>
        variables.
        If any conditions specified in the recipe using the above variables are
        not met, the recipe will be skipped.
    </para>
</section>

<section id='ref-classes-distutils'>
    <title><filename>distutils*.bbclass</filename></title>

    <para>
        The <filename>distutils*</filename> classes support recipes for Python
        version 2.x extensions, which are simple.
        These recipes usually only need to point to the source's archive and
        then inherit the proper class.
        Building is split into two methods depending on which method the
        module authors used.
        <itemizedlist>
            <listitem><para>Extensions that use an Autotools-based build system
                require Autotools and the classes based on
                <filename>distutils</filename> in their recipes.
                </para></listitem>
            <listitem><para>Extensions that use build systems based on
                <filename>distutils</filename> require
                the <filename>distutils</filename> class in their recipes.
                </para></listitem>
            <listitem><para>Extensions that use build systems based on
                <filename>setuptools</filename> require the
                <link linkend='ref-classes-setuptools'><filename>setuptools</filename></link>
                class in their recipes.
                </para></listitem>
        </itemizedlist>
        The <filename>distutils-common-base</filename> class is required by
        some of the <filename>distutils*</filename> classes to provide common
        Python2 support.
    </para>
</section>

<section id='ref-classes-distutils3'>
    <title><filename>distutils3*.bbclass</filename></title>

    <para>
        The <filename>distutils3*</filename> classes support recipes for Python
        version 3.x extensions, which are simple.
        These recipes usually only need to point to the source's archive and
        then inherit the proper class.
        Building is split into three methods depending on which method the
        module authors used.
        <itemizedlist>
            <listitem><para>Extensions that use an Autotools-based build system
                require Autotools and
                <filename>distutils</filename>-based classes in their recipes.
                </para></listitem>
            <listitem><para>Extensions that use
                <filename>distutils</filename>-based build systems require
                the <filename>distutils</filename> class in their recipes.
                </para></listitem>
            <listitem><para>Extensions that use build systems based on
                <filename>setuptools3</filename> require the
                <link linkend='ref-classes-setuptools'><filename>setuptools3</filename></link>
                class in their recipes.
                </para></listitem>
        </itemizedlist>
        The <filename>distutils3*</filename> classes either inherit their
        corresponding <filename>distutils*</filename> class or replicate them
        using a Python3 version instead (e.g.
        <filename>distutils3-base</filename> inherits
        <filename>distutils-common-base</filename>, which is the same as
        <filename>distutils-base</filename> but inherits
        <filename>python3native</filename> instead of
        <filename>pythonnative</filename>).
    </para>
</section>

<section id='ref-classes-externalsrc'>
    <title><filename>externalsrc.bbclass</filename></title>

    <para>
        The <filename>externalsrc</filename> class supports building software
        from source code that is external to the OpenEmbedded build system.
        Building software from an external source tree means that the build
        system's normal fetch, unpack, and patch process is not used.
    </para>

    <para>
        By default, the OpenEmbedded build system uses the
        <link linkend='var-S'><filename>S</filename></link> and
        <link linkend='var-B'><filename>B</filename></link> variables to
        locate unpacked recipe source code and to build it, respectively.
        When your recipe inherits the <filename>externalsrc</filename> class,
        you use the
        <link linkend='var-EXTERNALSRC'><filename>EXTERNALSRC</filename></link>
        and
        <link linkend='var-EXTERNALSRC_BUILD'><filename>EXTERNALSRC_BUILD</filename></link>
        variables to ultimately define <filename>S</filename> and
        <filename>B</filename>.
    </para>

    <para>
        By default, this class expects the source code to support recipe builds
        that use the <link linkend='var-B'><filename>B</filename></link>
        variable to point to the directory in which the OpenEmbedded build
        system places the generated objects built from the recipes.
        By default, the <filename>B</filename> directory is set to the
        following, which is separate from the source directory
        (<filename>S</filename>):
        <literallayout class='monospaced'>
     ${WORKDIR}/${BPN}/{PV}/
        </literallayout>
        See these variables for more information:
        <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>,
        <link linkend='var-BPN'><filename>BPN</filename></link>, and
        <link linkend='var-PV'><filename>PV</filename></link>,
    </para>

    <para>
        For more information on the
        <filename>externalsrc</filename> class, see the comments in
        <filename>meta/classes/externalsrc.bbclass</filename> in the
        <link linkend='source-directory'>Source Directory</link>.
        For information on how to use the <filename>externalsrc</filename>
        class, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#building-software-from-an-external-source'>Building Software from an External Source</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='ref-classes-extrausers'>
    <title><filename>extrausers.bbclass</filename></title>

    <para>
        The <filename>extrausers</filename> class allows
        additional user and group configuration to be applied at the image
        level.
        Inheriting this class either globally or from an image recipe allows
        additional user and group operations to be performed using the
        <link linkend='var-EXTRA_USERS_PARAMS'><filename>EXTRA_USERS_PARAMS</filename></link>
        variable.
        <note>
            The user and group operations added using the
            <filename>extrausers</filename> class are not tied to a specific
            recipe outside of the recipe for the image.
            Thus, the operations can be performed across the image as a whole.
            Use the
            <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
            class to add user and group configuration to a specific recipe.
        </note>
        Here is an example that uses this class in an image recipe:
        <literallayout class='monospaced'>
     inherit extrausers
     EXTRA_USERS_PARAMS = "\
         useradd -p '' tester; \
         groupadd developers; \
         userdel nobody; \
         groupdel -g video; \
         groupmod -g 1020 developers; \
         usermod -s /bin/sh tester; \
         "
        </literallayout>
        Here is an example that adds two users named "tester-jim" and
        "tester-sue" and assigns passwords:
        <literallayout class='monospaced'>
     inherit extrausers
     EXTRA_USERS_PARAMS = "\
         useradd -P tester01 tester-jim; \
         useradd -P tester01 tester-sue; \
         "
        </literallayout>
        Finally, here is an example that sets the root password to
        "1876*18":
        <literallayout class='monospaced'>
     inherit extrausers
     EXTRA_USERS_PARAMS = "\
         usermod -P 1876*18 root; \
         "
        </literallayout>
    </para>
</section>

<section id='ref-classes-fontcache'>
    <title><filename>fontcache.bbclass</filename></title>

    <para>
        The <filename>fontcache</filename> class generates the
        proper post-install and post-remove (postinst and postrm)
        scriptlets for font packages.
        These scriptlets call <filename>fc-cache</filename> (part of
        <filename>Fontconfig</filename>) to add the fonts to the font
        information cache.
        Since the cache files are architecture-specific,
        <filename>fc-cache</filename> runs using QEMU if the postinst
        scriptlets need to be run on the build host during image creation.
    </para>

    <para>
        If the fonts being installed are in packages other than the main
        package, set
        <link linkend='var-FONT_PACKAGES'><filename>FONT_PACKAGES</filename></link>
        to specify the packages containing the fonts.
    </para>
</section>

<section id='ref-classes-fs-uuid'>
    <title><filename>fs-uuid.bbclass</filename></title>

    <para>
        The <filename>fs-uuid</filename> class extracts UUID from
        <filename>${</filename><link linkend='var-ROOTFS'><filename>ROOTFS</filename></link><filename>}</filename>,
        which must have been built by the time that this function gets called.
        The <filename>fs-uuid</filename> class only works on
        <filename>ext</filename> file systems and depends on
        <filename>tune2fs</filename>.
    </para>
</section>

<section id='ref-classes-gconf'>
    <title><filename>gconf.bbclass</filename></title>

    <para>
        The <filename>gconf</filename> class provides common
        functionality for recipes that need to install GConf schemas.
        The schemas will be put into a separate package
        (<filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-gconf</filename>)
        that is created automatically when this class is inherited.
        This package uses the appropriate post-install and post-remove
        (postinst/postrm) scriptlets to register and unregister the schemas
        in the target image.
    </para>
</section>

<section id='ref-classes-gettext'>
    <title><filename>gettext.bbclass</filename></title>

    <para>
        The <filename>gettext</filename> class provides support for
        building software that uses the GNU <filename>gettext</filename>
        internationalization and localization system.
        All recipes building software that use
        <filename>gettext</filename> should inherit this class.
    </para>
</section>

<section id='ref-classes-gnomebase'>
    <title><filename>gnomebase.bbclass</filename></title>

    <para>
        The <filename>gnomebase</filename> class is the base
        class for recipes that build software from the GNOME stack.
        This class sets
        <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link> to
        download the source from the GNOME mirrors as well as extending
        <link linkend='var-FILES'><filename>FILES</filename></link>
        with the typical GNOME installation paths.
    </para>
</section>

<section id='ref-classes-gobject-introspection'>
    <title><filename>gobject-introspection.bbclass</filename></title>

    <para>
        Provides support for recipes building software that
        supports GObject introspection.
        This functionality is only enabled if the
        "gobject-introspection-data" feature is in
        <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
        as well as "qemu-usermode" being in
        <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>.
        <note>
            This functionality is backfilled by default and,
            if not applicable, should be disabled through
            <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
            or
            <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>,
            respectively.
        </note>
    </para>
</section>

<section id='ref-classes-grub-efi'>
    <title><filename>grub-efi.bbclass</filename></title>

    <para>
        The <filename>grub-efi</filename>
        class provides <filename>grub-efi</filename>-specific functions for
        building bootable images.
    </para>

    <para>
        This class supports several variables:
        <itemizedlist>
            <listitem><para>
                <link linkend='var-INITRD'><filename>INITRD</filename></link>:
                Indicates list of filesystem images to concatenate and use
                as an initial RAM disk (initrd) (optional).
                </para></listitem>
            <listitem><para>
                <link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:
                Indicates a filesystem image to include as the root filesystem
                (optional).</para></listitem>
            <listitem><para>
                <link linkend='var-GRUB_GFXSERIAL'><filename>GRUB_GFXSERIAL</filename></link>:
                Set this to "1" to have graphics and serial in the boot menu.
                </para></listitem>
            <listitem><para>
                <link linkend='var-LABELS'><filename>LABELS</filename></link>:
                A list of targets for the automatic configuration.
                </para></listitem>
            <listitem><para>
                <link linkend='var-APPEND'><filename>APPEND</filename></link>:
                An override list of append strings for each
                <filename>LABEL</filename>.
                </para></listitem>
            <listitem><para>
                <link linkend='var-GRUB_OPTS'><filename>GRUB_OPTS</filename></link>:
                Additional options to add to the configuration (optional).
                Options are delimited using semi-colon characters
                (<filename>;</filename>).</para></listitem>
            <listitem><para>
                <link linkend='var-GRUB_TIMEOUT'><filename>GRUB_TIMEOUT</filename></link>:
                Timeout before executing the default <filename>LABEL</filename>
                (optional).
                </para></listitem>
       </itemizedlist>
   </para>
</section>

<section id='ref-classes-gsettings'>
    <title><filename>gsettings.bbclass</filename></title>

    <para>
        The <filename>gsettings</filename> class
        provides common functionality for recipes that need to install
        GSettings (glib) schemas.
        The schemas are assumed to be part of the main package.
        Appropriate post-install and post-remove (postinst/postrm)
        scriptlets are added to register and unregister the schemas in the
        target image.
    </para>
</section>

<section id='ref-classes-gtk-doc'>
    <title><filename>gtk-doc.bbclass</filename></title>

    <para>
        The <filename>gtk-doc</filename> class
        is a helper class to pull in the appropriate
        <filename>gtk-doc</filename> dependencies and disable
        <filename>gtk-doc</filename>.
    </para>
</section>

<section id='ref-classes-gtk-icon-cache'>
    <title><filename>gtk-icon-cache.bbclass</filename></title>

    <para>
        The <filename>gtk-icon-cache</filename> class
        generates the proper post-install and post-remove (postinst/postrm)
        scriptlets for packages that use GTK+ and install icons.
        These scriptlets call <filename>gtk-update-icon-cache</filename> to add
        the fonts to GTK+'s icon cache.
        Since the cache files are architecture-specific,
        <filename>gtk-update-icon-cache</filename> is run using QEMU if the
        postinst scriptlets need to be run on the build host during image
        creation.
    </para>
</section>

<section id='ref-classes-gtk-immodules-cache'>
    <title><filename>gtk-immodules-cache.bbclass</filename></title>

    <para>
        The <filename>gtk-immodules-cache</filename> class
        generates the proper post-install and post-remove (postinst/postrm)
        scriptlets for packages that install GTK+ input method modules for
        virtual keyboards.
        These scriptlets call <filename>gtk-update-icon-cache</filename> to add
        the input method modules to the cache.
        Since the cache files are architecture-specific,
        <filename>gtk-update-icon-cache</filename> is run using QEMU if the
        postinst scriptlets need to be run on the build host during image
        creation.
    </para>

    <para>
        If the input method modules being installed are in packages other than
        the main package, set
        <link linkend='var-GTKIMMODULES_PACKAGES'><filename>GTKIMMODULES_PACKAGES</filename></link>
        to specify the packages containing the modules.
    </para>
</section>

<section id='ref-classes-gzipnative'>
    <title><filename>gzipnative.bbclass</filename></title>

    <para>
        The <filename>gzipnative</filename> class enables the use of
        different native versions of <filename>gzip</filename>
        and <filename>pigz</filename> rather than the versions of these tools
        from the build host.
    </para>
</section>

<section id='ref-classes-icecc'>
    <title><filename>icecc.bbclass</filename></title>

    <para>
        The <filename>icecc</filename> class supports
        <ulink url='https://github.com/icecc/icecream'>Icecream</ulink>, which
        facilitates taking compile jobs and distributing them among remote
        machines.
    </para>

    <para>
        The class stages directories with symlinks from <filename>gcc</filename>
        and <filename>g++</filename> to <filename>icecc</filename>, for both
        native and cross compilers.
        Depending on each configure or compile, the OpenEmbedded build system
        adds the directories at the head of the <filename>PATH</filename> list
        and then sets the <filename>ICECC_CXX</filename> and
        <filename>ICEC_CC</filename> variables, which are the paths to the
        <filename>g++</filename> and <filename>gcc</filename> compilers,
        respectively.
    </para>

    <para>
        For the cross compiler, the class creates a <filename>tar.gz</filename>
        file that contains the Yocto Project toolchain and sets
        <filename>ICECC_VERSION</filename>, which is the version of the
        cross-compiler used in the cross-development toolchain, accordingly.
    </para>

    <para>
        The class handles all three different compile stages
        (i.e native ,cross-kernel and target) and creates the necessary
        environment <filename>tar.gz</filename> file to be used by the remote
        machines.
        The class also supports SDK generation.
    </para>

    <para>
        If <link linkend='var-ICECC_PATH'><filename>ICECC_PATH</filename></link>
        is not set in your <filename>local.conf</filename> file, then the
        class tries to locate the <filename>icecc</filename> binary
        using <filename>which</filename>.

        If
        <link linkend='var-ICECC_ENV_EXEC'><filename>ICECC_ENV_EXEC</filename></link>
        is set in your <filename>local.conf</filename> file, the variable should
        point to the <filename>icecc-create-env</filename> script
        provided by the user.
        If you do not point to a user-provided script, the build system
        uses the default script provided by the recipe
        <filename>icecc-create-env-native.bb</filename>.
        <note>
            This script is a modified version and not the one that comes with
            <filename>icecc</filename>.
        </note>
    </para>

    <para>
        If you do not want the Icecream distributed compile support to apply
        to specific recipes or classes, you can effectively "blacklist" them
        by listing the recipes and classes using the
        <link linkend='var-ICECC_USER_PACKAGE_BL'><filename>ICECC_USER_PACKAGE_BL</filename></link>
        and
        <link linkend='var-ICECC_USER_CLASS_BL'><filename>ICECC_USER_CLASS_BL</filename></link>,
        variables, respectively, in your <filename>local.conf</filename> file.
        Doing so causes the OpenEmbedded build system to handle these
        compilations locally.
    </para>

    <para>
        Additionally, you can list recipes using the
        <link linkend='var-ICECC_USER_PACKAGE_WL'><filename>ICECC_USER_PACKAGE_WL</filename></link>
        variable in your <filename>local.conf</filename> file to force
        <filename>icecc</filename> to be enabled for recipes using an empty
        <link linkend='var-PARALLEL_MAKE'><filename>PARALLEL_MAKE</filename></link>
        variable.
    </para>

    <para>
        Inheriting the <filename>icecc</filename> class changes all sstate
        signatures.
        Consequently, if a development team has a dedicated build system
        that populates
        <link linkend='var-SSTATE_MIRRORS'><filename>STATE_MIRRORS</filename></link>
        and they want to reuse sstate from
        <filename>STATE_MIRRORS</filename>, then all developers and the
        build system need to either inherit the <filename>icecc</filename>
        class or nobody should.
    </para>

    <para>
        At the distribution level, you can inherit the
        <filename>icecc</filename> class to be sure that all builders start
        with the same sstate signatures.
        After inheriting the class, you can then disable the feature by setting
        the
        <link linkend='var-ICECC_DISABLED'><filename>ICECC_DISABLED</filename></link>
        variable to "1" as follows:
        <literallayout class='monospaced'>
     INHERIT_DISTRO_append = " icecc"
     ICECC_DISABLED ??= "1"
        </literallayout>
        This practice makes sure everyone is using the same signatures but also
        requires individuals that do want to use Icecream to enable the feature
        individually as follows in your <filename>local.conf</filename> file:
        <literallayout class='monospaced'>
     ICECC_DISABLED = ""
        </literallayout>
    </para>
</section>

<section id='ref-classes-image'>
    <title><filename>image.bbclass</filename></title>

    <para>
        The <filename>image</filename> class helps support creating images
        in different formats.
        First, the root filesystem is created from packages using
        one of the <filename>rootfs*.bbclass</filename>
        files (depending on the package format used) and then one or more image
        files are created.
        <itemizedlist>
            <listitem><para>The
                <filename><link linkend='var-IMAGE_FSTYPES'>IMAGE_FSTYPES</link></filename>
                variable controls the types of images to generate.
                </para></listitem>
            <listitem><para>The
                <filename><link linkend='var-IMAGE_INSTALL'>IMAGE_INSTALL</link></filename>
                variable controls the list of packages to install into the
                image.</para></listitem>
        </itemizedlist>
        For information on customizing images, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage'>Customizing Images</ulink>"
        section in the Yocto Project Development Tasks Manual.
        For information on how images are created, see the
        "<ulink url='&YOCTO_DOCS_OM_URL;#images-dev-environment'>Images</ulink>"
        section in the Yocto Project Overview and Concpets Manual.
    </para>
</section>

<section id='ref-classes-image-buildinfo'>
    <title><filename>image-buildinfo.bbclass</filename></title>

    <para>
        The <filename>image-buildinfo</filename> class writes information
        to the target filesystem on <filename>/etc/build</filename>.
    </para>
</section>

<section id='ref-classes-image_types'>
    <title><filename>image_types.bbclass</filename></title>

    <para>
        The <filename>image_types</filename> class defines all of the
        standard image output types that you can enable through the
        <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
        variable.
        You can use this class as a reference on how to add support for
        custom image output types.
    </para>

    <para>
        By default, the
        <link linkend='ref-classes-image'><filename>image</filename></link>
        class automatically enables the <filename>image_types</filename> class.
        The <filename>image</filename> class uses the
        <filename>IMGCLASSES</filename> variable as follows:
        <literallayout class='monospaced'>
     IMGCLASSES = "rootfs_${IMAGE_PKGTYPE} image_types ${IMAGE_CLASSES}"
     IMGCLASSES += "${@['populate_sdk_base', 'populate_sdk_ext']['linux' in d.getVar("SDK_OS")]}"
     IMGCLASSES += "${@bb.utils.contains_any('IMAGE_FSTYPES', 'live iso hddimg', 'image-live', '', d)}"
     IMGCLASSES += "${@bb.utils.contains('IMAGE_FSTYPES', 'container', 'image-container', '', d)}"
     IMGCLASSES += "image_types_wic"
     IMGCLASSES += "rootfs-postcommands"
     IMGCLASSES += "image-postinst-intercepts"
     inherit ${IMGCLASSES}
        </literallayout>
    </para>

    <para>
        The <filename>image_types</filename> class also handles conversion and
        compression of images.
        <note>
            To build a VMware VMDK image, you need to add "wic.vmdk" to
            <filename>IMAGE_FSTYPES</filename>.
            This would also be similar for Virtual Box Virtual Disk Image
            ("vdi") and QEMU Copy On Write Version 2 ("qcow2") images.
        </note>
    </para>
</section>

<section id='ref-classes-image-live'>
    <title><filename>image-live.bbclass</filename></title>

    <para>
        This class controls building "live" (i.e. HDDIMG and ISO) images.
        Live images contain syslinux for legacy booting, as well as the
        bootloader specified by
        <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
        if
        <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
        contains "efi".
    </para>

    <para>
        Normally, you do not use this class directly.
        Instead, you add "live" to
        <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>.
    </para>
</section>

<section id='ref-classes-image-mklibs'>
    <title><filename>image-mklibs.bbclass</filename></title>

    <para>
        The <filename>image-mklibs</filename> class
        enables the use of the <filename>mklibs</filename> utility during the
        <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
        task, which optimizes the size of
        libraries contained in the image.
    </para>

    <para>
        By default, the class is enabled in the
        <filename>local.conf.template</filename> using the
        <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
        variable as follows:
        <literallayout class='monospaced'>
     USER_CLASSES ?= "buildstats image-mklibs image-prelink"
        </literallayout>
    </para>
</section>

<section id='ref-classes-image-prelink'>
    <title><filename>image-prelink.bbclass</filename></title>

    <para>
        The <filename>image-prelink</filename> class
        enables the use of the <filename>prelink</filename> utility during
        the
        <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
        task, which optimizes the dynamic
        linking of shared libraries to reduce executable startup time.
    </para>

    <para>
        By default, the class is enabled in the
        <filename>local.conf.template</filename> using the
        <link linkend='var-USER_CLASSES'><filename>USER_CLASSES</filename></link>
        variable as follows:
        <literallayout class='monospaced'>
     USER_CLASSES ?= "buildstats image-mklibs image-prelink"
        </literallayout>
    </para>
</section>

<section id='ref-classes-insane'>
    <title><filename>insane.bbclass</filename></title>

    <para>
        The <filename>insane</filename> class adds a step to the package
        generation process so that output quality assurance checks are
        generated by the OpenEmbedded build system.
        A range of checks are performed that check the build's output
        for common problems that show up during runtime.
        Distribution policy usually dictates whether to include this class.
    </para>

    <para>
        You can configure the sanity checks so that specific test failures
        either raise a warning or an error message.
        Typically, failures for new tests generate a warning.
        Subsequent failures for the same test would then generate an error
        message once the metadata is in a known and good condition.
        See the
        "<link linkend='ref-qa-checks'>QA Error and Warning Messages</link>"
        Chapter for a list of all the warning and error messages
        you might encounter using a default configuration.
    </para>

    <para>
        Use the
        <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link> and
        <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
        variables to control the behavior of
        these checks at the global level (i.e. in your custom distro
        configuration).
        However, to skip one or more checks in recipes, you should use
        <link linkend='var-INSANE_SKIP'><filename>INSANE_SKIP</filename></link>.
        For example, to skip the check for symbolic link
        <filename>.so</filename> files in the main package of a recipe,
        add the following to the recipe.
        You need to realize that the package name override, in this example
        <filename>${PN}</filename>, must be used:
        <literallayout class='monospaced'>
     INSANE_SKIP_${PN} += "dev-so"
        </literallayout>
        Please keep in mind that the QA checks exist in order to detect real
        or potential problems in the packaged output.
        So exercise caution when disabling these checks.
    </para>

    <para>
        The following list shows the tests you can list with the
        <filename>WARN_QA</filename> and <filename>ERROR_QA</filename>
        variables:
        <itemizedlist>
            <listitem><para><emphasis><filename>already-stripped:</filename></emphasis>
                Checks that produced binaries have not already been
                stripped prior to the build system extracting debug symbols.
                It is common for upstream software projects to default to
                stripping debug symbols for output binaries.
                In order for debugging to work on the target using
                <filename>-dbg</filename> packages, this stripping must be
                disabled.
                </para></listitem>
            <listitem><para><emphasis><filename>arch:</filename></emphasis>
                Checks the Executable and Linkable Format (ELF) type, bit size,
                and endianness of any binaries to ensure they match the target
                architecture.
                This test fails if any binaries do not match the type since
                there would be an incompatibility.
                The test could indicate that the
                wrong compiler or compiler options have been used.
                Sometimes software, like bootloaders, might need to bypass
                this check.
                </para></listitem>
            <listitem><para><emphasis><filename>buildpaths:</filename></emphasis>
                Checks for paths to locations on the build host inside the
                output files.
                Currently, this test triggers too many false positives and
                thus is not normally enabled.
                </para></listitem>
            <listitem><para><emphasis><filename>build-deps:</filename></emphasis>
                Determines if a build-time dependency that is specified through
                <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>,
                explicit
                <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
                or task-level dependencies exists to match any runtime
                dependency.
                This determination is particularly useful to discover where
                runtime dependencies are detected and added during packaging.
                If no explicit dependency has been specified within the
                metadata, at the packaging stage it is too late to ensure that
                the dependency is built, and thus you can end up with an
                error when the package is installed into the image during the
                <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
                task because the auto-detected dependency was not satisfied.
                An example of this would be where the
                <link linkend='ref-classes-update-rc.d'><filename>update-rc.d</filename></link>
                class automatically adds a dependency on the
                <filename>initscripts-functions</filename> package to packages
                that install an initscript that refers to
                <filename>/etc/init.d/functions</filename>.
                The recipe should really have an explicit
                <filename>RDEPENDS</filename> for the package in question on
                <filename>initscripts-functions</filename> so that the
                OpenEmbedded build system is able to ensure that the
                <filename>initscripts</filename> recipe is actually built and
                thus the <filename>initscripts-functions</filename> package is
                made available.
                </para></listitem>
            <listitem><para><emphasis><filename>compile-host-path:</filename></emphasis>
                Checks the
                <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
                log for indications
                that paths to locations on the build host were used.
                Using such paths might result in host contamination of the
                build output.
                </para></listitem>
            <listitem><para><emphasis><filename>debug-deps:</filename></emphasis>
                Checks that all packages except <filename>-dbg</filename>
                packages do not depend on <filename>-dbg</filename>
                packages, which would cause a packaging bug.
                </para></listitem>
            <listitem><para><emphasis><filename>debug-files:</filename></emphasis>
                Checks for <filename>.debug</filename> directories in anything but the
                <filename>-dbg</filename> package.
                The debug files should all be in the <filename>-dbg</filename> package.
                Thus, anything packaged elsewhere is incorrect packaging.</para></listitem>
            <listitem><para><emphasis><filename>dep-cmp:</filename></emphasis>
                Checks for invalid version comparison statements in runtime
                dependency relationships between packages (i.e. in
                <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
                <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
                <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
                <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
                <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
                and
                <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>
                variable values).
                Any invalid comparisons might trigger failures or undesirable
                behavior when passed to the package manager.
                </para></listitem>
            <listitem><para><emphasis><filename>desktop:</filename></emphasis>
                Runs the <filename>desktop-file-validate</filename> program
                against any <filename>.desktop</filename> files to validate
                their contents against the specification for
                <filename>.desktop</filename> files.</para></listitem>
            <listitem><para><emphasis><filename>dev-deps:</filename></emphasis>
                Checks that all packages except <filename>-dev</filename>
                or <filename>-staticdev</filename> packages do not depend on
                <filename>-dev</filename> packages, which would be a
                packaging bug.</para></listitem>
            <listitem><para><emphasis><filename>dev-so:</filename></emphasis>
                Checks that the <filename>.so</filename> symbolic links are in the
                <filename>-dev</filename> package and not in any of the other packages.
                In general, these symlinks are only useful for development purposes.
                Thus, the <filename>-dev</filename> package is the correct location for
                them.
                Some very rare cases do exist for dynamically loaded modules where
                these symlinks are needed instead in the main package.
                </para></listitem>
            <listitem><para><emphasis><filename>file-rdeps:</filename></emphasis>
                Checks that file-level dependencies identified by the
                OpenEmbedded build system at packaging time are satisfied.
                For example, a shell script might start with the line
                <filename>#!/bin/bash</filename>.
                This line would translate to a file dependency on
                <filename>/bin/bash</filename>.
                Of the three package managers that the OpenEmbedded build
                system supports, only RPM directly handles file-level
                dependencies, resolving them automatically to packages
                providing the files.
                However, the lack of that functionality in the other two
                package managers does not mean the dependencies do not still
                need resolving.
                This QA check attempts to ensure that explicitly declared
                <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                exist to handle any file-level dependency detected in
                packaged files.
                </para></listitem>
            <listitem><para><emphasis><filename>files-invalid:</filename></emphasis>
                Checks for
                <link linkend='var-FILES'><filename>FILES</filename></link>
                variable values that contain "//", which is invalid.
                </para></listitem>
            <listitem><para id='insane-host-user-contaminated'>
                <emphasis><filename>host-user-contaminated:</filename></emphasis>
                Checks that no package produced by the recipe contains any
                files outside of <filename>/home</filename> with a user or
                group ID that matches the user running BitBake.
                A match usually indicates that the files are being installed
                with an incorrect UID/GID, since target IDs are independent
                from host IDs.
                For additional information, see the section describing the
                <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                task.
                </para></listitem>
            <listitem><para><emphasis><filename>incompatible-license:</filename></emphasis>
                Report when packages are excluded from being created due to
                being marked with a license that is in
                <link linkend='var-INCOMPATIBLE_LICENSE'><filename>INCOMPATIBLE_LICENSE</filename></link>.
                </para></listitem>
            <listitem><para><emphasis><filename>install-host-path:</filename></emphasis>
                Checks the
                <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                log for indications
                that paths to locations on the build host were used.
                Using such paths might result in host contamination of the
                build output.
                </para></listitem>
            <listitem><para><emphasis><filename>installed-vs-shipped:</filename></emphasis>
                Reports when files have been installed within
                <filename>do_install</filename> but have not been included in
                any package by way of the
                <link linkend='var-FILES'><filename>FILES</filename></link>
                variable.
                Files that do not appear in any package cannot be present in
                an image later on in the build process.
                Ideally, all installed files should be packaged or not
                installed at all.
                These files can be deleted at the end of
                <filename>do_install</filename> if the files are not
                needed in any package.
                </para></listitem>
            <listitem><para><emphasis><filename>invalid-chars:</filename></emphasis>
                Checks that the recipe metadata variables
                <link linkend='var-DESCRIPTION'><filename>DESCRIPTION</filename></link>,
                <link linkend='var-SUMMARY'><filename>SUMMARY</filename></link>,
                <link linkend='var-LICENSE'><filename>LICENSE</filename></link>,
                and
                <link linkend='var-SECTION'><filename>SECTION</filename></link>
                do not contain non-UTF-8 characters.
                Some package managers do not support such characters.
                </para></listitem>
            <listitem><para><emphasis><filename>invalid-packageconfig:</filename></emphasis>
                Checks that no undefined features are being added to
                <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>.
                For example, any name "foo" for which the following form
                does not exist:
                <literallayout class='monospaced'>
     PACKAGECONFIG[foo] = "..."
                </literallayout>
                </para></listitem>
            <listitem><para><emphasis><filename>la:</filename></emphasis>
                Checks <filename>.la</filename> files for any <filename>TMPDIR</filename>
                paths.
                Any <filename>.la</filename> file containing these paths is incorrect since
                <filename>libtool</filename> adds the correct sysroot prefix when using the
                files automatically itself.</para></listitem>
            <listitem><para><emphasis><filename>ldflags:</filename></emphasis>
                Ensures that the binaries were linked with the
                <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>
                options provided by the build system.
                If this test fails, check that the <filename>LDFLAGS</filename> variable
                is being passed to the linker command.</para></listitem>
            <listitem><para><emphasis><filename>libdir:</filename></emphasis>
                Checks for libraries being installed into incorrect
                (possibly hardcoded) installation paths.
                For example, this test will catch recipes that install
                <filename>/lib/bar.so</filename> when
                <filename>${base_libdir}</filename> is "lib32".
                Another example is when recipes install
                <filename>/usr/lib64/foo.so</filename> when
                <filename>${libdir}</filename> is "/usr/lib".
                </para></listitem>
            <listitem><para><emphasis><filename>libexec:</filename></emphasis>
                Checks if a package contains files in
                <filename>/usr/libexec</filename>.
                This check is not performed if the
                <filename>libexecdir</filename> variable has been set
                explicitly to <filename>/usr/libexec</filename>.
                </para></listitem>
            <listitem><para><emphasis><filename>packages-list:</filename></emphasis>
                Checks for the same package being listed multiple times through
                the <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                variable value.
                Installing the package in this manner can cause errors during
                packaging.
                </para></listitem>
            <listitem><para><emphasis><filename>perm-config:</filename></emphasis>
                Reports lines in <filename>fs-perms.txt</filename> that have
                an invalid format.
                </para></listitem>
            <listitem><para><emphasis><filename>perm-line:</filename></emphasis>
                Reports lines in <filename>fs-perms.txt</filename> that have
                an invalid format.
                </para></listitem>
            <listitem><para><emphasis><filename>perm-link:</filename></emphasis>
                Reports lines in <filename>fs-perms.txt</filename> that
                specify 'link' where the specified target already exists.
                </para></listitem>
            <listitem><para><emphasis><filename>perms:</filename></emphasis>
                Currently, this check is unused but reserved.
                </para></listitem>
            <listitem><para><emphasis><filename>pkgconfig:</filename></emphasis>
                Checks <filename>.pc</filename> files for any
                <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>/<link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>
                paths.
                Any <filename>.pc</filename> file containing these paths is incorrect
                since <filename>pkg-config</filename> itself adds the correct sysroot prefix
                when the files are accessed.</para></listitem>
            <listitem><para><emphasis><filename>pkgname:</filename></emphasis>
                Checks that all packages in
                <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
                have names that do not contain invalid characters (i.e.
                characters other than 0-9, a-z, ., +, and -).
                </para></listitem>
            <listitem><para><emphasis><filename>pkgv-undefined:</filename></emphasis>
                Checks to see if the <filename>PKGV</filename> variable
                is undefined during
                <link linkend='ref-tasks-package'><filename>do_package</filename></link>.
                </para></listitem>
            <listitem><para><emphasis><filename>pkgvarcheck:</filename></emphasis>
                Checks through the variables
                <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>,
                <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
                <link linkend='var-RSUGGESTS'><filename>RSUGGESTS</filename></link>,
                <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</filename></link>,
                <link linkend='var-RPROVIDES'><filename>RPROVIDES</filename></link>,
                <link linkend='var-RREPLACES'><filename>RREPLACES</filename></link>,
                <link linkend='var-FILES'><filename>FILES</filename></link>,
                <link linkend='var-ALLOW_EMPTY'><filename>ALLOW_EMPTY</filename></link>,
                <filename>pkg_preinst</filename>,
                <filename>pkg_postinst</filename>,
                <filename>pkg_prerm</filename>
                and <filename>pkg_postrm</filename>, and reports if there are
                variable sets that are not package-specific.
                Using these variables without a package suffix is bad practice,
                and might unnecessarily complicate dependencies of other packages
                within the same recipe or have other unintended consequences.
                </para></listitem>
            <listitem><para><emphasis><filename>pn-overrides:</filename></emphasis>
                Checks that a recipe does not have a name
                (<link linkend='var-PN'><filename>PN</filename></link>) value
                that appears in
                <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>.
                If a recipe is named such that its <filename>PN</filename>
                value matches something already in
                <filename>OVERRIDES</filename> (e.g. <filename>PN</filename>
                happens to be the same as
                <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                or
                <link linkend='var-DISTRO'><filename>DISTRO</filename></link>),
                it can have unexpected consequences.
                For example, assignments such as
                <filename>FILES_${PN} = "xyz"</filename> effectively turn into
                <filename>FILES = "xyz"</filename>.
                </para></listitem>
           <listitem><para><emphasis><filename>rpaths:</filename></emphasis>
                Checks for rpaths in the binaries that contain build system paths such
                as <filename>TMPDIR</filename>.
                If this test fails, bad <filename>-rpath</filename> options are being
                passed to the linker commands and your binaries have potential security
                issues.</para></listitem>
            <listitem><para><emphasis><filename>split-strip:</filename></emphasis>
                Reports that splitting or stripping debug symbols from binaries
                has failed.
                </para></listitem>
            <listitem><para><emphasis><filename>staticdev:</filename></emphasis>
                Checks for static library files (<filename>*.a</filename>) in
                non-<filename>staticdev</filename> packages.
                </para></listitem>
            <listitem><para><emphasis><filename>symlink-to-sysroot:</filename></emphasis>
                Checks for symlinks in packages that point into
                <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                on the host.
                Such symlinks will work on the host, but are clearly invalid
                when running on the target.
                </para></listitem>
            <listitem><para><emphasis><filename>textrel:</filename></emphasis>
                Checks for ELF binaries that contain relocations in their
                <filename>.text</filename> sections, which can result in a
                performance impact at runtime.
                See the explanation for the
                <link linkend='qa-issue-textrel'><filename>ELF binary</filename></link>
                message for more information regarding runtime performance issues.
                </para></listitem>
<!--
This check was removed for YP 2.3 release

            <listitem><para><emphasis><filename>unsafe-references-in-binaries:</filename></emphasis>
                Reports when a binary installed in
                <filename>${base_libdir}</filename>,
                <filename>${base_bindir}</filename>, or
                <filename>${base_sbindir}</filename>, depends on another
                binary installed under <filename>${exec_prefix}</filename>.
                This dependency is a concern if you want the system to remain
                basically operable if <filename>/usr</filename> is mounted
                separately and is not mounted.
                <note>
                    Defaults for binaries installed in
                    <filename>${base_libdir}</filename>,
                    <filename>${base_bindir}</filename>, and
                    <filename>${base_sbindir}</filename> are
                    <filename>/lib</filename>, <filename>/bin</filename>, and
                    <filename>/sbin</filename>, respectively.
                    The default for a binary installed
                    under <filename>${exec_prefix}</filename> is
                    <filename>/usr</filename>.
                </note>
                </para></listitem>
-->
            <listitem><para><emphasis><filename>unlisted-pkg-lics:</filename></emphasis>
                Checks that all declared licenses applying for a package are also
                declared on the recipe level (i.e. any license in
                <filename>LICENSE_*</filename> should appear in
                <link linkend='var-LICENSE'><filename>LICENSE</filename></link>).
                </para></listitem>
            <listitem><para><emphasis><filename>useless-rpaths:</filename></emphasis>
                Checks for dynamic library load paths (rpaths) in the binaries that
                by default on a standard system are searched by the linker (e.g.
                <filename>/lib</filename> and <filename>/usr/lib</filename>).
                While these paths will not cause any breakage, they do waste space and
                are unnecessary.</para></listitem>
            <listitem><para><emphasis><filename>var-undefined:</filename></emphasis>
                Reports when variables fundamental to packaging (i.e.
                <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>,
                <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>,
                <link linkend='var-D'><filename>D</filename></link>,
                <link linkend='var-PN'><filename>PN</filename></link>, and
                <link linkend='var-PKGD'><filename>PKGD</filename></link>) are
                undefined during
                <link linkend='ref-tasks-package'><filename>do_package</filename></link>.
                </para></listitem>
            <listitem><para><emphasis><filename>version-going-backwards:</filename></emphasis>
                If Build History is enabled, reports when a package
                being written out has a lower version than the previously
                written package under the same name.
                If you are placing output packages into a feed and
                upgrading packages on a target system using that feed, the
                version of a package going backwards can result in the target
                system not correctly upgrading to the "new" version of the
                package.
                <note>
                    If you are not using runtime package management on your
                    target system, then you do not need to worry about
                    this situation.
                </note>
                </para></listitem>
            <listitem><para><emphasis><filename>xorg-driver-abi:</filename></emphasis>
                Checks that all packages containing Xorg drivers have ABI
                dependencies.
                The <filename>xserver-xorg</filename> recipe provides driver
                ABI names.
                All drivers should depend on the ABI versions that they have
                been built against.
                Driver recipes that include
                <filename>xorg-driver-input.inc</filename>
                or <filename>xorg-driver-video.inc</filename> will
                automatically get these versions.
                Consequently, you should only need to explicitly add
                dependencies to binary driver recipes.
                </para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='ref-classes-insserv'>
    <title><filename>insserv.bbclass</filename></title>

    <para>
        The <filename>insserv</filename> class
        uses the <filename>insserv</filename> utility to update the order of
        symbolic links in <filename>/etc/rc?.d/</filename> within an image
        based on dependencies specified by LSB headers in the
        <filename>init.d</filename> scripts themselves.
    </para>
</section>

<section id='ref-classes-kernel'>
    <title><filename>kernel.bbclass</filename></title>

    <para>
        The <filename>kernel</filename> class handles building Linux kernels.
        The class contains code to build all kernel trees.
        All needed headers are staged into the
        <filename><link linkend='var-STAGING_KERNEL_DIR'>STAGING_KERNEL_DIR</link></filename>
        directory to allow out-of-tree module builds using
        the
        <link linkend='ref-classes-module'><filename>module</filename></link>
        class.
    </para>

    <para>
        This means that each built kernel module is packaged separately and
        inter-module dependencies are created by parsing the
        <filename>modinfo</filename> output.
        If all modules are required, then installing the
        <filename>kernel-modules</filename> package installs all packages with
        modules and various other kernel packages such as
        <filename>kernel-vmlinux</filename>.
    </para>

    <para>
        The <filename>kernel</filename> class contains logic that allows
        you to embed an initial RAM filesystem (initramfs) image when
        you build the kernel image.
        For information on how to build an initramfs, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>

    <para>
        Various other classes are used by the <filename>kernel</filename>
        and <filename>module</filename> classes internally including the
        <link linkend='ref-classes-kernel-arch'><filename>kernel-arch</filename></link>,
        <link linkend='ref-classes-module-base'><filename>module-base</filename></link>,
        and
        <link linkend='ref-classes-linux-kernel-base'><filename>linux-kernel-base</filename></link>
        classes.
    </para>
</section>

<section id='ref-classes-kernel-arch'>
    <title><filename>kernel-arch.bbclass</filename></title>

    <para>
        The <filename>kernel-arch</filename> class
        sets the <filename>ARCH</filename> environment variable for Linux
        kernel compilation (including modules).
    </para>
</section>

<section id='ref-classes-kernel-devicetree'>
    <title><filename>kernel-devicetree.bbclass</filename></title>

    <para>
        The <filename>kernel-devicetree</filename> class, which is inherited by
        the
        <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
        class, supports device tree generation.
    </para>
</section>

<section id='ref-classes-kernel-fitimage'>
    <title><filename>kernel-fitimage.bbclass</filename></title>

    <para>
        The <filename>kernel-fitimage</filename> class provides support to
        pack zImages.
    </para>
</section>

<section id='ref-classes-kernel-grub'>
    <title><filename>kernel-grub.bbclass</filename></title>

    <para>
        The <filename>kernel-grub</filename> class updates the boot area and
        the boot menu with the kernel as the priority boot mechanism while
        installing a RPM to update the kernel on a deployed target.
    </para>
</section>

<section id='ref-classes-kernel-module-split'>
    <title><filename>kernel-module-split.bbclass</filename></title>

    <para>
        The <filename>kernel-module-split</filename> class
        provides common functionality for splitting Linux kernel modules into
        separate packages.
    </para>
</section>

<section id='ref-classes-kernel-uboot'>
    <title><filename>kernel-uboot.bbclass</filename></title>

    <para>
        The <filename>kernel-uboot</filename> class provides support for
        building from vmlinux-style kernel sources.
    </para>
</section>

<section id='ref-classes-kernel-uimage'>
    <title><filename>kernel-uimage.bbclass</filename></title>

    <para>
        The <filename>kernel-uimage</filename> class provides support to
        pack uImage.
    </para>
</section>

<section id='ref-classes-kernel-yocto'>
    <title><filename>kernel-yocto.bbclass</filename></title>

    <para>
        The <filename>kernel-yocto</filename> class
        provides common functionality for building from linux-yocto style
        kernel source repositories.
    </para>
</section>

<section id='ref-classes-kernelsrc'>
    <title><filename>kernelsrc.bbclass</filename></title>

    <para>
        The <filename>kernelsrc</filename> class sets the Linux kernel
        source and version.
    </para>
</section>

<section id='ref-classes-lib_package'>
    <title><filename>lib_package.bbclass</filename></title>

    <para>
        The <filename>lib_package</filename> class
        supports recipes that build libraries and produce executable
        binaries, where those binaries should not be installed by default
        along with the library.
        Instead, the binaries are added to a separate
        <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}-bin</filename>
        package to make their installation optional.
    </para>
</section>

<section id='ref-classes-libc*'>
    <title><filename>libc*.bbclass</filename></title>

    <para>
        The <filename>libc*</filename> classes support recipes that build
        packages with <filename>libc</filename>:
        <itemizedlist>
            <listitem><para>The <filename>libc-common</filename> class
                provides common support for building with
                <filename>libc</filename>.
                </para></listitem>
            <listitem><para>The <filename>libc-package</filename> class
                supports packaging up <filename>glibc</filename> and
                <filename>eglibc</filename>.
                </para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='ref-classes-license'>
    <title><filename>license.bbclass</filename></title>

    <para>
        The <filename>license</filename> class provides license
        manifest creation and license exclusion.
        This class is enabled by default using the default value for the
        <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
        variable.
    </para>
</section>

<section id='ref-classes-linux-kernel-base'>
    <title><filename>linux-kernel-base.bbclass</filename></title>

    <para>
        The <filename>linux-kernel-base</filename> class
        provides common functionality for recipes that build out of the Linux
        kernel source tree.
        These builds goes beyond the kernel itself.
        For example, the Perf recipe also inherits this class.
    </para>
</section>

<section id='ref-classes-linuxloader'>
    <title><filename>linuxloader.bbclass</filename></title>

    <para>
        Provides the function <filename>linuxloader()</filename>, which gives
        the value of the dynamic loader/linker provided on the platform.
        This value is used by a number of other classes.
    </para>
</section>

<section id='ref-classes-logging'>
    <title><filename>logging.bbclass</filename></title>

    <para>
        The <filename>logging</filename> class provides the standard
        shell functions used to log messages for various BitBake severity levels
        (i.e. <filename>bbplain</filename>, <filename>bbnote</filename>,
        <filename>bbwarn</filename>, <filename>bberror</filename>,
        <filename>bbfatal</filename>, and <filename>bbdebug</filename>).
    </para>

    <para>
        This class is enabled by default since it is inherited by
        the <filename>base</filename> class.
    </para>
</section>

<section id='ref-classes-meta'>
    <title><filename>meta.bbclass</filename></title>

    <para>
        The <filename>meta</filename> class is inherited by recipes
        that do not build any output packages themselves, but act as a "meta"
        target for building other recipes.
    </para>
</section>

<section id='ref-classes-metadata_scm'>
    <title><filename>metadata_scm.bbclass</filename></title>

    <para>
        The <filename>metadata_scm</filename> class provides functionality for
        querying the branch and revision of a Source Code Manager (SCM)
        repository.
    </para>

    <para>
        The <link linkend='ref-classes-base'><filename>base</filename></link>
        class uses this class to print the revisions of each layer before
        starting every build.
        The <filename>metadata_scm</filename> class is enabled by default
        because it is inherited by the <filename>base</filename> class.
    </para>
</section>

<section id='ref-classes-migrate_localcount'>
    <title><filename>migrate_localcount.bbclass</filename></title>

    <para>
        The <filename>migrate_localcount</filename> class verifies a recipe's
        localcount data and increments it appropriately.
    </para>
</section>

<section id='ref-classes-mime'>
    <title><filename>mime.bbclass</filename></title>

    <para>
        The <filename>mime</filename> class generates the proper
        post-install and post-remove (postinst/postrm) scriptlets for packages
        that install MIME type files.
        These scriptlets call <filename>update-mime-database</filename> to add
        the MIME types to the shared database.
    </para>
</section>

<section id='ref-classes-mirrors'>
    <title><filename>mirrors.bbclass</filename></title>

    <para>
        The <filename>mirrors</filename> class sets up some standard
        <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link> entries
        for source code mirrors.
        These mirrors provide a fall-back path in case the upstream source
        specified in
        <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
        within recipes is unavailable.
    </para>

    <para>
        This class is enabled by default since it is inherited by the
        <link linkend='ref-classes-base'><filename>base</filename></link> class.
    </para>
</section>

<section id='ref-classes-module'>
    <title><filename>module.bbclass</filename></title>

    <para>
        The <filename>module</filename> class provides support for building
        out-of-tree Linux kernel modules.
        The class inherits the
        <link linkend='ref-classes-module-base'><filename>module-base</filename></link>
        and
        <link linkend='ref-classes-kernel-module-split'><filename>kernel-module-split</filename></link>
        classes, and implements the
        <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>
        and
        <link linkend='ref-tasks-install'><filename>do_install</filename></link>
        tasks.
        The class provides everything needed to build and package a kernel
        module.
    </para>

    <para>
        For general information on out-of-tree Linux kernel modules, see the
        "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</ulink>"
        section in the Yocto Project Linux Kernel Development Manual.
    </para>
</section>

<section id='ref-classes-module-base'>
    <title><filename>module-base.bbclass</filename></title>

    <para>
        The <filename>module-base</filename> class provides the base
        functionality for building Linux kernel modules.
        Typically, a recipe that builds software that includes one or
        more kernel modules and has its own means of building
        the module inherits this class as opposed to inheriting the
        <link linkend='ref-classes-module'><filename>module</filename></link>
        class.
    </para>
</section>

<section id='ref-classes-multilib*'>
    <title><filename>multilib*.bbclass</filename></title>

    <para>
        The <filename>multilib*</filename> classes provide support
        for building libraries with different target optimizations or target
        architectures and installing them side-by-side in the same image.
    </para>

    <para>
        For more information on using the Multilib feature, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#combining-multiple-versions-library-files-into-one-image'>Combining Multiple Versions of Library Files into One Image</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='ref-classes-native'>
    <title><filename>native.bbclass</filename></title>

    <para>
        The <filename>native</filename> class provides common
        functionality for recipes that build tools to run on the
        <link linkend='hardware-build-system-term'>build host</link>
        (i.e. tools that use the compiler or other tools from the
        build host).
    </para>

    <para>
        You can create a recipe that builds tools that run natively on the
        host a couple different ways:
        <itemizedlist>
            <listitem><para>
                Create a
                <replaceable>myrecipe</replaceable><filename>-native.bb</filename>
                recipe that inherits the <filename>native</filename> class.
                If you use this method, you must order the inherit statement
                in the recipe after all other inherit statements so that the
                <filename>native</filename> class is inherited last.
                <note><title>Warning</title>
                    When creating a recipe this way, the recipe name must
                    follow this naming convention:
                    <literallayout class='monospaced'>
     <replaceable>myrecipe</replaceable>-native.bb
                    </literallayout>
                    Not using this naming convention can lead to subtle
                    problems caused by existing code that depends on that
                    naming convention.
                </note>
                </para></listitem>
            <listitem><para>
                Create or modify a target recipe that contains the following:
                <literallayout class='monospaced'>
     <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link> = "native"
                </literallayout>
                Inside the recipe, use <filename>_class-native</filename> and
                <filename>_class-target</filename> overrides to specify any
                functionality specific to the respective native or target
                case.
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        Although applied differently, the <filename>native</filename> class is
        used with both methods.
        The advantage of the second method is that you do not need to have two
        separate recipes (assuming you need both) for native and target.
        All common parts of the recipe are automatically shared.
    </para>
</section>

<section id='ref-classes-nativesdk'>
    <title><filename>nativesdk.bbclass</filename></title>

    <para>
        The <filename>nativesdk</filename> class provides common
        functionality for recipes that wish to build tools to run as part of
        an SDK (i.e. tools that run on
        <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>).
    </para>

    <para>
        You can create a recipe that builds tools that run on the SDK machine
        a couple different ways:
        <itemizedlist>
            <listitem><para>Create a
                <filename>nativesdk-</filename><replaceable>myrecipe</replaceable><filename>.bb</filename>
                recipe that inherits the <filename>nativesdk</filename> class.
                If you use this method, you must order the inherit statement
                in the recipe after all other inherit statements so that the
                <filename>nativesdk</filename> class is inherited last.
                </para></listitem>
            <listitem><para>Create a <filename>nativesdk</filename> variant
                of any recipe by adding the following:
                <literallayout class='monospaced'>
     <link linkend='var-BBCLASSEXTEND'><filename>BBCLASSEXTEND</filename></link> = "nativesdk"
                </literallayout>
                Inside the recipe, use <filename>_class-nativesdk</filename> and
                <filename>_class-target</filename> overrides to specify any
                functionality specific to the respective SDK machine or target
                case.</para></listitem>
        </itemizedlist>
        <note><title>Warning</title>
            When creating a recipe, you must follow this naming convention:
            <literallayout class='monospaced'>
     nativesdk-<replaceable>myrecipe</replaceable>.bb
            </literallayout>
            Not doing so can lead to subtle problems because code exists
            that depends on the naming convention.
        </note>
    </para>

    <para>
        Although applied differently, the <filename>nativesdk</filename> class
        is used with both methods.
        The advantage of the second method is that you do not need to have two
        separate recipes (assuming you need both) for the SDK machine and the
        target.
        All common parts of the recipe are automatically shared.
    </para>
</section>

<section id='ref-classes-nopackages'>
    <title><filename>nopackages.bbclass</filename></title>

    <para>
        Disables packaging tasks for those recipes and classes where
        packaging is not needed.
    </para>
</section>

<section id='ref-classes-npm'>
    <title><filename>npm.bbclass</filename></title>

    <para>
        Provides support for building Node.js software fetched using the
        <ulink url='https://en.wikipedia.org/wiki/Npm_(software)'>node package manager (NPM)</ulink>.
        <note>
            Currently, recipes inheriting this class must use the
            <filename>npm://</filename> fetcher to have dependencies fetched
            and packaged automatically.
        </note>
        For information on how to create NPM packages, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-node-package-manager-npm-packages'>Creating Node Package Manager (NPM) Packages</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='ref-classes-oelint'>
    <title><filename>oelint.bbclass</filename></title>

    <para>
        The <filename>oelint</filename> class is an
        obsolete lint checking tool that exists in
        <filename>meta/classes</filename> in the
        <link linkend='source-directory'>Source Directory</link>.
    </para>

    <para>
        A number of classes exist that could be generally useful in
        OE-Core but are never actually used within OE-Core itself.
        The <filename>oelint</filename> class is one such example.
        However, being aware of this class can reduce the proliferation of
        different versions of similar classes across multiple layers.
    </para>
</section>

<section id='ref-classes-own-mirrors'>
    <title><filename>own-mirrors.bbclass</filename></title>

    <para>
        The <filename>own-mirrors</filename> class makes it
        easier to set up your own
        <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>
        from which to first fetch source before attempting to fetch it from the
        upstream specified in
        <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
        within each recipe.
    </para>

    <para>
        To use this class, inherit it globally and specify
        <link linkend='var-SOURCE_MIRROR_URL'><filename>SOURCE_MIRROR_URL</filename></link>.
        Here is an example:
        <literallayout class='monospaced'>
     INHERIT += "own-mirrors"
     SOURCE_MIRROR_URL = "http://example.com/my-source-mirror"
        </literallayout>
        You can specify only a single URL in
        <filename>SOURCE_MIRROR_URL</filename>.
    </para>
</section>

<section id='ref-classes-package'>
    <title><filename>package.bbclass</filename></title>

    <para>
        The <filename>package</filename> class supports generating
        packages from a build's output.
        The core generic functionality is in
        <filename>package.bbclass</filename>.
        The code specific to particular package types resides in these
        package-specific classes:
        <link linkend='ref-classes-package_deb'><filename>package_deb</filename></link>,
        <link linkend='ref-classes-package_rpm'><filename>package_rpm</filename></link>,
        <link linkend='ref-classes-package_ipk'><filename>package_ipk</filename></link>,
        and
        <link linkend='ref-classes-package_tar'><filename>package_tar</filename></link>.
        <note><title>Warning</title>
            The <filename>package_tar</filename> class is broken and not
            supported.
            It is recommended that you do not use this class.
        </note>
    </para>

    <para>
        You can control the list of resulting package formats by using the
        <filename><link linkend='var-PACKAGE_CLASSES'>PACKAGE_CLASSES</link></filename>
        variable defined in your <filename>conf/local.conf</filename>
        configuration file, which is located in the
        <link linkend='build-directory'>Build Directory</link>.
        When defining the variable, you can specify one or more package types.
        Since images are generated from packages, a packaging class is
        needed to enable image generation.
        The first class listed in this variable is used for image generation.
    </para>

    <para>
        If you take the optional step to set up a repository (package feed)
        on the development host that can be used by DNF, you can
        install packages from the feed while you are running the image
        on the target (i.e. runtime installation of packages).
        For more information, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#using-runtime-package-management'>Using Runtime Package Management</ulink>"
         section in the Yocto Project Development Tasks Manual.
    </para>

    <para>
        The package-specific class you choose can affect build-time performance
        and has space ramifications.
        In general, building a package with IPK takes about thirty percent less
        time as compared to using RPM to build the same or similar package.
        This comparison takes into account a complete build of the package with
        all dependencies previously built.
        The reason for this discrepancy is because the RPM package manager
        creates and processes more
        <link linkend='metadata'>Metadata</link> than the
        IPK package manager.
        Consequently, you might consider setting
        <filename>PACKAGE_CLASSES</filename> to "package_ipk" if you are
        building smaller systems.
    </para>

    <para>
        Before making your package manager decision, however, you should
        consider some further things about using RPM:
        <itemizedlist>
            <listitem><para>
                RPM starts to provide more abilities than IPK due to
                the fact that it processes more Metadata.
                For example, this information includes individual file types,
                file checksum generation and evaluation on install, sparse file
                support, conflict detection and resolution for Multilib systems,
                ACID style upgrade, and repackaging abilities for rollbacks.
                </para></listitem>
            <listitem><para>
                For smaller systems, the extra space used for the Berkeley
                Database and the amount of metadata when using RPM can affect
                your ability to perform on-device upgrades.
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        You can find additional information on the effects of the package
        class at these two Yocto Project mailing list links:
        <itemizedlist>
            <listitem><para><ulink url='&YOCTO_LISTS_URL;/pipermail/poky/2011-May/006362.html'>
                https://lists.yoctoproject.org/pipermail/poky/2011-May/006362.html</ulink></para></listitem>
            <listitem><para><ulink url='&YOCTO_LISTS_URL;/pipermail/poky/2011-May/006363.html'>
                https://lists.yoctoproject.org/pipermail/poky/2011-May/006363.html</ulink></para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='ref-classes-package_deb'>
    <title><filename>package_deb.bbclass</filename></title>

    <para>
        The <filename>package_deb</filename> class
        provides support for creating packages that use the Debian
        (i.e. <filename>.deb</filename>) file format.
        The class ensures the packages are written out in a
        <filename>.deb</filename> file format to the
        <filename>${</filename><link linkend='var-DEPLOY_DIR_DEB'><filename>DEPLOY_DIR_DEB</filename></link><filename>}</filename>
        directory.
    </para>

    <para>
        This class inherits the
        <link linkend='ref-classes-package'><filename>package</filename></link>
        class and is enabled through the
        <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
        variable in the <filename>local.conf</filename> file.
    </para>
</section>

<section id='ref-classes-package_ipk'>
    <title><filename>package_ipk.bbclass</filename></title>

    <para>
        The <filename>package_ipk</filename> class
        provides support for creating packages that use the IPK
        (i.e. <filename>.ipk</filename>) file format.
        The class ensures the packages are written out in a
        <filename>.ipk</filename> file format to the
        <filename>${</filename><link linkend='var-DEPLOY_DIR_IPK'><filename>DEPLOY_DIR_IPK</filename></link><filename>}</filename>
        directory.
    </para>

    <para>
        This class inherits the
        <link linkend='ref-classes-package'><filename>package</filename></link>
        class and is enabled through the
        <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
        variable in the <filename>local.conf</filename> file.
    </para>
</section>

<section id='ref-classes-package_rpm'>
    <title><filename>package_rpm.bbclass</filename></title>

    <para>
        The <filename>package_rpm</filename> class
        provides support for creating packages that use the RPM
        (i.e. <filename>.rpm</filename>) file format.
        The class ensures the packages are written out in a
        <filename>.rpm</filename> file format to the
        <filename>${</filename><link linkend='var-DEPLOY_DIR_RPM'><filename>DEPLOY_DIR_RPM</filename></link><filename>}</filename>
        directory.
    </para>

    <para>
        This class inherits the
        <link linkend='ref-classes-package'><filename>package</filename></link>
        class and is enabled through the
        <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
        variable in the <filename>local.conf</filename> file.
    </para>
</section>

<section id='ref-classes-package_tar'>
    <title><filename>package_tar.bbclass</filename></title>

    <para>
        The <filename>package_tar</filename> class
        provides support for creating tarballs.
        The class ensures the packages are written out in a
        tarball format to the
        <filename>${</filename><link linkend='var-DEPLOY_DIR_TAR'><filename>DEPLOY_DIR_TAR</filename></link><filename>}</filename>
        directory.
    </para>

    <para>
        This class inherits the
        <link linkend='ref-classes-package'><filename>package</filename></link>
        class and is enabled through the
        <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
        variable in the <filename>local.conf</filename> file.
        <note>
            You cannot specify the <filename>package_tar</filename> class
            first using the <filename>PACKAGE_CLASSES</filename> variable.
            You must use <filename>.deb</filename>,
            <filename>.ipk</filename>, or <filename>.rpm</filename> file
            formats for your image or SDK.
        </note>
    </para>
</section>

<section id='ref-classes-packagedata'>
    <title><filename>packagedata.bbclass</filename></title>

    <para>
        The <filename>packagedata</filename> class provides
        common functionality for reading <filename>pkgdata</filename> files
        found in
        <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>.
        These files contain information about each output package produced by
        the OpenEmbedded build system.
    </para>

    <para>
        This class is enabled by default because it is inherited by the
        <link linkend='ref-classes-package'><filename>package</filename></link>
        class.
    </para>
</section>

<section id='ref-classes-packagegroup'>
    <title><filename>packagegroup.bbclass</filename></title>

    <para>
        The <filename>packagegroup</filename> class sets default values
        appropriate for package group recipes (e.g.
        <filename><link linkend='var-PACKAGES'>PACKAGES</link></filename>,
        <filename><link linkend='var-PACKAGE_ARCH'>PACKAGE_ARCH</link></filename>,
        <filename><link linkend='var-ALLOW_EMPTY'>ALLOW_EMPTY</link></filename>,
        and so forth).
        It is highly recommended that all package group recipes inherit this class.
    </para>

    <para>
        For information on how to use this class, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#usingpoky-extend-customimage-customtasks'>Customizing Images Using Custom Package Groups</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>

    <para>
        Previously, this class was called the <filename>task</filename> class.
    </para>
</section>

<section id='ref-classes-patch'>
    <title><filename>patch.bbclass</filename></title>

    <para>
        The <filename>patch</filename> class provides all functionality for
        applying patches during the
        <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
        task.
    </para>

    <para>
        This class is enabled by default because it is inherited by the
        <link linkend='ref-classes-base'><filename>base</filename></link>
        class.
    </para>
</section>

<section id='ref-classes-perlnative'>
    <title><filename>perlnative.bbclass</filename></title>

    <para>
        When inherited by a recipe, the <filename>perlnative</filename> class
        supports using the native version of Perl built by the build system
        rather than using the version provided by the build host.
    </para>
</section>

<section id='ref-classes-pixbufcache'>
    <title><filename>pixbufcache.bbclass</filename></title>

    <para>
        The <filename>pixbufcache</filename> class generates the proper
        post-install and post-remove (postinst/postrm) scriptlets for packages
        that install pixbuf loaders, which are used with
        <filename>gdk-pixbuf</filename>.
        These scriptlets call <filename>update_pixbuf_cache</filename>
        to add the pixbuf loaders to the cache.
        Since the cache files are architecture-specific,
        <filename>update_pixbuf_cache</filename> is run using QEMU if the
        postinst scriptlets need to be run on the build host during image
        creation.
    </para>

    <para>
        If the pixbuf loaders being installed are in packages other
        than the recipe's main package, set
        <link linkend='var-PIXBUF_PACKAGES'><filename>PIXBUF_PACKAGES</filename></link>
        to specify the packages containing the loaders.
    </para>
</section>

<section id='ref-classes-pkgconfig'>
    <title><filename>pkgconfig.bbclass</filename></title>

    <para>
        The <filename>pkgconfig</filename> class provides a standard way to get
        header and library information by using <filename>pkg-config</filename>.
        This class aims to smooth integration of
        <filename>pkg-config</filename> into libraries that use it.
    </para>

    <para>
        During staging, BitBake installs <filename>pkg-config</filename>
        data into the <filename>sysroots/</filename> directory.
        By making use of sysroot functionality within
        <filename>pkg-config</filename>, the <filename>pkgconfig</filename>
        class no longer has to manipulate the files.
    </para>
</section>

<section id='ref-classes-populate-sdk'>
    <title><filename>populate_sdk.bbclass</filename></title>

    <para>
        The <filename>populate_sdk</filename> class provides support for
        SDK-only recipes.
        For information on advantages gained when building a cross-development
        toolchain using the
        <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
        task, see the
        "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-building-an-sdk-installer'>Building an SDK Installer</ulink>"
        section in the Yocto Project Application Development and the
        Extensible Software Development Kit (eSDK) manual.
    </para>
</section>

<section id='ref-classes-populate-sdk-*'>
    <title><filename>populate_sdk_*.bbclass</filename></title>

    <para>
        The <filename>populate_sdk_*</filename> classes support SDK creation
        and consist of the following classes:
        <itemizedlist>
            <listitem><para><emphasis><filename>populate_sdk_base</filename>:</emphasis>
                The base class supporting SDK creation under all package
                managers (i.e. DEB, RPM, and opkg).</para></listitem>
            <listitem><para><emphasis><filename>populate_sdk_deb</filename>:</emphasis>
                Supports creation of the SDK given the Debian package manager.
                </para></listitem>
            <listitem><para><emphasis><filename>populate_sdk_rpm</filename>:</emphasis>
                Supports creation of the SDK given the RPM package manager.
                </para></listitem>
            <listitem><para><emphasis><filename>populate_sdk_ipk</filename>:</emphasis>
                Supports creation of the SDK given the opkg (IPK format)
                package manager.
                </para></listitem>
            <listitem><para><emphasis><filename>populate_sdk_ext</filename>:</emphasis>
                Supports extensible SDK creation under all package managers.
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        The <filename>populate_sdk_base</filename> class inherits the
        appropriate <filename>populate_sdk_*</filename> (i.e.
        <filename>deb</filename>, <filename>rpm</filename>, and
        <filename>ipk</filename>) based on
        <link linkend='var-IMAGE_PKGTYPE'><filename>IMAGE_PKGTYPE</filename></link>.
    </para>

    <para>
        The base class ensures all source and destination directories are
        established and then populates the SDK.
        After populating the SDK, the <filename>populate_sdk_base</filename>
        class constructs two sysroots:
        <filename>${</filename><link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link><filename>}-nativesdk</filename>,
        which contains the cross-compiler and associated tooling, and the
        target, which contains a target root filesystem that is configured for
        the SDK usage.
        These two images reside in
        <link linkend='var-SDK_OUTPUT'><filename>SDK_OUTPUT</filename></link>,
        which consists of the following:
        <literallayout class='monospaced'>
     ${SDK_OUTPUT}/${SDK_ARCH}<replaceable>-nativesdk-pkgs</replaceable>
     ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/<replaceable>target-pkgs</replaceable>
        </literallayout>
    </para>

    <para>
        Finally, the base populate SDK class creates the toolchain
        environment setup script, the tarball of the SDK, and the installer.
    </para>

    <para>
        The respective <filename>populate_sdk_deb</filename>,
        <filename>populate_sdk_rpm</filename>, and
        <filename>populate_sdk_ipk</filename> classes each support the
        specific type of SDK.
        These classes are inherited by and used with the
        <filename>populate_sdk_base</filename> class.
    </para>

    <para>
        For more information on the cross-development toolchain
        generation, see the
        "<ulink url='&YOCTO_DOCS_OM_URL;#cross-development-toolchain-generation'>Cross-Development Toolchain Generation</ulink>"
        section in the Yocto Project Overview and Concepts Manual.
        For information on advantages gained when building a
        cross-development toolchain using the
        <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
        task, see the
        "<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-building-an-sdk-installer'>Building an SDK Installer</ulink>"
        section in the Yocto Project Application Development and the
        Extensible Software Development Kit (eSDK) manual.
    </para>
</section>

<section id='ref-classes-prexport'>
    <title><filename>prexport.bbclass</filename></title>

    <para>
        The <filename>prexport</filename> class provides functionality for
        exporting
        <link linkend='var-PR'><filename>PR</filename></link> values.
        <note>
            This class is not intended to be used directly.
            Rather, it is enabled when using
            "<filename>bitbake-prserv-tool export</filename>".
        </note>
    </para>
</section>

<section id='ref-classes-primport'>
    <title><filename>primport.bbclass</filename></title>

    <para>
        The <filename>primport</filename> class provides functionality for
        importing
        <link linkend='var-PR'><filename>PR</filename></link> values.
        <note>
            This class is not intended to be used directly.
            Rather, it is enabled when using
            "<filename>bitbake-prserv-tool import</filename>".
        </note>
    </para>
</section>

<section id='ref-classes-prserv'>
    <title><filename>prserv.bbclass</filename></title>

    <para>
        The <filename>prserv</filename> class provides functionality for
        using a
        <ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>PR service</ulink>
        in order to automatically manage the incrementing of the
        <link linkend='var-PR'><filename>PR</filename></link> variable for
        each recipe.
    </para>

    <para>
        This class is enabled by default because it is inherited by the
        <link linkend='ref-classes-package'><filename>package</filename></link>
        class.
        However, the OpenEmbedded build system will not enable the
        functionality of this class unless
        <link linkend='var-PRSERV_HOST'><filename>PRSERV_HOST</filename></link>
        has been set.
    </para>
</section>

<section id='ref-classes-ptest'>
    <title><filename>ptest.bbclass</filename></title>

    <para>
        The <filename>ptest</filename> class provides functionality for
        packaging and installing runtime tests for recipes that build software
        that provides these tests.
    </para>

    <para>
        This class is intended to be inherited by individual recipes.
        However, the class' functionality is largely disabled unless "ptest"
        appears in
        <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
        See the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
        section in the Yocto Project Development Tasks Manual for more
        information on ptest.
    </para>
</section>

<section id='ref-classes-ptest-gnome'>
    <title><filename>ptest-gnome.bbclass</filename></title>

    <para>
        Enables package tests (ptests) specifically for GNOME packages,
        which have tests intended to be executed with
        <filename>gnome-desktop-testing</filename>.
    </para>

    <para>
        For information on setting up and running ptests, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='ref-classes-python-dir'>
    <title><filename>python-dir.bbclass</filename></title>

    <para>
        The <filename>python-dir</filename> class provides the base version,
        location, and site package location for Python.
    </para>
</section>

<section id='ref-classes-python3native'>
    <title><filename>python3native.bbclass</filename></title>

    <para>
        The <filename>python3native</filename> class supports using the
        native version of Python 3 built by the build system rather than
        support of the version provided by the build host.
    </para>
</section>

<section id='ref-classes-pythonnative'>
    <title><filename>pythonnative.bbclass</filename></title>

    <para>
        When inherited by a recipe, the <filename>pythonnative</filename> class
        supports using the native version of Python built by the build system
        rather than using the version provided by the build host.
    </para>
</section>

<section id='ref-classes-qemu'>
    <title><filename>qemu.bbclass</filename></title>

    <para>
        The <filename>qemu</filename> class provides functionality for recipes
        that either need QEMU or test for the existence of QEMU.
        Typically, this class is used to run programs for a target system on
        the build host using QEMU's application emulation mode.
    </para>
</section>

<section id='ref-classes-recipe_sanity'>
    <title><filename>recipe_sanity.bbclass</filename></title>

    <para>
        The <filename>recipe_sanity</filename> class checks for the presence
        of any host system recipe prerequisites that might affect the
        build (e.g. variables that are set or software that is present).
    </para>
</section>

<section id='ref-classes-relocatable'>
    <title><filename>relocatable.bbclass</filename></title>

    <para>
        The <filename>relocatable</filename> class enables relocation of
        binaries when they are installed into the sysroot.
    </para>

    <para>
        This class makes use of the
        <link linkend='ref-classes-chrpath'><filename>chrpath</filename></link>
        class and is used by both the
        <link linkend='ref-classes-cross'><filename>cross</filename></link>
        and
        <link linkend='ref-classes-native'><filename>native</filename></link>
        classes.
    </para>
</section>

<section id='ref-classes-remove-libtool'>
    <title><filename>remove-libtool.bbclass</filename></title>

    <para>
        The <filename>remove-libtool</filename> class adds a post function
        to the
        <link linkend='ref-tasks-install'><filename>do_install</filename></link>
        task to remove all <filename>.la</filename> files installed by
        <filename>libtool</filename>.
        Removing these files results in them being absent from both the
        sysroot and target packages.
    </para>

    <para>
        If a recipe needs the <filename>.la</filename> files to be installed,
        then the recipe can override the removal by setting
        <filename>REMOVE_LIBTOOL_LA</filename> to "0" as follows:
        <literallayout class='monospaced'>
     REMOVE_LIBTOOL_LA = "0"
        </literallayout>
        <note>
            The <filename>remove-libtool</filename> class is not enabled by
            default.
        </note>
    </para>
</section>

<section id='ref-classes-report-error'>
    <title><filename>report-error.bbclass</filename></title>

    <para>
        The <filename>report-error</filename> class supports enabling the
        <ulink url='&YOCTO_DOCS_DEV_URL;#using-the-error-reporting-tool'>error reporting tool</ulink>,
        which allows you to submit build error information to a central
        database.
    </para>

    <para>
        The class collects debug information for recipe, recipe version, task,
        machine, distro, build system, target system, host distro, branch,
        commit, and log.
        From the information, report files using a JSON format are created and
        stored in
        <filename>${</filename><link linkend='var-LOG_DIR'><filename>LOG_DIR</filename></link><filename>}/error-report</filename>.
    </para>
</section>

<section id='ref-classes-rm-work'>
    <title><filename>rm_work.bbclass</filename></title>

    <para>
        The <filename>rm_work</filename> class supports deletion of temporary
        workspace, which can ease your hard drive demands during builds.
    </para>

    <para>
        The OpenEmbedded build system can use a substantial amount of disk
        space during the build process.
        A portion of this space is the work files under the
        <filename>${TMPDIR}/work</filename> directory for each recipe.
        Once the build system generates the packages for a recipe, the work
        files for that recipe are no longer needed.
        However, by default, the build system preserves these files
        for inspection and possible debugging purposes.
        If you would rather have these files deleted to save disk space
        as the build progresses, you can enable <filename>rm_work</filename>
        by adding the following to your <filename>local.conf</filename> file,
        which is found in the
        <link linkend='build-directory'>Build Directory</link>.
        <literallayout class='monospaced'>
    INHERIT += "rm_work"
        </literallayout>
        If you are modifying and building source code out of the work directory
        for a recipe, enabling <filename>rm_work</filename> will potentially
        result in your changes to the source being lost.
        To exclude some recipes from having their work directories deleted by
        <filename>rm_work</filename>, you can add the names of the recipe or
        recipes you are working on to the <filename>RM_WORK_EXCLUDE</filename>
        variable, which can also be set in your <filename>local.conf</filename>
        file.
        Here is an example:
        <literallayout class='monospaced'>
    RM_WORK_EXCLUDE += "busybox glibc"
        </literallayout>
    </para>
</section>

<section id='ref-classes-rootfs*'>
    <title><filename>rootfs*.bbclass</filename></title>

    <para>
        The <filename>rootfs*</filename> classes support creating
        the root filesystem for an image and consist of the following classes:
        <itemizedlist>
            <listitem><para>
                The <filename>rootfs-postcommands</filename> class, which
                defines filesystem post-processing functions for image recipes.
                </para></listitem>
            <listitem><para>
                The <filename>rootfs_deb</filename> class, which supports
                creation of root filesystems for images built using
                <filename>.deb</filename> packages.</para></listitem>
            <listitem><para>
                The <filename>rootfs_rpm</filename> class, which supports
                creation of root filesystems for images built using
                <filename>.rpm</filename> packages.</para></listitem>
            <listitem><para>
                The <filename>rootfs_ipk</filename> class, which supports
                creation of root filesystems for images built using
                <filename>.ipk</filename> packages.</para></listitem>
            <listitem><para>
                The <filename>rootfsdebugfiles</filename> class, which installs
                additional files found on the build host directly into the
                root filesystem.
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        The root filesystem is created from packages using one of the
        <filename>rootfs*.bbclass</filename> files as determined by the
        <link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>
        variable.
    </para>

    <para>
        For information on how root filesystem images are created, see the
        "<ulink url='&YOCTO_DOCS_OM_URL;#image-generation-dev-environment'>Image Generation</ulink>"
        section in the Yocto Project Overview and Concepts Manual.
    </para>
</section>

<section id='ref-classes-sanity'>
    <title><filename>sanity.bbclass</filename></title>

    <para>
        The <filename>sanity</filename> class checks to see if prerequisite
        software is present on the host system so that users can be notified
        of potential problems that might affect their build.
        The class also performs basic user configuration checks from
        the <filename>local.conf</filename> configuration file to
        prevent common mistakes that cause build failures.
        Distribution policy usually determines whether to include this class.
    </para>
</section>

<section id='ref-classes-scons'>
    <title><filename>scons.bbclass</filename></title>

    <para>
        The <filename>scons</filename> class supports recipes that need to
        build software that uses the SCons build system.
        You can use the
        <link linkend='var-EXTRA_OESCONS'><filename>EXTRA_OESCONS</filename></link>
        variable to specify additional configuration options you want to pass
        SCons command line.
    </para>
</section>

<section id='ref-classes-sdl'>
    <title><filename>sdl.bbclass</filename></title>

    <para>
        The <filename>sdl</filename> class supports recipes that need to build
        software that uses the Simple DirectMedia Layer (SDL) library.
    </para>
</section>

<section id='ref-classes-setuptools'>
    <title><filename>setuptools.bbclass</filename></title>

    <para>
        The <filename>setuptools</filename> class supports Python
        version 2.x extensions that use build systems based on
        <filename>setuptools</filename>.
        If your recipe uses these build systems, the recipe needs to
        inherit the <filename>setuptools</filename> class.
    </para>
</section>

<section id='ref-classes-setuptools3'>
    <title><filename>setuptools3.bbclass</filename></title>

    <para>
        The <filename>setuptools3</filename> class supports Python
        version 3.x extensions that use build systems based on
        <filename>setuptools3</filename>.
        If your recipe uses these build systems, the recipe needs to
        inherit the <filename>setuptools3</filename> class.
    </para>
</section>

<section id='ref-classes-sign_rpm'>
    <title><filename>sign_rpm.bbclass</filename></title>

    <para>
        The <filename>sign_rpm</filename> class supports generating signed
        RPM packages.
    </para>
</section>

<section id='ref-classes-sip'>
    <title><filename>sip.bbclass</filename></title>

    <para>
        The <filename>sip</filename> class
        supports recipes that build or package SIP-based Python bindings.
    </para>
</section>

<section id='ref-classes-siteconfig'>
    <title><filename>siteconfig.bbclass</filename></title>

    <para>
        The <filename>siteconfig</filename> class
        provides functionality for handling site configuration.
        The class is used by the
        <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
        class to accelerate the
        <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
        task.
    </para>
</section>

<section id='ref-classes-siteinfo'>
    <title><filename>siteinfo.bbclass</filename></title>

    <para>
        The <filename>siteinfo</filename> class provides information about
        the targets that might be needed by other classes or recipes.
    </para>

    <para>
        As an example, consider Autotools, which can require tests that must
        execute on the target hardware.
        Since this is not possible in general when cross compiling, site
        information is used to provide cached test results so these tests can
        be skipped over but still make the correct values available.
        The
        <filename><link linkend='structure-meta-site'>meta/site directory</link></filename>
        contains test results sorted into different categories such as
        architecture, endianness, and the <filename>libc</filename> used.
        Site information provides a list of files containing data relevant to
        the current build in the
        <filename><link linkend='var-CONFIG_SITE'>CONFIG_SITE</link></filename> variable
        that Autotools automatically picks up.
    </para>

    <para>
        The class also provides variables like
        <filename><link linkend='var-SITEINFO_ENDIANNESS'>SITEINFO_ENDIANNESS</link></filename>
        and <filename><link linkend='var-SITEINFO_BITS'>SITEINFO_BITS</link></filename>
        that can be used elsewhere in the metadata.
    </para>
</section>

<section id='ref-classes-spdx'>
    <title><filename>spdx.bbclass</filename></title>

    <para>
        The <filename>spdx</filename> class integrates real-time license
        scanning, generation of SPDX standard output, and verification
        of license information during the build.
        <note>
            This class is currently at the prototype stage in the 1.6
            release.
        </note>
    </para>
</section>

<section id='ref-classes-sstate'>
    <title><filename>sstate.bbclass</filename></title>

    <para>
        The <filename>sstate</filename> class provides support for Shared
        State (sstate).
        By default, the class is enabled through the
        <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
        variable's default value.
    </para>

    <para>
        For more information on sstate, see the
        "<ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>Shared State Cache</ulink>"
        section in the Yocto Project Overview and Concepts Manual.
    </para>
</section>

<section id='ref-classes-staging'>
    <title><filename>staging.bbclass</filename></title>

    <para>
        The <filename>staging</filename> class installs files into individual
        recipe work directories for sysroots.
        The class contains the following key tasks:
        <itemizedlist>
            <listitem><para>
                The
                <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                task, which is responsible for handing the files that end up
                in the recipe sysroots.
                </para></listitem>
            <listitem><para>
                The
                <link linkend='ref-tasks-prepare_recipe_sysroot'><filename>do_prepare_recipe_sysroot</filename></link>
                task (a "partner" task to the
                <filename>populate_sysroot</filename> task), which installs
                the files into the individual recipe work directories (i.e.
                <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>).
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        The code in the <filename>staging</filename> class is complex and
        basically works in two stages:
        <itemizedlist>
            <listitem><para>
                <emphasis>Stage One:</emphasis>
                The first stage addresses recipes that have files they want
                to share with other recipes that have dependencies on the
                originating recipe.
                Normally these dependencies are installed through the
                <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                task into
                <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>.
                The <filename>do_populate_sysroot</filename> task copies
                a subset of these files into
                <filename>${SYSROOT_DESTDIR}</filename>.
                This subset of files is controlled by the
                <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS</filename></link>,
                <link linkend='var-SYSROOT_DIRS_NATIVE'><filename>SYSROOT_DIRS_NATIVE</filename></link>,
                and
                <link linkend='var-SYSROOT_DIRS_BLACKLIST'><filename>SYSROOT_DIRS_BLACKLIST</filename></link>
                variables.
                <note>
                    Additionally, a recipe can customize the files further by
                declaring a processing function in the
                    <link linkend='var-SYSROOT_PREPROCESS_FUNCS'><filename>SYSROOT_PREPROCESS_FUNCS</filename></link>
                    variable.
                </note>
                </para>

                <para>
                A shared state (sstate) object is built from these files
                and the files are placed into a subdirectory of
                <link linkend='structure-build-tmp-sysroots-components'><filename>tmp/sysroots-components/</filename></link>.
                The files are scanned for hardcoded paths to the original
                installation location.
                If the location is found in text files, the hardcoded
                locations are replaced by tokens and a list of the files
                needing such replacements is created.
                These adjustments are referred to as "FIXMEs".
                The list of files that are scanned for paths is controlled by
                the
                <link linkend='var-SSTATE_SCAN_FILES'><filename>SSTATE_SCAN_FILES</filename></link>
                variable.
                </para></listitem>
            <listitem><para>
                <emphasis>Stage Two:</emphasis>
                The second stage addresses recipes that want to use something
                from another recipe and declare a dependency on that recipe
                through the
                <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                variable.
                The recipe will have a
                <link linkend='ref-tasks-prepare_recipe_sysroot'><filename>do_prepare_recipe_sysroot</filename></link>
                task and when
                this task executes, it creates the
                <filename>recipe-sysroot</filename> and
                <filename>recipe-sysroot-native</filename> in the recipe
                work directory (i.e.
                <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>).
                The OpenEmbedded build system creates hard links to copies of the
                relevant files from <filename>sysroots-components</filename>
                into the recipe work directory.
                <note>
                    If hard links are not possible, the build system uses
                    actual copies.
                </note>
                The build system then addresses any "FIXMEs" to paths as
                defined from the list created in the first stage.
                </para>

                <para>
                Finally, any files in <filename>${bindir}</filename>
                within the sysroot that have the prefix
                "<filename>postinst-</filename>" are executed.
                <note>
                    Although such sysroot post installation scripts are not
                    recommended for general use, the files do allow some issues
                    such as user creation and module indexes to be addressed.
                </note>
                </para>

                <para>
                Because recipes can have other dependencies outside of
                <filename>DEPENDS</filename> (e.g.
                <filename>do_unpack[depends] += "tar-native:do_populate_sysroot"</filename>),
                the sysroot creation function
                <filename>extend_recipe_sysroot</filename> is also added as
                a pre-function for those tasks whose dependencies are not
                through <filename>DEPENDS</filename> but operate similarly.
                </para>

                <para>
                When installing dependencies into the sysroot, the code
                traverses the dependency graph and processes dependencies
                in exactly the same way as the dependencies would or would not
                be when installed from sstate.
                This processing means, for example, a native tool would have
                its native dependencies added but a target library would not
                have its dependencies traversed or installed.
                The same sstate dependency code is used so that
                builds should be identical regardless of whether sstate
                was used or not.
                For a closer look, see the
                <filename>setscene_depvalid()</filename> function in the
                <link linkend='ref-classes-sstate'><filename>sstate</filename></link>
                class.
                </para>

                <para>
                The build system is careful to maintain manifests of the files
                it installs so that any given dependency can be installed as
                needed.
                The sstate hash of the installed item is also stored so that
                if it changes, the build system can reinstall it.
                </para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='ref-classes-syslinux'>
    <title><filename>syslinux.bbclass</filename></title>

    <para>
        The <filename>syslinux</filename> class provides syslinux-specific
        functions for building bootable images.
    </para>

    <para>
        The class supports the following variables:
        <itemizedlist>
            <listitem><para><link linkend='var-INITRD'><filename>INITRD</filename></link>:
                Indicates list of filesystem images to concatenate and use as
                an initial RAM disk (initrd).
                This variable is optional.</para></listitem>
            <listitem><para><link linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:
                Indicates a filesystem image to include as the root filesystem.
                This variable is optional.</para></listitem>
            <listitem><para><link linkend='var-AUTO_SYSLINUXMENU'><filename>AUTO_SYSLINUXMENU</filename></link>:
                Enables creating an automatic menu when set to "1".
                </para></listitem>
            <listitem><para><link linkend='var-LABELS'><filename>LABELS</filename></link>:
                Lists targets for automatic configuration.
                </para></listitem>
            <listitem><para><link linkend='var-APPEND'><filename>APPEND</filename></link>:
                Lists append string overrides for each label.
                </para></listitem>
            <listitem><para><link linkend='var-SYSLINUX_OPTS'><filename>SYSLINUX_OPTS</filename></link>:
                Lists additional options to add to the syslinux file.
                Semicolon characters separate multiple options.
                </para></listitem>
            <listitem><para><link linkend='var-SYSLINUX_SPLASH'><filename>SYSLINUX_SPLASH</filename></link>:
                Lists a background for the VGA boot menu when you are using the
                boot menu.</para></listitem>
            <listitem><para><link linkend='var-SYSLINUX_DEFAULT_CONSOLE'><filename>SYSLINUX_DEFAULT_CONSOLE</filename></link>:
                Set to "console=ttyX" to change kernel boot default console.
                </para></listitem>
            <listitem><para><link linkend='var-SYSLINUX_SERIAL'><filename>SYSLINUX_SERIAL</filename></link>:
                Sets an alternate serial port.
                Or, turns off serial when the variable is set with an
                empty string.</para></listitem>
            <listitem><para><link linkend='var-SYSLINUX_SERIAL_TTY'><filename>SYSLINUX_SERIAL_TTY</filename></link>:
                Sets an alternate "console=tty..." kernel boot argument.
                </para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='ref-classes-systemd'>
    <title><filename>systemd.bbclass</filename></title>

    <para>
        The <filename>systemd</filename> class provides support for recipes
        that install systemd unit files.
    </para>

    <para>
        The functionality for this class is disabled unless you have "systemd"
        in
        <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
    </para>

    <para>
        Under this class, the recipe or Makefile (i.e. whatever the recipe is
        calling during the
        <link linkend='ref-tasks-install'><filename>do_install</filename></link>
        task) installs unit files into
        <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}${systemd_unitdir}/system</filename>.
        If the unit files being installed go into packages other than the
        main package, you need to set
        <link linkend='var-SYSTEMD_PACKAGES'><filename>SYSTEMD_PACKAGES</filename></link>
        in your recipe to identify the packages in which the files will be
        installed.
    </para>

    <para>
        You should set
        <link linkend='var-SYSTEMD_SERVICE'><filename>SYSTEMD_SERVICE</filename></link>
        to the name of the service file.
        You should also use a package name override to indicate the package
        to which the value applies.
        If the value applies to the recipe's main package, use
        <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>.
        Here is an example from the connman recipe:
        <literallayout class='monospaced'>
     SYSTEMD_SERVICE_${PN} = "connman.service"
        </literallayout>
        Services are set up to start on boot automatically unless
        you have set
        <link linkend='var-SYSTEMD_AUTO_ENABLE'><filename>SYSTEMD_AUTO_ENABLE</filename></link>
        to "disable".
    </para>

    <para>
        For more information on <filename>systemd</filename>, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#selecting-an-initialization-manager'>Selecting an Initialization Manager</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='ref-classes-systemd-boot'>
    <title><filename>systemd-boot.bbclass</filename></title>

    <para>
        The <filename>systemd-boot</filename> class provides functions specific
        to the systemd-boot bootloader for building bootable images.
        This is an internal class and is not intended to be used directly.
        <note>
            The <filename>systemd-boot</filename> class is a result from
            merging the <filename>gummiboot</filename> class used in previous
            Yocto Project releases with the <filename>systemd</filename>
            project.
        </note>
        Set the
        <link linkend='var-EFI_PROVIDER'><filename>EFI_PROVIDER</filename></link>
        variable to "systemd-boot" to use this class.
        Doing so creates a standalone EFI bootloader that is not dependent
        on systemd.
    </para>

    <para>
        For information on more variables used and supported in this class,
        see the
        <link linkend='var-SYSTEMD_BOOT_CFG'><filename>SYSTEMD_BOOT_CFG</filename></link>,
        <link linkend='var-SYSTEMD_BOOT_ENTRIES'><filename>SYSTEMD_BOOT_ENTRIES</filename></link>,
        and
        <link linkend='var-SYSTEMD_BOOT_TIMEOUT'><filename>SYSTEMD_BOOT_TIMEOUT</filename></link>
        variables.
    </para>

    <para>
        You can also see the
        <ulink url='http://www.freedesktop.org/wiki/Software/systemd/systemd-boot/'>Systemd-boot documentation</ulink>
        for more information.
    </para>
</section>

<section id='ref-classes-terminal'>
    <title><filename>terminal.bbclass</filename></title>

    <para>
        The <filename>terminal</filename> class provides support for starting
        a terminal session.
        The
        <link linkend='var-OE_TERMINAL'><filename>OE_TERMINAL</filename></link>
        variable controls which terminal emulator is used for the session.
    </para>

    <para>
        Other classes use the <filename>terminal</filename> class anywhere a
        separate terminal session needs to be started.
        For example, the
        <link linkend='ref-classes-patch'><filename>patch</filename></link>
        class assuming
        <link linkend='var-PATCHRESOLVE'><filename>PATCHRESOLVE</filename></link>
        is set to "user", the
        <link linkend='ref-classes-cml1'><filename>cml1</filename></link>
        class, and the
        <link linkend='ref-classes-devshell'><filename>devshell</filename></link>
        class all use the <filename>terminal</filename> class.
    </para>
</section>

<section id='ref-classes-testimage*'>
    <title><filename>testimage*.bbclass</filename></title>

    <para>
        The <filename>testimage*</filename> classes support running
        automated tests against images using QEMU and on actual hardware.
        The classes handle loading the tests and starting the image.
        To use the classes, you need to perform steps to set up the
        environment.
        <note><title>Tip</title>
            Best practices include using
            <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
            rather than
            <link linkend='var-INHERIT'><filename>INHERIT</filename></link> to
            inherit the <filename>testimage</filename> class for automated
            image testing.
        </note>
    </para>

    <para>
        The tests are commands that run on the target system over
        <filename>ssh</filename>.
        Each test is written in Python and makes use of the
        <filename>unittest</filename> module.
    </para>

    <para>
        The <filename>testimage.bbclass</filename> runs tests on an image
        when called using the following:
        <literallayout class='monospaced'>
     $ bitbake -c testimage <replaceable>image</replaceable>
        </literallayout>
        The <filename>testimage-auto</filename> class runs tests on an image
        after the image is constructed (i.e.
        <link linkend='var-TESTIMAGE_AUTO'><filename>TESTIMAGE_AUTO</filename></link>
        must be set to "1").
    </para>

    <para>
        For information on how to enable, run, and create new tests, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='ref-classes-testsdk'>
    <title><filename>testsdk.bbclass</filename></title>

    <para>
        This class supports running automated tests against
        software development kits (SDKs).
        The <filename>testsdk</filename> class runs tests on an SDK when
        called using the following:
        <literallayout class='monospaced'>
     $ bitbake -c testsdk image
        </literallayout>
        <note><title>Tip</title>
            Best practices include using
            <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
            rather than
            <link linkend='var-INHERIT'><filename>INHERIT</filename></link> to
            inherit the <filename>testsdk</filename> class for automated
            SDK testing.
        </note>
    </para>
</section>

<section id='ref-classes-texinfo'>
    <title><filename>texinfo.bbclass</filename></title>

    <para>
        This class should be inherited by recipes whose upstream packages
        invoke the <filename>texinfo</filename> utilities at build-time.
        Native and cross recipes are made to use the dummy scripts provided
        by <filename>texinfo-dummy-native</filename>, for improved performance.
        Target architecture recipes use the genuine
        Texinfo utilities.
        By default, they use the Texinfo utilities on the host system.
        <note>
            If you want to use the Texinfo recipe shipped with the build
            system, you can remove "texinfo-native" from
            <link linkend='var-ASSUME_PROVIDED'><filename>ASSUME_PROVIDED</filename></link>
            and makeinfo from
            <link linkend='var-SANITY_REQUIRED_UTILITIES'><filename>SANITY_REQUIRED_UTILITIES</filename></link>.
        </note>
    </para>
</section>

<section id='ref-classes-tinderclient'>
    <title><filename>tinderclient.bbclass</filename></title>

    <para>
        The <filename>tinderclient</filename> class submits build results to
        an external Tinderbox instance.
        <note>
            This class is currently unmaintained.
        </note>
    </para>
</section>

<section id='ref-classes-toaster'>
    <title><filename>toaster.bbclass</filename></title>

    <para>
        The <filename>toaster</filename> class collects information about
        packages and images and sends them as events that the BitBake
        user interface can receive.
        The class is enabled when the Toaster user interface is running.
    </para>

    <para>
        This class is not intended to be used directly.
    </para>
</section>

<section id='ref-classes-toolchain-scripts'>
    <title><filename>toolchain-scripts.bbclass</filename></title>

    <para>
        The <filename>toolchain-scripts</filename> class provides the scripts
        used for setting up the environment for installed SDKs.
    </para>
</section>

<section id='ref-classes-typecheck'>
    <title><filename>typecheck.bbclass</filename></title>

    <para>
        The <filename>typecheck</filename> class provides support for
        validating the values of variables set at the configuration level
        against their defined types.
        The OpenEmbedded build system allows you to define the type of a
        variable using the "type" varflag.
        Here is an example:
        <literallayout class='monospaced'>
     IMAGE_FEATURES[type] = "list"
        </literallayout>
    </para>
</section>

<section id='ref-classes-uboot-config'>
    <title><filename>uboot-config.bbclass</filename></title>

    <para>
        The <filename>uboot-config</filename> class provides support for
        U-Boot configuration for a machine.
        Specify the machine in your recipe as follows:
        <literallayout class='monospaced'>
     UBOOT_CONFIG ??= &lt;default&gt;
     UBOOT_CONFIG[foo] = "config,images"
        </literallayout>
        You can also specify the machine using this method:
        <literallayout class='monospaced'>
     UBOOT_MACHINE = "config"
        </literallayout>
        See the
        <link linkend='var-UBOOT_CONFIG'><filename>UBOOT_CONFIG</filename></link>
        and
        <link linkend='var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></link>
        variables for additional information.
    </para>
</section>

<section id='ref-classes-uninative'>
    <title><filename>uninative.bbclass</filename></title>

    <para>
        Attempts to isolate the build system from the host
        distribution's C library in order to make re-use of native shared state
        artifacts across different host distributions practical.
        With this class enabled, a tarball containing a pre-built C library
        is downloaded at the start of the build.
        In the Poky reference distribution this is enabled by default
        through
        <filename>meta/conf/distro/include/yocto-uninative.inc</filename>.
        Other distributions that do not derive from poky can also
        "<filename>require conf/distro/include/yocto-uninative.inc</filename>"
        to use this.
        Alternatively if you prefer, you can build the uninative-tarball recipe
        yourself, publish the resulting tarball (e.g. via HTTP) and set
        <filename>UNINATIVE_URL</filename> and
        <filename>UNINATIVE_CHECKSUM</filename> appropriately.
        For an example, see the
        <filename>meta/conf/distro/include/yocto-uninative.inc</filename>.
    </para>

    <para>
        The <filename>uninative</filename> class is also used unconditionally
        by the extensible SDK.
        When building the extensible SDK,
        <filename>uninative-tarball</filename> is built and the resulting
        tarball is included within the SDK.
    </para>
</section>

<section id='ref-classes-update-alternatives'>
    <title><filename>update-alternatives.bbclass</filename></title>

    <para>
        The <filename>update-alternatives</filename> class helps the
        alternatives system when multiple sources provide the same command.
        This situation occurs when several programs that have the same or
        similar function are installed with the same name.
        For example, the <filename>ar</filename> command is available from the
        <filename>busybox</filename>, <filename>binutils</filename> and
        <filename>elfutils</filename> packages.
        The <filename>update-alternatives</filename> class handles
        renaming the binaries so that multiple packages can be installed
        without conflicts.
        The <filename>ar</filename> command still works regardless of which
        packages are installed or subsequently removed.
        The class renames the conflicting binary in each package and symlinks
        the highest priority binary during installation or removal of packages.
    </para>

    <para>
        To use this class, you need to define a number of variables:
        <itemizedlist>
            <listitem><para><link linkend='var-ALTERNATIVE'><filename>ALTERNATIVE</filename></link>
                </para></listitem>
            <listitem><para><link linkend='var-ALTERNATIVE_LINK_NAME'><filename>ALTERNATIVE_LINK_NAME</filename></link>
                </para></listitem>
            <listitem><para><link linkend='var-ALTERNATIVE_TARGET'><filename>ALTERNATIVE_TARGET</filename></link>
                </para></listitem>
            <listitem><para><link linkend='var-ALTERNATIVE_PRIORITY'><filename>ALTERNATIVE_PRIORITY</filename></link>
                </para></listitem>
        </itemizedlist>
        These variables list alternative commands needed by a package,
        provide pathnames for links, default links for targets, and
        so forth.
        For details on how to use this class, see the comments in the
        <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/classes/update-alternatives.bbclass'><filename>update-alternatives.bbclass</filename></ulink>
        file.
    </para>

    <note>
        You can use the <filename>update-alternatives</filename> command
        directly in your recipes.
        However, this class simplifies things in most cases.
    </note>
</section>

<section id='ref-classes-update-rc.d'>
    <title><filename>update-rc.d.bbclass</filename></title>

    <para>
        The <filename>update-rc.d</filename> class uses
        <filename>update-rc.d</filename> to safely install an
        initialization script on behalf of the package.
        The OpenEmbedded build system takes care of details such as making
        sure the script is stopped before a package is removed and started when
        the package is installed.
    </para>

    <para>
        Three variables control this class:
        <filename><link linkend='var-INITSCRIPT_PACKAGES'>INITSCRIPT_PACKAGES</link></filename>,
        <filename><link linkend='var-INITSCRIPT_NAME'>INITSCRIPT_NAME</link></filename> and
        <filename><link linkend='var-INITSCRIPT_PARAMS'>INITSCRIPT_PARAMS</link></filename>.
        See the variable links for details.
    </para>
</section>

<section id='ref-classes-useradd'>
    <title><filename>useradd*.bbclass</filename></title>

    <para>
        The <filename>useradd*</filename> classes support the addition of users
        or groups for usage by the package on the target.
        For example, if you have packages that contain system services that
        should be run under their own user or group, you can use these classes
        to enable creation of the user or group.
        The
        <filename>meta-skeleton/recipes-skeleton/useradd/useradd-example.bb</filename>
        recipe in the <link linkend='source-directory'>Source Directory</link>
        provides a simple example that shows how to add three
        users and groups to two packages.
        See the <filename>useradd-example.bb</filename> recipe for more
        information on how to use these classes.
    </para>

    <para>
        The <filename>useradd_base</filename> class provides basic
        functionality for user or groups settings.
    </para>

    <para>
        The <filename>useradd*</filename> classes support the
        <link linkend='var-USERADD_PACKAGES'><filename>USERADD_PACKAGES</filename></link>,
        <link linkend='var-USERADD_PARAM'><filename>USERADD_PARAM</filename></link>,
        <link linkend='var-GROUPADD_PARAM'><filename>GROUPADD_PARAM</filename></link>,
        and
        <link linkend='var-GROUPMEMS_PARAM'><filename>GROUPMEMS_PARAM</filename></link>
        variables.
    </para>

    <para>
        The <filename>useradd-staticids</filename> class supports the addition
        of users or groups that have static user identification
        (<filename>uid</filename>) and group identification
        (<filename>gid</filename>) values.
    </para>

    <para>
        The default behavior of the OpenEmbedded build system for assigning
        <filename>uid</filename> and <filename>gid</filename> values when
        packages add users and groups during package install time is to
        add them dynamically.
        This works fine for programs that do not care what the values of the
        resulting users and groups become.
        In these cases, the order of the installation determines the final
        <filename>uid</filename> and <filename>gid</filename> values.
        However, if non-deterministic
        <filename>uid</filename> and <filename>gid</filename> values are a
        problem, you can override the default, dynamic application of these
        values by setting static values.
        When you set static values, the OpenEmbedded build system looks in
        <link linkend='var-BBPATH'><filename>BBPATH</filename></link> for
        <filename>files/passwd</filename> and <filename>files/group</filename>
        files for the values.
    </para>

    <para>
        To use static <filename>uid</filename> and <filename>gid</filename>
        values, you need to set some variables.
        See the
        <link linkend='var-USERADDEXTENSION'><filename>USERADDEXTENSION</filename></link>,
        <link linkend='var-USERADD_UID_TABLES'><filename>USERADD_UID_TABLES</filename></link>,
        <link linkend='var-USERADD_GID_TABLES'><filename>USERADD_GID_TABLES</filename></link>,
        and
        <link linkend='var-USERADD_ERROR_DYNAMIC'><filename>USERADD_ERROR_DYNAMIC</filename></link>
        variables.
        You can also see the
        <link linkend='ref-classes-useradd'><filename>useradd</filename></link>
        class for additional information.
    </para>

    <note><title>Notes</title>
        You do not use the <filename>useradd-staticids</filename>
        class directly.
        You either enable or disable the class by setting the
        <filename>USERADDEXTENSION</filename> variable.
        If you enable or disable the class in a configured system,
        <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
        might contain incorrect <filename>uid</filename> and
        <filename>gid</filename> values.
        Deleting the <filename>TMPDIR</filename> directory
        will correct this condition.
    </note>
</section>

<section id='ref-classes-utility-tasks'>
    <title><filename>utility-tasks.bbclass</filename></title>

    <para>
        The <filename>utility-tasks</filename> class provides support for
        various "utility" type tasks that are applicable to all recipes,
        such as
        <link linkend='ref-tasks-clean'><filename>do_clean</filename></link> and
        <link linkend='ref-tasks-listtasks'><filename>do_listtasks</filename></link>.
    </para>

    <para>
        This class is enabled by default because it is inherited by
        the
        <link linkend='ref-classes-base'><filename>base</filename></link>
        class.
    </para>
</section>

<section id='ref-classes-utils'>
    <title><filename>utils.bbclass</filename></title>

    <para>
        The <filename>utils</filename> class provides some useful Python
        functions that are typically used in inline Python expressions
        (e.g. <filename>${@...}</filename>).
        One example use is for <filename>bb.utils.contains()</filename>.
    </para>

    <para>
        This class is enabled by default because it is inherited by the
        <link linkend='ref-classes-base'><filename>base</filename></link>
        class.
    </para>
</section>

<section id='ref-classes-vala'>
    <title><filename>vala.bbclass</filename></title>

    <para>
        The <filename>vala</filename> class supports recipes that need to
        build software written using the Vala programming language.
    </para>
</section>

<section id='ref-classes-waf'>
    <title><filename>waf.bbclass</filename></title>

    <para>
        The <filename>waf</filename> class supports recipes that need to build
        software that uses the Waf build system.
        You can use the
        <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>
        or
        <link linkend='var-PACKAGECONFIG_CONFARGS'><filename>PACKAGECONFIG_CONFARGS</filename></link>
        variables to specify additional configuration options to be passed on
        the Waf command line.
    </para>
</section>

<!-- Undocumented classes are:
        image-empty.bbclass (possibly being dropped)
        migrate_localcount.bbclass (still need a description)
-->


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