YCM 0.10.0 (2019-04-01) Release Notes
*************************************

.. only:: html

  .. contents::

Changes made since YCM 0.9 include the following.


Build System
============

* YCM can now be included safely in another project using
  :cmake:module:`FetchContent`.


Variables
=========

* The following varibales are no longer cached, since they should be set from
  the project maintainer, and not by the user:
  * :variable:`YCM_USE_CMAKE_<VERSION>`
  * :variable:`YCM_USE_CMAKE_NEXT`
  * :variable:`YCM_USE_CMAKE_PROPOSED`
  * :variable:`YCM_USE_3RDPARTY`
  * :variable:`YCM_USE_DEPRECATED`
* The :variable:`YCM_USE_CMAKE` can now be used to disable simultaneously all
  the :variable:`YCM_USE_CMAKE_<VERSION>`, :variable:`YCM_USE_CMAKE_NEXT`, and
  :variable:`YCM_USE_CMAKE_PROPOSED` variables.


Modules
=======

Generic Modules
---------------

* The :module:`InstallBasicPackageFiles` module learned to forward the
  ``ARCH_INDEPENDENT`` option to :command:`write_basic_package_version_file`.
* The :module:`IncludeUrl` module no longer uses locks.
* The :module:`InstallBasicPackageFiles` module no longer looks for the
  ``Config.cmake.in`` in the root directory, only current source directory is
  supported.
* The :module:`YCMDefaultDirs` module default dirs now use
  ``CMAKE_CURRENT_BINARY_DIR`` instead of ``CMAKE_BINARY_DIR``.
* The :module:`YCMDefaultDirs` module is now deprecated.
* The :module:`InstallBasicPackageFiles` module no longer needs ``FIRST_TARGET``
  when used with ``EXPORT``. Using ``FIRST_TARGET`` is deprecated.
* :module:`InstallBasicPackageFiles`: the ``TARGETS``, ``TARGETS_PROPERTY``, and
  ``TARGETS_PROPERTIES`` arguments are deprecated.
* The :module:`AddUninstallTarget` module must now be included in your main
  ``CMakeLists.txt``. If included in a subdirectory it does nothing.
  This allows you to use it safely in your main ``CMakeLists.txt`` and include
  your project using ``add_subdirectory`` (for example when using it with
  :cmake:module:`FetchContent`).
* The :module:`AddUninstallTarget` module no longer tries to add the
  ``uninstall`` target if the target it already exists, instead it does nothing.
* :module:`InstallBasicPackageFiles`: The list of targets is no longer used to
  decide whether ``PRIVATE_DEPENDENCIES`` should be enabled or not (only the
  :cmake:variable:`BUILD_SHARED_LIBS` variable is used). Dependencies
  for ``STATIC``, ``OBJECT``, and ``INTERFACE`` libraries should be passed as
  ``DEPENDENCIES`` instead.
* :module:`InstallBasicPackageFiles`: The ``NO_COMPATIBILITY_VARS`` option is
  deprecated. The compatibility variables are no longer generated by default,
  and their generation is broken when using ``EXPORT``. If required, it is
  possible to re-enable it using the ``ENABLE_COMPATIBILITY_VARS`` option
  (deprecated) or define them using either ``INCLUDE_FILE`` or
  ``INCLUDE_CONTENT`` (recommended).
* :module:`InstallBasicPackageFiles`: Fixed malformed `find_package()` when a
  package dependency had a required version, for CMake older than 3.9.
* The :module:`InstallBasicPackageFiles` module now considers a relative
  ``EXPORT_DESTINATION`` as relative to ``CMAKE_CURRENT_BINARY_DIR`` instead
  of ``CURRENT_BINARY_DIR``.
* :module:`InstallBasicPackageFiles`: Fixed export destination when
  ``EXPORT_DESTINATION`` is an absolute path.


Superbuild Helper Modules
-------------------------

* The :module:`YCMEPHelper` module now supports the ``CMAKE_CACHE_DEFAULT_ARGS``
  argument.
* The :module:`YCMEPHelper` module supports the ``SOURCE_SUBDIR`` argument.
  The ``CONFIGURE_SOURCE_DIR`` argument is now deprecated in favour of
  ``SOURCE_SUBDIR``.
* The :module:`YCMEPHelper` module now passes the variable
  ``CMAKE_TOOLCHAIN_FILE`` to the children projects.
* :module:`YCMEPHelper`: The ``CMAKE_PREFIX_PATH` list passed to the subproject
  now has the first element the installation directory of the superbuild. This
  is to ensure that if a package is available in the system but it is disabled
  using ``USE_SYSTEM_<package>`` set to ``OFF``, the version installed by the
  superbuild is the one found by the other packages in the superbuild.
* The :module:`YCMEPHelper` module now adds subproject to the main install
  target, if they provide a ``cmake_install.cmake`` file in their build
  directory. This file is automatically provided by CMake for projects
  installing at least one file. This feature should be considered experimental
  and might be modified or removed in the future.
  Please note that non-relocatable file will contain the path for the project
  installation (i.e. the path to the ``install`` folder inside the superbuild
  binary directory), not to ``CMAKE_INSTALL_PREFIX``.


Find Modules
------------

* The :module:`FindLibOVR` module now works properly with VS2015.
* The :module:`FindPortAudio` module should now detect the library installed by
  vcpkg.
* The :module:`FindPortAudio` module now handles debug and release libraries.
* Import :module:`FindI2C` module from `YARP Git Repository`_.
* The :module:`FindACE` module now creates the ``ACE::ACE`` and
  ``ACE::ACE_INLINE`` imported targets.
  The ``ACE_ADDR_HAS_LOOPBACK_METHOD`` and
  ``ACE_COMPILES_WITHOUT_INLINE_<CONFIG>`` are now deprecated.
* The ``FindQt3`` module is deprecated in favour of one from CMake.
* Added :module:`Findassimp` module to locate the Open Asset Importer Library
  (assimp).
* Added :module:`FindGLM` module to locate the OpenGL Mathematics (GLM) library.


CMake Next
----------

* Updated to CMake v3.14.0 + commit
  :cmake-commit:`e67e4dbaadf3583d665fb5409b425e1a238d9748`.
* Imported :module:`FindDoxygen` module from CMake 3.9.
* Imported :module:`WriteBasicConfigVersionFile` and
  :module:`CMakePackageConfigHelpers` modules from CMake master, to support
  the ``ARCH_INDEPENDENT`` option in
  :command:`write_basic_package_version_file`.
* Imported :module:`FetchContent` module from CMake 3.11.
* Imported :module:`FindOpenGL` module from CMake 3.10.
* The :module:`ExternalProject` module was updated from CMake next.
  All the customizations were removed, with the exception of the ``git``
  deleting clones fix.
* The :module:`FindGlew` module is now dowloaded from CMake master.


3rd Party
---------

* Imported :module:`FindGObject` module from `qt-gstreamer Git Repository`_ +
  some unmerged changes from robotology-dependencies fork.
* Imported :module:`CMakeRC` module from `CMakeRC Git Repository`_.
* Update `Catch2 Git Repository`_ to commit
  ``4902cd721586822ded795afe0c418c553137306a`` + some unmerged changes from
  robotology-dependencies fork.
* Imported :module:`UseLATEX` module from `UseLATEX Git Repository`_.
