Moving to the Yocto Project 1.8 Release (fido)
==============================================

This section provides migration information for moving to the Yocto
Project 1.8 Release (codename "fido") from the prior release.

.. _migration-1.8-removed-recipes:

Removed Recipes
---------------

The following recipes have been removed:

-  ``owl-video``: Functionality replaced by ``gst-player``.

-  ``gaku``: Functionality replaced by ``gst-player``.

-  ``gnome-desktop``: This recipe is now available in ``meta-gnome`` and
   is no longer needed.

-  ``gsettings-desktop-schemas``: This recipe is now available in
   ``meta-gnome`` and is no longer needed.

-  ``python-argparse``: The ``argparse`` module is already provided in
   the default Python distribution in a package named
   ``python-argparse``. Consequently, the separate ``python-argparse``
   recipe is no longer needed.

-  ``telepathy-python, libtelepathy, telepathy-glib, telepathy-idle, telepathy-mission-control``:
   All these recipes have moved to ``meta-oe`` and are consequently no
   longer needed by any recipes in OpenEmbedded-Core.

-  ``linux-yocto_3.10`` and ``linux-yocto_3.17``: 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.

-  ``poky-feed-config-opkg``: This recipe has become obsolete and is no
   longer needed. Use ``distro-feed-config`` from ``meta-oe`` instead.

-  ``libav 0.8.x``: ``libav 9.x`` is now used.

-  ``sed-native``: No longer needed. A working version of ``sed`` is
   expected to be provided by the host distribution.

.. _migration-1.8-bluez:

BlueZ 4.x / 5.x Selection
-------------------------

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
:term:`DISTRO_FEATURES` value. If you had
previously added append files (``*.bbappend``) to make this selection,
you can now remove them.

Additionally, a ``bluetooth`` 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: ::

   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"

.. _migration-1.8-kernel-build-changes:

Kernel Build Changes
--------------------

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 ``${S}`` (source files) and
``${B}`` (build artifacts) are used correctly in functions such as
:ref:`ref-tasks-configure` and
:ref:`ref-tasks-install`. For kernel recipes that do not
inherit from ``kernel-yocto`` or include ``linux-yocto.inc``, you might
wish to refer to the ``linux.inc`` file in the ``meta-oe`` layer for the
kinds of changes you need to make. For reference, here is the
:oe_git:`commit </meta-openembedded/commit/meta-oe/recipes-kernel/linux/linux.inc?id=fc7132ede27ac67669448d3d2845ce7d46c6a1ee>`
where the ``linux.inc`` file in ``meta-oe`` was updated.

Recipes that rely on the kernel source code and do not inherit the
module classes might need to add explicit dependencies on the
``do_shared_workdir`` kernel task, for example: ::

   do_configure[depends] += "virtual/kernel:do_shared_workdir"

.. _migration-1.8-ssl:

SSL 3.0 is Now Disabled in OpenSSL
----------------------------------

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 (``*.bbappend``)
for the ``openssl`` recipe to remove "-no-ssl3" from
:term:`EXTRA_OECONF`.

.. _migration-1.8-default-sysroot-poisoning:

Default Sysroot Poisoning
-------------------------

``gcc's`` 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.

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.

.. _migration-1.8-rebuild-improvements:

Rebuild Improvements
--------------------

Changes have been made to the :ref:`base <ref-classes-base>`,
:ref:`autotools <ref-classes-autotools>`, and
:ref:`cmake <ref-classes-cmake>` classes to clean out generated files
when the :ref:`ref-tasks-configure` task needs to be
re-executed.

One of the improvements is to attempt to run "make clean" during the
``do_configure`` task if a ``Makefile`` exists. Some software packages
do not provide a working clean target within their make files. If you
have such recipes, you need to set
:term:`CLEANBROKEN` to "1" within the recipe, for example: ::

   CLEANBROKEN = "1"

.. _migration-1.8-qa-check-and-validation-changes:

QA Check and Validation Changes
-------------------------------

The following QA Check and Validation Changes have occurred:

-  Usage of ``PRINC`` previously triggered a warning. It now triggers an
   error. You should remove any remaining usage of ``PRINC`` in any
   recipe or append file.

-  An additional QA check has been added to detect usage of ``${D}`` in
   :term:`FILES` values where :term:`D` values
   should not be used at all. The same check ensures that ``$D`` is used
   in ``pkg_preinst/pkg_postinst/pkg_prerm/pkg_postrm`` functions
   instead of ``${D}``.

-  :term:`S` now needs to be set to a valid value within a
   recipe. If ``S`` is not set in the recipe, the directory is not
   automatically created. If ``S`` does not point to a directory that
   exists at the time the :ref:`ref-tasks-unpack` task
   finishes, a warning will be shown.

-  :term:`LICENSE` 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.

.. _migration-1.8-miscellaneous-changes:

Miscellaneous Changes
---------------------

The following miscellaneous changes have occurred:

-  The ``send-error-report`` script now expects a "-s" option to be
   specified before the server address. This assumes a server address is
   being specified.

-  The ``oe-pkgdata-util`` script now expects a "-p" option to be
   specified before the ``pkgdata`` directory, which is now optional. If
   the ``pkgdata`` directory is not specified, the script will run
   BitBake to query :term:`PKGDATA_DIR` from the
   build environment.


