<!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='migration'>
<title>Migrating to a Newer Yocto Project Release</title>

    <para>
        This chapter provides information you can use to migrate work to a
        newer Yocto Project release.  You can find the same information in the
        release notes for a given release.
    </para>

<section id='general-migration-considerations'>
    <title>General Migration Considerations</title>

    <para>
        Some considerations are not tied to a specific Yocto Project
        release.
        This section presents information you should consider when
        migrating to any new Yocto Project release.
        <itemizedlist>
            <listitem><para><emphasis>Dealing with Customized Recipes</emphasis>:
                Issues could arise if you take older recipes that contain
                customizations and simply copy them forward expecting them
                to work after you migrate to new Yocto Project metadata.
                For example, suppose you have a recipe in your layer that is
                a customized version of a core recipe copied from the earlier
                release, rather than through the use of an append file.
                When you migrate to a newer version of Yocto Project, the
                metadata (e.g. perhaps an include file used by the recipe)
                could have changed in a way that would break the build.
                Say, for example, a function is removed from an include file
                and the customized recipe tries to call that function.
                </para>

                <para>You could "forward-port" all your customizations in your
                recipe so that everything works for the new release.
                However, this is not the optimal solution as you would have
                to repeat this process with each new release if changes
                occur that give rise to problems.</para>

                <para>The better solution (where practical) is to use append
                files (<filename>*.bbappend</filename>) to capture any
                customizations you want to make to a recipe.
                Doing so, isolates your changes from the main recipe making
                them much more manageable.
                However, sometimes it is not practical to use an append
                file.
                A good example of this is when introducing a newer or older
                version of a recipe in another layer.</para>
                </listitem>
            <listitem><para><emphasis>Updating Append Files</emphasis>:
                Since append files generally only contain your customizations,
                they often do not need to be adjusted for new releases.
                However, if the <filename>.bbappend</filename> file is
                specific to a particular version of the recipe (i.e. its
                name does not use the % wildcard) and the version of the
                recipe to which it is appending has changed, then you will
                at a minimum need to rename the append file to match the
                name of the recipe file.
                A mismatch between an append file and its corresponding
                recipe file (<filename>.bb</filename>) will
                trigger an error during parsing.</para>
                <para>Depending on the type of customization the append file
                applies, other incompatibilities might occur when you
                upgrade.
                For example, if your append file applies a patch and the
                recipe to which it is appending is updated to a newer
                version, the patch might no longer apply.
                If this is the case and assuming the patch is still needed,
                you must modify the patch file so that it does apply.
                </para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='moving-to-the-yocto-project-1.3-release'>
    <title>Moving to the Yocto Project 1.3 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.3 Release from the prior release.
    </para>

    <section id='1.3-local-configuration'>
        <title>Local Configuration</title>

        <para>
            Differences include changes for
            <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
            and <filename>bblayers.conf</filename>.
        </para>

        <section id='migration-1.3-sstate-mirrors'>
            <title>SSTATE_MIRRORS</title>

            <para>
                The shared state cache (sstate-cache), as pointed to by
                <link linkend='var-SSTATE_DIR'><filename>SSTATE_DIR</filename></link>,
                by default now has two-character subdirectories to prevent
                issues arising from too many files in the same directory.
                Also, native sstate-cache packages, which are built to run
                on the host system, will go into a subdirectory named using
                the distro ID string.
                If you copy the newly structured sstate-cache to a mirror
                location (either local or remote) and then point to it in
                <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>,
                you need to append "PATH" to the end of the mirror URL so that
                the path used by BitBake before the mirror substitution is
                appended to the path used to access the mirror.
                Here is an example:
                <literallayout class='monospaced'>
     SSTATE_MIRRORS = "file://.* http://<replaceable>someserver</replaceable>.tld/share/sstate/PATH"
                </literallayout>
            </para>
        </section>

        <section id='migration-1.3-bblayers-conf'>
            <title>bblayers.conf</title>

            <para>
                The <filename>meta-yocto</filename> layer consists of two parts
                that correspond to the Poky reference distribution and the
                reference hardware Board Support Packages (BSPs), respectively:
                <filename>meta-yocto</filename> and
                <filename>meta-yocto-bsp</filename>.
                When running BitBake for the first time after upgrading,
                your <filename>conf/bblayers.conf</filename> file will be
                updated to handle this change and you will be asked to
                re-run or restart for the changes to take effect.
            </para>
        </section>
    </section>

    <section id='1.3-recipes'>
        <title>Recipes</title>

        <para>
            Differences include changes for the following:
            <itemizedlist>
                <listitem><para>Python function whitespace</para></listitem>
                <listitem><para><filename>proto=</filename> in <filename>SRC_URI</filename></para></listitem>
                <listitem><para><filename>nativesdk</filename></para></listitem>
                <listitem><para>Task recipes</para></listitem>
                <listitem><para><filename>IMAGE_FEATURES</filename></para></listitem>
                <listitem><para>Removed recipes</para></listitem>
            </itemizedlist>
        </para>

        <section id='migration-1.3-python-function-whitespace'>
            <title>Python Function Whitespace</title>

            <para>
                All Python functions must now use four spaces for indentation.
                Previously, an inconsistent mix of spaces and tabs existed,
                which made extending these functions using
                <filename>_append</filename> or <filename>_prepend</filename>
                complicated given that Python treats whitespace as
                syntactically significant.
                If you are defining or extending any Python functions (e.g.
                <filename>populate_packages</filename>, <filename>do_unpack</filename>,
                <filename>do_patch</filename> and so forth) in custom recipes
                or classes, you need to ensure you are using consistent
                four-space indentation.
            </para>
        </section>

        <section id='migration-1.3-proto=-in-src-uri'>
            <title>proto= in SRC_URI</title>

            <para>
                Any use of <filename>proto=</filename> in
                <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                needs to be changed to <filename>protocol=</filename>.
                In particular, this applies to the following URIs:
                <itemizedlist>
                    <listitem><para><filename>svn://</filename></para></listitem>
                    <listitem><para><filename>bzr://</filename></para></listitem>
                    <listitem><para><filename>hg://</filename></para></listitem>
                    <listitem><para><filename>osc://</filename></para></listitem>
                </itemizedlist>
                Other URIs were already using <filename>protocol=</filename>.
                This change improves consistency.
            </para>
        </section>

        <section id='migration-1.3-nativesdk'>
            <title>nativesdk</title>

            <para>
                The suffix <filename>nativesdk</filename> is now implemented
                as a prefix, which simplifies a lot of the packaging code for
                <filename>nativesdk</filename> recipes.
                All custom <filename>nativesdk</filename> recipes, which are
                relocatable packages that are native to
                <link linkend='var-SDK_ARCH'><filename>SDK_ARCH</filename></link>,
                and any references need to be updated to use
                <filename>nativesdk-*</filename> instead of
                <filename>*-nativesdk</filename>.
            </para>
        </section>

        <section id='migration-1.3-task-recipes'>
            <title>Task Recipes</title>

            <para>
                "Task" recipes are now known as "Package groups" and have
                been renamed from <filename>task-*.bb</filename> to
                <filename>packagegroup-*.bb</filename>.
                Existing references to the previous <filename>task-*</filename>
                names should work in most cases as there is an automatic
                upgrade path for most packages.
                However, you should update references in your own recipes and
                configurations as they could be removed in future releases.
                You should also rename any custom <filename>task-*</filename>
                recipes to <filename>packagegroup-*</filename>, and change
                them to inherit <filename>packagegroup</filename> instead of
                <filename>task</filename>, as well as taking the opportunity
                to remove anything now handled by
                <filename>packagegroup.bbclass</filename>, such as providing
                <filename>-dev</filename> and <filename>-dbg</filename>
                packages, setting
                <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>,
                and so forth.
                See the
                "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
                section for further details.
            </para>
        </section>

        <section id='migration-1.3-image-features'>
            <title>IMAGE_FEATURES</title>

            <para>
                Image recipes that previously included "apps-console-core"
                in <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                should now include "splash" instead to enable the boot-up
                splash screen.
                Retaining "apps-console-core" will still include the splash
                screen but generates a warning.
                The "apps-x11-core" and "apps-x11-games"
                <filename>IMAGE_FEATURES</filename> features have been removed.
            </para>
        </section>

        <section id='migration-1.3-removed-recipes'>
            <title>Removed Recipes</title>

            <para>
                The following recipes have been removed.
                For most of them, it is unlikely that you would have any
                references to them in your own
                <link linkend='metadata'>Metadata</link>.
                However, you should check your metadata against this list to be sure:
                <itemizedlist>
                    <listitem><para><emphasis><filename>libx11-trim</filename></emphasis>:
                        Replaced by <filename>libx11</filename>, which has a negligible
                        size difference with modern Xorg.</para></listitem>
                    <listitem><para><emphasis><filename>xserver-xorg-lite</filename></emphasis>:
                        Use <filename>xserver-xorg</filename>, which has a negligible
                        size difference when DRI and GLX modules are not installed.</para></listitem>
                    <listitem><para><emphasis><filename>xserver-kdrive</filename></emphasis>:
                        Effectively unmaintained for many years.</para></listitem>
                    <listitem><para><emphasis><filename>mesa-xlib</filename></emphasis>:
                        No longer serves any purpose.</para></listitem>
                    <listitem><para><emphasis><filename>galago</filename></emphasis>:
                        Replaced by telepathy.</para></listitem>
                    <listitem><para><emphasis><filename>gail</filename></emphasis>:
                        Functionality was integrated into GTK+ 2.13.</para></listitem>
                    <listitem><para><emphasis><filename>eggdbus</filename></emphasis>:
                        No longer needed.</para></listitem>
                    <listitem><para><emphasis><filename>gcc-*-intermediate</filename></emphasis>:
                        The build has been restructured to avoid the need for
                        this step.</para></listitem>
                    <listitem><para><emphasis><filename>libgsmd</filename></emphasis>:
                        Unmaintained for many years.
                        Functionality now provided by
                        <filename>ofono</filename> instead.</para></listitem>
                    <listitem><para><emphasis>contacts, dates, tasks, eds-tools</emphasis>:
                        Largely unmaintained PIM application suite.
                        It has been moved to <filename>meta-gnome</filename>
                        in <filename>meta-openembedded</filename>.</para></listitem>
                </itemizedlist>
                In addition to the previously listed changes, the
                <filename>meta-demoapps</filename> directory has also been removed
                because the recipes in it were not being maintained and many
                had become obsolete or broken.
                Additionally, these recipes were not parsed in the default configuration.
                Many of these recipes are already provided in an updated and
                maintained form within the OpenEmbedded community layers such as
                <filename>meta-oe</filename> and <filename>meta-gnome</filename>.
                For the remainder, you can now find them in the
                <filename>meta-extras</filename> repository, which is in the
                Yocto Project
                <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>.
            </para>
        </section>
    </section>

    <section id='1.3-linux-kernel-naming'>
        <title>Linux Kernel Naming</title>

        <para>
            The naming scheme for kernel output binaries has been changed to
            now include
            <link linkend='var-PE'><filename>PE</filename></link> as part of the
            filename:
            <literallayout class='monospaced'>
     KERNEL_IMAGE_BASE_NAME ?= "${KERNEL_IMAGETYPE}-${PE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
            </literallayout>
        </para>

        <para>
            Because the <filename>PE</filename> variable is not set by default,
            these binary files could result with names that include two dash
            characters.
            Here is an example:
            <literallayout class='monospaced'>
     bzImage--3.10.9+git0+cd502a8814_7144bcc4b8-r0-qemux86-64-20130830085431.bin
            </literallayout>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.4-release'>
    <title>Moving to the Yocto Project 1.4 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.4 Release from the prior release.
    </para>

    <section id='migration-1.4-bitbake'>
        <title>BitBake</title>

        <para>
            Differences include the following:
            <itemizedlist>
                <listitem><para><emphasis>Comment Continuation:</emphasis>
                    If a comment ends with a line continuation (\) character,
                    then the next line must also be a comment.
                    Any instance where this is not the case, now triggers
                    a warning.
                    You must either remove the continuation character, or be
                    sure the next line is a comment.
                    </para></listitem>
                <listitem><para><emphasis>Package Name Overrides:</emphasis>
                    The runtime package specific 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-RPROVIDES'><filename>RPROVIDES</filename></link>,
                    <link linkend='var-RCONFLICTS'><filename>RCONFLICTS</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>,
                    and the pre, post, install, and uninstall script functions
                    <filename>pkg_preinst</filename>,
                    <filename>pkg_postinst</filename>,
                    <filename>pkg_prerm</filename>, and
                    <filename>pkg_postrm</filename> should always have a
                    package name override.
                    For example, use <filename>RDEPENDS_${PN}</filename> for
                    the main package instead of <filename>RDEPENDS</filename>.
                    BitBake uses more strict checks when it parses recipes.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.4-build-behavior'>
        <title>Build Behavior</title>

        <para>
            Differences include the following:
            <itemizedlist>
                <listitem><para><emphasis>Shared State Code:</emphasis>
                    The shared state code has been optimized to avoid running
                    unnecessary tasks.
                    For example, the following no longer populates the target
                    sysroot since that is not necessary:
                    <literallayout class='monospaced'>
     $ bitbake -c rootfs <replaceable>some-image</replaceable>
                    </literallayout>
                    Instead, the system just needs to extract the output
                    package contents, re-create the packages, and construct
                    the root filesystem.
                    This change is unlikely to cause any problems unless
                    you have missing declared dependencies.
                    </para></listitem>
                <listitem><para><emphasis>Scanning Directory Names:</emphasis>
                    When scanning for files in
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
                    the build system now uses
                    <link linkend='var-FILESOVERRIDES'><filename>FILESOVERRIDES</filename></link>
                    instead of <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    for the directory names.
                    In general, the values previously in
                    <filename>OVERRIDES</filename> are now in
                    <filename>FILESOVERRIDES</filename> as well.
                    However, if you relied upon an additional value
                    you previously added to <filename>OVERRIDES</filename>,
                    you might now need to add it to
                    <filename>FILESOVERRIDES</filename> unless you are already
                    adding it through the
                    <link linkend='var-MACHINEOVERRIDES'><filename>MACHINEOVERRIDES</filename></link>
                    or <link linkend='var-DISTROOVERRIDES'><filename>DISTROOVERRIDES</filename></link>
                    variables, as appropriate.
                    For more related changes, see the
                    "<link linkend='migration-1.4-variables'>Variables</link>"
                    section.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>


    <section id='migration-1.4-proxies-and-fetching-source'>
        <title>Proxies and Fetching Source</title>

        <para>
            A new <filename>oe-git-proxy</filename> script has been added to
            replace previous methods of handling proxies and fetching source
            from Git.
            See the <filename>meta-yocto/conf/site.conf.sample</filename> file
            for information on how to use this script.
        </para>
    </section>

    <section id='migration-1.4-custom-interfaces-file-netbase-change'>
        <title>Custom Interfaces File (netbase change)</title>

        <para>
            If you have created your own custom
            <filename>etc/network/interfaces</filename> file by creating
            an append file for the <filename>netbase</filename> recipe,
            you now need to create an append file for the
            <filename>init-ifupdown</filename> recipe instead, which you can
            find in the
            <link linkend='source-directory'>Source Directory</link>
            at <filename>meta/recipes-core/init-ifupdown</filename>.
            For information on how to use append files, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='migration-1.4-remote-debugging'>
        <title>Remote Debugging</title>

        <para>
            Support for remote debugging with the Eclipse IDE is now
            separated into an image feature
            (<filename>eclipse-debug</filename>) that corresponds to the
            <filename>packagegroup-core-eclipse-debug</filename> package group.
            Previously, the debugging feature was included through the
            <filename>tools-debug</filename> image feature, which corresponds
            to the <filename>packagegroup-core-tools-debug</filename>
            package group.
        </para>
    </section>

    <section id='migration-1.4-variables'>
        <title>Variables</title>

        <para>
            The following variables have changed:
            <itemizedlist>
                <listitem><para><emphasis><filename>SANITY_TESTED_DISTROS</filename>:</emphasis>
                    This variable now uses a distribution ID, which is composed
                    of the host distributor ID followed by the release.
                    Previously,
                    <link linkend='var-SANITY_TESTED_DISTROS'><filename>SANITY_TESTED_DISTROS</filename></link>
                    was composed of the description field.
                    For example, "Ubuntu 12.10" becomes "Ubuntu-12.10".
                    You do not need to worry about this change if you are not
                    specifically setting this variable, or if you are
                    specifically setting it to "".
                    </para></listitem>
                <listitem><para><emphasis><filename>SRC_URI</filename>:</emphasis>
                    The <filename>${</filename><link linkend='var-PN'><filename>PN</filename></link><filename>}</filename>,
                    <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>,
                    <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>,
                    and <filename>FILE_DIRNAME</filename> directories have been
                    dropped from the default value of the
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                    variable, which is used as the search path for finding files
                    referred to in
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>.
                    If you have a recipe that relied upon these directories,
                    which would be unusual, then you will need to add the
                    appropriate paths within the recipe or, alternatively,
                    rearrange the files.
                    The most common locations are still covered by
                    <filename>${BP}</filename>, <filename>${BPN}</filename>,
                    and "files", which all remain in the default value of
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-target-package-management-with-rpm'>
        <title>Target Package Management with RPM</title>

        <para>
            If runtime package management is enabled and the RPM backend
            is selected, Smart is now installed for package download, dependency
            resolution, and upgrades instead of Zypper.
            For more information on how to use Smart, run the following command
            on the target:
            <literallayout class='monospaced'>
     smart --help
            </literallayout>
        </para>
    </section>

    <section id='migration-1.4-recipes-moved'>
        <title>Recipes Moved</title>

        <para>
            The following recipes were moved from their previous locations
            because they are no longer used by anything in
            the OpenEmbedded-Core:
            <itemizedlist>
                <listitem><para><emphasis><filename>clutter-box2d</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>evolution-data-server</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gthumb</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gtkhtml2</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gupnp</filename>:</emphasis>
                    Now resides in the <filename>meta-multimedia</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>gypsy</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>libcanberra</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>libgdata</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>libmusicbrainz</filename>:</emphasis>
                    Now resides in the <filename>meta-multimedia</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>metacity</filename>:</emphasis>
                    Now resides in the <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>polkit</filename>:</emphasis>
                    Now resides in the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><emphasis><filename>zeroconf</filename>:</emphasis>
                    Now resides in the <filename>meta-networking</filename> layer.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.4-removals-and-renames'>
        <title>Removals and Renames</title>

        <para>
            The following list shows what has been removed or renamed:
            <itemizedlist>
                <listitem><para><emphasis><filename>evieext</filename>:</emphasis>
                    Removed because it has been removed from
                    <filename>xserver</filename> since 2008.
                    </para></listitem>
                <listitem><para><emphasis>Gtk+ DirectFB:</emphasis>
                    Removed support because upstream Gtk+ no longer supports it
                    as of version 2.18.
                    </para></listitem>
                <listitem><para><emphasis><filename>libxfontcache / xfontcacheproto</filename>:</emphasis>
                    Removed because they were removed from the Xorg server in 2008.
                    </para></listitem>
                <listitem><para><emphasis><filename>libxp / libxprintapputil / libxprintutil / printproto</filename>:</emphasis>
                    Removed because the XPrint server was removed from
                    Xorg in 2008.
                    </para></listitem>
                <listitem><para><emphasis><filename>libxtrap / xtrapproto</filename>:</emphasis>
                    Removed because their functionality was broken upstream.
                    </para></listitem>
                <listitem><para><emphasis>linux-yocto 3.0 kernel:</emphasis>
                    Removed with linux-yocto 3.8 kernel being added.
                    The linux-yocto 3.2 and linux-yocto 3.4 kernels remain
                    as part of the release.
                    </para></listitem>
                <listitem><para><emphasis><filename>lsbsetup</filename>:</emphasis>
                    Removed with functionality now provided by
                    <filename>lsbtest</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>matchbox-stroke</filename>:</emphasis>
                    Removed because it was never more than a proof-of-concept.
                    </para></listitem>
                <listitem><para><emphasis><filename>matchbox-wm-2 / matchbox-theme-sato-2</filename>:</emphasis>
                    Removed because they are not maintained.
                    However, <filename>matchbox-wm</filename> and
                    <filename>matchbox-theme-sato</filename> are still
                    provided.
                    </para></listitem>
                <listitem><para><emphasis><filename>mesa-dri</filename>:</emphasis>
                    Renamed to <filename>mesa</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>mesa-xlib</filename>:</emphasis>
                    Removed because it was no longer useful.
                    </para></listitem>
                <listitem><para><emphasis><filename>mutter</filename>:</emphasis>
                    Removed because nothing ever uses it and the recipe is
                    very old.
                    </para></listitem>
                <listitem><para><emphasis><filename>orinoco-conf</filename>:</emphasis>
                    Removed because it has become obsolete.
                    </para></listitem>
                <listitem><para><emphasis><filename>update-modules</filename>:</emphasis>
                    Removed because it is no longer used.
                    The kernel module <filename>postinstall</filename> and
                    <filename>postrm</filename> scripts can now do the same
                    task without the use of this script.
                    </para></listitem>
                <listitem><para><emphasis><filename>web</filename>:</emphasis>
                    Removed because it is not maintained.  Superseded by
                    <filename>web-webkit</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>xf86bigfontproto</filename>:</emphasis>
                    Removed because upstream it has been disabled by default
                    since 2007.
                    Nothing uses <filename>xf86bigfontproto</filename>.
                    </para></listitem>
                <listitem><para><emphasis><filename>xf86rushproto</filename>:</emphasis>
                    Removed because its dependency in
                    <filename>xserver</filename> was spurious and it was
                    removed in 2005.
                    </para></listitem>
                <listitem><para><emphasis><filename>zypper / libzypp / sat-solver</filename>:</emphasis>
                    Removed and been functionally replaced with Smart
                    (<filename>python-smartpm</filename>) when RPM packaging
                    is used and package management is enabled on the target.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.5-release'>
    <title>Moving to the Yocto Project 1.5 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.5 Release from the prior release.
    </para>

    <section id='migration-1.5-host-dependency-changes'>
        <title>Host Dependency Changes</title>

        <para>
            The OpenEmbedded build system now has some additional requirements
            on the host system:
            <itemizedlist>
                <listitem><para>Python 2.7.3+</para></listitem>
                <listitem><para>Tar 1.24+</para></listitem>
                <listitem><para>Git 1.7.8+</para></listitem>
                <listitem><para>Patched version of Make if you are using
                    3.82.
                    Most distributions that provide Make 3.82 use the patched
                    version.</para></listitem>
            </itemizedlist>
            If the Linux distribution you are using on your build host
            does not provide packages for these, you can install and use
            the Buildtools tarball, which provides an SDK-like environment
            containing them.
        </para>

        <para>
            For more information on this requirement, see the
            "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
            section.
        </para>
    </section>

    <section id='migration-1.5-atom-pc-bsp'>
        <title><filename>atom-pc</filename> Board Support Package (BSP)</title>

        <para>
            The <filename>atom-pc</filename> hardware reference BSP has been
            replaced by a <filename>genericx86</filename> BSP.
            This BSP is not necessarily guaranteed to work on all x86
            hardware, but it will run on a wider range of systems than the
            <filename>atom-pc</filename> did.
            <note>
                Additionally, a <filename>genericx86-64</filename> BSP has
                been added for 64-bit Atom systems.
            </note>
        </para>
    </section>

    <section id='migration-1.5-bitbake'>
        <title>BitBake</title>

        <para>
            The following changes have been made that relate to BitBake:
            <itemizedlist>
                <listitem><para>
                    BitBake now supports a <filename>_remove</filename>
                    operator.
                    The addition of this operator means you will have to
                    rename any items in recipe space (functions, variables)
                    whose names currently contain
                    <filename>_remove_</filename> or end with
                    <filename>_remove</filename> to avoid unexpected behavior.
                    </para></listitem>
                <listitem><para>
                    BitBake's global method pool has been removed.
                    This method is not particularly useful and led to clashes
                    between recipes containing functions that had the
                    same name.</para></listitem>
                <listitem><para>
                    The "none" server backend has been removed.
                    The "process" server backend has been serving well as the
                    default for a long time now.</para></listitem>
                <listitem><para>
                    The <filename>bitbake-runtask</filename> script has been
                    removed.</para></listitem>
                <listitem><para>
                    <filename>${</filename><link linkend='var-P'><filename>P</filename></link><filename>}</filename>
                    and
                    <filename>${</filename><link linkend='var-PF'><filename>PF</filename></link><filename>}</filename>
                    are no longer added to
                    <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
                    by default in <filename>bitbake.conf</filename>.
                    These version-specific <filename>PROVIDES</filename>
                    items were seldom used.
                    Attempting to use them could result in two versions being
                    built simultaneously rather than just one version due to
                    the way BitBake resolves dependencies.</para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-qa-warnings'>
        <title>QA Warnings</title>

        <para>
            The following changes have been made to the package QA checks:
            <itemizedlist>
                <listitem><para>
                    If you have customized
                    <link linkend='var-ERROR_QA'><filename>ERROR_QA</filename></link>
                    or <link linkend='var-WARN_QA'><filename>WARN_QA</filename></link>
                    values in your configuration, check that they contain all of
                    the issues that you wish to be reported.
                    Previous Yocto Project versions contained a bug that meant
                    that any item not mentioned in <filename>ERROR_QA</filename>
                    or <filename>WARN_QA</filename> would be treated as a
                    warning.
                    Consequently, several important items were not already in
                    the default value of <filename>WARN_QA</filename>.
                    All of the possible QA checks are now documented in the
                    "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
                    section.</para></listitem>
                <listitem><para>
                    An additional QA check has been added to check if
                    <filename>/usr/share/info/dir</filename> is being installed.
                    Your recipe should delete this file within
                    <link linkend='ref-tasks-install'><filename>do_install</filename></link>
                    if "make install" is installing it.
                    </para></listitem>
                <listitem><para>
                    If you are using the buildhistory class, the check for the
                    package version going backwards is now controlled using a
                    standard QA check.
                    Thus, if you have customized your
                    <filename>ERROR_QA</filename> or
                    <filename>WARN_QA</filename> values and still wish to have
                    this check performed, you should add
                    "version-going-backwards" to your value for one or the
                    other variables depending on how you wish it to be handled.
                    See the documented QA checks in the
                    "<link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>"
                    section.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-directory-layout-changes'>
        <title>Directory Layout Changes</title>

        <para>
            The following directory changes exist:
            <itemizedlist>
                <listitem><para>
                    Output SDK installer files are now named to include the
                    image name and tuning architecture through the
                    <link linkend='var-SDK_NAME'><filename>SDK_NAME</filename></link>
                    variable.</para></listitem>
                <listitem><para>
                    Images and related files are now installed into a directory
                    that is specific to the machine, instead of a parent
                    directory containing output files for multiple machines.
                    The
                    <link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link>
                    variable continues to point to the directory containing
                    images for the current
                    <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                    and should be used anywhere there is a need to refer to
                    this directory.
                    The <filename>runqemu</filename> script now uses this
                    variable to find images and kernel binaries and will use
                    BitBake to determine the directory.
                    Alternatively, you can set the
                    <filename>DEPLOY_DIR_IMAGE</filename> variable in the
                    external environment.</para></listitem>
                <listitem><para>
                    When buildhistory is enabled, its output is now written
                    under the
                    <link linkend='build-directory'>Build Directory</link>
                    rather than
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>.
                    Doing so makes it easier to delete
                    <filename>TMPDIR</filename> and preserve the build history.
                    Additionally, data for produced SDKs is now split by
                    <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>.
                    </para></listitem>
                <listitem><para>
                    The <filename>pkgdata</filename> directory produced as
                    part of the packaging process has been collapsed into a
                    single machine-specific directory.
                    This directory is located under
                    <filename>sysroots</filename> and uses a machine-specific
                    name (i.e.
                    <filename>tmp/sysroots/<replaceable>machine</replaceable>/pkgdata</filename>).
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-shortened-git-srcrev-values'>
        <title>Shortened Git <filename>SRCREV</filename> Values</title>

        <para>
            BitBake will now shorten revisions from Git repositories from the
            normal 40 characters down to 10 characters within
            <link linkend='var-SRCPV'><filename>SRCPV</filename></link>
            for improved usability in path and file names.
            This change should be safe within contexts where these revisions
            are used because the chances of spatially close collisions
            is very low.
            Distant collisions are not a major issue in the way
            the values are used.
        </para>
    </section>

    <section id='migration-1.5-image-features'>
        <title><filename>IMAGE_FEATURES</filename></title>

        <para>
            The following changes have been made that relate to
            <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>:
            <itemizedlist>
                <listitem><para>
                    The value of <filename>IMAGE_FEATURES</filename> is now
                    validated to ensure invalid feature items are not added.
                    Some users mistakenly add package names to this variable
                    instead of using
                    <link linkend='var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></link>
                    in order to have the package added to the image, which does
                    not work.
                    This change is intended to catch those kinds of situations.
                    Valid <filename>IMAGE_FEATURES</filename> are drawn from
                    <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
                    definitions,
                    <link linkend='var-COMPLEMENTARY_GLOB'><filename>COMPLEMENTARY_GLOB</filename></link>
                    and a new "validitems" varflag on
                    <filename>IMAGE_FEATURES</filename>.
                    The "validitems" varflag change allows additional features
                    to be added if they are not provided using the previous
                    two mechanisms.
                    </para></listitem>
                <listitem><para>
                    The previously deprecated "apps-console-core"
                    <filename>IMAGE_FEATURES</filename> item is no longer
                    supported.
                    Add "splash" to <filename>IMAGE_FEATURES</filename> if you
                    wish to have the splash screen enabled, since this is
                    all that apps-console-core was doing.</para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-run'>
        <title><filename>/run</filename></title>

        <para>
            The <filename>/run</filename> directory from the Filesystem
            Hierarchy Standard 3.0 has been introduced.
            You can find some of the implications for this change
            <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=0e326280a15b0f2c4ef2ef4ec441f63f55b75873'>here</ulink>.
            The change also means that recipes that install files to
            <filename>/var/run</filename> must be changed.
            You can find a guide on how to make these changes
            <ulink url='http://permalink.gmane.org/gmane.comp.handhelds.openembedded/58530'>here</ulink>.
        </para>
    </section>

    <section id='migration-1.5-removal-of-package-manager-database-within-image-recipes'>
        <title>Removal of Package Manager Database Within Image Recipes</title>

        <para>
            The image <filename>core-image-minimal</filename> no longer adds
            <filename>remove_packaging_data_files</filename> to
            <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'><filename>ROOTFS_POSTPROCESS_COMMAND</filename></link>.
            This addition is now handled automatically when "package-management"
            is not in
            <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>.
            If you have custom image recipes that make this addition,
            you should remove the lines, as they are not needed and might
            interfere with correct operation of postinstall scripts.
        </para>
    </section>

    <section id='migration-1.5-images-now-rebuild-only-on-changes-instead-of-every-time'>
        <title>Images Now Rebuild Only on Changes Instead of Every Time</title>

        <para>
            The
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
            and other related image
            construction tasks are no longer marked as "nostamp".
            Consequently, they will only be re-executed when their inputs have
            changed.
            Previous versions of the OpenEmbedded build system always rebuilt
            the image when requested rather when necessary.
        </para>
    </section>

    <section id='migration-1.5-task-recipes'>
        <title>Task Recipes</title>

        <para>
            The previously deprecated <filename>task.bbclass</filename> has
            now been dropped.
            For recipes that previously inherited from this class, you should
            rename them from <filename>task-*</filename> to
            <filename>packagegroup-*</filename> and inherit packagegroup
            instead.
        </para>

        <para>
            For more information, see the
            "<link linkend='ref-classes-packagegroup'><filename>packagegroup.bbclass</filename></link>"
            section.
        </para>
    </section>

    <section id='migration-1.5-busybox'>
        <title>BusyBox</title>

        <para>
            By default, we now split BusyBox into two binaries:
            one that is suid root for those components that need it, and
            another for the rest of the components.
            Splitting BusyBox allows for optimization that eliminates the
            <filename>tinylogin</filename> recipe as recommended by upstream.
            You can disable this split by setting
            <link linkend='var-BUSYBOX_SPLIT_SUID'><filename>BUSYBOX_SPLIT_SUID</filename></link>
            to "0".
        </para>
    </section>

    <section id='migration-1.5-automated-image-testing'>
        <title>Automated Image Testing</title>

        <para>
            A new automated image testing framework has been added
            through the
            <link linkend='ref-classes-testimage*'><filename>testimage.bbclass</filename></link>
            class.
            This framework replaces the older
            <filename>imagetest-qemu</filename> framework.
        </para>

        <para>
            You can learn more about performing automated image tests in 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='migration-1.5-build-history'>
        <title>Build History</title>

        <para>
            Following are changes to Build History:
            <itemizedlist>
                <listitem><para>
                     Installed package sizes:
                     <filename>installed-package-sizes.txt</filename> for an
                     image now records the size of the files installed by each
                     package instead of the size of each compressed package
                     archive file.</para></listitem>
                <listitem><para>
                    The dependency graphs (<filename>depends*.dot</filename>)
                    now use the actual package names instead of replacing
                    dashes, dots and plus signs with underscores.
                    </para></listitem>
                <listitem><para>
                    The <filename>buildhistory-diff</filename> and
                    <filename>buildhistory-collect-srcrevs</filename>
                    utilities have improved command-line handling.
                    Use the <filename>--help</filename> option for
                    each utility for more information on the new syntax.
                    </para></listitem>
            </itemizedlist>
            For more information on 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='migration-1.5-udev'>
        <title><filename>udev</filename></title>

        <para>
            Following are changes to <filename>udev</filename>:
            <itemizedlist>
                <listitem><para>
                    <filename>udev</filename> no longer brings in
                    <filename>udev-extraconf</filename> automatically
                    through
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>,
                    since this was originally intended to be optional.
                    If you need the extra rules, then add
                    <filename>udev-extraconf</filename> to your image.
                    </para></listitem>
                <listitem><para>
                    <filename>udev</filename> no longer brings in
                    <filename>pciutils-ids</filename> or
                    <filename>usbutils-ids</filename> through
                    <filename>RRECOMMENDS</filename>.
                    These are not needed by <filename>udev</filename> itself
                    and removing them saves around 350KB.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.5-removed-renamed-recipes'>
        <title>Removed and Renamed Recipes</title>

        <itemizedlist>
            <listitem><para>
                The <filename>linux-yocto</filename> 3.2 kernel has been
                removed.</para></listitem>
            <listitem><para>
                <filename>libtool-nativesdk</filename> has been renamed to
                <filename>nativesdk-libtool</filename>.</para></listitem>
            <listitem><para>
                <filename>tinylogin</filename> has been removed.
                It has been replaced by a suid portion of Busybox.
                See the
                "<link linkend='migration-1.5-busybox'>BusyBox</link>" section
                for more information.</para></listitem>
            <listitem><para>
                <filename>external-python-tarball</filename> has been renamed
                to <filename>buildtools-tarball</filename>.
                </para></listitem>
            <listitem><para>
                <filename>web-webkit</filename> has been removed.
                It has been functionally replaced by
                <filename>midori</filename>.</para></listitem>
            <listitem><para>
                <filename>imake</filename> has been removed.
                It is no longer needed by any other recipe.
                </para></listitem>
            <listitem><para>
                <filename>transfig-native</filename> has been removed.
                It is no longer needed by any other recipe.
                </para></listitem>
            <listitem><para>
                <filename>anjuta-remote-run</filename> has been removed.
                Anjuta IDE integration has not been officially supported for
                several releases.</para></listitem>
        </itemizedlist>
    </section>

    <section id='migration-1.5-other-changes'>
        <title>Other Changes</title>

        <para>
            Following is a list of short entries describing other changes:
            <itemizedlist>
                <listitem><para>
                    <filename>run-postinsts</filename>: Make this generic.
                    </para></listitem>
                <listitem><para>
                    <filename>base-files</filename>: Remove the unnecessary
                    <filename>media/</filename><replaceable>xxx</replaceable> directories.
                    </para></listitem>
                <listitem><para>
                    <filename>alsa-state</filename>: Provide an empty
                    <filename>asound.conf</filename> by default.
                    </para></listitem>
                <listitem><para>
                    <filename>classes/image</filename>: Ensure
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
                    supports pre-renamed package names.</para></listitem>
                <listitem><para>
                    <filename>classes/rootfs_rpm</filename>: Implement
                    <filename>BAD_RECOMMENDATIONS</filename> for RPM.
                    </para></listitem>
                <listitem><para>
                    <filename>systemd</filename>: Remove
                    <filename>systemd_unitdir</filename> if
                    <filename>systemd</filename> is not in
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
                    </para></listitem>
                <listitem><para>
                    <filename>systemd</filename>: Remove
                    <filename>init.d</filename> dir if
                    <filename>systemd</filename> unit file is present and
                    <filename>sysvinit</filename> is not a distro feature.
                    </para></listitem>
                <listitem><para>
                    <filename>libpam</filename>: Deny all services for the
                    <filename>OTHER</filename> entries.
                    </para></listitem>
                <listitem><para>
                    <filename>image.bbclass</filename>: Move
                    <filename>runtime_mapping_rename</filename> to avoid
                    conflict with <filename>multilib</filename>.
                    See
                    <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=4993'><filename>YOCTO #4993</filename></ulink>
                    in Bugzilla for more information.
                    </para></listitem>
                <listitem><para>
                    <filename>linux-dtb</filename>: Use kernel build system
                    to generate the <filename>dtb</filename> files.
                    </para></listitem>
                <listitem><para>
                    <filename>kern-tools</filename>: Switch from guilt to
                    new <filename>kgit-s2q</filename> tool.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.6-release'>
    <title>Moving to the Yocto Project 1.6 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.6 Release from the prior release.
    </para>


    <section id='migration-1.6-archiver-class'>
        <title><filename>archiver</filename> Class</title>

        <para>
            The
            <link linkend='ref-classes-archiver'><filename>archiver</filename></link>
            class has been rewritten and its configuration has been simplified.
            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.
        </para>
    </section>

    <section id='migration-1.6-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            The following packaging changes have been made:
            <itemizedlist>
                <listitem><para>
                    The <filename>binutils</filename> recipe no longer produces
                    a <filename>binutils-symlinks</filename> package.
                    <filename>update-alternatives</filename> is now used to
                    handle the preferred <filename>binutils</filename>
                    variant on the target instead.
                    </para></listitem>
                <listitem><para>
                    The tc (traffic control) utilities have been split out of
                    the main <filename>iproute2</filename> package and put
                    into the <filename>iproute2-tc</filename> package.
                    </para></listitem>
                <listitem><para>
                    The <filename>gtk-engines</filename> schemas have been
                    moved to a dedicated
                    <filename>gtk-engines-schemas</filename> package.
                    </para></listitem>
                <listitem><para>
                    The <filename>armv7a</filename> with thumb package
                    architecture suffix has changed.
                    The suffix for these packages with the thumb
                    optimization enabled is "t2" as it should be.
                    Use of this suffix was not the case in the 1.5 release.
                    Architecture names will change within package feeds as a
                    result.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.6-bitbake'>
        <title>BitBake</title>

        <para>
            The following changes have been made to
            <link linkend='bitbake-term'>BitBake</link>.
        </para>

        <section id='migration-1.6-matching-branch-requirement-for-git-fetching'>
            <title>Matching Branch Requirement for Git Fetching</title>

            <para>
                When fetching source from a Git repository using
                <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>,
                BitBake will now validate the
                <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
                value against the branch.
                You can specify the branch using the following form:
                <literallayout class='monospaced'>
     SRC_URI = "git://server.name/repository;branch=<replaceable>branchname</replaceable>"
                </literallayout>
                If you do not specify a branch, BitBake looks
                in the default "master" branch.
            </para>

            <para>
                Alternatively, if you need to bypass this check (e.g.
                if you are fetching a revision corresponding to a tag that
                is not on any branch), you can add ";nobranch=1" to
                the end of the URL within <filename>SRC_URI</filename>.
            </para>
        </section>

        <section id='migration-1.6-bitbake-deps'>
            <title>Python Definition substitutions</title>

            <para>
                BitBake had some previously deprecated Python definitions
                within its <filename>bb</filename> module removed.
                You should use their sub-module counterparts instead:
                <itemizedlist>
                    <listitem><para><filename>bb.MalformedUrl</filename>:
                        Use <filename>bb.fetch.MalformedUrl</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.encodeurl</filename>:
                        Use <filename>bb.fetch.encodeurl</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.decodeurl</filename>:
                        Use <filename>bb.fetch.decodeurl</filename>
                        </para></listitem>
                    <listitem><para><filename>bb.mkdirhier</filename>:
                        Use <filename>bb.utils.mkdirhier</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.movefile</filename>:
                        Use <filename>bb.utils.movefile</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.copyfile</filename>:
                        Use <filename>bb.utils.copyfile</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.which</filename>:
                        Use <filename>bb.utils.which</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.vercmp_string</filename>:
                        Use <filename>bb.utils.vercmp_string</filename>.
                        </para></listitem>
                    <listitem><para><filename>bb.vercmp</filename>:
                        Use <filename>bb.utils.vercmp</filename>.
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>

        <section id='migration-1.6-bitbake-fetcher'>
            <title>SVK Fetcher</title>

            <para>
                The SVK fetcher has been removed from BitBake.
            </para>
        </section>

        <section id='migration-1.6-bitbake-console-output'>
            <title>Console Output Error Redirection</title>

            <para>
                The BitBake console UI will now output errors to
                <filename>stderr</filename> instead of
                <filename>stdout</filename>.
                Consequently, if you are piping or redirecting the output of
                <filename>bitbake</filename> to somewhere else, and you wish
                to retain the errors, you will need to add
                <filename>2>&amp;1</filename> (or something similar) to the
                end of your <filename>bitbake</filename> command line.
            </para>
        </section>

        <section id='migration-1.6-task-taskname-overrides'>
            <title><filename>task-</filename><replaceable>taskname</replaceable> Overrides</title>

            <para>
                <filename>task-</filename><replaceable>taskname</replaceable> overrides have been
                adjusted so that tasks whose names contain underscores have the
                underscores replaced by hyphens for the override so that they
                now function properly.
                For example, the task override for
                <link linkend='ref-tasks-populate_sdk'><filename>do_populate_sdk</filename></link>
                is <filename>task-populate-sdk</filename>.
            </para>
        </section>
    </section>

    <section id='migration-1.6-variable-changes'>
        <title>Changes to Variables</title>

        <para>
            The following variables have changed.
            For information on the OpenEmbedded build system variables, see the
            "<link linkend='ref-variables-glos'>Variables Glossary</link>" Chapter.
        </para>

        <section id='migration-1.6-variable-changes-TMPDIR'>
            <title><filename>TMPDIR</filename></title>

            <para>
                <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                can no longer be on an NFS mount.
                NFS does not offer full POSIX locking and inode consistency
                and can cause unexpected issues if used to store
                <filename>TMPDIR</filename>.
            </para>

            <para>
                The check for this occurs on startup.
                If <filename>TMPDIR</filename> is detected on an NFS mount,
                an error occurs.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-PRINC'>
            <title><filename>PRINC</filename></title>

            <para>
                The <filename>PRINC</filename>
                variable has been deprecated and triggers a warning if
                detected during a build.
                For
                <link linkend='var-PR'><filename>PR</filename></link>
                increments on changes, use the PR service instead.
                You can find out more about this service in the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-a-pr-service'>Working With a PR Service</ulink>"
                section in the Yocto Project Development Tasks Manual.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-IMAGE_TYPES'>
            <title><filename>IMAGE_TYPES</filename></title>

            <para>
                The "sum.jffs2" option for
                <link linkend='var-IMAGE_TYPES'><filename>IMAGE_TYPES</filename></link>
                has been replaced by the "jffs2.sum" option, which fits the
                processing order.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-COPY_LIC_MANIFEST'>
            <title><filename>COPY_LIC_MANIFEST</filename></title>

            <para>
                The
                <link linkend='var-COPY_LIC_MANIFEST'><filename>COPY_LIC_MANIFEST</filename></link>
                variable must
                now be set to "1" rather than any value in order to enable
                it.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-COPY_LIC_DIRS'>
            <title><filename>COPY_LIC_DIRS</filename></title>

            <para>
                The
                <link linkend='var-COPY_LIC_DIRS'><filename>COPY_LIC_DIRS</filename></link>
                variable must
                now be set to "1" rather than any value in order to enable
                it.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-PACKAGE_GROUP'>
            <title><filename>PACKAGE_GROUP</filename></title>

            <para>
                The
                <link linkend='var-PACKAGE_GROUP'><filename>PACKAGE_GROUP</filename></link>
                variable has been renamed to
                <link linkend='var-FEATURE_PACKAGES'><filename>FEATURE_PACKAGES</filename></link>
                to more accurately reflect its purpose.
                You can still use <filename>PACKAGE_GROUP</filename> but
                the OpenEmbedded build system produces a warning message when
                it encounters the variable.
            </para>
        </section>

        <section id='migration-1.6-variable-changes-variable-entry-behavior'>
            <title>Preprocess and Post Process Command Variable Behavior</title>

            <para>
                The following variables now expect a semicolon separated
                list of functions to call and not arbitrary shell commands:
                <literallayout class='monospaced'>
     <link linkend='var-ROOTFS_PREPROCESS_COMMAND'>ROOTFS_PREPROCESS_COMMAND</link>
     <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'>ROOTFS_POSTPROCESS_COMMAND</link>
     <link linkend='var-SDK_POSTPROCESS_COMMAND'>SDK_POSTPROCESS_COMMAND</link>
     <link linkend='var-POPULATE_SDK_POST_TARGET_COMMAND'>POPULATE_SDK_POST_TARGET_COMMAND</link>
     <link linkend='var-POPULATE_SDK_POST_HOST_COMMAND'>POPULATE_SDK_POST_HOST_COMMAND</link>
     <link linkend='var-IMAGE_POSTPROCESS_COMMAND'>IMAGE_POSTPROCESS_COMMAND</link>
     <link linkend='var-IMAGE_PREPROCESS_COMMAND'>IMAGE_PREPROCESS_COMMAND</link>
     <link linkend='var-ROOTFS_POSTUNINSTALL_COMMAND'>ROOTFS_POSTUNINSTALL_COMMAND</link>
     <link linkend='var-ROOTFS_POSTINSTALL_COMMAND'>ROOTFS_POSTINSTALL_COMMAND</link>
                </literallayout>
                For migration purposes, you can simply wrap shell commands in
                a shell function and then call the function.
                Here is an example:
                <literallayout class='monospaced'>
     my_postprocess_function() {
        echo "hello" > ${IMAGE_ROOTFS}/hello.txt
     }
     ROOTFS_POSTPROCESS_COMMAND += "my_postprocess_function; "
                </literallayout>
            </para>
        </section>
    </section>

    <section id='migration-1.6-package-test-ptest'>
        <title>Package Test (ptest)</title>

        <para>
            Package Tests (ptest) are built but not installed by default.
            For information on using Package Tests, 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 information on the <filename>ptest</filename> class, see the
            "<link linkend='ref-classes-ptest'><filename>ptest.bbclass</filename></link>"
            section.
        </para>
    </section>

    <section id='migration-1.6-build-changes'>
        <title>Build Changes</title>

        <para>
            Separate build and source directories have been enabled
            by default for selected recipes where it is known to work
            (a whitelist) and for all recipes that inherit the
            <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
            class.
            In future releases the
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
            class will enable a separate build directory by default as
            well.
            Recipes building Autotools-based
            software that fails to build with a separate build directory
            should be changed to inherit from the
            <link linkend='ref-classes-autotools'><filename>autotools-brokensep</filename></link>
            class instead of the <filename>autotools</filename> or
            <filename>autotools_stage</filename>classes.
        </para>
    </section>

    <section id='migration-1.6-building-qemu-native'>
        <title><filename>qemu-native</filename></title>

        <para>
            <filename>qemu-native</filename> now builds without
            SDL-based graphical output support by default.
            The following additional lines are needed in your
            <filename>local.conf</filename> to enable it:
            <literallayout class='monospaced'>
     PACKAGECONFIG_pn-qemu-native = "sdl"
     ASSUME_PROVIDED += "libsdl-native"
            </literallayout>
            <note>
                The default <filename>local.conf</filename>
                contains these statements.
                Consequently, if you are building a headless system and using
                a default <filename>local.conf</filename> file, you will need
                comment these two lines out.
            </note>
        </para>
    </section>

    <section id='migration-1.6-core-image-basic'>
        <title><filename>core-image-basic</filename></title>

        <para>
            <filename>core-image-basic</filename> has been renamed to
            <filename>core-image-full-cmdline</filename>.
        </para>

        <para>
            In addition to <filename>core-image-basic</filename> being renamed,
            <filename>packagegroup-core-basic</filename> has been renamed to
            <filename>packagegroup-core-full-cmdline</filename> to match.
        </para>
    </section>

    <section id='migration-1.6-licensing'>
        <title>Licensing</title>

        <para>
            The top-level <filename>LICENSE</filename> file has been changed
            to better describe the license of the various components of
            <link linkend='oe-core'>OE-Core</link>.
            However, the licensing itself remains unchanged.
        </para>

        <para>
            Normally, this change would not cause any side-effects.
            However, some recipes point to this file within
            <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>
            (as <filename>${COREBASE}/LICENSE</filename>) and thus the
            accompanying checksum must be changed from
            3f40d7994397109285ec7b81fdeb3b58 to
            4d92cd373abda3937c2bc47fbc49d690.
            A better alternative is to have
            <filename>LIC_FILES_CHKSUM</filename> point to a file
            describing the license that is distributed with the source
            that the recipe is building, if possible, rather than pointing
            to <filename>${COREBASE}/LICENSE</filename>.
        </para>
    </section>

    <section id='migration-1.6-cflags-options'>
        <title><filename>CFLAGS</filename> Options</title>

        <para>
            The "-fpermissive" option has been removed from the default
            <link linkend='var-CFLAGS'><filename>CFLAGS</filename></link>
            value.
            You need to take action on individual recipes that fail when
            building with this option.
            You need to either patch the recipes to fix the issues reported by
            the compiler, or you need to add "-fpermissive" to
            <filename>CFLAGS</filename> in the recipes.
        </para>
    </section>

    <section id='migration-1.6-custom-images'>
        <title>Custom Image Output Types</title>

        <para>
            Custom image output types, as selected using
            <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>,
            must declare their dependencies on other image types (if any) using
            a new
            <link linkend='var-IMAGE_TYPEDEP'><filename>IMAGE_TYPEDEP</filename></link>
            variable.
        </para>
    </section>

    <section id='migration-1.6-do-package-write-task'>
        <title>Tasks</title>

        <para>
            The <filename>do_package_write</filename> task has been removed.
            The task is no longer needed.
        </para>
    </section>

    <section id='migration-1.6-update-alternatives-provider'>
        <title><filename>update-alternative</filename> Provider</title>

        <para>
            The default <filename>update-alternatives</filename> provider has
            been changed from <filename>opkg</filename> to
            <filename>opkg-utils</filename>.
            This change resolves some troublesome circular dependencies.
            The runtime package has also been renamed from
            <filename>update-alternatives-cworth</filename>
            to <filename>update-alternatives-opkg</filename>.
        </para>
    </section>

    <section id='migration-1.6-virtclass-overrides'>
        <title><filename>virtclass</filename> Overrides</title>

        <para>
            The <filename>virtclass</filename> overrides are now deprecated.
            Use the equivalent class overrides instead (e.g.
            <filename>virtclass-native</filename> becomes
            <filename>class-native</filename>.)
        </para>
    </section>

    <section id='migration-1.6-removed-renamed-recipes'>
        <title>Removed and Renamed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para><filename>packagegroup-toolset-native</filename> -
                    This recipe is largely unused.
                    </para></listitem>
                <listitem><para><filename>linux-yocto-3.8</filename> -
                    Support for the Linux yocto 3.8 kernel has been dropped.
                    Support for the 3.10 and 3.14 kernels have been added
                    with the <filename>linux-yocto-3.10</filename> and
                    <filename>linux-yocto-3.14</filename> recipes.
                    </para></listitem>
                <listitem><para><filename>ocf-linux</filename> -
                    This recipe has been functionally replaced using
                    <filename>cryptodev-linux</filename>.
                    </para></listitem>
                <listitem><para><filename>genext2fs</filename> -
                    <filename>genext2fs</filename> is no longer used by the
                    build system and is unmaintained upstream.
                    </para></listitem>
                <listitem><para><filename>js</filename> -
                    This provided an ancient version of Mozilla's javascript
                    engine that is no longer needed.
                    </para></listitem>
                <listitem><para><filename>zaurusd</filename> -
                    The recipe has been moved to the
                    <filename>meta-handheld</filename> layer.
                    </para></listitem>
                <listitem><para><filename>eglibc 2.17</filename> -
                    Replaced by the <filename>eglibc 2.19</filename>
                    recipe.
                    </para></listitem>
                <listitem><para><filename>gcc 4.7.2</filename> -
                    Replaced by the now stable
                    <filename>gcc 4.8.2</filename>.
                    </para></listitem>
                <listitem><para><filename>external-sourcery-toolchain</filename> -
                    this recipe is now maintained in the
                    <filename>meta-sourcery</filename> layer.
                    </para></listitem>
                <listitem><para><filename>linux-libc-headers-yocto 3.4+git</filename> -
                    Now using version 3.10 of the
                    <filename>linux-libc-headers</filename> by default.
                    </para></listitem>
                <listitem><para><filename>meta-toolchain-gmae</filename> -
                    This recipe is obsolete.
                    </para></listitem>
                <listitem><para><filename>packagegroup-core-sdk-gmae</filename> -
                    This recipe is obsolete.
                    </para></listitem>
                <listitem><para><filename>packagegroup-core-standalone-gmae-sdk-target</filename> -
                    This recipe is obsolete.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.6-removed-classes'>
        <title>Removed Classes</title>

        <para>
            The following classes have become obsolete and have been removed:
            <itemizedlist>
                <listitem><para><filename>module_strip</filename>
                    </para></listitem>
                <listitem><para><filename>pkg_metainfo</filename>
                    </para></listitem>
                <listitem><para><filename>pkg_distribute</filename>
                    </para></listitem>
                <listitem><para><filename>image-empty</filename>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.6-reference-bsps'>
        <title>Reference Board Support Packages (BSPs)</title>

        <para>
            The following reference BSPs changes occurred:
            <itemizedlist>
                <listitem><para>The BeagleBoard
                    (<filename>beagleboard</filename>) ARM reference hardware
                    has been replaced by the BeagleBone
                    (<filename>beaglebone</filename>) hardware.
                    </para></listitem>
                <listitem><para>The RouterStation Pro
                    (<filename>routerstationpro</filename>) MIPS reference
                    hardware has been replaced by the EdgeRouter Lite
                    (<filename>edgerouter</filename>) hardware.
                    </para></listitem>
            </itemizedlist>
            The previous reference BSPs for the
            <filename>beagleboard</filename> and
            <filename>routerstationpro</filename> machines are still available
            in a new <filename>meta-yocto-bsp-old</filename> layer in the
            <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
            at
            <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/meta-yocto-bsp-old/'>http://git.yoctoproject.org/cgit/cgit.cgi/meta-yocto-bsp-old/</ulink>.
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.7-release'>
    <title>Moving to the Yocto Project 1.7 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.7 Release from the prior release.
    </para>

    <section id='migration-1.7-changes-to-setting-qemu-packageconfig-options'>
        <title>Changes to Setting QEMU <filename>PACKAGECONFIG</filename> Options in <filename>local.conf</filename></title>

        <para>
            The QEMU recipe now uses a number of
            <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
            options to enable various optional features.
            The method used to set defaults for these options means that
            existing
            <filename>local.conf</filename> files will need to be be
            modified to append to <filename>PACKAGECONFIG</filename> for
            <filename>qemu-native</filename> and
            <filename>nativesdk-qemu</filename> instead of setting it.
            In other words, to enable graphical output for QEMU, you should
            now have these lines in <filename>local.conf</filename>:
            <literallayout class='monospaced'>
     PACKAGECONFIG_append_pn-qemu-native = " sdl"
     PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.7-minimum-git-version'>
        <title>Minimum Git version</title>

        <para>
            The minimum
            <ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink> version
            required on the build host is now 1.7.8 because the
            <filename>--list</filename> option is now required by
            BitBake's Git fetcher.
            As always, if your host distribution does not provide a version of
            Git that meets this requirement, you can use the
            <filename>buildtools-tarball</filename> that does.
            See the
            "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
            section for more information.
        </para>
    </section>

    <section id='migration-1.7-autotools-class-changes'>
        <title>Autotools Class Changes</title>

        <para>
            The following
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
            class changes occurred:
            <itemizedlist>
                <listitem><para><emphasis>
                    A separate build directory is now used by default:</emphasis>
                    The <filename>autotools</filename> class has been changed
                    to use a directory for building
                    (<link linkend='var-B'><filename>B</filename></link>),
                    which is separate from the source directory
                    (<link linkend='var-S'><filename>S</filename></link>).
                    This is commonly referred to as
                    <filename>B != S</filename>, or an out-of-tree build.</para>
                    <para>If the software being built is already capable of
                    building in a directory separate from the source, you
                    do not need to do anything.
                    However, if the software is not capable of being built
                    in this manner, you will
                    need to either patch the software so that it can build
                    separately, or you will need to change the recipe to
                    inherit the
                    <link linkend='ref-classes-autotools'><filename>autotools-brokensep</filename></link>
                    class instead of the <filename>autotools</filename> or
                    <filename>autotools_stage</filename> classes.
                    </para></listitem>
                <listitem><para><emphasis>
                    The <filename>--foreign</filename> option is
                    no longer passed to <filename>automake</filename> when
                    running <filename>autoconf</filename>:</emphasis>
                    This option tells <filename>automake</filename> that a
                    particular software package does not follow the GNU
                    standards and therefore should not be expected
                    to distribute certain files such as
                    <filename>ChangeLog</filename>,
                    <filename>AUTHORS</filename>, and so forth.
                    Because the majority of upstream software packages already
                    tell <filename>automake</filename> to enable foreign mode
                    themselves, the option is mostly superfluous.
                    However, some recipes will need patches for this change.
                    You can easily make the change by patching
                    <filename>configure.ac</filename> so that it passes
                    "foreign" to <filename>AM_INIT_AUTOMAKE()</filename>.
                    See
                    <ulink url='http://cgit.openembedded.org/openembedded-core/commit/?id=01943188f85ce6411717fb5bf702d609f55813f2'>this commit</ulink>
                    for an example showing how to make the patch.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.7-binary-configuration-scripts-disabled'>
        <title>Binary Configuration Scripts Disabled</title>

        <para>
            Some of the core recipes that package binary configuration scripts
            now disable the scripts due to the
            scripts previously requiring error-prone path substitution.
            Software that links against these libraries using these scripts
            should use the much more robust <filename>pkg-config</filename>
            instead.
            The list of recipes changed in this version (and their
            configuration scripts) is as follows:
            <literallayout class='monospaced'>
     directfb (directfb-config)
     freetype (freetype-config)
     gpgme (gpgme-config)
     libassuan (libassuan-config)
     libcroco (croco-6.0-config)
     libgcrypt (libgcrypt-config)
     libgpg-error (gpg-error-config)
     libksba (ksba-config)
     libpcap (pcap-config)
     libpcre (pcre-config)
     libpng (libpng-config, libpng16-config)
     libsdl (sdl-config)
     libusb-compat (libusb-config)
     libxml2 (xml2-config)
     libxslt (xslt-config)
     ncurses (ncurses-config)
     neon (neon-config)
     npth (npth-config)
     pth (pth-config)
     taglib (taglib-config)
            </literallayout>
            Additionally, support for <filename>pkg-config</filename> has been
            added to some recipes in the previous list in the rare cases
            where the upstream software package does not already provide
            it.
        </para>
    </section>

    <section id='migration-1.7-glibc-replaces-eglibc'>
        <title><filename>eglibc 2.19</filename> Replaced with <filename>glibc 2.20</filename></title>

        <para>
            Because <filename>eglibc</filename> and
            <filename>glibc</filename> were already fairly close, this
            replacement should not require any significant changes to other
            software that links to <filename>eglibc</filename>.
            However, there were a number of minor changes in
            <filename>glibc 2.20</filename> upstream that could require
            patching some software (e.g. the removal of the
            <filename>_BSD_SOURCE</filename> feature test macro).
        </para>

        <para>
            <filename>glibc 2.20</filename> requires version 2.6.32 or greater
            of the Linux kernel.
            Thus, older kernels will no longer be usable in conjunction with it.
        </para>

        <para>
            For full details on the changes in <filename>glibc 2.20</filename>,
            see the upstream release notes
            <ulink url='https://sourceware.org/ml/libc-alpha/2014-09/msg00088.html'>here</ulink>.
        </para>
    </section>

    <section id='migration-1.7-kernel-module-autoloading'>
        <title>Kernel Module Autoloading</title>

        <para>
            The
            <link linkend='var-module_autoload'><filename>module_autoload_*</filename></link>
            variable is now deprecated and a new
            <link linkend='var-KERNEL_MODULE_AUTOLOAD'><filename>KERNEL_MODULE_AUTOLOAD</filename></link>
            variable should be used instead.
            Also,
            <link linkend='var-module_conf'><filename>module_conf_*</filename></link>
            must now be used in conjunction with a new
            <link linkend='var-KERNEL_MODULE_PROBECONF'><filename>KERNEL_MODULE_PROBECONF</filename></link>
            variable.
            The new variables no longer require you to specify the module name
            as part of the variable name.
            This change not only simplifies usage but also allows the values
            of these variables to be appropriately incorporated into task
            signatures and thus trigger the appropriate tasks to re-execute
            when changed.
            You should replace any references to
            <filename>module_autoload_*</filename> with
            <filename>KERNEL_MODULE_AUTOLOAD</filename>, and add any modules
            for which <filename>module_conf_*</filename> is specified to
            <filename>KERNEL_MODULE_PROBECONF</filename>.
        </para>
    </section>

    <section id='migration-1.7-qa-check-changes'>
        <title>QA Check Changes</title>

        <para>
            The following changes have occurred to the QA check process:
            <itemizedlist>
                <listitem><para>
                    Additional QA checks <filename>file-rdeps</filename>
                    and <filename>build-deps</filename> have been added in
                    order to verify that file dependencies are satisfied
                    (e.g. package contains a script requiring
                    <filename>/bin/bash</filename>) and build-time dependencies
                    are declared, respectively.
                    For more information, please see the
                    "<link linkend='ref-qa-checks'>QA Error and Warning Messages</link>"
                    chapter.
                    </para></listitem>
                <listitem><para>
                    Package QA checks are now performed during a new
                    <link linkend='ref-tasks-package_qa'><filename>do_package_qa</filename></link>
                    task rather than being part of the
                    <link linkend='ref-tasks-package'><filename>do_package</filename></link>
                    task.
                    This allows more parallel execution.
                    This change is unlikely to be an issue except for highly
                    customized recipes that disable packaging tasks themselves
                    by marking them as <filename>noexec</filename>.
                    For those packages, you will need to disable the
                    <filename>do_package_qa</filename> task as well.
                    </para></listitem>
                <listitem><para>
                    Files being overwritten during the
                    <link linkend='ref-tasks-populate_sysroot'><filename>do_populate_sysroot</filename></link>
                    task now trigger an error instead of a warning.
                    Recipes should not be overwriting files written to the
                    sysroot by other recipes.
                    If you have these types of recipes, you need to alter them
                    so that they do not overwrite these files.</para>
                    <para>You might now receive this error after changes in
                    configuration or metadata resulting in orphaned files
                    being left in the sysroot.
                    If you do receive this error, the way to resolve the issue
                    is to delete your
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    or to move it out of the way and then re-start the build.
                    Anything that has been fully built up to that point and
                    does not need rebuilding will be restored from the shared
                    state cache and the rest of the build will be able to
                    proceed as normal.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.7-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <filename>x-load</filename>:
                    This recipe has been superseded by
                    U-boot SPL for all Cortex-based TI SoCs.
                    For legacy boards, the <filename>meta-ti</filename>
                    layer, which contains a maintained recipe, should be used
                    instead.
                    </para></listitem>
                <listitem><para>
                    <filename>ubootchart</filename>:
                    This recipe is obsolete.
                    A <filename>bootchart2</filename> recipe has been added
                    to functionally replace it.
                    </para></listitem>
                <listitem><para>
                    <filename>linux-yocto 3.4</filename>:
                    Support for the linux-yocto 3.4 kernel has been dropped.
                    Support for the 3.10 and 3.14 kernels remains, while
                    support for version 3.17 has been added.
                    </para></listitem>
                <listitem><para>
                    <filename>eglibc</filename> has been removed in favor of
                    <filename>glibc</filename>.
                    See the
                    "<link linkend='migration-1.7-glibc-replaces-eglibc'><filename>eglibc 2.19</filename> Replaced with <filename>glibc 2.20</filename></link>"
                    section for more information.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.7-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous change occurred:
            <itemizedlist>
                <listitem><para>
                    The build history feature now writes
                    <filename>build-id.txt</filename> instead of
                    <filename>build-id</filename>.
                    Additionally, <filename>build-id.txt</filename>
                    now contains the full build header as printed by
                    BitBake upon starting the build.
                    You should manually remove old "build-id" files from your
                    existing build history repositories to avoid confusion.
                    For information on the build history feature, 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></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-1.8-release'>
    <title>Moving to the Yocto Project 1.8 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 1.8 Release from the prior release.
    </para>

    <section id='migration-1.8-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para><filename>owl-video</filename>:
                    Functionality replaced by <filename>gst-player</filename>.
                    </para></listitem>
                <listitem><para><filename>gaku</filename>:
                    Functionality replaced by <filename>gst-player</filename>.
                    </para></listitem>
                <listitem><para><filename>gnome-desktop</filename>:
                    This recipe is now available in
                    <filename>meta-gnome</filename> and is no longer needed.
                    </para></listitem>
                <listitem><para><filename>gsettings-desktop-schemas</filename>:
                    This recipe is now available in
                    <filename>meta-gnome</filename> and is no longer needed.
                    </para></listitem>
                <listitem><para><filename>python-argparse</filename>:
                    The <filename>argparse</filename> module is already
                    provided in the default Python distribution in a
                    package named <filename>python-argparse</filename>.
                    Consequently, the separate
                    <filename>python-argparse</filename> recipe is no
                    longer needed.
                    </para></listitem>
                <listitem><para><filename>telepathy-python, libtelepathy, telepathy-glib, telepathy-idle, telepathy-mission-control</filename>:
                    All these recipes have moved to
                    <filename>meta-oe</filename> and are consequently no
                    longer needed by any recipes in OpenEmbedded-Core.
                    </para></listitem>
                <listitem><para><filename>linux-yocto_3.10</filename> and <filename>linux-yocto_3.17</filename>:
                    Support for the linux-yocto 3.10 and 3.17 kernels has been
                    dropped.
                    Support for the 3.14 kernel remains, while support for
                    3.19 kernel has been added.
                    </para></listitem>
                <listitem><para><filename>poky-feed-config-opkg</filename>:
                    This recipe has become obsolete and is no longer needed.
                    Use <filename>distro-feed-config</filename> from
                    <filename>meta-oe</filename> instead.
                    </para></listitem>
                <listitem><para><filename>libav 0.8.x</filename>:
                    <filename>libav 9.x</filename> is now used.
                    </para></listitem>
                <listitem><para><filename>sed-native</filename>:
                    No longer needed.
                    A working version of <filename>sed</filename> is expected
                    to be provided by the host distribution.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.8-bluez'>
        <title>BlueZ 4.x / 5.x Selection</title>

        <para>
            Proper built-in support for selecting BlueZ 5.x in preference
            to the default of 4.x now exists.
            To use BlueZ 5.x, simply add "bluez5" to your
            <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
            value.
            If you had previously added append files
            (<filename>*.bbappend</filename>) to make this selection, you can
            now remove them.
        </para>

        <para>
            Additionally, a
            <link linkend='ref-classes-bluetooth'><filename>bluetooth</filename></link>
            class has been added to make selection of the appropriate bluetooth
            support within a recipe a little easier.
            If you wish to make use of this class in a recipe, add something
            such as the following:
            <literallayout class='monospaced'>
     inherit bluetooth
     PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', '${BLUEZ}', '', d)}
     PACKAGECONFIG[bluez4] = "--enable-bluetooth,--disable-bluetooth,bluez4"
     PACKAGECONFIG[bluez5] = "--enable-bluez5,--disable-bluez5,bluez5"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.8-kernel-build-changes'>
        <title>Kernel Build Changes</title>

        <para>
            The kernel build process was changed to place the source
            in a common shared work area and to place build artifacts
            separately in the source code tree.
            In theory, migration paths have been provided for most common
            usages in kernel recipes but this might not work in all cases.
            In particular, users need to ensure that
            <filename>${S}</filename> (source files) and
            <filename>${B}</filename> (build artifacts) are used
            correctly in functions such as
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            and
            <link linkend='ref-tasks-install'><filename>do_install</filename></link>.
            For kernel recipes that do not inherit from
            <filename>kernel-yocto</filename> or include
            <filename>linux-yocto.inc</filename>, you might wish to
            refer to the <filename>linux.inc</filename> file in the
            <filename>meta-oe</filename> layer for the kinds of changes you
            need to make.
            For reference, here is the
            <ulink url='http://cgit.openembedded.org/meta-openembedded/commit/meta-oe/recipes-kernel/linux/linux.inc?id=fc7132ede27ac67669448d3d2845ce7d46c6a1ee'>commit</ulink>
            where the <filename>linux.inc</filename> file in
            <filename>meta-oe</filename> was updated.
        </para>

        <para>
            Recipes that rely on the kernel source code and do not inherit
            the module classes might need to add explicit dependencies on
            the <filename>do_shared_workdir</filename> kernel task, for example:
            <literallayout class='monospaced'>
     do_configure[depends] += "virtual/kernel:do_shared_workdir"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.8-ssl'>
        <title>SSL 3.0 is Now Disabled in OpenSSL</title>

        <para>
            SSL 3.0 is now disabled when building OpenSSL.
            Disabling SSL 3.0 avoids any lingering instances of the POODLE
            vulnerability.
            If you feel you must re-enable SSL 3.0, then you can add an
            append file (<filename>*.bbappend</filename>) for the
            <filename>openssl</filename> recipe to remove "-no-ssl3"
            from
            <link linkend='var-EXTRA_OECONF'><filename>EXTRA_OECONF</filename></link>.
        </para>
    </section>

    <section id='migration-1.8-default-sysroot-poisoning'>
        <title>Default Sysroot Poisoning</title>

        <para>
            <filename>gcc's</filename> default sysroot and include directories
            are now "poisoned".
            In other words, the sysroot and include directories are being
            redirected to a non-existent location in order to catch when
            host directories are being used due to the correct options not
            being passed.
            This poisoning applies both to the cross-compiler used within the
            build and to the cross-compiler produced in the SDK.
        </para>

        <para>
            If this change causes something in the build to fail, it almost
            certainly means the various compiler flags and commands are not
            being passed correctly to the underlying piece of software.
            In such cases, you need to take corrective steps.
        </para>
    </section>

    <section id='migration-1.8-rebuild-improvements'>
        <title>Rebuild Improvements</title>

        <para>
            Changes have been made to the
            <link linkend='ref-classes-base'><filename>base</filename></link>,
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>,
            and
            <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
            classes to clean out generated files when the
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task needs to be re-executed.
        </para>

        <para>
            One of the improvements is to attempt to run "make clean" during
            the <filename>do_configure</filename> task if a
            <filename>Makefile</filename> exists.
            Some software packages do not provide a working clean target
            within their make files.
            If you have such recipes, you need to set
            <link linkend='var-CLEANBROKEN'><filename>CLEANBROKEN</filename></link>
            to "1" within the recipe, for example:
            <literallayout class='monospaced'>
     CLEANBROKEN = "1"
            </literallayout>
        </para>
    </section>

    <section id='migration-1.8-qa-check-and-validation-changes'>
        <title>QA Check and Validation Changes</title>

        <para>
            The following QA Check and Validation Changes have occurred:
            <itemizedlist>
                <listitem><para>
                    Usage of <filename>PRINC</filename>
                    previously triggered a warning.
                    It now triggers an error.
                    You should remove any remaining usage of
                    <filename>PRINC</filename> in any recipe or append file.
                    </para></listitem>
                <listitem><para>
                    An additional QA check has been added to detect usage of
                    <filename>${D}</filename> in
                    <link linkend='var-FILES'><filename>FILES</filename></link>
                    values where
                    <link linkend='var-D'><filename>D</filename></link> values
                    should not be used at all.
                    The same check ensures that <filename>$D</filename> is used
                    in
                    <filename>pkg_preinst/pkg_postinst/pkg_prerm/pkg_postrm</filename>
                    functions instead of <filename>${D}</filename>.
                    </para></listitem>
                <listitem><para>
                    <link linkend='var-S'><filename>S</filename></link> now
                    needs to be set to a valid value within a recipe.
                    If <filename>S</filename> is not set in the recipe, the
                    directory is not automatically created.
                    If <filename>S</filename> does not point to a directory
                    that exists at the time the
                    <link linkend='ref-tasks-unpack'><filename>do_unpack</filename></link>
                    task finishes, a warning will be shown.
                    </para></listitem>
                <listitem><para>
                    <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
                    is now validated for correct formatting of multiple
                    licenses.
                    If the format is invalid (e.g. multiple licenses are
                    specified with no operators to specify how the multiple
                    licenses interact), then a warning will be shown.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-1.8-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes have occurred:
            <itemizedlist>
                <listitem><para>
                    The <filename>send-error-report</filename> script now
                    expects a "-s" option to be specified before the server
                    address.
                    This assumes a server address is being specified.
                    </para></listitem>
                <listitem><para>
                    The <filename>oe-pkgdata-util</filename> script now
                    expects a "-p" option to be specified before the
                    <filename>pkgdata</filename> directory, which is now
                    optional.
                    If the <filename>pkgdata</filename> directory is not
                    specified, the script will run BitBake to query
                    <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>
                    from the build environment.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.0-release'>
    <title>Moving to the Yocto Project 2.0 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.0 Release from the prior release.
    </para>

    <section id='migration-2.0-gcc-5'>
        <title>GCC 5</title>

        <para>
            The default compiler is now GCC 5.2.
            This change has required fixes for compilation errors in a number
            of other recipes.
        </para>

        <para>
            One important example is a fix for when the Linux kernel freezes at
            boot time on ARM when built with GCC 5.
            If you are using your own kernel recipe or source tree and
            building for ARM, you will likely need to apply this
            <ulink url='https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=a077224fd35b2f7fbc93f14cf67074fc792fbac2'>patch</ulink>.
            The standard <filename>linux-yocto</filename> kernel source tree
            already has a workaround for the same issue.
        </para>

        <para>
            For further details, see
            <ulink url='https://gcc.gnu.org/gcc-5/changes.html'></ulink> and
            the porting guide at
            <ulink url='https://gcc.gnu.org/gcc-5/porting_to.html'></ulink>.
        </para>

        <para>
            Alternatively, you can switch back to GCC 4.9 or 4.8 by
            setting <filename>GCCVERSION</filename> in your configuration,
            as follows:
            <literallayout class='monospaced'>
     GCCVERSION = "4.9%"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.0-Gstreamer-0.10-removed'>
        <title>Gstreamer 0.10 Removed</title>

        <para>
            Gstreamer 0.10 has been removed in favor of Gstreamer 1.x.
            As part of the change, recipes for Gstreamer 0.10 and related
            software are now located
            in <filename>meta-multimedia</filename>.
            This change results in Qt4 having Phonon and Gstreamer
            support in QtWebkit disabled by default.
        </para>
    </section>

    <section id='migration-2.0-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been moved or removed:
            <itemizedlist>
                <listitem><para>
                    <filename>bluez4</filename>: The recipe is obsolete and
                    has been moved due to <filename>bluez5</filename>
                    becoming fully integrated.
                    The <filename>bluez4</filename> recipe now resides in
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gamin</filename>: The recipe is obsolete and
                    has been removed.
                    </para></listitem>
                <listitem><para>
                    <filename>gnome-icon-theme</filename>: The recipe's
                    functionally has been replaced by
                    <filename>adwaita-icon-theme</filename>.
                    </para></listitem>
                <listitem><para>
                    Gstreamer 0.10 Recipes: Recipes for Gstreamer 0.10 have
                    been removed in favor of the recipes for Gstreamer 1.x.
                    </para></listitem>
                <listitem><para>
                    <filename>insserv</filename>: The recipe is obsolete and
                    has been removed.
                    </para></listitem>
                <listitem><para>
                    <filename>libunique</filename>: The recipe is no longer
                    used and has been moved to <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>midori</filename>: The recipe's functionally
                    has been replaced by <filename>epiphany</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>python-gst</filename>: The recipe is obsolete
                    and has been removed since it only contains bindings for
                    Gstreamer 0.10.
                    </para></listitem>
                <listitem><para>
                    <filename>qt-mobility</filename>: The recipe is obsolete and
                    has been removed since it requires
                    <filename>Gstreamer 0.10</filename>, which has been
                    replaced.
                    </para></listitem>
                <listitem><para>
                    <filename>subversion</filename>: All 1.6.x versions of this
                    recipe have been removed.
                    </para></listitem>
                <listitem><para>
                    <filename>webkit-gtk</filename>: The older 1.8.3 version
                    of this recipe has been removed in favor of
                    <filename>webkitgtk</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-bitbake-datastore-improvements'>
        <title>BitBake datastore improvements</title>

        <para>
            The method by which BitBake's datastore handles overrides has
            changed.
            Overrides are now applied dynamically and
            <filename>bb.data.update_data()</filename> is now a no-op.
            Thus, <filename>bb.data.update_data()</filename> is no longer
            required in order to apply the correct overrides.
            In practice, this change is unlikely to require any changes to
            Metadata.
            However, these minor changes in behavior exist:
            <itemizedlist>
                <listitem><para>
                    All potential overrides are now visible in the variable
                    history as seen when you run the following:
                    <literallayout class='monospaced'>
     $ bitbake -e
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    <filename>d.delVar('</filename><replaceable>VARNAME</replaceable><filename>')</filename> and
                    <filename>d.setVar('</filename><replaceable>VARNAME</replaceable><filename>', None)</filename>
                    result in the variable and all of its overrides being
                    cleared out.
                    Before the change, only the non-overridden values
                    were cleared.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-shell-message-function-changes'>
        <title>Shell Message Function Changes</title>

        <para>
            The shell versions of the BitBake message functions (i.e.
            <filename>bbdebug</filename>, <filename>bbnote</filename>,
            <filename>bbwarn</filename>, <filename>bbplain</filename>,
            <filename>bberror</filename>, and <filename>bbfatal</filename>)
            are now connected through to their BitBake equivalents
            <filename>bb.debug()</filename>, <filename>bb.note()</filename>,
            <filename>bb.warn()</filename>, <filename>bb.plain()</filename>,
            <filename>bb.error()</filename>, and
            <filename>bb.fatal()</filename>, respectively.
            Thus, those message functions that you would expect to be printed
            by the BitBake UI are now actually printed.
            In practice, this change means two things:
            <itemizedlist>
                <listitem><para>
                    If you now see messages on the console that you did not
                    previously see as a result of this change, you might
                    need to clean up the calls to
                    <filename>bbwarn</filename>, <filename>bberror</filename>,
                    and so forth.
                    Or, you might want to simply remove the calls.
                    </para></listitem>
                <listitem><para>
                    The <filename>bbfatal</filename> message function now
                    suppresses the full error log in the UI, which means any
                    calls to <filename>bbfatal</filename> where you still
                    wish to see the full error log should be replaced by
                    <filename>die</filename> or
                    <filename>bbfatal_log</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-extra-development-debug-package-cleanup'>
        <title>Extra Development/Debug Package Cleanup</title>

        <para>
            The following recipes have had extra
            <filename>dev/dbg</filename> packages removed:
            <itemizedlist>
                <listitem><para>
                    <filename>acl</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>apmd</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>aspell</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>attr</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>augeas</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>bzip2</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>cogl</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>curl</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>elfutils</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>gcc-target</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>libgcc</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>libtool</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>libxmu</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>opkg</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>pciutils</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>rpm</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>sysfsutils</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>tiff</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>xz</filename>
                    </para></listitem>
            </itemizedlist>
            All of the above recipes now conform to the standard packaging
            scheme where a single <filename>-dev</filename>,
            <filename>-dbg</filename>, and <filename>-staticdev</filename>
            package exists per recipe.
        </para>
    </section>

    <section id='migration-2.0-recipe-maintenance-tracking-data-moved-to-oe-core'>
        <title>Recipe Maintenance Tracking Data Moved to OE-Core</title>

        <para>
            Maintenance tracking data for recipes that was previously part
            of <filename>meta-yocto</filename> has been moved to
            <link linkend='oe-core'>OE-Core</link>.
            The change includes <filename>package_regex.inc</filename> and
            <filename>distro_alias.inc</filename>, which are typically enabled
            when using the
            <link linkend='ref-classes-distrodata'><filename>distrodata</filename></link>
            class.
            Additionally, the contents of
            <filename>upstream_tracking.inc</filename> has now been split out
            to the relevant recipes.
        </para>
    </section>

    <section id='migration-2.0-automatic-stale-sysroot-file-cleanup'>
        <title>Automatic Stale Sysroot File Cleanup</title>

        <para>
            Stale files from recipes that no longer exist in the current
            configuration are now automatically removed from
            sysroot as well as removed from
            any other place managed by shared state.
            This automatic cleanup means that the build system now properly
            handles situations such as renaming the build system side of
            recipes, removal of layers from
            <filename>bblayers.conf</filename>, and
            <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
            changes.
        </para>

        <para>
            Additionally, work directories for old versions of recipes are
            now pruned.
            If you wish to disable pruning old work directories, you can set
            the following variable in your configuration:
            <literallayout class='monospaced'>
     SSTATE_PRUNE_OBSOLETEWORKDIR = "0"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.0-linux-yocto-kernel-metadata-repository-now-split-from-source'>
        <title><filename>linux-yocto</filename> Kernel Metadata Repository Now Split from Source</title>

        <para>
            The <filename>linux-yocto</filename> tree has up to now been a
            combined set of kernel changes and configuration (meta) data
            carried in a single tree.
            While this format is effective at keeping kernel configuration and
            source modifications synchronized, it is not always obvious to
            developers how to manipulate the Metadata as compared to the
            source.
        </para>

        <para>
            Metadata processing has now been removed from the
            <link linkend='ref-classes-kernel-yocto'><filename>kernel-yocto</filename></link>
            class and the external Metadata repository
            <filename>yocto-kernel-cache</filename>, which has always been used
            to seed the <filename>linux-yocto</filename> "meta" branch.
            This separate <filename>linux-yocto</filename> cache repository
            is now the primary location for this data.
            Due to this change, <filename>linux-yocto</filename> is no longer
            able to process combined trees.
            Thus, if you need to have your own combined kernel repository,
            you must do the split there as well and update your recipes
            accordingly.
            See the <filename>meta/recipes-kernel/linux/linux-yocto_4.1.bb</filename>
            recipe for an example.
        </para>
    </section>

    <section id='migration-2.0-additional-qa-checks'>
        <title>Additional QA checks</title>

        <para>
            The following QA checks have been added:
            <itemizedlist>
                <listitem><para>
                    Added a "host-user-contaminated" check for ownership
                    issues for packaged files outside of
                    <filename>/home</filename>.
                    The check looks for files that are incorrectly owned by the
                    user that ran BitBake instead of owned by a valid user in
                    the target system.
                    </para></listitem>
                <listitem><para>
                    Added an "invalid-chars" check for invalid (non-UTF8)
                    characters in recipe metadata variable values
                    (i.e.
                    <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>).
                    Some package managers do not support these characters.
                    </para></listitem>
                <listitem><para>
                    Added an "invalid-packageconfig" check for any options
                    specified in
                    <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
                    that do not match any <filename>PACKAGECONFIG</filename>
                    option defined for the recipe.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.0-miscellaneous'>
        <title>Miscellaneous Changes</title>

        <para>
            These additional changes exist:
            <itemizedlist>
                <listitem><para>
                    <filename>gtk-update-icon-cache</filename> has been
                    renamed to <filename>gtk-icon-utils</filename>.
                    </para></listitem>
                <listitem><para>
                    The <filename>tools-profile</filename>
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                    item as well as its corresponding packagegroup and
                    <filename>packagegroup-core-tools-profile</filename> no
                    longer bring in <filename>oprofile</filename>.
                    Bringing in <filename>oprofile</filename> was originally
                    added to aid compilation on resource-constrained
                    targets.
                    However, this aid has not been widely used and is not
                    likely to be used going forward due to the more powerful
                    target platforms and the existence of better
                    cross-compilation tools.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    variable's default value now specifies
                    <filename>ext4</filename> instead of
                    <filename>ext3</filename>.
                    </para></listitem>
                <listitem><para>
                    All support for the <filename>PRINC</filename>
                    variable has been removed.
                    </para></listitem>
                <listitem><para>
                    The <filename>packagegroup-core-full-cmdline</filename>
                    packagegroup no longer brings in
                    <filename>lighttpd</filename> due to the fact that
                    bringing in <filename>lighttpd</filename> is not really in
                    line with the packagegroup's purpose, which is to add full
                    versions of command-line tools that by default are
                    provided by <filename>busybox</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.1-release'>
    <title>Moving to the Yocto Project 2.1 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.1 Release from the prior release.
    </para>

    <section id='migration-2.1-variable-expansion-in-python-functions'>
        <title>Variable Expansion in Python Functions</title>

        <para>
            Variable expressions, such as
            <filename>${</filename><replaceable>VARNAME</replaceable><filename>}</filename>
            no longer expand automatically within Python functions.
            Suppressing expansion was done to allow Python functions to
            construct shell scripts or other code for situations in which you
            do not want such expressions expanded.
            For any existing code that relies on these expansions, you need to
            change the expansions to expand the value of individual
            variables through <filename>d.getVar()</filename>.
            To alternatively expand more complex expressions,
            use <filename>d.expand()</filename>.
        </para>
    </section>

    <section id='migration-2.1-overrides-must-now-be-lower-case'>
        <title>Overrides Must Now be Lower-Case</title>

        <para>
            The convention for overrides has always been for them to be
            lower-case characters.
            This practice is now a requirement as BitBake's datastore now
            assumes lower-case characters in order to give a slight performance
            boost during parsing.
            In practical terms, this requirement means that anything that ends
            up in
            <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
            must now appear in lower-case characters (e.g. values for
            <filename>MACHINE</filename>, <filename>TARGET_ARCH</filename>,
            <filename>DISTRO</filename>, and also recipe names if
            <filename>_pn-</filename><replaceable>recipename</replaceable>
            overrides are to be effective).
        </para>
    </section>

    <section id='migration-2.1-expand-parameter-to-getvar-and-getvarflag-now-mandatory'>
        <title>Expand Parameter to <filename>getVar()</filename> and
            <filename>getVarFlag()</filename> is Now Mandatory</title>

        <para>
            The expand parameter to <filename>getVar()</filename> and
            <filename>getVarFlag()</filename> previously defaulted to
            False if not specified.
            Now, however, no default exists so one must be specified.
            You must change any <filename>getVar()</filename> calls that
            do not specify the final expand parameter to calls that do specify
            the parameter.
            You can run the following <filename>sed</filename> command at the
            base of a layer to make this change:
            <literallayout class='monospaced'>
     sed -e 's:\(\.getVar([^,()]*\)):\1, False):g' -i `grep -ril getVar *`
     sed -e 's:\(\.getVarFlag([^,()]*, [^,()]*\)):\1, False):g' -i `grep -ril getVarFlag *`
            </literallayout>
            <note>
                The reason for this change is that it prepares the way for
                changing the default to True in a future Yocto Project release.
                This future change is a much more sensible default than False.
                However, the change needs to be made gradually as a sudden
                change of the default would potentially cause side-effects
                that would be difficult to detect.
            </note>
        </para>
    </section>

    <section id='migration-2.1-makefile-environment-changes'>
        <title>Makefile Environment Changes</title>

        <para>
            <link linkend='var-EXTRA_OEMAKE'><filename>EXTRA_OEMAKE</filename></link>
            now defaults to "" instead of "-e MAKEFLAGS=".
            Setting <filename>EXTRA_OEMAKE</filename> to "-e MAKEFLAGS=" by
            default was a historical accident that has required many classes
            (e.g. <filename>autotools</filename>, <filename>module</filename>)
            and recipes to override this default in order to work with
            sensible build systems.
            When upgrading to the release, you must edit any recipe that
            relies upon this old default by either setting
            <filename>EXTRA_OEMAKE</filename> back to "-e MAKEFLAGS=" or by
            explicitly setting any required variable value overrides using
            <filename>EXTRA_OEMAKE</filename>, which is typically only needed
            when a Makefile sets a default value for a variable that is
            inappropriate for cross-compilation using the "=" operator rather
            than the "?=" operator.
        </para>
    </section>

    <section id='migration-2.1-libexecdir-reverted-to-prefix-libexec'>
        <title><filename>libexecdir</filename> Reverted to <filename>${prefix}/libexec</filename></title>

        <para>
            The use of <filename>${libdir}/${BPN}</filename> as
            <filename>libexecdir</filename> is different as compared to all
            other mainstream distributions, which either uses
            <filename>${prefix}/libexec</filename> or
            <filename>${libdir}</filename>.
            The use is also contrary to the GNU Coding Standards
            (i.e. <ulink url='https://www.gnu.org/prep/standards/html_node/Directory-Variables.html'></ulink>)
            that suggest <filename>${prefix}/libexec</filename> and also
            notes that any package-specific nesting should be done by the
            package itself.
            Finally, having <filename>libexecdir</filename> change between
            recipes makes it very difficult for different recipes to invoke
            binaries that have been installed into
            <filename>libexecdir</filename>.
            The Filesystem Hierarchy Standard
            (i.e. <ulink url='http://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s07.html'></ulink>)
            now recognizes the use of <filename>${prefix}/libexec/</filename>,
            giving distributions the choice between
            <filename>${prefix}/lib</filename> or
            <filename>${prefix}/libexec</filename> without breaking FHS.
        </para>
    </section>

    <section id='migration-2.1-ac-cv-sizeof-off-t-no-longer-cached-in-site-files'>
        <title><filename>ac_cv_sizeof_off_t</filename> is No Longer Cached in Site Files</title>

        <para>
            For recipes inheriting the
            <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
            class, <filename>ac_cv_sizeof_off_t</filename> is no longer cached
            in the site files for <filename>autoconf</filename>.
            The reason for this change is because the
            <filename>ac_cv_sizeof_off_t</filename> value is not necessarily
            static per architecture as was previously assumed.
            Rather, the value changes based on whether large file support is
            enabled.
            For most software that uses <filename>autoconf</filename>, this
            change should not be a problem.
            However, if you have a recipe that bypasses the standard
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task from the <filename>autotools</filename> class and the software
            the recipe is building uses a very old version of
            <filename>autoconf</filename>, the recipe might be incapable of
            determining the correct size of <filename>off_t</filename> during
            <filename>do_configure</filename>.
        </para>

        <para>
            The best course of action is to patch the software as necessary
            to allow the default implementation from the
            <filename>autotools</filename> class to work such that
            <filename>autoreconf</filename> succeeds and produces a working
            configure script, and to remove the
            overridden <filename>do_configure</filename> task such that the
            default implementation does get used.
        </para>
    </section>

    <section id='migration-2.1-image-generation-split-out-from-filesystem-generation'>
        <title>Image Generation is Now Split Out from Filesystem Generation</title>

        <para>
            Previously, for image recipes the
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
            task assembled the filesystem and then from that filesystem
            generated images.
            With this Yocto Project release, image generation is split into
            separate
            <link linkend='ref-tasks-image'><filename>do_image_*</filename></link>
            tasks for clarity both in operation and in the code.
        </para>

        <para>
            For most cases, this change does not present any problems.
            However, if you have made customizations that directly modify the
            <filename>do_rootfs</filename> task or that mention
            <filename>do_rootfs</filename>, you might need to update those
            changes.
            In particular, if you had added any tasks after
            <filename>do_rootfs</filename>, you should make edits so that
            those tasks are after the
            <link linkend='ref-tasks-image-complete'><filename>do_image_complete</filename></link>
            task rather than after <filename>do_rootfs</filename>
            so that the your added tasks
            run at the correct time.
        </para>

        <para>
            A minor part of this restructuring is that the post-processing
            definitions and functions have been moved from the
            <link linkend='ref-classes-image'><filename>image</filename></link>
            class to the
            <link linkend='ref-classes-rootfs*'><filename>rootfs-postcommands</filename></link>
            class.
            Functionally, however, they remain unchanged.
        </para>
    </section>

    <section id='migration-2.1-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed in the 2.1 release:
            <itemizedlist>
                <listitem><para><filename>gcc</filename> version 4.8:
                    Versions 4.9 and 5.3 remain.
                    </para></listitem>
                <listitem><para><filename>qt4</filename>:
                    All support for Qt 4.x has been moved out to a separate
                    <filename>meta-qt4</filename> layer because Qt 4 is no
                    longer supported upstream.
                    </para></listitem>
                <listitem><para><filename>x11vnc</filename>:
                    Moved to the <filename>meta-oe</filename> layer.
                    </para></listitem>
                <listitem><para><filename>linux-yocto-3.14</filename>:
                    No longer supported.
                    </para></listitem>
                <listitem><para><filename>linux-yocto-3.19</filename>:
                    No longer supported.
                    </para></listitem>
                <listitem><para><filename>libjpeg</filename>:
                    Replaced by the <filename>libjpeg-turbo</filename> recipe.
                    </para></listitem>
                <listitem><para><filename>pth</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para><filename>liboil</filename>:
                    Recipe is no longer needed and has been moved to the
                    <filename>meta-multimedia</filename> layer.
                    </para></listitem>
                <listitem><para><filename>gtk-theme-torturer</filename>:
                    Recipe is no longer needed and has been moved to the
                    <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><filename>gnome-mime-data</filename>:
                    Recipe is no longer needed and has been moved to the
                    <filename>meta-gnome</filename> layer.
                    </para></listitem>
                <listitem><para><filename>udev</filename>:
                    Replaced by the <filename>eudev</filename> recipe for
                    compatibility when using <filename>sysvinit</filename>
                    with newer kernels.
                    </para></listitem>
                <listitem><para><filename>python-pygtk</filename>:
                    Recipe became obsolete.
                    </para></listitem>
                <listitem><para><filename>adt-installer</filename>:
                    Recipe became obsolete.
                    See the
                    "<link linkend='migration-2.1-adt-removed'>ADT Removed</link>"
                    section for more information.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-class-changes'>
        <title>Class Changes</title>

        <para>
            The following classes have changed:
            <itemizedlist>
                <listitem><para><filename>autotools_stage</filename>:
                    Removed because the
                    <link linkend='ref-classes-autotools'><filename>autotools</filename></link>
                    class now provides its functionality.
                    Recipes that inherited from
                    <filename>autotools_stage</filename> should now inherit
                    from <filename>autotools</filename> instead.
                    </para></listitem>
                <listitem><para><filename>boot-directdisk</filename>:
                    Merged into the <filename>image-vm</filename>
                    class.
                    The <filename>boot-directdisk</filename> class was rarely
                    directly used.
                    Consequently, this change should not cause any issues.
                    </para></listitem>
                <listitem><para><filename>bootimg</filename>:
                    Merged into the
                    <link linkend='ref-classes-image-live'><filename>image-live</filename></link>
                    class.
                    The <filename>bootimg</filename> class was rarely
                    directly used.
                    Consequently, this change should not cause any issues.
                    </para></listitem>
                <listitem><para><filename>packageinfo</filename>:
                    Removed due to its limited use by the Hob UI, which has
                    itself been removed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-build-system-ui-changes'>
        <title>Build System User Interface Changes</title>

        <para>
            The following changes have been made to the build system user
            interface:
            <itemizedlist>
                <listitem><para><emphasis>Hob GTK+-based UI</emphasis>:
                    Removed because it is unmaintained and based on the
                    outdated GTK+ 2 library.
                    The Toaster web-based UI is much more capable and is
                    actively maintained.
                    See the
                    "<ulink url='&YOCTO_DOCS_TOAST_URL;#using-the-toaster-web-interface'>Using the Toaster Web Interface</ulink>"
                    section in the Toaster User Manual for more
                    information on this interface.
                    </para></listitem>
                <listitem><para><emphasis>"puccho" BitBake UI</emphasis>:
                    Removed because is unmaintained and no longer useful.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-adt-removed'>
        <title>ADT Removed</title>

        <para>
            The Application Development Toolkit (ADT) has been removed
            because its functionality almost completely overlapped with the
            <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-using-the-standard-sdk'>standard SDK</ulink>
            and the
            <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-extensible'>extensible SDK</ulink>.
            For information on these SDKs and how to build and use them, see the
            <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
            manual.
            <note>
                The Yocto Project Eclipse IDE Plug-in is still supported and
                is not affected by this change.
            </note>
        </para>
    </section>

    <section id='migration-2.1-poky-reference-distribution-changes'>
        <title>Poky Reference Distribution Changes</title>

        <para>
            The following changes have been made for the Poky distribution:
            <itemizedlist>
                <listitem><para>
                    The <filename>meta-yocto</filename> layer has been renamed
                    to <filename>meta-poky</filename> to better match its
                    purpose, which is to provide the Poky reference
                    distribution.
                    The <filename>meta-yocto-bsp</filename> layer retains its
                    original name since it provides reference machines for
                    the Yocto Project and it is otherwise unrelated to Poky.
                    References to <filename>meta-yocto</filename> in your
                    <filename>conf/bblayers.conf</filename> should
                    automatically be updated, so you should not need to change
                    anything unless you are relying on this naming elsewhere.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='ref-classes-uninative'><filename>uninative</filename></link>
                    class is now enabled by default in Poky.
                    This class attempts to isolate the build system from the
                    host distribution's C library and makes 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.</para>

                    <para>The <filename>uninative</filename> class is enabled
                    through the
                    <filename>meta/conf/distro/include/yocto-uninative.inc</filename>
                    file, which for those not using the Poky distribution, can
                    include to easily enable the same functionality.</para>

                    <para>Alternatively, if you wish to build your own
                    <filename>uninative</filename> tarball, you can do so by
                    building the <filename>uninative-tarball</filename> recipe,
                    making it available to your build machines
                    (e.g. over HTTP/HTTPS) and setting a similar configuration
                    as the one set by <filename>yocto-uninative.inc</filename>.
                    </para></listitem>
                <listitem><para>
                    Static library generation, for most cases, is now disabled
                    by default in the Poky distribution.
                    Disabling this generation saves some build time as well
                    as the size used for build output artifacts.</para>

                    <para>Disabling this library generation is accomplished
                    through a
                    <filename>meta/conf/distro/include/no-static-libs.inc</filename>,
                    which for those not using the Poky distribution can
                    easily include to enable the same functionality.</para>

                    <para>Any recipe that needs to opt-out of having the
                    "--disable-static" option specified on the configure
                    command line either because it is not a supported option
                    for the configure script or because static libraries are
                    needed should set the following variable:
                    <literallayout class='monospaced'>
     DISABLE_STATIC = ""
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    The separate <filename>poky-tiny</filename> distribution
                    now uses the musl C library instead of a heavily pared
                    down <filename>glibc</filename>.
                    Using musl results in a smaller
                    distribution and facilitates much greater maintainability
                    because musl is designed to have a small footprint.</para>

                    <para>If you have used <filename>poky-tiny</filename> and
                    have customized the <filename>glibc</filename>
                    configuration you will need to redo those customizations
                    with musl when upgrading to the new release.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            The following changes have been made to packaging:
            <itemizedlist>
                <listitem><para>
                    The <filename>runuser</filename> and
                    <filename>mountpoint</filename> binaries, which were
                    previously in the main <filename>util-linux</filename>
                    package, have been split out into the
                    <filename>util-linux-runuser</filename> and
                    <filename>util-linux-mountpoint</filename> packages,
                    respectively.
                    </para></listitem>
                <listitem><para>
                    The <filename>python-elementtree</filename> package has
                    been merged into the <filename>python-xml</filename>
                    package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-tuning-file-changes'>
        <title>Tuning File Changes</title>

        <para>
            The following changes have been made to the tuning files:
            <itemizedlist>
                <listitem><para>
                    The "no-thumb-interwork" tuning feature has been dropped
                    from the ARM tune include files.
                    Because interworking is required for ARM EABI, attempting
                    to disable it through a tuning feature no longer makes
                    sense.
                    <note>
                        Support for ARM OABI was deprecated in gcc 4.7.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>tune-cortexm*.inc</filename> and
                    <filename>tune-cortexr4.inc</filename> files have been
                    removed because they are poorly tested.
                    Until the OpenEmbedded build system officially gains
                    support for CPUs without an MMU, these tuning files would
                    probably be better maintained in a separate layer
                    if needed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.1-supporting-gobject-introspection'>
        <title>Supporting GObject Introspection</title>

        <para>
            This release supports generation of GLib Introspective
            Repository (GIR) files through GObject introspection, which is
            the standard mechanism for accessing GObject-based software from
            runtime environments.
            You can enable, disable, and test the generation of this data.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-gobject-introspection-support'>Enabling GObject Introspection Support</ulink>"
            section in the Yocto Project Development Tasks Manual
            for more information.
        </para>
    </section>

    <section id='migration-2.1-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            These additional changes exist:
            <itemizedlist>
                <listitem><para>
                    The minimum Git version has been increased to 1.8.3.1.
                    If your host distribution does not provide a sufficiently
                    recent version, you can install the buildtools, which
                    will provide it.
                    See the
                    "<link linkend='required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</link>"
                    section for more information on the buildtools tarball.
                    </para></listitem>
                <listitem><para>
                    The buggy and incomplete support for the RPM version 4
                    package manager has been removed.
                    The well-tested and maintained support for RPM version 5
                    remains.
                    </para></listitem>
                <listitem><para>
                    Previously, the following list of packages were removed
                    if package-management was not in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>,
                    regardless of any dependencies:
                    <literallayout class='monospaced'>
     update-rc.d
     base-passwd
     shadow
     update-alternatives
     run-postinsts
                    </literallayout>
                    With the Yocto Project 2.1 release, these packages are only
                    removed if "read-only-rootfs" is in
                    <filename>IMAGE_FEATURES</filename>, since they might
                    still be needed for a read-write image even in the absence
                    of a package manager (e.g. if users need to be added,
                    modified, or removed at runtime).
                    </para></listitem>
                <listitem><para>
                    The
                    <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-devtool-use-devtool-modify-to-modify-the-source-of-an-existing-component'><filename>devtool modify</filename></ulink>
                    command now defaults to extracting the source since that
                    is most commonly expected.
                    The "-x" or "--extract" options are now no-ops.
                    If you wish to provide your own existing source tree, you
                    will now need to specify either the "-n" or
                    "--no-extract" options when running
                    <filename>devtool modify</filename>.
                    </para></listitem>
                <listitem><para>
                    If the formfactor for a machine is either not supplied
                    or does not specify whether a keyboard is attached, then
                    the default is to assume a keyboard is attached rather
                    than assume no keyboard.
                    This change primarily affects the Sato UI.
                   </para></listitem>
                <listitem><para>
                    The <filename>.debug</filename> directory packaging is
                    now automatic.
                    If your recipe builds software that installs binaries into
                    directories other than the standard ones, you no longer
                    need to take care of setting
                    <filename>FILES_${PN}-dbg</filename> to pick up the
                    resulting <filename>.debug</filename> directories as these
                    directories are automatically found and added.
                    </para></listitem>
                <listitem><para>
                    Inaccurate disk and CPU percentage data has been dropped
                    from <filename>buildstats</filename> output.
                    This data has been replaced with
                    <filename>getrusage()</filename> data and corrected IO
                    statistics.
                    You will probably need to update any custom code that reads
                    the <filename>buildstats</filename> data.
                    </para></listitem>
                <listitem><para>
                    The
                    <filename>meta/conf/distro/include/package_regex.inc</filename>
                    is now deprecated.
                    The contents of this file have been moved to individual
                    recipes.
                    <note><title>Tip</title>
                        Because this file will likely be removed in a future
                        Yocto Project release, it is suggested that you remove
                        any references to the file that might be in your
                        configuration.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>v86d/uvesafb</filename> has been removed from
                    the <filename>genericx86</filename> and
                    <filename>genericx86-64</filename> reference machines,
                    which are provided by the
                    <filename>meta-yocto-bsp</filename> layer.
                    Most modern x86 boards do not rely on this file and it only
                    adds kernel error messages during startup.
                    If you do still need to support
                    <filename>uvesafb</filename>, you can
                    simply add <filename>v86d</filename> to your image.
                    </para></listitem>
                <listitem><para>
                     Build sysroot paths are now removed from debug symbol
                     files.
                     Removing these paths means that remote GDB using an
                     unstripped build system sysroot will no longer work
                     (although this was never documented to work).
                     The supported method to accomplish something similar is
                     to set <filename>IMAGE_GEN_DEBUGFS</filename> to "1",
                     which will generate a companion debug image
                     containing unstripped binaries and associated debug
                     sources alongside the image.
                     </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.2-release'>
    <title>Moving to the Yocto Project 2.2 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.2 Release from the prior release.
    </para>

    <section id='migration-2.2-minimum-kernel-version'>
        <title>Minimum Kernel Version</title>

        <para>
            The minimum kernel version for the target system and for SDK
            is now 3.2.0, due to the upgrade
            to <filename>glibc 2.24</filename>.
            Specifically, for AArch64-based targets the version is
            3.14.
            For Nios II-based targets, the minimum kernel version is 3.19.
            <note>
                For x86 and x86_64, you can reset
                <link linkend='var-OLDEST_KERNEL'><filename>OLDEST_KERNEL</filename></link>
                to anything down to 2.6.32 if desired.
            </note>
        </para>
    </section>

    <section id='migration-2.2-staging-directories-in-sysroot-simplified'>
        <title>Staging Directories in Sysroot Has Been Simplified</title>

        <para>
            The way directories are staged in sysroot has been simplified and
            introduces the new
            <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>.
            See the
            <ulink url='http://lists.openembedded.org/pipermail/openembedded-core/2016-May/121365.html'>v2 patch series on the OE-Core Mailing List</ulink>
            for additional information.
        </para>
    </section>

    <section id='migration-2.2-removal-of-old-images-from-tmp-deploy-now-enabled'>
        <title>Removal of Old Images and Other Files in <filename>tmp/deploy</filename> Now Enabled</title>

        <para>
            Removal of old images and other files in
            <filename>tmp/deploy/</filename> is now enabled by default due
            to a new staging method used for those files.
            As a result of this change, the
            <filename>RM_OLD_IMAGE</filename> variable is now redundant.
        </para>
    </section>

    <section id='migration-2.2-python-changes'>
        <title>Python Changes</title>

        <para>
            The following changes for Python occurred:
        </para>

        <section id='migration-2.2-bitbake-now-requires-python-3.4'>
            <title>BitBake Now Requires Python 3.4+</title>

            <para>
                BitBake requires Python 3.4 or greater.
            </para>
        </section>

        <section id='migration-2.2-utf-8-locale-required-on-build-host'>
            <title>UTF-8 Locale Required on Build Host</title>

            <para>
                A UTF-8 locale is required on the build host due to Python 3.
                Since C.UTF-8 is not a standard, the default is en_US.UTF-8.
            </para>
        </section>

        <section id='migration-2.2-metadata-now-must-use-python-3-syntax'>
            <title>Metadata Must Now Use Python 3 Syntax</title>

            <para>
                The metadata is now required to use Python 3 syntax.
                For help preparing metadata, see any of the many Python 3 porting
                guides available.
                Alternatively, you can reference the conversion commits for Bitbake
                and you can use
                <link linkend='oe-core'>OE-Core</link> as a guide for changes.
                Following are particular areas of interest:
                <literallayout class='monospaced'>
     * subprocess command-line pipes needing locale decoding
     * the syntax for octal values changed
     * the <filename>iter*()</filename> functions changed name
     * iterators now return views, not lists
     * changed names for Python modules
                </literallayout>
            </para>
        </section>

        <section id='migration-2.2-target-python-recipes-switched-to-python-3'>
            <title>Target Python Recipes Switched to Python 3</title>

            <para>
                Most target Python recipes have now been switched to Python 3.
                Unfortunately, systems using RPM as a package manager and
                providing online package-manager support through SMART still
                require Python 2.
                <note>
                    Python 2 and recipes that use it can still be built for the
                    target as with previous versions.
                </note>
            </para>
        </section>

        <section id='migration-2.2-buildtools-tarball-includes-python-3'>
            <title><filename>buildtools-tarball</filename> Includes Python 3</title>

            <para>
                <filename>buildtools-tarball</filename> now includes Python 3.
            </para>
        </section>
    </section>

    <section id='migration-2.2-uclibc-replaced-by-musl'>
        <title>uClibc Replaced by musl</title>

        <para>
            uClibc has been removed in favor of musl.
            Musl has matured, is better maintained, and is compatible with a
            wider range of applications as compared to uClibc.
        </para>
    </section>

    <section id='migration-2.2-B-no-longer-default-working-directory-for-tasks'>
        <title><filename>${B}</filename> No Longer Default Working Directory for Tasks</title>

        <para>
            <filename>${</filename><link linkend='var-B'><filename>B</filename></link><filename>}</filename>
            is no longer the default working directory for tasks.
            Consequently, any custom tasks you define now need to either
            have the
            <filename>[</filename><ulink url='&YOCTO_DOCS_BB_URL;#variable-flags'><filename>dirs</filename></ulink><filename>]</filename> flag set, or the task needs to change into the
            appropriate working directory manually (e.g using
            <filename>cd</filename> for a shell task).
            <note>
                The preferred method is to use the
                <filename>[dirs]</filename> flag.
            </note>
        </para>
    </section>

    <section id='migration-2.2-runqemu-ported-to-python'>
        <title><filename>runqemu</filename> Ported to Python</title>

        <para>
            <filename>runqemu</filename> has been ported to Python and has
            changed behavior in some cases.
            Previous usage patterns continue to be supported.
        </para>

        <para>
            The new <filename>runqemu</filename> is a Python script.
            Machine knowledge is no longer hardcoded into
            <filename>runqemu</filename>.
            You can choose to use the <filename>qemuboot</filename>
            configuration file to define the BSP's own arguments and to make
            it bootable with <filename>runqemu</filename>.
            If you use a configuration file, use the following form:
            <literallayout class='monospaced'>
     <replaceable>image-name</replaceable>-<replaceable>machine</replaceable>.qemuboot.conf
            </literallayout>
            The configuration file enables fine-grained tuning of options
            passed to QEMU without the <filename>runqemu</filename> script
            hard-coding any knowledge about different machines.
            Using a configuration file is particularly convenient when trying
            to use QEMU with machines other than the
            <filename>qemu*</filename> machines in
            <link linkend='oe-core'>OE-Core</link>.
            The <filename>qemuboot.conf</filename> file is generated by the
            <filename>qemuboot</filename>
            class when the root filesystem is being build (i.e.
            build rootfs).
            QEMU boot arguments can be set in BSP's configuration file and
            the <filename>qemuboot</filename> class will save them to
            <filename>qemuboot.conf</filename>.
        </para>


        <para>
            If you want to use <filename>runqemu</filename> without a
            configuration file, use the following command form:
            <literallayout class='monospaced'>
     $ runqemu <replaceable>machine</replaceable> <replaceable>rootfs</replaceable> <replaceable>kernel</replaceable> [<replaceable>options</replaceable>]
            </literallayout>
            Supported <replaceable>machines</replaceable> are as follows:
            <literallayout class='monospaced'>
     qemuarm
     qemuarm64
     qemux86
     qemux86-64
     qemuppc
     qemumips
     qemumips64
     qemumipsel
     qemumips64el
            </literallayout>
            Consider the following example, which uses the
            <filename>qemux86-64</filename> machine,
            provides a root filesystem, provides an image, and uses
            the <filename>nographic</filename> option:
            <literallayout class='monospaced'>
$ runqemu qemux86-64 tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4 tmp/deploy/images/qemux86-64/bzImage nographic
            </literallayout>
        </para>

        <para>
            Following is a list of variables that can be set in configuration
            files such as <filename>bsp.conf</filename> to enable the BSP
            to be booted by <filename>runqemu</filename>:
            <note>
                "QB" means "QEMU Boot".
            </note>
            <literallayout class='monospaced'>
     QB_SYSTEM_NAME: QEMU name (e.g. "qemu-system-i386")
     QB_OPT_APPEND: Options to append to QEMU (e.g. "-show-cursor")
     QB_DEFAULT_KERNEL: Default kernel to boot (e.g. "bzImage")
     QB_DEFAULT_FSTYPE: Default FSTYPE to boot (e.g. "ext4")
     QB_MEM: Memory (e.g. "-m 512")
     QB_MACHINE: QEMU machine (e.g. "-machine virt")
     QB_CPU: QEMU cpu (e.g. "-cpu qemu32")
     QB_CPU_KVM: Similar to QB_CPU except used for kvm support (e.g. "-cpu kvm64")
     QB_KERNEL_CMDLINE_APPEND: Options to append to the kernel's -append
                               option (e.g. "console=ttyS0 console=tty")
     QB_DTB: QEMU dtb name
     QB_AUDIO_DRV: QEMU audio driver (e.g. "alsa", set it when support audio)
     QB_AUDIO_OPT: QEMU audio option (e.g. "-soundhw ac97,es1370"), which is used
                   when QB_AUDIO_DRV is set.
     QB_KERNEL_ROOT: Kernel's root (e.g. /dev/vda)
     QB_TAP_OPT: Network option for 'tap' mode (e.g.
                 "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no -device virtio-net-device,netdev=net0").
                  runqemu will replace "@TAP@" with the one that is used, such as tap0, tap1 ...
     QB_SLIRP_OPT: Network option for SLIRP mode (e.g. "-netdev user,id=net0 -device virtio-net-device,netdev=net0")
     QB_ROOTFS_OPT: Used as rootfs (e.g.
                    "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0").
                    runqemu will replace "@ROOTFS@" with the one which is used, such as
                    core-image-minimal-qemuarm64.ext4.
     QB_SERIAL_OPT: Serial port (e.g. "-serial mon:stdio")
     QB_TCPSERIAL_OPT: tcp serial port option (e.g.
                       " -device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device      virtconsole,chardev=virtcon"
                       runqemu will replace "@PORT@" with the port number which is used.
            </literallayout>
        </para>

        <para>
            To use <filename>runqemu</filename>, set
            <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
            as follows and run <filename>runqemu</filename>:
            <note>
                For command-line syntax, use
                <filename>runqemu help</filename>.
            </note>
            <literallayout class='monospaced'>
     IMAGE_CLASSES += "qemuboot"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.2-default-linker-hash-style-changed'>
        <title>Default Linker Hash Style Changed</title>

        <para>
            The default linker hash style for <filename>gcc-cross</filename>
            is now "sysv" in order to catch recipes that are building software
            without using the OpenEmbedded
            <link linkend='var-LDFLAGS'><filename>LDFLAGS</filename></link>.
            This change could result in seeing some "No GNU_HASH in the elf
            binary" QA issues when building such recipes.
            You need to fix these recipes so that they use the expected
            <filename>LDFLAGS</filename>.
            Depending on how the software is built, the build system used by
            the software (e.g. a Makefile) might need to be patched.
            However, sometimes making this fix is as simple as adding the
            following to the recipe:
            <literallayout class='monospaced'>
     TARGET_CC_ARCH += "${LDFLAGS}"
            </literallayout>
        </para>
    </section>

    <section id='migration-2.2-kernel-image-base-name-no-longer-uses-kernel-imagetype'>
        <title><filename>KERNEL_IMAGE_BASE_NAME</filename> no Longer Uses <filename>KERNEL_IMAGETYPE</filename></title>

        <para>
            The
            <filename>KERNEL_IMAGE_BASE_NAME</filename>
            variable no longer uses the
            <link linkend='var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></link>
            variable to create the image's base name.
            Because the OpenEmbedded build system can now build multiple kernel
            image types, this part of the kernel image base name as been
            removed leaving only the following:
            <literallayout class='monospaced'>
     KERNEL_IMAGE_BASE_NAME ?= "${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}
            </literallayout>
            If you have recipes or classes that use
            <filename>KERNEL_IMAGE_BASE_NAME</filename> directly, you might
            need to update the references to ensure they continue to work.
        </para>
    </section>

    <section id='migration-2.2-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following changes took place for BitBake:
            <itemizedlist>
                <listitem><para>
                    The "goggle" UI and standalone image-writer tool have
                    been removed as they both require GTK+ 2.0 and
                    were not being maintained.
                    </para></listitem>
                <listitem><para>
                    The Perforce fetcher now supports
                    <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
                    for specifying the source revision to use, be it
                    <filename>${</filename><link linkend='var-AUTOREV'><filename>AUTOREV</filename></link><filename>}</filename>,
                    changelist number, p4date, or label, in preference to
                    separate
                    <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
                    parameters to specify these.
                    This change is more in-line with how the other fetchers
                    work for source control systems.
                    Recipes that fetch from Perforce will need to be updated
                    to use <filename>SRCREV</filename> in place of specifying
                    the source revision within
                    <filename>SRC_URI</filename>.
                    </para></listitem>
                <listitem><para>
                    Some of BitBake's internal code structures for accessing
                    the recipe cache needed to be changed to support the new
                    multi-configuration functionality.
                    These changes will affect external tools that use BitBake's
                    tinfoil module.
                    For information on these changes, see the changes made to
                    the scripts supplied with OpenEmbedded-Core:
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=189371f8393971d00bca0fceffd67cc07784f6ee'>1</ulink>
                    and
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=4a5aa7ea4d07c2c90a1654b174873abb018acc67'>2</ulink>.
                    </para></listitem>
                <listitem><para>
                    The task management code has been rewritten to avoid using
                    ID indirection in order to improve performance.
                    This change is unlikely to cause any problems for most
                    users.
                    However, the setscene verification function as pointed to
                    by <filename>BB_SETSCENE_VERIFY_FUNCTION</filename>
                    needed to change signature.
                    Consequently, a new variable named
                    <filename>BB_SETSCENE_VERIFY_FUNCTION2</filename>
                    has been added allowing multiple versions of BitBake
                    to work with suitably written metadata, which includes
                    OpenEmbedded-Core and Poky.
                    Anyone with custom BitBake task scheduler code might also
                    need to update the code to handle the new structure.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-swabber-has-been-removed'>
        <title>Swabber has Been Removed</title>

        <para>
            Swabber, a tool that was intended to detect host contamination in
            the build process, has been removed, as it has been unmaintained
            and unused for some time and was never particularly effective.
            The OpenEmbedded build system has since incorporated a number of
            mechanisms including enhanced QA checks that mean that there is
            less of a need for such a tool.
        </para>
    </section>

    <section id='migration-2.2-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <filename>augeas</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>directfb</filename>:
                    Unmaintained and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gcc</filename>:
                    Removed 4.9 version.
                    Versions 5.4 and 6.2 are still present.
                    </para></listitem>
                <listitem><para>
                    <filename>gnome-doc-utils</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-doc-stub</filename>:
                    Replaced by <filename>gtk-doc</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-engines</filename>:
                    No longer needed and has been moved to
                    <filename>meta-gnome</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-sato-engine</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para>
                    <filename>libglade</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>libmad</filename>:
                    Unmaintained and functionally replaced by
                    <filename>libmpg123</filename>.
                    <filename>libmad</filename> has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>libowl</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para>
                    <filename>libxsettings-client</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>oh-puzzles</filename>:
                    Functionally replaced by
                    <filename>puzzles</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>oprofileui</filename>:
                    Became obsolete.
                    OProfile has been largely supplanted by perf.
                    </para></listitem>
                <listitem><para>
                    <filename>packagegroup-core-directfb.bb</filename>:
                    Removed.
                    </para></listitem>
                <listitem><para>
                    <filename>core-image-directfb.bb</filename>:
                    Removed.
                    </para></listitem>
                <listitem><para>
                    <filename>pointercal</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>python-imaging</filename>:
                    No longer needed and moved to
                    <filename>meta-python</filename>
                    </para></listitem>
                <listitem><para>
                    <filename>python-pyrex</filename>:
                    No longer needed and moved to
                    <filename>meta-python</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>sato-icon-theme</filename>:
                    Became obsolete.
                    </para></listitem>
                <listitem><para>
                    <filename>swabber-native</filename>:
                    Swabber has been removed.
                    See the
                    <link linkend='migration-2.2-swabber-has-been-removed'>entry on Swabber</link>.
                    </para></listitem>
                <listitem><para>
                    <filename>tslib</filename>:
                    No longer needed and has been moved to
                    <filename>meta-oe</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>uclibc</filename>:
                    Removed in favor of musl.
                    </para></listitem>
                <listitem><para>
                    <filename>xtscal</filename>:
                    No longer needed and moved to
                    <filename>meta-oe</filename>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-removed-classes'>
        <title>Removed Classes</title>

        <para>
            The following classes have been removed:
            <itemizedlist>
                <listitem><para>
                    <filename>distutils-native-base</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>distutils3-native-base</filename>:
                    No longer needed.
                    </para></listitem>
                <listitem><para>
                    <filename>sdl</filename>:
                    Only set
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    and
                    <link linkend='var-SECTION'><filename>SECTION</filename></link>,
                    which are better set within the recipe instead.
                    </para></listitem>
                <listitem><para>
                    <filename>sip</filename>:
                    Mostly unused.
                    </para></listitem>
                <listitem><para>
                    <filename>swabber</filename>:
                    See the
                    <link linkend='migration-2.2-swabber-has-been-removed'>entry on Swabber</link>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-minor-packaging-changes'>
        <title>Minor Packaging Changes</title>

        <para>
            The following minor packaging changes have occurred:
            <itemizedlist>
                <listitem><para>
                    <filename>grub</filename>:
                    Split <filename>grub-editenv</filename> into its own
                    package.
                    </para></listitem>
                <listitem><para>
                    <filename>systemd</filename>:
                    Split container and vm related units into a new package,
                    systemd-container.
                    </para></listitem>
                <listitem><para>
                    <filename>util-linux</filename>:
                    Moved <filename>prlimit</filename> to a separate
                    <filename>util-linux-prlimit</filename> package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.2-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes have occurred:
            <itemizedlist>
                <listitem><para>
                    <filename>package_regex.inc</filename>:
                    Removed because the definitions
                    <filename>package_regex.inc</filename> previously contained
                    have been moved to their respective recipes.
                    </para></listitem>
                <listitem><para>
                    Both <filename>devtool add</filename> and
                    <filename>recipetool create</filename> now use a fixed
                    <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
                    by default when fetching from a Git repository.
                    You can override this in either case to use
                    <filename>${</filename><link linkend='var-AUTOREV'><filename>AUTOREV</filename></link><filename>}</filename>
                    instead by using the <filename>-a</filename> or
                    <filename>&dash;&dash;autorev</filename> command-line
                    option
                    </para></listitem>
                <listitem><para>
                    <filename>distcc</filename>:
                    GTK+ UI is now disabled by default.
                    </para></listitem>
                <listitem><para>
                    <filename>packagegroup-core-tools-testapps</filename>:
                    Removed Piglit.
                    </para></listitem>
                <listitem><para>
                    <filename>image.bbclass</filename>:
                    Renamed COMPRESS(ION) to CONVERSION.
                    This change means that
                    <filename>COMPRESSIONTYPES</filename>,
                    <filename>COMPRESS_DEPENDS</filename> and
                    <filename>COMPRESS_CMD</filename> are deprecated in favor
                    of <filename>CONVERSIONTYPES</filename>,
                    <filename>CONVERSION_DEPENDS</filename> and
                    <filename>CONVERSION_CMD</filename>.
                    The <filename>COMPRESS*</filename> variable names will
                    still work in the 2.2 release but metadata that does not
                    need to be backwards-compatible should be changed to
                    use the new names as the <filename>COMPRESS*</filename>
                    ones will be removed in a future release.
                    </para></listitem>
                <listitem><para>
                    <filename>gtk-doc</filename>:
                    A full version of <filename>gtk-doc</filename> is now
                    made available.
                    However, some old software might not be capable of using
                    the current version of <filename>gtk-doc</filename>
                    to build documentation.
                    You need to change recipes that build such software so that
                    they explicitly disable building documentation with
                    <filename>gtk-doc</filename>.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.3-release'>
    <title>Moving to the Yocto Project 2.3 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.3 Release from the prior release.
    </para>

    <section id='migration-2.3-recipe-specific-sysroots'>
        <title>Recipe-specific Sysroots</title>

        <para>
            The OpenEmbedded build system now uses one sysroot per
            recipe to resolve long-standing issues with configuration
            script auto-detection of undeclared dependencies.
            Consequently, you might find that some of your previously
            written custom recipes are missing declared dependencies,
            particularly those dependencies that are incidentally built
            earlier in a typical build process and thus are already likely
            to be present in the shared sysroot in previous releases.
        </para>

        <para>
            Consider the following:
            <itemizedlist>
                <listitem><para>
                    <emphasis>Declare Build-Time Dependencies:</emphasis>
                    Because of this new feature, you must explicitly
                    declare all build-time dependencies for your recipe.
                    If you do not declare these dependencies, they are not
                    populated into the sysroot for the recipe.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Specify Pre-Installation and Post-Installation
                    Native Tool Dependencies:</emphasis>
                    You must specifically specify any special native tool
                    dependencies of <filename>pkg_preinst</filename> and
                    <filename>pkg_postinst</filename> scripts by using the
                    <link linkend='var-PACKAGE_WRITE_DEPS'><filename>PACKAGE_WRITE_DEPS</filename></link>
                    variable.
                    Specifying these dependencies ensures that these tools
                    are available if these scripts need to be run on the
                    build host during the
                    <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
                    task.</para>

                    <para>As an example, see the <filename>dbus</filename>
                    recipe.
                    You will see that this recipe has a
                    <filename>pkg_postinst</filename> that calls
                    <filename>systemctl</filename> if "systemd" is in
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>.
                    In the example,
                    <filename>systemd-systemctl-native</filename> is added to
                    <filename>PACKAGE_WRITE_DEPS</filename>, which is also
                    conditional on "systemd" being in
                    <filename>DISTRO_FEATURES</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Examine Recipes that Use
                    <filename>SSTATEPOSTINSTFUNCS</filename>:</emphasis>
                    You need to examine any recipe that uses
                    <filename>SSTATEPOSTINSTFUNCS</filename> and determine
                    steps to take.</para>

                    <para>Functions added to
                    <filename>SSTATEPOSTINSTFUNCS</filename> are still
                    called as they were in previous Yocto Project releases.
                    However, since a separate sysroot is now being populated
                    for every recipe and if existing functions being called
                    through <filename>SSTATEPOSTINSTFUNCS</filename> are
                    doing relocation, then you will need to change these
                    to use a post-installation script that is installed by a
                    function added to
                    <link linkend='var-SYSROOT_PREPROCESS_FUNCS'><filename>SYSROOT_PREPROCESS_FUNCS</filename></link>.
                    </para>

                    <para>For an example, see the
                    <filename>pixbufcache</filename> class in
                    <filename>meta/classes/</filename> in the Yocto Project
                    <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>.
                    <note>
                        The <filename>SSTATEPOSTINSTFUNCS</filename> variable
                        itself is now deprecated in favor of the
                        <filename>do_populate_sysroot[postfuncs]</filename>
                        task.
                        Consequently, if you do still have any function or
                        functions that need to be called after the sysroot
                        component is created for a recipe, then you would be
                        well advised to take steps to use a post installation
                        script as described previously.
                        Taking these steps prepares your code for when
                        <filename>SSTATEPOSTINSTFUNCS</filename> is
                        removed in a future Yocto Project release.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Specify the Sysroot when Using Certain
                    External Scripts:</emphasis>
                    Because the shared sysroot is now gone, the scripts
                    <filename>oe-find-native-sysroot</filename> and
                    <filename>oe-run-native</filename> have been changed such
                    that you need to specify which recipe's
                    <link linkend='var-STAGING_DIR_NATIVE'><filename>STAGING_DIR_NATIVE</filename></link>
                    is used.
                    </para></listitem>
            </itemizedlist>
            <note>
                You can find more information on how recipe-specific sysroots
                work in the
                "<link linkend='ref-classes-staging'><filename>staging.bbclass</filename></link>"
                section.
            </note>
        </para>
    </section>

    <section id='migration-2.3-path-variable'>
        <title><filename>PATH</filename> Variable</title>

        <para>
            Within the environment used to run build tasks, the environment
            variable <filename>PATH</filename> is now sanitized such that
            the normal native binary paths
            (<filename>/bin</filename>, <filename>/sbin</filename>,
            <filename>/usr/bin</filename> and so forth) are
            removed and a directory containing symbolic links linking only
            to the binaries from the host mentioned in the
            <link linkend='var-HOSTTOOLS'><filename>HOSTTOOLS</filename></link>
            and
            <link linkend='var-HOSTTOOLS_NONFATAL'><filename>HOSTTOOLS_NONFATAL</filename></link>
            variables is added to <filename>PATH</filename>.
        </para>

        <para>
            Consequently, any native binaries provided by the host that you
            need to call needs to be in one of these two variables at
            the configuration level.
        </para>

        <para>
            Alternatively, you can add a native recipe (i.e.
            <filename>-native</filename>) that provides the
            binary to the recipe's
            <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
            value.
            <note>
                <filename>PATH</filename> is not sanitized in the same way
                within <filename>devshell</filename>.
                If it were, you would have difficulty running host tools for
                development and debugging within the shell.
            </note>
        </para>
    </section>

    <section id='migration-2.3-scripts'>
        <title>Changes to Scripts</title>

        <para>
            The following changes to scripts took place:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>oe-find-native-sysroot</filename>:</emphasis>
                    The usage for the
                    <filename>oe-find-native-sysroot</filename> script has
                    changed to the following:
                    <literallayout class='monospaced'>
     $ . oe-find-native-sysroot <replaceable>recipe</replaceable>
                    </literallayout>
                    You must now supply a recipe for
                    <replaceable>recipe</replaceable> as part of the command.
                    Prior to the Yocto Project &DISTRO; release, it was not
                    necessary to provide the script with the command.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>oe-run-native</filename>:</emphasis>
                    The usage for the
                    <filename>oe-run-native</filename> script has changed
                    to the following:
                    <literallayout class='monospaced'>
     $ oe-run-native <replaceable>native_recipe</replaceable> <replaceable>tool</replaceable>
                    </literallayout>
                    You must supply the name of the native recipe and the tool
                    you want to run as part of the command.
                    Prior to the Yocto Project &DISTRO; release, it was not
                    necessary to provide the native recipe with the command.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>cleanup-workdir</filename>:</emphasis>
                    The <filename>cleanup-workdir</filename> script has been
                    removed because the script was found to be deleting
                    files it should not have, which lead to broken build
                    trees.
                    Rather than trying to delete portions of
                    <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
                    and getting it wrong, it is recommended that you
                    delete <filename>TMPDIR</filename> and have it restored
                    from shared state (sstate) on subsequent builds.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>wipe-sysroot</filename>:</emphasis>
                    The <filename>wipe-sysroot</filename> script has been
                    removed as it is no longer needed with recipe-specific
                    sysroots.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-functions'>
        <title>Changes to Functions</title>

        <para>
            The previously deprecated
            <filename>bb.data.getVar()</filename>,
            <filename>bb.data.setVar()</filename>, and
            related functions have been removed in favor of
            <filename>d.getVar()</filename>,
            <filename>d.setVar()</filename>, and so forth.
        </para>

        <para>
            You need to fix any references to these old functions.
        </para>
    </section>

    <section id='migration-2.3-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following changes took place for BitBake:
            <itemizedlist>
                <listitem><para>
                    <emphasis>BitBake's Graphical Dependency Explorer UI Replaced:</emphasis>
                    BitBake's graphical dependency explorer UI
                    <filename>depexp</filename> was replaced by
                    <filename>taskexp</filename> ("Task Explorer"), which
                    provides a graphical way of exploring the
                    <filename>task-depends.dot</filename> file.
                    The data presented by Task Explorer is much more
                    accurate than the data that was presented by
                    <filename>depexp</filename>.
                    Being able to visualize the data is an often requested
                    feature as standard <filename>*.dot</filename> file
                    viewers cannot usual cope with the size of
                    the <filename>task-depends.dot</filename> file.
                    </para></listitem>
                <listitem><para>
                    <emphasis>BitBake "-g" Output Changes:</emphasis>
                    The <filename>package-depends.dot</filename> and
                    <filename>pn-depends.dot</filename> files as previously
                    generated using the <filename>bitbake -g</filename> command
                    have been removed.
                    A <filename>recipe-depends.dot</filename> file
                    is now generated as a collapsed version of
                    <filename>task-depends.dot</filename> instead.
                    </para>

                    <para>The reason for this change is because
                    <filename>package-depends.dot</filename> and
                    <filename>pn-depends.dot</filename> largely date back
                    to a time before task-based execution and do not take
                    into account task-level dependencies between recipes,
                    which could be misleading.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Mirror Variable Splitting Changes:</emphasis>
                    Mirror variables including
                    <link linkend='var-MIRRORS'><filename>MIRRORS</filename></link>,
                    <link linkend='var-PREMIRRORS'><filename>PREMIRRORS</filename></link>,
                    and
                    <link linkend='var-SSTATE_MIRRORS'><filename>SSTATE_MIRRORS</filename></link>
                    can now separate values entirely with spaces.
                    Consequently, you no longer need "\\n".
                    BitBake looks for pairs of values, which simplifies usage.
                    There should be no change required to existing mirror
                    variable values themselves.
                    </para></listitem>
                <listitem><para>
                    <emphasis>The Subversion (SVN) Fetcher Uses an "ssh" Parameter and Not an "rsh" Parameter:</emphasis>
                    The SVN fetcher now takes an "ssh" parameter instead of an
                    "rsh" parameter.
                    This new optional parameter is used when the "protocol"
                    parameter is set to "svn+ssh".
                    You can only use the new parameter to specify the
                    <filename>ssh</filename> program used by SVN.
                    The SVN fetcher passes the new parameter through the
                    <filename>SVN_SSH</filename> environment variable during
                    the
                    <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>
                    task.</para>

                    <para>See the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#svn-fetcher'>Subversion (SVN) Fetcher (svn://)</ulink>"
                    section in the BitBake User Manual for additional
                    information.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>BB_SETSCENE_VERIFY_FUNCTION</filename>
                    and <filename>BB_SETSCENE_VERIFY_FUNCTION2</filename>
                    Removed:</emphasis>
                    Because the mechanism they were part of is no longer
                    necessary with recipe-specific sysroots, the
                    <filename>BB_SETSCENE_VERIFY_FUNCTION</filename> and
                    <filename>BB_SETSCENE_VERIFY_FUNCTION2</filename>
                    variables have been removed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-absolute-symlinks'>
        <title>Absolute Symbolic Links</title>

        <para>
            Absolute symbolic links (symlinks) within staged files are no
            longer permitted and now trigger an error.
            Any explicit creation of symlinks can use the
            <filename>lnr</filename> script, which is a replacement for
            <filename>ln -r</filename>.
        </para>

        <para>
            If the build scripts in the software that the recipe is building
            are creating a number of absolute symlinks that need to be
            corrected, you can inherit
            <filename>relative_symlinks</filename> within the recipe to turn
            those absolute symlinks into relative symlinks.
        </para>
    </section>

    <section id='migration-2.3-gplv2-and-gplv3-moves'>
        <title>GPLv2 Versions of GPLv3 Recipes Moved</title>

        <para>
            Older GPLv2 versions of GPLv3 recipes have moved to a
            separate <filename>meta-gplv2</filename> layer.
        </para>

        <para>
            If you use
            <link linkend='var-INCOMPATIBLE_LICENSE'><filename>INCOMPATIBLE_LICENSE</filename></link>
            to exclude GPLv3 or set
            <link linkend='var-PREFERRED_VERSION'><filename>PREFERRED_VERSION</filename></link>
            to substitute a GPLv2 version of a GPLv3 recipe, then you must add
            the <filename>meta-gplv2</filename> layer to your configuration.
            <note>
                You can find <filename>meta-gplv2</filename> layer in the
                OpenEmbedded layer index at
                <ulink url='https://layers.openembedded.org/layerindex/branch/master/layer/meta-gplv2/'></ulink>.
            </note>
        </para>

        <para>
            These relocated GPLv2 recipes do not receive the same level of
            maintenance as other core recipes.
            The recipes do not get security fixes and upstream no longer
            maintains them.
            In fact, the upstream community is actively hostile towards people
            that use the old versions of the recipes.
            Moving these recipes into a separate layer both makes the different
            needs of the recipes clearer and clearly identifies the number of
            these recipes.
            <note>
                The long-term solution might be to move to BSD-licensed
                replacements of the GPLv3 components for those that need to
                exclude GPLv3-licensed components from the target system.
                This solution will be investigated for future Yocto
                Project releases.
            </note>
        </para>
    </section>

    <section id='migration-2.3-package-management-changes'>
        <title>Package Management Changes</title>

        <para>
            The following package management changes took place:
            <itemizedlist>
                <listitem><para>
                    Smart package manager is replaced by DNF package manager.
                    Smart has become unmaintained upstream, is not ported
                    to Python 3.x.
                    Consequently, Smart needed to be replaced.
                    DNF is the only feasible candidate.</para>
                    <para>The change in functionality is that the on-target
                    runtime package management from remote package feeds is
                    now done with a different tool that has a
                    different set of command-line options.
                    If you have scripts that call the
                    tool directly, or use its API, they need to be fixed.</para>
                    <para>For more information, see the
                    <ulink url='http://dnf.readthedocs.io/en/latest/'>DNF Documentation</ulink>.
                    </para></listitem>
                <listitem><para>
                    Rpm 5.x is replaced with Rpm 4.x.
                    This is done for two major reasons:
                    <itemizedlist>
                        <listitem><para>
                            DNF is API-incompatible with Rpm 5.x and porting
                            it and maintaining the port is non-trivial.
                            </para></listitem>
                        <listitem><para>
                            Rpm 5.x itself has limited maintenance upstream,
                            and the Yocto Project is one of the very few
                            remaining users.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    Berkeley DB 6.x is removed and Berkeley DB 5.x becomes
                    the default:
                    <itemizedlist>
                        <listitem><para>
                            Version 6.x of Berkeley DB has largely been
                            rejected by the open source community due to its
                            AGPLv3 license.
                            As a result, most mainstream open source projects
                            that require DB are still developed and tested with
                            DB 5.x.
                            </para></listitem>
                        <listitem><para>
                            In OE-core, the only thing that was requiring
                            DB 6.x was Rpm 5.x.
                            Thus, no reason exists to continue carrying DB 6.x
                            in OE-core.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <filename>createrepo</filename> is replaced with
                    <filename>createrepo_c</filename>.</para>
                    <para><filename>createrepo_c</filename> is the current
                    incarnation of the tool that generates remote repository
                    metadata.
                    It is written in C as compared to
                    <filename>createrepo</filename>, which is written in
                    Python.
                    <filename>createrepo_c</filename> is faster and is
                    maintained.
                    </para></listitem>
                <listitem><para>
                    Architecture-independent RPM packages are "noarch"
                    instead of "all".</para>
                    <para>This change was made because too many places in
                    DNF/RPM4 stack already make that assumption.
                    Only the filenames and the architecture tag has changed.
                    Nothing else has changed in OE-core system, particularly
                    in the
                    <link linkend='ref-classes-allarch'><filename>allarch.bbclass</filename></link>
                    class.
                    </para></listitem>
                <listitem><para>
                    Signing of remote package feeds using
                    <filename>PACKAGE_FEED_SIGN</filename>
                    is not currently supported.
                    This issue will be fully addressed in a future
                    Yocto Project release.
                    See <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=11209'>defect 11209</ulink>
                    for more information on a solution to package feed
                    signing with RPM in the Yocto Project 2.3 release.
                    </para></listitem>
                <listitem><para>
                    OPKG now uses the libsolv backend for resolving package
                    dependencies by default.
                    This is vastly superior to OPKG's internal ad-hoc solver
                    that was previously used.
                    This change does have a small impact on disk (around
                    500 KB) and memory footprint.
                    <note>
                        For further details on this change, see the
                        <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?
id=f4d4f99cfbc2396e49c1613a7d237b9e57f06f81'>commit message</ulink>.
                    </note>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>linux-yocto 4.8:</filename></emphasis>
                    Version 4.8 has been removed.
                    Versions 4.1 (LTSI), 4.4 (LTS), 4.9 (LTS/LTSI) and 4.10
                    are now present.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-smartpm:</filename></emphasis>
                    Functionally replaced by <filename>dnf</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>createrepo:</filename></emphasis>
                    Replaced by the <filename>createrepo-c</filename> recipe.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>rpmresolve:</filename></emphasis>
                    No longer needed with the move to RPM 4 as RPM itself is
                    used instead.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>gstreamer:</filename></emphasis>
                    Removed the GStreamer Git version recipes as they have
                    been stale.
                    <filename>1.10.</filename><replaceable>x</replaceable>
                    recipes are still present.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>alsa-conf-base:</filename></emphasis>
                    Merged into <filename>alsa-conf</filename> since
                    <filename>libasound</filename> depended on both.
                    Essentially, no way existed to install only one of these.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>tremor:</filename></emphasis>
                    Moved to <filename>meta-multimedia</filename>.
                    Fixed-integer Vorbis decoding is not
                    needed by current hardware.
                    Thus, GStreamer's ivorbis plugin has been disabled
                    by default eliminating the need for the
                    <filename>tremor</filename> recipe in
                    <link linkend='oe-core'>OE-Core</link>.
                    </para></listitem>
                 <listitem><para>
                    <emphasis><filename>gummiboot:</filename></emphasis>
                    Replaced by <filename>systemd-boot</filename>.
                    </para></listitem>
           </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-wic-changes'>
        <title>Wic Changes</title>

        <para>
            The following changes have been made to Wic:
            <note>
                For more information on Wic, see the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-partitioned-images-using-wic'>Creating Partitioned Images Using Wic</ulink>"
                section in the Yocto Project Development Tasks Manual.
            </note>
            <itemizedlist>
                <listitem><para>
                    <emphasis>Default Output Directory Changed:</emphasis>
                    Wic's default output directory is now the current directory
                    by default instead of the unusual
                    <filename>/var/tmp/wic</filename>.</para>

                    <para>The "-o" and "--outdir" options remain unchanged
                    and are used to specify your preferred output directory
                    if you do not want to use the default directory.
                    </para></listitem>
                <listitem><para>
                    <emphasis>fsimage Plug-in Removed:</emphasis>
                    The Wic fsimage plugin has been removed as it duplicates
                    functionality of the rawcopy plugin.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-qa-changes'>
        <title>QA Changes</title>

        <para>
            The following QA checks have changed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>unsafe-references-in-binaries</filename>:</emphasis>
                    The <filename>unsafe-references-in-binaries</filename>
                    QA check, which was disabled by default, has now been
                    removed.
                    This check was intended to detect binaries in
                    <filename>/bin</filename> that link to libraries in
                    <filename>/usr/lib</filename> and have the case where
                    the user has <filename>/usr</filename> on a separate
                    filesystem to <filename>/</filename>.</para>

                    <para>The removed QA check was buggy.
                    Additionally, <filename>/usr</filename> residing on a
                    separate partition from <filename>/</filename> is now
                    a rare configuration.
                    Consequently,
                    <filename>unsafe-references-in-binaries</filename> was
                    removed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>file-rdeps</filename>:</emphasis>
                    The <filename>file-rdeps</filename> QA check is now an
                    error by default instead of a warning.
                    Because it is an error instead of a warning, you need to
                    address missing runtime dependencies.</para>

                    <para>For additional information, see the
                    <link linkend='ref-classes-insane'><filename>insane</filename></link>
                    class and the
                    "<link linkend='qa-errors-and-warnings'>Errors and Warnings</link>"
                    section.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.3-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes have occurred:
            <itemizedlist>
                <listitem><para>
                    In this release, a number of recipes have been changed to
                    ignore the <filename>largefile</filename>
                    <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                    item, enabling large file support unconditionally.
                    This feature has always been enabled by default.
                    Disabling the feature has not been widely tested.
                    <note>
                        Future releases of the Yocto Project will remove
                        entirely the ability to disable the
                        <filename>largefile</filename> feature,
                        which would make it unconditionally enabled everywhere.
                    </note>
                    </para></listitem>
                <listitem><para>
                    If the
                    <link linkend='var-DISTRO_VERSION'><filename>DISTRO_VERSION</filename></link>
                    value contains the value of the
                    <link linkend='var-DATE'><filename>DATE</filename></link>
                    variable, which is the default between Poky releases,
                    the <filename>DATE</filename> value is explicitly excluded
                    from <filename>/etc/issue</filename> and
                    <filename>/etc/issue.net</filename>, which is displayed at
                    the login prompt, in order to avoid conflicts with
                    Multilib enabled.
                    Regardless, the <filename>DATE</filename> value is
                    inaccurate if the <filename>base-files</filename>
                    recipe is restored from shared state (sstate) rather
                    than rebuilt.</para>

                    <para>If you need the build date recorded in
                    <filename>/etc/issue*</filename> or anywhere else in your
                    image, a better method is to define a post-processing
                    function to do it and have the function called from
                    <link linkend='var-ROOTFS_POSTPROCESS_COMMAND'><filename>ROOTFS_POSTPROCESS_COMMAND</filename></link>.
                    Doing so ensures the value is always up-to-date with the
                    created image.
                    </para></listitem>
                <listitem><para>
                    Dropbear's <filename>init</filename> script now disables
                    DSA host keys by default.
                    This change is in line with the systemd service
                    file, which supports RSA keys only, and with recent
                    versions of OpenSSH, which deprecates DSA host keys.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class now correctly uses tabs as separators between all
                    columns in <filename>installed-package-sizes.txt</filename>
                    in order to aid import into other tools.
                    </para></listitem>
                <listitem><para>
                    The <filename>USE_LDCONFIG</filename> variable has been
                    replaced with the "ldconfig"
                    <filename>DISTRO_FEATURES</filename> feature.
                    Distributions that previously set:
                    <literallayout class='monospaced'>
     USE_LDCONFIG = "0"
                    </literallayout>
                    should now instead use the following:
                    <literallayout class='monospaced'>
     DISTRO_FEATURES_BACKFILL_CONSIDERED_append = " ldconfig"
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    The default value of
                    <link linkend='var-COPYLEFT_LICENSE_INCLUDE'><filename>COPYLEFT_LICENSE_INCLUDE</filename></link>
                    now includes all versions of AGPL licenses in addition
                    to GPL and LGPL.
                    <note>
                        The default list is not intended to be guaranteed
                        as a complete safe list.
                        You should seek legal advice based on what you are
                        distributing if you are unsure.
                    </note>
                    </para></listitem>
                <listitem><para>
                    Kernel module packages are now suffixed with the kernel
                    version in order to allow module packages from multiple
                    kernel versions to co-exist on a target system.
                    If you wish to return to the previous naming scheme
                    that does not include the version suffix, use the
                    following:
                    <literallayout class='monospaced'>
     KERNEL_MODULE_PACKAGE_SUFFIX to ""
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    Removal of <filename>libtool</filename>
                    <filename>*.la</filename> files is now enabled by default.
                    The <filename>*.la</filename> files are not actually
                    needed on Linux and relocating them is an unnecessary
                    burden.</para>

                    <para>If you need to preserve these
                    <filename>.la</filename> files (e.g. in a custom
                    distribution), you must change
                    <link linkend='var-INHERIT_DISTRO'><filename>INHERIT_DISTRO</filename></link>
                    such that "remove-libtool" is not included in the value.
                    </para></listitem>
                <listitem><para>
                    Extensible SDKs built for GCC 5+ now refuse to install on a
                    distribution where the host GCC version is 4.8 or 4.9.
                    This change resulted from the fact that the installation
                    is known to fail due to the way the
                    <filename>uninative</filename> shared state (sstate)
                    package is built.
                    See the
                    <link linkend='ref-classes-uninative'><filename>uninative</filename></link>
                    class for additional information.
                    </para></listitem>
                <listitem><para>
                    All native and nativesdk recipes now use a separate
                    <filename>DISTRO_FEATURES</filename> value instead of
                    sharing the value used by recipes for the target, in order
                    to avoid unnecessary rebuilds.</para>

                    <para>The <filename>DISTRO_FEATURES</filename> for
                    <filename>native</filename> recipes is
                    <link linkend='var-DISTRO_FEATURES_NATIVE'><filename>DISTRO_FEATURES_NATIVE</filename></link>
                    added to an intersection of
                    <filename>DISTRO_FEATURES</filename> and
                    <link linkend='var-DISTRO_FEATURES_FILTER_NATIVE'><filename>DISTRO_FEATURES_FILTER_NATIVE</filename></link>.
                    </para>

                    <para>For nativesdk recipes, the
                    corresponding variables are
                    <link linkend='var-DISTRO_FEATURES_NATIVESDK'><filename>DISTRO_FEATURES_NATIVESDK</filename></link>
                    and
                    <link linkend='var-DISTRO_FEATURES_FILTER_NATIVESDK'><filename>DISTRO_FEATURES_FILTER_NATIVESDK</filename></link>.
                    </para></listitem>
                <listitem><para>
                    The <filename>FILESDIR</filename>
                    variable, which was previously deprecated and rarely used,
                    has now been removed.
                    You should change any recipes that set
                    <filename>FILESDIR</filename> to set
                    <link linkend='var-FILESPATH'><filename>FILESPATH</filename></link>
                    instead.
                    </para></listitem>
                <listitem><para>
                    The <filename>MULTIMACH_HOST_SYS</filename>
                    variable has been removed as it is no longer needed
                    with recipe-specific sysroots.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.4-release'>
    <title>Moving to the Yocto Project 2.4 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.4 Release from the prior release.
    </para>

    <section id='migration-2.4-memory-resident-mode'>
        <title>Memory Resident Mode</title>

        <para>
            A persistent mode is now available in BitBake's default operation,
            replacing its previous "memory resident mode" (i.e.
            <filename>oe-init-build-env-memres</filename>).
            Now you only need to set
            <link linkend='var-BB_SERVER_TIMEOUT'><filename>BB_SERVER_TIMEOUT</filename></link>
            to a timeout (in seconds) and BitBake's server stays resident for
            that amount of time between invocations.
            The <filename>oe-init-build-env-memres</filename> script has been
            removed since a separate environment setup script is no longer
            needed.
        </para>
    </section>

    <section id='migration-2.4-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            This section provides information about packaging changes that have
            ocurred:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>python3</filename> Changes:</emphasis>
                    <itemizedlist>
                        <listitem><para>
                            The main "python3" package now brings in all of the
                            standard Python 3 distribution rather than a subset.
                            This behavior matches what is expected based on
                            traditional Linux distributions.
                            If you wish to install a subset of Python 3, specify
                            <filename>python-core</filename> plus one or more of
                            the individual packages that are still produced.
                            </para></listitem>
                        <listitem><para>
                            <emphasis><filename>python3</filename>:</emphasis>
                            The <filename>bz2.py</filename>,
                            <filename>lzma.py</filename>, and
                            <filename>_compression.py</filename> scripts have
                            been moved from the
                            <filename>python3-misc</filename> package to
                            the <filename>python3-compression</filename> package.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>binutils</filename>:</emphasis>
                    The <filename>libbfd</filename> library is now packaged in
                    a separate "libbfd" package.
                    This packaging saves space when certain tools
                    (e.g. <filename>perf</filename>) are installed.
                    In such cases, the tools only need
                    <filename>libbfd</filename> rather than all the packages in
                    <filename>binutils</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>util-linux</filename> Changes:</emphasis>
                    <itemizedlist>
                        <listitem><para>
                            The <filename>su</filename> program is now packaged
                            in a separate "util-linux-su" package, which is only
                            built when "pam" is listed in the
                            <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
                            variable.
                            <filename>util-linux</filename> should not be
                            installed unless it is needed because
                            <filename>su</filename> is normally provided through
                            the shadow file format.
                            The main <filename>util-linux</filename> package has
                            runtime dependencies (i.e.
                            <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>)
                            on the <filename>util-linux-su</filename> package
                            when "pam" is in
                            <filename>DISTRO_FEATURES</filename>.
                            </para></listitem>
                        <listitem><para>
                            The <filename>switch_root</filename> program is now
                            packaged in a separate "util-linux-switch-root"
                            package for small initramfs images that do not need
                            the whole <filename>util-linux</filename> package or
                            the busybox binary, which are both much larger than
                            <filename>switch_root</filename>.
                            The main <filename>util-linux</filename> package has
                            a recommended runtime dependency (i.e.
                            <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>)
                            on the <filename>util-linux-switch-root</filename> package.
                            </para></listitem>
                        <listitem><para>
                            The <filename>ionice</filename> program is now
                            packaged in a separate "util-linux-ionice" package.
                            The main <filename>util-linux</filename> package has
                            a recommended runtime dependency (i.e.
                            <filename>RRECOMMENDS</filename>)
                            on the <filename>util-linux-ionice</filename> package.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>initscripts</filename>:</emphasis>
                    The <filename>sushell</filename> program is now packaged in
                    a separate "initscripts-sushell" package.
                    This packaging change allows systems to pull
                    <filename>sushell</filename> in when
                    <filename>selinux</filename> is enabled.
                    The change also eliminates needing to pull in the entire
                    <filename>initscripts</filename> package.
                    The main <filename>initscripts</filename> package has a
                    runtime dependency (i.e. <filename>RDEPENDS</filename>)
                    on the <filename>sushell</filename> package when
                    "selinux" is in <filename>DISTRO_FEATURES</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>glib-2.0</filename>:</emphasis>
                    The <filename>glib-2.0</filename> package now has a
                    recommended runtime dependency (i.e.
                    <filename>RRECOMMENDS</filename>) on the
                    <filename>shared-mime-info</filename> package, since large
                    portions of GIO are not useful without the MIME database.
                    You can remove the dependency by using the
                    <link linkend='var-BAD_RECOMMENDATIONS'><filename>BAD_RECOMMENDATIONS</filename></link>
                    variable if <filename>shared-mime-info</filename> is too
                    large and is not required.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Go Standard Runtime:</emphasis>
                    The Go standard runtime has been split out from the main
                    <filename>go</filename> recipe into a separate
                    <filename>go-runtime</filename> recipe.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>acpitests</filename>:</emphasis>
                    This recipe is not maintained.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>autogen-native</filename>:</emphasis>
                    No longer required by Grub, oe-core, or meta-oe.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>bdwgc</filename>:</emphasis>
                    Nothing in OpenEmbedded-Core requires this recipe.
                    It has moved to meta-oe.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>byacc</filename>:</emphasis>
                    This recipe was only needed by rpm 5.x and has moved to
                    meta-oe.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>gcc (5.4)</filename>:</emphasis>
                    The 5.4 series dropped the recipe in favor of 6.3 / 7.2.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>gnome-common</filename>:</emphasis>
                    Deprecated upstream and no longer needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>go-bootstrap-native</filename>:</emphasis>
                    Go 1.9 does its own bootstrapping so this recipe has been
                    removed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>guile</filename>:</emphasis>
                    This recipe was only needed by
                    <filename>autogen-native</filename> and
                    <filename>remake</filename>.
                    The recipe is no longer needed by either of these programs.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libclass-isa-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libdumpvalue-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libenv-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libfile-checktree-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libi18n-collate-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libiconv</filename>:</emphasis>
                    This recipe was only needed for <filename>uclibc</filename>,
                    which was removed in the previous release.
                    <filename>glibc</filename> and <filename>musl</filename>
                    have their own implementations.
                    <filename>meta-mingw</filename> still needs
                    <filename>libiconv</filename>, so it has
                    been moved to <filename>meta-mingw</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libpng12</filename>:</emphasis>
                    This recipe was previously needed for LSB. The current
                    <filename>libpng</filename> is 1.6.x.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libpod-plainer-perl</filename>:</emphasis>
                    This recipe was previously needed for LSB 4, no longer
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>linux-yocto (4.1)</filename>:</emphasis>
                    This recipe was removed in favor of 4.4, 4.9, 4.10 and 4.12.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>mailx</filename>:</emphasis>
                    This recipe was previously only needed for LSB
                    compatibility, and upstream is defunct.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>mesa (git version only)</filename>:</emphasis>
                    The git version recipe was stale with respect to the release
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>ofono (git version only)</filename>:</emphasis>
                    The git version recipe was stale with respect to the release
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>portmap</filename>:</emphasis>
                    This recipe is obsolete and is superseded by
                    <filename>rpcbind</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python3-pygpgme</filename>:</emphasis>
                    This recipe is old and unmaintained. It was previously
                    required by <filename>dnf</filename>, which has switched
                    to official <filename>gpgme</filename> Python bindings.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-async</filename>:</emphasis>
                    This recipe has been removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-gitdb</filename>:</emphasis>
                    This recipe has been removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-git</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-mako</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3
                    version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-pexpect</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-ptyprocess</filename>:</emphasis>
                    This recipe was removed in favor of Python the 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-pycurl</filename>:</emphasis>
                    Nothing is using this recipe in OpenEmbedded-Core
                    (i.e. <filename>meta-oe</filename>).
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-six</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python-smmap</filename>:</emphasis>
                    This recipe was removed in favor of the Python 3 version.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>remake</filename>:</emphasis>
                    Using <filename>remake</filename> as the provider of
                    <filename>virtual/make</filename> is broken.
                    Consequently, this recipe is not needed in OpenEmbedded-Core.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-kernel-device-tree-move'>
        <title>Kernel Device Tree Move</title>

        <para>
            Kernel Device Tree support is now easier to enable in a kernel
            recipe.
            The Device Tree code has moved to a
            <link linkend='ref-classes-kernel-devicetree'><filename>kernel-devicetree</filename></link>
            class.
            Functionality is automatically enabled for any recipe that inherits
            the
            <link linkend='ref-classes-kernel'><filename>kernel</filename></link>
            class and sets the
            <link linkend='var-KERNEL_DEVICETREE'><filename>KERNEL_DEVICETREE</filename></link>
            variable.
            The previous mechanism for doing this,
            <filename>meta/recipes-kernel/linux/linux-dtb.inc</filename>,
            is still available to avoid breakage, but triggers a
            deprecation warning.
            Future releases of the Yocto Project will remove
            <filename>meta/recipes-kernel/linux/linux-dtb.inc</filename>.
            It is advisable to remove any <filename>require</filename>
            statements that request
            <filename>meta/recipes-kernel/linux/linux-dtb.inc</filename>
            from any custom kernel recipes you might have.
            This will avoid breakage in post 2.4 releases.
        </para>
    </section>

    <section id='migration-2.4-package-qa-changes'>
        <title>Package QA Changes</title>

        <para>
            The following package QA changes took place:
            <itemizedlist>
                <listitem><para>
                    The "unsafe-references-in-scripts" QA check has been
                    removed.
                    </para></listitem>
                <listitem><para>
                    If you refer to <filename>${COREBASE}/LICENSE</filename>
                    within
                    <link linkend='var-LIC_FILES_CHKSUM'><filename>LIC_FILES_CHKSUM</filename></link>
                    you receive a warning because this file is a description of
                    the license for OE-Core.
                    Use <filename>${COMMON_LICENSE_DIR}/MIT</filename>
                    if your recipe is MIT-licensed and you cannot use the
                    preferred method of referring to a file within the source
                    tree.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-readme-changes'>
        <title><filename>README</filename> File Changes</title>

        <para>
            The following are changes to <filename>README</filename> files:
            <itemizedlist>
                <listitem><para>
                    The main Poky <filename>README</filename> file has been
                    moved to the <filename>meta-poky</filename> layer and
                    has been renamed <filename>README.poky</filename>.
                    A symlink has been created so that references to the old
                    location work.
                    </para></listitem>
                <listitem><para>
                    The <filename>README.hardware</filename> file has been moved
                    to <filename>meta-yocto-bsp</filename>.
                    A symlink has been created so that references to the old
                    location work.
                    </para></listitem>
                <listitem><para>
                    A <filename>README.qemu</filename> file has been created
                    with coverage of the <filename>qemu*</filename> machines.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.4-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following are additional changes:
            <itemizedlist>
                <listitem><para>
                    The <filename>ROOTFS_PKGMANAGE_BOOTSTRAP</filename>
                    variable and any references to it have been removed.
                    You should remove this variable from any custom recipes.
                    </para></listitem>
                <listitem><para>
                    The <filename>meta-yocto</filename> directory has been
                    removed.
                    <note>
                        In the Yocto Project 2.1 release
                        <filename>meta-yocto</filename> was renamed to
                        <filename>meta-poky</filename> and the
                        <filename>meta-yocto</filename> subdirectory remained
                        to avoid breaking existing configurations.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>maintainers.inc</filename> file, which tracks
                    maintainers by listing a primary person responsible for each
                    recipe in OE-Core, has been moved from
                    <filename>meta-poky</filename> to OE-Core (i.e. from
                    <filename>meta-poky/conf/distro/include</filename> to
                    <filename>meta/conf/distro/include</filename>).
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='ref-classes-buildhistory'><filename>buildhistory</filename></link>
                    class now makes a single commit per build rather than one
                    commit per subdirectory in the repository.
                    This behavior assumes the commits are enabled with
                    <link linkend='var-BUILDHISTORY_COMMIT'><filename>BUILDHISTORY_COMMIT</filename></link>
                    = "1", which is typical.
                    Previously, the <filename>buildhistory</filename> class made
                    one commit per subdirectory in the repository in order to
                    make it easier to see the changes for a particular
                    subdirectory.
                    To view a particular change, specify that subdirectory as
                    the last parameter on the <filename>git show</filename>
                    or <filename>git diff</filename> commands.
                    </para></listitem>
                <listitem><para>
                    The <filename>x86-base.inc</filename> file, which is
                    included by all x86-based machine configurations, now sets
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    using <filename>?=</filename> to "live" rather than
                    appending with <filename>+=</filename>.
                    This change makes the default easier to override.
                    </para></listitem>
                <listitem><para>
                    BitBake fires multiple "BuildStarted" events when
                    multiconfig is enabled (one per configuration).
                    For more information, see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#events'>Events</ulink>"
                    section in the BitBake User Manual.
                    </para></listitem>
                <listitem><para>
                    By default, the <filename>security_flags.inc</filename> file
                    sets a
                    <link linkend='var-GCCPIE'><filename>GCCPIE</filename></link>
                    variable with an option to enable Position Independent
                    Executables (PIE) within <filename>gcc</filename>.
                    Enabling PIE in the GNU C Compiler (GCC), makes Return
                    Oriented Programming (ROP) attacks much more difficult to
                    execute.
                    </para></listitem>
                <listitem><para>
                    OE-Core now provides a
                    <filename>bitbake-layers</filename> plugin that implements
                    a "create-layer" subcommand.
                    The implementation of this subcommand has resulted in the
                    <filename>yocto-layer</filename> script being deprecated and
                    will likely be removed in the next Yocto Project release.
                    </para></listitem>
                <listitem><para>
                      The <filename>vmdk</filename>, <filename>vdi</filename>,
                      and <filename>qcow2</filename> image file types are now
                      used in conjunction with the "wic" image type through
                      <filename>CONVERSION_CMD</filename>.
                      Consequently, the equivalent image types are now
                      <filename>wic.vmdk</filename>, <filename>wic.vdi</filename>,
                      and <filename>wic.qcow2</filename>, respectively.
                    </para></listitem>
                <listitem><para>
                    <filename>do_image_&lt;type&gt;[depends]</filename> has
                    replaced <filename>IMAGE_DEPENDS_&lt;type&gt;</filename>.
                    If you have your own classes that implement custom image
                    types, then you need to update them.
                    </para></listitem>
                <listitem><para>
                    OpenSSL 1.1 has been introduced.
                    However, the default is still 1.0.x through the
                    <link linkend='var-PREFERRED_VERSION'><filename>PREFERRED_VERSION</filename></link>
                    variable.
                    This preference is set is due to the remaining compatibility
                    issues with other software.
                    The
                    <link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
                    variable  in the openssl 1.0 recipe now includes "openssl10"
                    as a marker that can be used in
                    <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>
                    within recipes that build software that still depend on
                    OpenSSL 1.0.
                    </para></listitem>
                <listitem><para>
                    To ensure consistent behavior, BitBake's "-r" and "-R"
                    options (i.e. prefile and postfile), which are used to
                    read or post-read additional configuration files from the
                    command line, now only affect the current BitBake command.
                    Before these BitBake changes, these options would "stick"
                    for future executions.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.5-release'>
    <title>Moving to the Yocto Project 2.5 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.5 Release from the prior release.
    </para>

    <section id='migration-2.5-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            This section provides information about packaging changes that have
            occurred:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>bind-libs</filename>:</emphasis>
                    The libraries packaged by the bind recipe are in a
                    separate <filename>bind-libs</filename> package.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libfm-gtk</filename>:</emphasis>
                    The <filename>libfm</filename> GTK+ bindings are split into
                    a separate <filename>libfm-gtk</filename> package.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>flex-libfl</filename>:</emphasis>
                    The flex recipe splits out libfl into a separate
                    <filename>flex-libfl</filename> package to avoid too many
                    dependencies being pulled in where only the library is
                    needed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>grub-efi</filename>:</emphasis>
                    The <filename>grub-efi</filename> configuration is split
                    into a separate <filename>grub-bootconf</filename>
                    recipe.
                    However, the dependency relationship from
                    <filename>grub-efi</filename> is through a
                    virtual/grub-bootconf provider making it possible to have
                    your own recipe provide the dependency.
                    Alternatively, you can use a BitBake append file to bring
                    the configuration back into the
                    <filename>grub-efi</filename> recipe.
                    </para></listitem>
                <listitem><para>
                    <emphasis>armv7a Legacy Package Feed Support:</emphasis>
                    Legacy support is removed for transitioning from
                    <filename>armv7a</filename> to
                    <filename>armv7a-vfp-neon</filename> in package feeds,
                    which was previously enabled by setting
                    <filename>PKGARCHCOMPAT_ARMV7A</filename>.
                    This transition occurred in 2011 and active package feeds
                    should by now be updated to the new naming.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>gcc</filename>:</emphasis>
                    The version 6.4 recipes are replaced by 7.x.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>gst-player</filename>:</emphasis>
                    Renamed to <filename>gst-examples</filename> as per
                    upstream.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>hostap-utils</filename>:</emphasis>
                    This software package is obsolete.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>latencytop</filename>:</emphasis>
                    This recipe is no longer maintained upstream.
                    The last release was in 2009.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>libpfm4</filename>:</emphasis>
                    The only file that requires this recipe is
                    <filename>oprofile</filename>, which has been removed.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>linux-yocto</filename>:</emphasis>
                    The version 4.4, 4.9, and 4.10 recipes have been removed.
                    Versions 4.12, 4.14, and 4.15 remain.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>man</filename>:</emphasis>
                    This recipe has been replaced by modern
                    <filename>man-db</filename>
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>mkelfimage</filename>:</emphasis>
                    This tool has been removed in the upstream coreboot project,
                    and is no longer needed with the removal of the ELF image
                    type.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>nativesdk-postinst-intercept</filename>:</emphasis>
                    This recipe is not maintained.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>neon</filename>:</emphasis>
                    This software package is no longer maintained upstream and
                    is no longer needed by anything in OpenEmbedded-Core.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>oprofile</filename>:</emphasis>
                    The functionality of this recipe is replaced by
                    <filename>perf</filename> and keeping compatibility on
                    an ongoing basis with <filename>musl</filename> is
                    difficult.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>pax</filename>:</emphasis>
                    This software package is obsolete.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>stat</filename>:</emphasis>
                    This software package is not maintained upstream.
                    <filename>coreutils</filename> provides a modern stat binary.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>zisofs-tools-native</filename>:</emphasis>
                    This recipe is no longer needed because the compressed
                    ISO image feature has been removed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-scripts-and-tools-changes'>
        <title>Scripts and Tools Changes</title>

        <para>
            The following are changes to scripts and tools:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>yocto-bsp</filename>,
                    <filename>yocto-kernel</filename>, and
                    <filename>yocto-layer</filename></emphasis>:
                    The <filename>yocto-bsp</filename>,
                    <filename>yocto-kernel</filename>, and
                    <filename>yocto-layer</filename> scripts previously shipped
                    with poky but not in OpenEmbedded-Core have been removed.
                    These scripts are not maintained and are outdated.
                    In many cases, they are also limited in scope.
                    The <filename>bitbake-layers create-layer</filename> command
                    is a direct replacement for <filename>yocto-layer</filename>.
                    See the documentation to create a BSP or kernel recipe in
                    the
                    "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-kernel-recipe-example'>BSP Kernel Recipe Example</ulink>"
                     section.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>devtool finish</filename>:</emphasis>
                    <filename>devtool finish</filename> now exits with an error
                    if there are uncommitted changes or a rebase/am in progress
                    in the recipe's source repository.
                    If this error occurs, there might be uncommitted changes
                    that will not be included in updates to the patches applied
                    by the recipe.
                    A -f/--force option is provided for situations that the
                    uncommitted changes are inconsequential and you want to
                    proceed regardless.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>scripts/oe-setup-rpmrepo</filename> script:</emphasis>
                    The functionality of
                    <filename>scripts/oe-setup-rpmrepo</filename> is replaced by
                    <filename>bitbake package-index</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>scripts/test-dependencies.sh</filename> script:</emphasis>
                    The script is largely made obsolete by the
                    recipe-specific sysroots functionality introduced in the
                    previous release.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following are BitBake changes:
            <itemizedlist>
                <listitem><para>
                    The <filename>--runall</filename> option has changed.
                    There are two different behaviors people might want:
                    <itemizedlist>
                        <listitem><para>
                            <emphasis>Behavior A:</emphasis>
                            For a given target (or set of targets) look through
                            the task graph and run task X only if it is present
                            and will be built.
                            </para></listitem>
                        <listitem><para>
                            <emphasis>Behavior B:</emphasis>
                            For a given target (or set of targets) look through
                            the task graph and run task X if any recipe in the
                            taskgraph has such a target, even if it is not in
                            the original task graph.
                            </para></listitem>
                    </itemizedlist>
                    The <filename>--runall</filename> option now performs
                    "Behavior B".
                    Previously <filename>--runall</filename> behaved like
                    "Behavior A".
                    A <filename>--runonly</filename> option has been added to
                    retain the ability to perform "Behavior A".
                    </para></listitem>
                <listitem><para>
                    Several explicit "run this task for all recipes in the
                    dependency tree" tasks have been removed (e.g.
                    <filename>fetchall</filename>,
                    <filename>checkuriall</filename>, and the
                    <filename>*all</filename> tasks provided by the
                    <filename>distrodata</filename> and
                    <filename>archiver</filename> classes).
                    There is a BitBake option to complete this for any arbitrary
                    task. For example:
                    <literallayout class='monospaced'>
     bitbake &lt;target&gt; -c fetchall
                    </literallayout>
                    should now be replaced with:
                    <literallayout class='monospaced'>
     bitbake &lt;target&gt; --runall=fetch
                    </literallayout>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.5-python-and-python3-changes'>
        <title>Python and Python 3 Changes</title>

        <para>
            The following are auto-packaging changes to Python and Python 3:
        </para>
        <para>
            The script-managed <filename>python-*-manifest.inc</filename> files
            that were previously used to generate Python and Python 3
            packages have been replaced with a JSON-based file that is
            easier to read and maintain.
            A new task is available for maintainers of the Python recipes to
            update the JSON file when upgrading to new Python versions.
            You can now edit the file directly instead of having to edit a
            script and run it to update the file.
        </para>
        <para>
            One particular change to note is that the Python recipes no longer
            have build-time provides for their packages.
            This assumes <filename>python-foo</filename> is one of the packages
            provided by the Python recipe.
            You can no longer run <filename>bitbake python-foo</filename> or
            have a <ulink url='&YOCTO_DOCS_REF_URL;#var-DEPENDS'><filename>DEPENDS</filename></ulink> on
            <filename>python-foo</filename>, but doing either of the following
            causes the package to work as expected:
            <literallayout class='monospaced'>
     IMAGE_INSTALL_append = " python-foo"
            </literallayout>
            or
            <literallayout class='monospaced'>
     RDEPENDS_${PN} = "python-foo"
            </literallayout>
            The earlier build-time provides behavior was a quirk of the way the
            Python manifest file was created.
            For more information on this change please see
            <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=8d94b9db221d1def42f091b991903faa2d1651ce'>this commit</ulink>.
        </para>
    </section>

    <section id='migration-2.5-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following are additional changes:
            <itemizedlist>
                <listitem><para>
                    The <filename>kernel</filename> class supports building
                    packages for multiple kernels.
                    If your kernel recipe or <filename>.bbappend</filename> file
                    mentions packaging at all, you should replace references to
                    the kernel in package names with
                    <filename>${KERNEL_PACKAGE_NAME}</filename>.
                    For example, if you disable automatic installation of the
                    kernel image using
                    <filename>RDEPENDS_kernel-base = ""</filename> you can avoid
                    warnings using
                    <filename>RDEPENDS_${KERNEL_PACKAGE_NAME}-base = ""</filename>
                    instead.
                    </para></listitem>
                <listitem><para>
                    The <filename>buildhistory</filename> class commits changes
                    to the repository by default so you no longer need to set
                    <filename>BUILDHISTORY_COMMIT = "1"</filename>.
                    If you want to disable commits you need to set
                    <filename>BUILDHISTORY_COMMIT = "0"</filename> in your
                    configuration.
                    </para></listitem>
                <listitem><para>
                    The <filename>beaglebone</filename> reference machine has
                    been renamed to <filename>beaglebone-yocto</filename>.
                    The <filename>beaglebone-yocto</filename> BSP is a reference
                    implementation using only mainline components available in
                    OpenEmbedded-Core and <filename>meta-yocto-bsp</filename>,
                    whereas Texas Instruments maintains a full-featured BSP in
                    the <filename>meta-ti</filename> layer.
                    This rename avoids the previous name clash that existed
                    between the two BSPs.
                    </para></listitem>
                <listitem><para>
                    The <filename>update-alternatives</filename> class no longer
                    works with SysV <filename>init</filename> scripts because
                    this usage has been problematic.
                    Also, the <filename>sysklogd</filename> recipe no longer
                    uses <filename>update-alternatives</filename> because it is
                    incompatible with other implementations.
                    </para></listitem>
                <listitem><para>
                    By default, the
                    <link linkend='ref-classes-cmake'><filename>cmake</filename></link>
                    class uses <filename>ninja</filename> instead of
                    <filename>make</filename> for building.
                    This improves build performance.
                    If a recipe is broken with <filename>ninja</filename>, then
                    the recipe can set
                    <filename>OECMAKE_GENERATOR = "Unix Makefiles"</filename>
                    to change back to <filename>make</filename>.
                    </para></listitem>
                <listitem><para>
                    The previously deprecated <filename>base_*</filename>
                    functions have been removed in favor of their replacements
                    in <filename>meta/lib/oe</filename> and
                    <filename>bitbake/lib/bb</filename>.
                    These are typically used from recipes and classes.
                    Any references to the old functions must be updated.
                    The following table shows the removed functions and their
                    replacements:

                    <literallayout class='monospaced'>
     <emphasis>Removed</emphasis>                                 <emphasis>Replacement</emphasis>
     ============================            ============================
     base_path_join()                        oe.path.join()
     base_path_relative()                    oe.path.relative()
     base_path_out()                         oe.path.format_display()
     base_read_file()                        oe.utils.read_file()
     base_ifelse()                           oe.utils.ifelse()
     base_conditional()                      oe.utils.conditional()
     base_less_or_equal()                    oe.utils.less_or_equal()
     base_version_less_or_equal()            oe.utils.version_less_or_equal()
     base_contains()                         bb.utils.contains()
     base_both_contain()                     oe.utils.both_contain()
     base_prune_suffix()                     oe.utils.prune_suffix()
     oe_filter()                             oe.utils.str_filter()
     oe_filter_out()                         oe.utils.str_filter_out() (or use the _remove operator).
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    Using <filename>exit 1</filename> to explicitly defer a
                    postinstall script until first boot is now deprecated since
                    it is not an obvious mechanism and can mask actual errors.
                    If you want to explicitly defer a postinstall to first boot
                    on the target rather than at <filename>rootfs</filename>
                    creation time, use
                    <filename>pkg_postinst_ontarget()</filename>
                    or call
                    <filename>postinst-intercepts defer_to_first_boot</filename>
                    from <filename>pkg_postinst()</filename>.
                    Any failure of a <filename>pkg_postinst()</filename>
                    script (including <filename>exit 1</filename>)
                    will trigger a warning during
                    <filename>do_rootfs</filename>.</para>

                    <para>For more information, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-post-installation-scripts'>Post-Installation Scripts</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    </para></listitem>
                <listitem><para>
                    The <filename>elf</filename> image type has been removed.
                    This image type was removed because the
                    <filename>mkelfimage</filename> tool
                    that was required to create it is no longer provided by
                    coreboot upstream and required updating every time
                    <filename>binutils</filename> updated.
                    </para></listitem>
                <listitem><para>
                    Support for .iso image compression (previously enabled
                    through <filename>COMPRESSISO = "1"</filename>) has been
                    removed.
                    The userspace tools (<filename>zisofs-tools</filename>) are
                    unmaintained and <filename>squashfs</filename> provides
                    better performance and compression.
                    In order to build a live image with squashfs+lz4 compression
                    enabled you should now set
                    <filename>LIVE_ROOTFS_TYPE = "squashfs-lz4"</filename>
                    and ensure that <filename>live</filename>
                    is in <filename>IMAGE_FSTYPES</filename>.
                    </para></listitem>
                <listitem><para>
                    Recipes with an unconditional dependency on
                    <filename>libpam</filename> are only buildable with
                    <filename>pam</filename> in
                    <filename>DISTRO_FEATURES</filename>.
                    If the dependency is truly optional then it is recommended
                    that the dependency be conditional upon
                    <filename>pam</filename> being in
                    <filename>DISTRO_FEATURES</filename>.
                    </para></listitem>
                <listitem><para>
                    For EFI-based machines, the bootloader
                    (<filename>grub-efi</filename> by default) is installed into
                    the image at /boot.
                    Wic can be used to split the bootloader into separate boot
                    and rootfs partitions if necessary.
                    </para></listitem>
                <listitem><para>
                    Patches whose context does not match exactly (i.e. where
                    patch reports "fuzz" when applying) will generate a
                    warning.
                    For an example of this see
                    <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=cc97bc08125b63821ce3f616771830f77c456f57'>this commit</ulink>.
                    </para></listitem>
                <listitem><para>
                    Layers are expected to set
                    <filename>LAYERSERIES_COMPAT_layername</filename>
                    to match the version(s) of OpenEmbedded-Core they are
                    compatible with.
                    This is specified as codenames using spaces to separate
                    multiple values (e.g. "rocko sumo").
                    If a layer does not set
                    <filename>LAYERSERIES_COMPAT_layername</filename>, a warning
                    will is shown.
                    If a layer sets a value that does not include the current
                    version ("sumo" for the 2.5 release), then an error will be
                    produced.
                    </para></listitem>
                <listitem><para>
                    The <filename>TZ</filename> environment variable is set to
                    "UTC" within the build environment in order to fix
                    reproducibility problems in some recipes.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.6-release'>
    <title>Moving to the Yocto Project 2.6 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.6 Release from the prior release.
    </para>

    <section id='migration-2.6-gcc-changes'>
        <title>GCC 8.2 is Now Used by Default</title>

        <para>
            The GNU Compiler Collection version 8.2 is now used by default
            for compilation.
            For more information on what has changed in the GCC 8.x release,
            see
            <ulink url='https://gcc.gnu.org/gcc-8/changes.html'></ulink>.
        </para>

        <para>
            If you still need to compile with version 7.x, GCC 7.3 is
            also provided.
            You can select this version by setting the
            and can be selected by setting the
            <link linkend='var-GCCVERSION'><filename>GCCVERSION</filename></link>
            variable to "7.%" in your configuration.
        </para>
    </section>

    <section id='migration-2.6-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <literallayout class='monospaced'>
     <emphasis><filename>beecrypt</filename>:</emphasis> No longer needed since moving to RPM 4.
     <emphasis><filename>bigreqsproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>calibrateproto</filename>:</emphasis> Removed in favor of <filename>xinput</filename>.
     <emphasis><filename>compositeproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>damageproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>dmxproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>dri2proto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>dri3proto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>eee-acpi-scripts</filename>:</emphasis> Became obsolete.
     <emphasis><filename>fixesproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>fontsproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>fstests</filename>:</emphasis> Became obsolete.
     <emphasis><filename>gccmakedep</filename>:</emphasis> No longer used.
     <emphasis><filename>glproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>gnome-desktop3</filename>:</emphasis> No longer needed.  This recipe has moved to <filename>meta-oe</filename>.
     <emphasis><filename>icon-naming-utils</filename>:</emphasis> No longer used since the Sato theme was removed in 2016.
     <emphasis><filename>inputproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>kbproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>libusb-compat</filename>:</emphasis> Became obsolete.
     <emphasis><filename>libuser</filename>:</emphasis> Became obsolete.
     <emphasis><filename>libnfsidmap</filename>:</emphasis> No longer an external requirement since <filename>nfs-utils</filename> 2.2.1.  <filename>libnfsidmap</filename> is now integrated.
     <emphasis><filename>libxcalibrate</filename>:</emphasis> No longer needed with <filename>xinput</filename>
     <emphasis><filename>mktemp</filename>:</emphasis> Became obsolete. The <filename>mktemp</filename> command is provided by both <filename>busybox</filename> and <filename>coreutils</filename>.
     <emphasis><filename>ossp-uuid</filename>:</emphasis> Is not being maintained and has mostly been replaced by <filename>uuid.h</filename> in <filename>util-linux</filename>.
     <emphasis><filename>pax-utils</filename>:</emphasis> No longer needed.  Previous QA tests that did use this recipe are now done at build time.
     <emphasis><filename>pcmciautils</filename>:</emphasis> Became obsolete.
     <emphasis><filename>pixz</filename>:</emphasis> No longer needed. <filename>xz</filename> now supports multi-threaded compression.
     <emphasis><filename>presentproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>randrproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>recordproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>renderproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>resourceproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>scrnsaverproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>trace-cmd</filename>:</emphasis> Became obsolete.  <filename>perf</filename> replaced this recipe's functionally.
     <emphasis><filename>videoproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>wireless-tools</filename>:</emphasis> Became obsolete.  Superseded by <filename>iw</filename>.
     <emphasis><filename>xcmiscproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xextproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86dgaproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86driproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86miscproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xf86-video-omapfb</filename>:</emphasis> Became obsolete.  Use kernel modesetting driver instead.
     <emphasis><filename>xf86-video-omap</filename>:</emphasis> Became obsolete.  Use kernel modesetting driver instead.
     <emphasis><filename>xf86vidmodeproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xineramaproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>xproto</filename>:</emphasis> Replaced by <filename>xorgproto</filename>.
     <emphasis><filename>yasm</filename>:</emphasis> No longer needed since previous usages are now satisfied by <filename>nasm</filename>.
            </literallayout>
        </para>
    </section>

    <section id='migration-2.6-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            The following packaging changes have been made:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>cmake</filename>:</emphasis>
                    <filename>cmake.m4</filename> and
                    <filename>toolchain</filename> files have been moved to the
                    main package.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>iptables</filename>:</emphasis>
                    The <filename>iptables</filename> modules have been split
                    into separate packages.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>alsa-lib</filename>:</emphasis>
                    <filename>libasound</filename> is now in the main
                    <filename>alsa-lib</filename> package instead of
                    <filename>libasound</filename>.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>glibc</filename>:</emphasis>
                    <filename>libnss-db</filename> is now in its own package
                    along with a <filename>/var/db/makedbs.sh</filename>
                    script to update databases.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>python</filename> and <filename>python3</filename>:</emphasis>
                    The main package has been removed from the recipe.
                    You must install specific packages or
                    <filename>python-modules</filename> /
                    <filename>python3-modules</filename> for everything.
                    </para></listitem>
                <listitem><para>
                    <emphasis><filename>systemtap</filename>:</emphasis>
                    Moved <filename>systemtap-exporter</filename> into its own
                    package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-xorg-protocol-dependencies'>
        <title>XOrg Protocol dependencies</title>

        <para>
            The "*proto" upstream repositories have been combined into one
            "xorgproto" repository.
            Thus, the corresponding recipes have also been combined into a
            single <filename>xorgproto</filename> recipe.
            Any recipes that depend upon the older <filename>*proto</filename>
            recipes need to be changed to depend on the newer
            <filename>xorgproto</filename> recipe instead.
        </para>

        <para>
            For names of recipes removed because of this repository change,
            see the
            <link linkend="migration-2.6-removed-recipes">Removed Recipes</link>
            section.
        </para>
    </section>

    <section id='migration-2.6-distutils-distutils3-fetching-dependencies'>
        <title><filename>distutils</filename> and <filename>distutils3</filename> Now Prevent Fetching Dependencies During the <filename>do_configure</filename> Task</title>

        <para>
            Previously, it was possible for Python recipes that inherited
            the
            <link linkend='ref-classes-distutils'><filename>distutils</filename></link>
            and
            <link linkend='ref-classes-distutils3'><filename>distutils3</filename></link>
            classes to fetch code during the
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task to satisfy dependencies mentioned in
            <filename>setup.py</filename> if those dependencies were not
            provided in the sysroot (i.e. recipes providing the dependencies
            were missing from
            <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>).
            <note>
                This change affects classes beyond just the two mentioned
                (i.e. <filename>distutils</filename> and
                <filename>distutils3</filename>).
                Any recipe that inherits <filename>distutils*</filename>
                classes are affected.
                For example, the <filename>setuptools</filename> and
                <filename>setuptools3</filename> recipes are affected since
                they inherit the <filename>distutils*</filename> classes.
            </note>
        </para>

        <para>
            Fetching these types of dependencies that are not provided in the
            sysroot negatively affects the ability to reproduce builds.
            This type of fetching is now explicitly disabled.
            Consequently, any missing dependencies in Python recipes that
            use these classes now result in an error during the
            <filename>do_configure</filename> task.
        </para>
    </section>

    <section id='migration-2.6-linux-yocto-configuration-audit-issues-now-correctly-reported'>
        <title><filename>linux-yocto</filename> Configuration Audit Issues Now Correctly Reported</title>

        <para>
            Due to a bug, the kernel configuration audit functionality was
            not writing out any resulting warnings during the build.
            This issue is now corrected.
            You might notice these warnings now if you have a custom kernel
            configuration with a <filename>linux-yocto</filename> style
            kernel recipe.
        </para>
    </section>

    <section id='migration-2.6-image-kernel-artifact-naming-changes'>
        <title>Image/Kernel Artifact Naming Changes</title>

        <para>
            The following changes have been made:
            <itemizedlist>
                <listitem><para>
                    Name variables (e.g.
                    <link linkend='var-IMAGE_NAME'><filename>IMAGE_NAME</filename></link>)
                    use a new <filename>IMAGE_VERSION_SUFFIX</filename>
                    variable instead of
                    <link linkend='var-DATETIME'><filename>DATETIME</filename></link>.
                    Using <filename>IMAGE_VERSION_SUFFIX</filename> allows
                    easier and more direct changes.</para>

                    <para>The <filename>IMAGE_VERSION_SUFFIX</filename>
                    variable is set in the
                    <filename>bitbake.conf</filename> configuration file as
                    follows:
                    <literallayout class='monospaced'>
     IMAGE_VERSION_SUFFIX = "-${DATETIME}"
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    Several variables have changed names for consistency:
                    <literallayout class='monospaced'>
    Old Variable Name               New Variable Name
    ========================================================
    KERNEL_IMAGE_BASE_NAME          <link linkend='var-KERNEL_IMAGE_NAME'>KERNEL_IMAGE_NAME</link>
    KERNEL_IMAGE_SYMLINK_NAME       <link linkend='var-KERNEL_IMAGE_LINK_NAME'>KERNEL_IMAGE_LINK_NAME</link>
    MODULE_TARBALL_BASE_NAME        <link linkend='var-MODULE_TARBALL_NAME'>MODULE_TARBALL_NAME</link>
    MODULE_TARBALL_SYMLINK_NAME     <link linkend='var-MODULE_TARBALL_LINK_NAME'>MODULE_TARBALL_LINK_NAME</link>
    INITRAMFS_BASE_NAME             <link linkend='var-INITRAMFS_NAME'>INITRAMFS_NAME</link>
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    The <filename>MODULE_IMAGE_BASE_NAME</filename> variable
                    has been removed.
                    The module tarball name is now controlled directly with the
                    <link linkend='var-MODULE_TARBALL_NAME'><filename>MODULE_TARBALL_NAME</filename></link>
                    variable.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-KERNEL_DTB_NAME'><filename>KERNEL_DTB_NAME</filename></link>
                    and
                    <link linkend='var-KERNEL_DTB_LINK_NAME'><filename>KERNEL_DTB_LINK_NAME</filename></link>
                    variables have been introduced to control kernel Device
                    Tree Binary (DTB) artifact names instead of mangling
                    <filename>KERNEL_IMAGE_*</filename> variables.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-KERNEL_FIT_NAME'><filename>KERNEL_FIT_NAME</filename></link>
                    and
                    <link linkend='var-KERNEL_FIT_LINK_NAME'><filename>KERNEL_FIT_LINK_NAME</filename></link>
                    variables have been introduced to specify the name of
                    flattened image tree (FIT) kernel images similar to other
                    deployed artifacts.
                    </para></listitem>
                <listitem><para>
                    The
                    <link linkend='var-MODULE_TARBALL_NAME'><filename>MODULE_TARBALL_NAME</filename></link>
                    and
                    <link linkend='var-MODULE_TARBALL_LINK_NAME'><filename>MODULE_TARBALL_LINK_NAME</filename></link>
                    variable values no longer include the "module-" prefix or
                    ".tgz" suffix.
                    These parts are now hardcoded so that the values are
                    consistent with other artifact naming variables.
                    </para></listitem>
                <listitem><para>
                    Added the
                    <link linkend='var-INITRAMFS_LINK_NAME'><filename>INITRAMFS_LINK_NAME</filename></link>
                    variable so that the symlink can be controlled similarly
                    to other artifact types.
                    </para></listitem>
                <listitem><para>
                    <link linkend='var-INITRAMFS_NAME'><filename>INITRAMFS_NAME</filename></link>
                    now uses
                    "${PKGE}-${PKGV}-${PKGR}-${MACHINE}${IMAGE_VERSION_SUFFIX}"
                    instead of
                    "${PV}-${PR}-${MACHINE}-${DATETIME}", which
                    makes it consistent with other variables.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-serial-console-deprecated'>
        <title><filename>SERIAL_CONSOLE</filename> Deprecated</title>

        <para>
            The
            <link linkend='var-SERIAL_CONSOLE'><filename>SERIAL_CONSOLE</filename></link>
            variable has been functionally replaced by the
            <link linkend='var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></link>
            variable for some time.
            With the Yocto Project 2.6 release,
            <filename>SERIAL_CONSOLE</filename> has been officially deprecated.
        </para>

        <para>
            <filename>SERIAL_CONSOLE</filename> will continue to work as
            before for the 2.6 release.
            However, for the sake of future compatibility, it is recommended
            that you replace all instances of
            <filename>SERIAL_CONSOLE</filename> with
            <filename>SERIAL_CONSOLES</filename>.
            <note>
                The only difference in usage is that
                <filename>SERIAL_CONSOLES</filename> expects entries to be
                separated using semicolons as compared to
                <filename>SERIAL_CONSOLE</filename>, which expects spaces.
            </note>
        </para>
    </section>

    <section id='migration-2.6-poky-sets-unknown-configure-option-to-qa-error'>
        <title>Configure Script Reports Unknown Options as Errors</title>

        <para>
            If the configure script reports an unknown option, this now
            triggers a QA error instead of a warning.
            Any recipes that previously got away with specifying such unknown
            options now need to be fixed.
        </para>
    </section>

    <section id='migration-2.6-override-changes'>
        <title>Override Changes</title>

        <para>
            The following changes have occurred:
            <itemizedlist>
                <listitem><para>
                    <emphasis>The <filename>virtclass-native</filename> and
                    <filename>virtclass-nativesdk</filename> Overrides Have
                    Been Removed:</emphasis>
                    The <filename>virtclass-native</filename> and
                    <filename>virtclass-nativesdk</filename> overrides have
                    been deprecated since 2012 in favor of
                    <filename>class-native</filename> and
                    <filename>class-nativesdk</filename>, respectively.
                    Both <filename>virtclass-native</filename> and
                    <filename>virtclass-nativesdk</filename> are now dropped.
                    <note>
                        The <filename>virtclass-multilib-</filename> overrides
                        for multilib are still valid.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <emphasis>The <filename>forcevariable</filename>
                    Override Now Has a Higher Priority Than
                    <filename>libc</filename> Overrides:</emphasis>
                    The <filename>forcevariable</filename> override is
                    documented to be the highest priority override.
                    However, due to a long-standing quirk of how
                    <link linkend='var-OVERRIDES'><filename>OVERRIDES</filename></link>
                    is set, the <filename>libc</filename> overrides (e.g.
                    <filename>libc-glibc</filename>,
                    <filename>libc-musl</filename>, and so forth) erroneously
                    had a higher priority.
                    This issue is now corrected.</para>

                    <para>It is likely this change will not cause any
                    problems.
                    However, it is possible with some unusual configurations
                    that you might see a change in behavior if you were
                    relying on the previous behavior.
                    Be sure to check how you use
                    <filename>forcevariable</filename> and
                    <filename>libc-*</filename> overrides in your custom
                    layers and configuration files to ensure they make sense.
                    </para></listitem>
                <listitem><para>
                    <emphasis>The <filename>build-${BUILD_OS}</filename>
                    Override Has Been Removed:</emphasis>
                    The <filename>build-${BUILD_OS}</filename>, which is
                    typically <filename>build-linux</filename>, override has
                    been removed because building on a host operating system
                    other than a recent version of Linux is neither supported
                    nor recommended.
                    Dropping the override avoids giving the impression that
                    other host operating systems might be supported.
                    </para></listitem>
                <listitem><para>
                    The "_remove" operator now preserves whitespace.
                    Consequently, when specifying list items to remove, be
                    aware that leading and trailing whitespace resulting from
                    the removal is retained.</para>

                    <para>See the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#removing-override-style-syntax'>Removal (Override Style Syntax)</ulink>"
                    section in the BitBake User Manual for a detailed example.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-systemd-configuration-now-split-out-to-system-conf'>
        <title><filename>systemd</filename> Configuration is Now Split Into <filename>systemd-conf</filename></title>

        <para>
            The configuration for the <filename>systemd</filename> recipe
            has been moved into a <filename>system-conf</filename> recipe.
            Moving this configuration to a separate recipe avoids the
            <filename>systemd</filename> recipe from becoming machine-specific
            for cases where machine-specific configurations need to be applied
            (e.g. for <filename>qemu*</filename> machines).
        </para>

        <para>
            Currently, the new recipe packages the following files:
            <literallayout class='monospaced'>
     ${sysconfdir}/machine-id
     ${sysconfdir}/systemd/coredump.conf
     ${sysconfdir}/systemd/journald.conf
     ${sysconfdir}/systemd/logind.conf
     ${sysconfdir}/systemd/system.conf
     ${sysconfdir}/systemd/user.conf
            </literallayout>
            If you previously used bbappend files to append the
            <filename>systemd</filename> recipe to change any of the
            listed files, you must do so for the
            <filename>systemd-conf</filename> recipe instead.
        </para>
    </section>

    <section id='migration-2.6-automatic-testing-changes'>
        <title>Automatic Testing Changes</title>

        <para>
            This section provides information about automatic testing
            changes:
            <itemizedlist>
                <listitem><para>
                    <emphasis><filename>TEST_IMAGE</filename> Variable Removed:</emphasis>
                    Prior to this release, you set the
                    <filename>TEST_IMAGE</filename> variable to "1" to
                    enable automatic testing for successfully built images.
                    The <filename>TEST_IMAGE</filename> variable no longer
                    exists and has been replaced by the
                    <link linkend='var-TESTIMAGE_AUTO'><filename>TESTIMAGE_AUTO</filename></link>
                    variable.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Inheriting the <filename>testimage</filename> and
                    <filename>testsdk</filename> Classes:</emphasis>
                    Best practices now dictate that you use the
                    <link linkend='var-IMAGE_CLASSES'><filename>IMAGE_CLASSES</filename></link>
                    variable rather than the
                    <link linkend='var-INHERIT'><filename>INHERIT</filename></link>
                    variable when you inherit the
                    <link linkend='ref-classes-testimage*'><filename>testimage</filename></link>
                    and
                    <link linkend='ref-classes-testsdk'><filename>testsdk</filename></link>
                    classes used for automatic testing.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.6-openssl-changes'>
        <title>OpenSSL Changes</title>

        <para>
            <ulink url='https://www.openssl.org/'>OpenSSL</ulink> has been
            upgraded from 1.0 to 1.1.
            By default, this upgrade could cause problems for recipes that
            have both versions in their dependency chains.
            The problem is that both versions cannot be installed together
            at build time.
            <note>
                It is possible to have both versions of the library at runtime.
            </note>
        </para>
    </section>

    <section id='migration-2.6-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The server logfile <filename>bitbake-cookerdaemon.log</filename> is
            now always placed in the
            <link linkend='build-directory'>Build Directory</link>
            instead of the current directory.
        </para>
    </section>

    <section id='migration-2.6-security-changes'>
        <title>Security Changes</title>

        <para>
            The Poky distribution now uses security compiler flags by
            default.
            Inclusion of these flags could cause new failures due to stricter
            checking for various potential security issues in code.
        </para>
    </section>

    <section id='migration-2.6-post-installation-changes'>
        <title>Post Installation Changes</title>

        <para>
            You must explicitly mark post installs to defer to the target.
            If you want to explicitly defer a postinstall to first boot on
            the target rather than at rootfs creation time, use
            <filename>pkg_postinst_ontarget()</filename> or call
            <filename>postinst-intercepts defer_to_first_boot</filename> from
            <filename>pkg_postinst()</filename>.
            Any failure of a <filename>pkg_postinst()</filename> script
            (including exit 1) triggers an error during the
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link> task.
        </para>

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

    <section id='migration-2.6-python-3-profile-guided-optimizations'>
        <title>Python 3 Profile-Guided Optimization</title>

        <para>
            The <filename>python3</filename> recipe now enables profile-guided
            optimization.
            Using this optimization requires a little extra build time in
            exchange for improved performance on the target at runtime.
            Additionally, the optimization is only enabled if the current
            <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
            has support for user-mode emulation in QEMU (i.e. "qemu-usermode"
            is in
            <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>,
            which it is by default).
        </para>

        <para>
            If you wish to disable Python profile-guided optimization
            regardless of the value of
            <filename>MACHINE_FEATURES</filename>, then ensure that
            <link linkend='var-PACKAGECONFIG'><filename>PACKAGECONFIG</filename></link>
            for the <filename>python3</filename> recipe does not contain "pgo".
            You could accomplish the latter using the following at the
            configuration level:
            <literallayout class='monospaced'>
     PACKAGECONFIG_remove_pn-python3 = "pgo"
            </literallayout>
            Alternatively, you can set
            <filename>PACKAGECONFIG</filename> using an append file for the
            <filename>python3</filename> recipe.
        </para>
    </section>

    <section id='migration-2.6-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes occurred:
            <itemizedlist>
                <listitem><para>
                    Default to using the Thumb-2 instruction set for armv7a
                    and above.
                    If you have any custom recipes that build software that
                    needs to be built with the ARM instruction set, change the
                    recipe to set the instruction set as follows:
                    <literallayout class='monospaced'>
     ARM_INSTRUCTION_SET = "arm"
                    </literallayout>
                    </para></listitem>
                <listitem><para>
                    <filename>run-postinsts</filename> no longer uses
                    <filename>/etc/*-postinsts</filename> for
                    <filename>dpkg/opkg</filename> in favor of built-in
                    postinst support.
                    RPM behavior remains unchanged.
                    </para></listitem>
                <listitem><para>
                    The <filename>NOISO</filename> and
                    <filename>NOHDD</filename> variables are no longer used.
                    You now control building <filename>*.iso</filename> and
                    <filename>*.hddimg</filename> image types directly
                    by using the
                    <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
                    variable.
                    </para></listitem>
                <listitem><para>
                    The <filename>scripts/contrib/mkefidisk.sh</filename>
                    has been removed in favor of Wic.
                    </para></listitem>
                <listitem><para>
                    <filename>kernel-modules</filename> has been removed from
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
                    for <filename>qemumips</filename> and
                    <filename>qemumips64</filename> machines.
                    Removal also impacts the <filename>x86-base.inc</filename>
                    file.
                    <note>
                        <filename>genericx86</filename> and
                        <filename>genericx86-64</filename> retain
                        <filename>kernel-modules</filename> as part of the
                        <filename>RRECOMMENDS</filename> variable setting.
                    </note>
                    </para></listitem>
                <listitem><para>
                    The <filename>LGPLv2_WHITELIST_GPL-3.0</filename>
                    variable has been removed.
                    If you are setting this variable in your configuration,
                    set or append it to the
                    <filename>WHITELIST_GPL-3.0</filename> variable instead.
                    </para></listitem>
                <listitem><para>
                    <filename>${ASNEEDED}</filename> is now included in
                    the
                    <link linkend='var-TARGET_LDFLAGS'><filename>TARGET_LDFLAGS</filename></link>
                    variable directly.
                    The remaining definitions from
                    <filename>meta/conf/distro/include/as-needed.inc</filename>
                    have been moved to corresponding recipes.
                    </para></listitem>
                <listitem><para>
                    Support for DSA host keys has been dropped from the
                    OpenSSH recipes.
                    If you are still using DSA keys, you must switch over to a
                    more secure algorithm as recommended by OpenSSH upstream.
                    </para></listitem>
                <listitem><para>
                    The <filename>dhcp</filename> recipe now uses the
                    <filename>dhcpd6.conf</filename> configuration file in
                    <filename>dhcpd6.service</filename> for IPv6 DHCP rather
                    than re-using <filename>dhcpd.conf</filename>, which is
                    now reserved for IPv4.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='moving-to-the-yocto-project-2.7-release'>
    <title>Moving to the Yocto Project 2.7 Release</title>

    <para>
        This section provides migration information for moving to the
        Yocto Project 2.7 Release from the prior release.
    </para>

    <section id='migration-2.7-bitbake-changes'>
        <title>BitBake Changes</title>

        <para>
            The following changes have been made to BitBake:
            <itemizedlist>
                <listitem><para>
                    BitBake now checks anonymous Python functions and pure
                    Python functions (e.g. <filename>def funcname:</filename>)
                    in the metadata for tab indentation.
                    If found, BitBake  produces a warning.
                    </para></listitem>
                <listitem><para>
                    Bitbake now checks
                    <link linkend='var-BBFILE_COLLECTIONS'><filename>BBFILE_COLLECTIONS</filename></link>
                    for duplicate entries and triggers an error if any are
                    found.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.7-eclipse-support-dropped'>
        <title><trademark class='trade'>Eclipse</trademark> Support Removed</title>

        <para>
            Support for the Eclipse IDE has been removed.
            Support continues for those releases prior to 2.7 that did include
            support.
            The 2.7 release does not include the Eclipse Yocto plugin.
        </para>
    </section>

    <section id='migration-2.7-qemu-native-splits-system-and-user-mode-parts'>
        <title><filename>qemu-native</filename> Splits the System and User-Mode Parts</title>

        <para>
            The system and user-mode parts of <filename>qemu-native</filename>
            are now split.
            <filename>qemu-native</filename> provides the user-mode components
            and <filename>qemu-system-native</filename> provides the system
            components.
            If you have recipes that depend on QEMU's system emulation
            functionality at build time, they should now depend upon
            <filename>qemu-system-native</filename> instead of
            <filename>qemu-native</filename>.
        </para>
    </section>

    <section id='migration-2.7-upstream-tracking.inc-removed'>
        <title>The <filename>upstream-tracking.inc</filename> File Has Been Removed</title>

        <para>
            The previously deprecated <filename>upstream-tracking.inc</filename>
            file is now removed.
            Any <filename>UPSTREAM_TRACKING*</filename> variables are now set
            in the corresponding recipes instead.
        </para>

        <para>
            Remove any references you have to the
            <filename>upstream-tracking.inc</filename> file in your
            configuration.
        </para>
    </section>

    <section id='migration-2.7-distro-features-libc-removed'>
        <title>The <filename>DISTRO_FEATURES_LIBC</filename> Variable Has Been Removed</title>

        <para>
            The <filename>DISTRO_FEATURES_LIBC</filename> variable is no
            longer used.
            The ability to configure glibc using kconfig has been removed
            for quite some time making the <filename>libc-*</filename> features
            set no longer effective.
        </para>

        <para>
            Remove any references you have to
            <filename>DISTRO_FEATURES_LIBC</filename> in your own layers.
        </para>
    </section>

    <section id='migration-2.7-license-values'>
        <title>License Value Corrections</title>

        <para>
            The following corrections have been made to the
            <link linkend='var-LICENSE'><filename>LICENSE</filename></link>
            values set by recipes:
            <literallayout class='monospaced'>
     <emphasis>socat</emphasis>: Corrected <filename>LICENSE</filename> to be "GPLv2" rather than
        "GPLv2+".

     <emphasis>libgfortran</emphasis>: Set license to "GPL-3.0-with-GCC-exception".

     <emphasis>elfutils</emphasis>: Removed "Elfutils-Exception" and set to "GPLv2" for shared
        libraries
            </literallayout>
        </para>
    </section>

    <section id='migration-2.7-packaging-changes'>
        <title>Packaging Changes</title>

        <para>
            This section provides information about packaging changes.
            <itemizedlist>
                <listitem><para>
                    <filename>bind</filename>: The
                    <filename>nsupdate</filename> binary has been moved to
                    the <filename>bind-utils</filename> package.
                    </para></listitem>
                <listitem><para>
                    Debug split: The default debug split has been changed to
                    create separate source packages (i.e.
                    <replaceable>package_name</replaceable><filename>-dbg</filename>
                    and
                    <replaceable>package_name</replaceable><filename>-src</filename>).
                    If you are currently using <filename>dbg-pkgs</filename>
                    in
                    <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
                    to bring in debug symbols and you still need the sources,
                    you must now also add <filename>src-pkgs</filename> to
                    <filename>IMAGE_FEATURES</filename>.
                    Source packages remain in the target portion of the SDK
                    by default, unless you have set your own value for
                    <link linkend='var-SDKIMAGE_FEATURES'><filename>SDKIMAGE_FEATURES</filename></link>
                    that does not include <filename>src-pkgs</filename>.
                    </para></listitem>
                <listitem><para>
                    Mount all using <filename>util-linux</filename>:
                    <filename>/etc/default/mountall</filename> has
                    moved into the -mount sub-package.
                    </para></listitem>
                <listitem><para>
                    Splitting binaries using <filename>util-linux</filename>:
                    <filename>util-linux</filename> now splits each binary into
                    its own package for fine-grained control.
                    The main <filename>util-linux</filename> package pulls in
                    the individual binary packages using the
                    <link linkend='var-RRECOMMENDS'><filename>RRECOMMENDS</filename></link>
                    and
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    variables.
                    As a result, existing images should not see any changes
                    assuming
                    <link linkend='var-NO_RECOMMENDATIONS'><filename>NO_RECOMMENDATIONS</filename></link>
                    is not set.
                    </para></listitem>
                <listitem><para>
                    <filename>netbase/base-files</filename>:
                    <filename>/etc/hosts</filename> has moved from
                    <filename>netbase</filename> to
                    <filename>base-files</filename>.
                    </para></listitem>
                <listitem><para>
                    <filename>tzdata</filename>: The main package has been
                    converted to an empty meta package that pulls in all
                    <filename>tzdata</filename> packages by default.
                    </para></listitem>
                <listitem><para>
                    <filename>lrzsz</filename>: This package has been removed
                    from <filename>packagegroup-self-hosted</filename> and
                    <filename>packagegroup-core-tools-testapps</filename>.
                    The X/Y/ZModem support is less likely to be needed on
                    modern systems.
                    If you are relying on these packagegroups to include the
                    <filename>lrzsz</filename> package in your image, you
                    now need to explicitly add the package.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='migration-2.7-removed-recipes'>
        <title>Removed Recipes</title>

        <para>
            The following recipes have been removed:
            <literallayout class='monospaced'>
     <emphasis>gcc</emphasis>: Drop version 7.3 recipes. Version 8.3 now remains.

     <emphasis>linux-yocto</emphasis>: Drop versions 4.14 and 4.18 recipes. Versions 4.19 and 5.0 remain.

     <emphasis>go</emphasis>: Drop version 1.9 recipes. Versions 1.11 and 1.12 remain.

     <emphasis>xvideo-tests</emphasis>: Became obsolete.

     <emphasis>libart-lgpl</emphasis>: Became obsolete.

     <emphasis>gtk-icon-utils-native</emphasis>: These tools are now provided by gtk+3-native

     <emphasis>gcc-cross-initial</emphasis>: No longer needed. gcc-cross/gcc-crosssdk is now used instead.

     <emphasis>gcc-crosssdk-initial</emphasis>: No longer needed. gcc-cross/gcc-crosssdk is now used instead.

     <emphasis>glibc-initial</emphasis>: Removed because the benefits of having it for site_config are
        currently outweighed by the cost of building the recipe.
            </literallayout>
         </para>
    </section>

    <section id='migration-2.7-removed-classes'>
        <title>Removed Classes</title>

        <para>
            The following classes have been removed:
            <literallayout class='monospaced'>
     <emphasis>distutils-tools</emphasis>: This class was never used.

     <emphasis>bugzilla.bbclass</emphasis>: Became obsolete.

     <emphasis>distrodata</emphasis>: This functionally has been replaced by a more modern
         tinfoil-based implementation.
            </literallayout>
        </para>
    </section>

    <section id='migration-2.7-miscellaneous-changes'>
        <title>Miscellaneous Changes</title>

        <para>
            The following miscellaneous changes occurred:
            <itemizedlist>
                <listitem><para>
                    The <filename>distro</filename> subdirectory of the Poky
                    repository has been removed from the top-level
                    <filename>scripts</filename> directory.
                    </para></listitem>
                <listitem><para>
                    Perl now builds for the target using
                    <ulink url='http://arsv.github.io/perl-cross/'><filename>perl-cross</filename></ulink>
                    for better maintainability and improved build performance.
                    This change should not present any problems unless you have
                    heavily customized your Perl recipe.
                    </para></listitem>
                <listitem><para>
                    <filename>arm-tunes</filename>: Removed the "-march"
                    option if mcpu is already added.
                    </para></listitem>
                <listitem><para>
                    <filename>update-alternatives</filename>: Convert file
                    renames to
                    <link linkend='var-PACKAGE_PREPROCESS_FUNCS'><filename>PACKAGE_PREPROCESS_FUNCS</filename></link>
                    </para></listitem>
                <listitem><para>
                    <filename>base/pixbufcache</filename>: Obsolete
                    <filename>sstatecompletions</filename> code has been
                    removed.
                    </para></listitem>
                <listitem><para>
                    <link linkend='ref-classes-native'><filename>native</filename></link>
                    class:
                    <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>
                    handling has been enabled.
                    </para></listitem>
                <listitem><para>
                    <filename>inetutils</filename>: This recipe has rsh
                    disabled.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
