CMake 3.10 Release Notes
************************

.. only:: html

  .. contents::

Changes made since CMake 3.9 include the following.

New Features
============

Platforms
---------

* The `flang`_ Fortran compiler is now supported, with compiler id ``Flang``.

* A new minimal platform file for ``Midipix`` was added.

* Support for the MSVC ARM64 architecture was added.
  Visual Studio 2017 Update 4 and above offer an ARM64 toolchain.

* Support for the IAR ARM Compiler was improved.

.. _`flang`: https://github.com/flang-compiler/flang

Generators
----------

* The :ref:`Makefile Generators` and the :generator:`Ninja` generator learned
  to add compiler launcher tools like ccache along with the compiler for the
  ``CUDA`` language (``C`` and ``CXX`` were supported previously).  See the
  :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
  :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.

* The :generator:`CodeBlocks` extra generator learned to optionally exclude
  files from outside the project root directory from the generated project.
  See the :variable:`CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES` variable.

Commands
--------

* The :command:`cmake_host_system_information` command learned more keys
  to get information about the processor capabilities and the host OS
  version.

* The :command:`configure_file` command learned to support indented
  ``#  cmakedefine`` and ``#  cmakedefine01``. Spaces and/or tabs between
  the ``#`` character and the ``cmakedefine``/``cmakedefine01`` words
  are now understood and preserved in the output.

* The :command:`execute_process` command gained a ``RESULTS_VARIABLE``
  option to collect a list of results from all children in a pipeline
  of processes when multiple ``COMMAND`` arguments are given.

* The :command:`include_guard` command was introduced to allow guarding
  CMake scripts from being included more than once. The command supports
  ``DIRECTORY`` and ``GLOBAL`` options to adjust the corresponding include guard
  scope. If no options given, include guard is similar to basic variable-based
  check.

* The :command:`string` command learned a new ``PREPEND`` subcommand.

* The :command:`string(TIMESTAMP)` command now supports ``%A``
  for full weekday name and ``%B`` for full month name.

Variables
---------

* A :variable:`CMAKE_DIRECTORY_LABELS` variable was added to specify
  labels for all tests in a directory.

Properties
----------

* A :prop_tgt:`<LANG>_CPPCHECK` target property and supporting
  :variable:`CMAKE_<LANG>_CPPCHECK` variable were introduced to tell
  the :ref:`Makefile Generators` and the :generator:`Ninja` generator to
  run ``cppcheck`` with the compiler for ``C`` and ``CXX`` languages.

* A :prop_dir:`LABELS` directory property was added to specify labels
  for all targets and tests in a directory.

* A :prop_dir:`TEST_INCLUDE_FILES` directory property was added to
  list any number of files to be included when running tests with
  :manual:`ctest(1)`.  This generalizes the :prop_dir:`TEST_INCLUDE_FILE`
  property.

* The :prop_tgt:`VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>`
  target property was added to support custom XML tags for reference
  assemblies in C# targets.

* Source file properties :prop_sf:`VS_SHADER_OUTPUT_HEADER_FILE` and
  :prop_sf:`VS_SHADER_VARIABLE_NAME` have been added to specify more
  details of ``.hlsl`` sources with :ref:`Visual Studio Generators`.

Modules
-------

* The :module:`FindCurses` module gained a ``CURSES_NEED_WIDE`` option
  to request the wide-character variant.

* The :module:`FindEXPAT` module now provides imported targets.

* The :module:`FindFreetype` module now provides imported targets.

* :module:`FindMPI` gained a number of new features, including:

  * Language-specific components have been added to the module.
  * Many more MPI environments are now supported.
  * The environmental support for Fortran has been improved.
  * A user now has fine-grained control over the MPI selection process,
    including passing custom parameters to the MPI compiler.
  * The version of the implemented MPI standard is now being exposed.
  * MPI-2 C++ bindings can now be detected and also suppressed if so desired.
  * The available Fortran bindings are now being detected and verified.
  * Various MPI-3 information can be requested, including the library version
    and Fortran capabilities of the individual bindings.
  * Statically linked MPI implementations are supported.

* A :module:`FindOpenACC` module was added to detect compiler support
  for OpenACC.  Currently only supports PGI, GNU and Cray compilers.

* The :module:`FindOpenGL` module gained support for GLVND on Linux.

* The :module:`FindOpenMP` module gained support for
  language-specific components.

* A :module:`FindPatch` module was added to find the ``patch``
  command-line executable.

* The :module:`FindProtobuf` module :command:`protobuf_generate_cpp` command
  gained a ``DESCRIPTORS`` option to generate descriptor files.

* The :module:`GoogleTest` module gained a new command
  :command:`gtest_discover_tests` implementing dynamic (build-time) test
  discovery.  Unlike the source parsing approach, dynamic discovery executes
  the test (in 'list available tests' mode) at build time to discover tests.
  This is robust against unusual ways of labeling tests, provides much better
  support for advanced features such as parameterized tests, and does not
  require re-running CMake to discover added or removed tests within a test
  executable.  Note that a breaking change was made in CMake 3.10.3 to address
  an ambiguity of the ``TIMEOUT`` keyword (see :ref:`Release Notes 3.10.3`).

* The :module:`InstallRequiredSystemLibraries` module gained support
  for installing Intel compiler runtimes.

Autogen
-------

* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` with a
  multi configuration generator (e.g. :generator:`Xcode`),
  included ``*.moc``,  ``moc_*.cpp`` and ``ui_*.h`` files are generated in
  ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>`` instead of
  ``<AUTOGEN_BUILD_DIR>/include``.

* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`,
  source files that are :prop_sf:`GENERATED` will be processed as well.
  They were ignored by :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`
  in earlier releases.
  See policy :policy:`CMP0071`.

* When using :prop_tgt:`AUTOMOC`, CMake searches for the strings ``Q_OBJECT``,
  ``Q_GADGET`` or ``Q_NAMESPACE`` in a source file to determine if it needs
  to be ``moc`` processed.  The new :variable:`CMAKE_AUTOMOC_MACRO_NAMES`
  variable and :prop_tgt:`AUTOMOC_MACRO_NAMES` target property may be set
  to register additional strings (macro names) to search for.

* When using :prop_tgt:`AUTOMOC`, the new
  :variable:`CMAKE_AUTOMOC_COMPILER_PREDEFINES` variable and
  :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES` target property specify whether
  to enable or disable the generation of the compiler pre definitions file
  ``moc_predefs.h``.

CTest
-----

* A :variable:`CTEST_LABELS_FOR_SUBPROJECTS` CTest module variable and CTest
  script variable were added to specify a list of labels that should be
  treated as subprojects by CDash. To use this value in both the CTest module
  and the ctest command line :ref:`Dashboard Client` mode (e.g. ``ctest -S``)
  set it in the ``CTestConfig.cmake`` config file.

CPack
-----

* CPack gained a ``FREEBSD`` generator for FreeBSD ``pkg(8)``, configured
  by the :module:`CPackFreeBSD` module.

* The CPack ``DEB`` generator, configured by the :module:`CPackDeb` module,
  was enabled on Windows.  While not fully featured (due to the lack of
  external UNIX tools) this will allow building basic cross-platform Debian
  packages.

* The :module:`CPackDeb` module learned to set package release version in
  ``Version`` info property.
  See the :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` variable.

* The :module:`CPackDeb` module learned more strict package version checking
  that complies with Debian rules.

* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
  :command:`cpack_ifw_configure_component_group` commands gained a new
  ``REPLACES`` and ``CHECKABLE`` options.

* The :module:`CPackIFW` module gained new
  :variable:`CPACK_IFW_PACKAGE_FILE_EXTENSION` variable to customize
  target binary format.

* The :module:`CPackIFW` module gained new
  :variable:`CPACK_IFW_REPOSITORIES_DIRECTORIES` variable to specify
  additional repositories dirs that will be used to resolve and
  repack dependent components. This feature is only available when
  using QtIFW 3.1 or later.

* Modules :module:`CPackRPM` and :module:`CPackDeb` learned to set package epoch
  version.
  See :variable:`CPACK_RPM_PACKAGE_EPOCH` and
  :variable:`CPACK_DEBIAN_PACKAGE_EPOCH` variables.

Other
-----

* The :manual:`cmake(1)` ``-E`` mode gained support for ``sha1sum``,
  ``sha224sum``, ``sha256sum``, ``sha384sum``, and ``sha512sum``.

* The graphviz output now distinguishes among the different dependency types
  ``PUBLIC``, ``PRIVATE`` and ``INTERFACE`` and represents them in the output
  graph as solid, dashed and dotted edges.

Deprecated and Removed Features
===============================

* Support for building CMake itself with C++98 compilers was dropped.
  CMake is now implemented using C++11.

* Support for building CMake on HP-UX has been dropped pending better
  support for C++11 and a port of libuv.  See `CMake Issue 17137`_.
  Use CMake 3.9 or lower instead for HP-UX support.

.. _`CMake Issue 17137`: https://gitlab.kitware.com/cmake/cmake/issues/17137

Other Changes
=============

* On FreeBSD the C++ compiler named ``c++`` is now the preferred default.

* The :command:`file(GENERATE)` command now interprets relative paths
  given to its ``OUTPUT`` and ``INPUT`` arguments with respect to the
  caller's current binary and source directories, respectively.
  See policy :policy:`CMP0070`.

* The :command:`get_filename_component` ``PROGRAM`` mode semantics
  have been revised to not tolerate unquoted spaces in the path
  to the program while also accepting arguments.  While technically
  incompatible with the old behavior, it is expected that behavior
  under typical use cases with properly-quoted command-lines has
  not changed.

Updates
=======

Changes made since CMake 3.10.0 include the following.

3.10.1
------

* The :manual:`cmake-server(7)` ``codemodel`` response ``crossReferences``
  field added by 3.10.0 has been dropped due to excessive memory usage.
  Another approach will be needed to provide backtrace information.

.. _`Release Notes 3.10.3`:

3.10.3
------

* CMake 3.10.1 added a ``TIMEOUT`` option to :command:`gtest_discover_tests`
  from the :module:`GoogleTest` module.  That keyword clashed with the
  ``TIMEOUT`` test property, which is one of the common properties that
  would be set with the command's ``PROPERTIES`` keyword, usually leading
  to legal but unintended behavior.  The keyword was changed to
  ``DISCOVERY_TIMEOUT`` in CMake 3.10.3 to address this problem.  The
  ambiguous behavior of the :command:`gtest_discover_tests` command's
  ``TIMEOUT`` keyword in 3.10.1 and 3.10.2 has not been preserved.
