CMake 3.5 Release Notes
***********************

.. only:: html

  .. contents::

Changes made since CMake 3.4 include the following.

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

GUI
---

* The :manual:`cmake-gui(1)` gained options to control warnings about
  deprecated functionality.

* The :manual:`cmake-gui(1)` learned an option to set the toolset
  to be used with VS IDE and Xcode generators, much like the
  existing ``-T`` option to :manual:`cmake(1)`.

* The :manual:`cmake-gui(1)` gained a Regular Expression Explorer which
  may be used to create and evaluate regular expressions in real-time.
  The explorer window is available via the ``Tools`` menu.

Command-Line
------------

* The ``-Wdev`` and ``-Wno-dev`` :manual:`cmake(1)` options now also enable
  and suppress the deprecated warnings output by default.

* The suppression of developer warnings as errors can now be controlled with
  the new ``-Werror=dev`` and ``-Wno-error=dev`` :manual:`cmake(1)` options.

* The :manual:`cmake(1)` ``-E`` command-line tools ``copy``,
  ``copy_if_different``, ``copy_directory``, and ``make_directory``
  learned to support multiple input files or directories.

Commands
--------

* The :command:`cmake_parse_arguments` command is now implemented natively.
  The :module:`CMakeParseArguments` module remains as an empty placeholder
  for compatibility.

* The :command:`install(DIRECTORY)` command learned to support
  :manual:`generator expressions <cmake-generator-expressions(7)>`
  in the list of directories.

Variables
---------

* The :variable:`CMAKE_ERROR_DEPRECATED` variable can now be set using the
  ``-Werror=deprecated`` and ``-Wno-error=deprecated`` :manual:`cmake(1)`
  options.

* The :variable:`CMAKE_WARN_DEPRECATED` variable can now be set using the
  ``-Wdeprecated`` and ``-Wno-deprecated`` :manual:`cmake(1)` options.

Properties
----------

* The :prop_tgt:`VS_GLOBAL_<variable>` target property is now implemented
  for VS 2010 and above.  Previously it worked only in VS 2008 and below.

Modules
-------

* The :module:`ExternalProject` module learned a new ``GIT_REMOTE_NAME``
  option to control the ``git clone --origin`` value.

* The :module:`FindBoost` module now provides imported targets
  such as ``Boost::boost`` and ``Boost::filesystem``.

* The :module:`FindFLEX` module ``FLEX_TARGET`` macro learned a
  new ``DEFINES_FILE`` option to specify a custom output header
  to be generated.

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

* The :module:`FindGTK2` module, when ``GTK2_USE_IMPORTED_TARGETS`` is
  enabled, now sets ``GTK2_LIBRARIES`` to contain the list of imported
  targets instead of the paths to the libraries.  Moreover it now sets
  a new ``GTK2_TARGETS`` variable containing all the targets imported.

* The :module:`FindOpenMP` module learned to support Clang.

* The :module:`FindOpenSSL` module gained a new
  ``OPENSSL_MSVC_STATIC_RT`` option to search for libraries using
  the MSVC static runtime.

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

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

* A :module:`FindXalanC` module was introduced to find the
  Apache Xalan-C++ XSL transform processing library.

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

Platforms
---------

* Support was added for the ARM Compiler (arm.com) with compiler id ``ARMCC``.

* A new platform file for cross-compiling in the Cray Linux Environment to
  target compute nodes was added.  See
  :ref:`Cross Compiling for the Cray Linux Environment <Cray Cross-Compile>`
  for usage details.

* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
  is now aware of features supported by Clang compilers on Windows (MinGW).

* When building for embedded Apple platforms like iOS CMake learned to build and
  install combined targets which contain both a device and a simulator build.
  This behavior can be enabled by setting the :prop_tgt:`IOS_INSTALL_COMBINED`
  target property.

CPack
-----

* The :module:`CPackDMG` module learned new variable to specify AppleScript
  file run to customize appearance of ``DragNDrop`` installer folder,
  including background image setting using supplied PNG or multi-resolution
  TIFF file.  See the :variable:`CPACK_DMG_DS_STORE_SETUP_SCRIPT` and
  :variable:`CPACK_DMG_BACKGROUND_IMAGE` variables.

* The :module:`CPackDeb` module learned to set the optional config
  file ``Source`` field using a monolithic or per-component variable.
  See :variable:`CPACK_DEBIAN_PACKAGE_SOURCE`.

* The :module:`CPackDeb` module learned to set Package, Section
  and Priority control fields per-component.
  See variables :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION` and
  :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY`.

* The :module:`CPack DragNDrop generator <CPackDMG>` learned to add
  multi-lingual SLAs to a DMG which is presented to the user when they try to
  mount the DMG.  See the :variable:`CPACK_DMG_SLA_LANGUAGES` and
  :variable:`CPACK_DMG_SLA_DIR` variables for details.

* The :module:`CPackNSIS` module learned new variables to add bitmaps to the
  installer.  See the :variable:`CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP`
  and :variable:`CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP` variables.

* The :module:`CPackRPM` module learned to set Name and Group
  control fields per-component.
  See :variable:`CPACK_RPM_<component>_PACKAGE_NAME`
  and :variable:`CPACK_RPM_<component>_PACKAGE_GROUP`.

Other
-----

* Warnings about deprecated functionality are now enabled by default.
  They may be suppressed with ``-Wno-deprecated`` or by setting the
  :variable:`CMAKE_WARN_DEPRECATED` variable to false.

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

* The :manual:`cmake(1)` ``-E time`` command now properly passes arguments
  with spaces or special characters through to the child process.  This
  may break scripts that worked around the bug with their own extra
  quoting or escaping.

* The :generator:`Xcode` generator was fixed to escape backslashes in
  strings consistently with other generators.  Projects that previously
  worked around the inconsistecy with an extra level of backslashes
  conditioned on the Xcode generator must be updated to remove the
  workaround for CMake 3.5 and greater.

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

* The :generator:`Visual Studio 14 2015` generator learned to map the
  ``/debug:fastlink`` linker flag to the ``.vcxproj`` file property.

* The :module:`FindGTK2` module now configures the ``GTK2::sigc++`` imported
  target to enable c++11 on its dependents when using sigc++ 2.5.1 or higher.

* The precompiled Windows binary provided on ``cmake.org`` is now a
  ``.msi`` package instead of an installer executable.  One may need
  to manually uninstall CMake versions lower than 3.5 before installing
  the new package.
