<!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
            <link linkend='var-KERNEL_IMAGE_BASE_NAME'><filename>KERNEL_IMAGE_BASE_NAME</filename></link>
            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 plug-in has been removed as it duplicates
                    functionality of the rawcopy plug-in.
                    </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 <filename>cmake</filename> 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></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>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
