cmake: updated to 3.17.0
Some of the more significant changes in CMake 3.17 are:
„ŗ◊ńmake(1)„ŗgained a „ŗ◊Įinja Multi-Config„ŗgenerator, which is similar to the „ŗ◊Įinja„ŗgenerator but can be used to build multiple configurations at once.
Visual Studio Generators learned to support per-config sources. Previously only Command-Line Build Tool Generators supported them.
The „ŗ◊§ompile Features„ŗfunctionality now offers meta-features for the CUDA language standard levels (e.g. „ŗ◊ńuda_std_03„ŗ „ŗ◊ńuda_std_14„ŗ. See „ŗ◊§MAKE_CUDA_KNOWN_FEATURES„ŗ
The „ŗ◊§MAKE_CUDA_RUNTIME_LIBRARY„ŗvariable and „ŗ◊§UDA_RUNTIME_LIBRARY„ŗtarget property were introduced to select the CUDA runtime library used when linking targets that use CUDA.
The „ŗ◊ßindCUDAToolkit„ŗmodule was added to find the CUDA Toolkit without enabling CUDA as a language.
„ŗ◊ńmake(1)„ŗgained a „ŗōšdebug-find„ŗcommand-line option to enable additional human-readable output on where find commands search.
The „ŗ◊§MAKE_FIND_DEBUG_MODE„ŗvariable was introduced to print extra find call information during the cmake run to standard error. Output is designed for human consumption and not for parsing.
The „ŗ◊ßindCURL„ŗmodule learned to find CURL using the „ŗ◊§URLConfig.cmake„ŗpackage configuration file generated by CURL„ŗ—‘ cmake buildsystem. It also gained a new „ŗ◊§URL_NO_CURL_CMAKE„ŗoption to disable this behavior.
The „ŗ◊ßindPython„ŗmodule has learned to find Python components in active virtual environments managed by „ŗ◊ńonda„ŗ
The „ŗ◊ńtest(1)„ŗtool gained a „ŗōšno-tests=<[error|ignore]>„ŗoption to explicitly set and unify the behavior between direct invocation and script mode if no tests were found.
The „ŗ◊ńtest(1)„ŗtool gained a „ŗōšrepeat :„ŗoption to specify conditions in which to repeat tests. This generalizes the existing „ŗōšrepeat-until-fail „ŗoption to add modes for „ŗ◊÷ntil-pass„ŗand „ŗ◊¬fter-timeout„ŗ
Target link properties „ŗ◊™NTERFACE_LINK_OPTIONS„ŗ „ŗ◊™NTERFACE_LINK_DIRECTORIES„ŗand „ŗ◊™NTERFACE_LINK_DEPENDS„ŗare now transitive over private dependencies on static libraries. See policy „ŗ◊§MP0099„ŗ
When using MinGW tools, the „ŗ◊«ind_library()„ŗcommand no longer finds „ŗdll„ŗfiles by default. Instead it expects „ŗdll.a„ŗimport libraries to be available.
The „ŗ◊Įinja„ŗgenerator now prefers the first ninja build tool to appear in the „ŗ◊ĪATH„ŗno matter whether it is called „ŗ◊Ōinja-build„ŗ „ŗ◊Ōinja„ŗ or „ŗ◊‘amu„ŗ Previously the first of those names to appear anywhere in the „ŗ◊ĪATH„ŗwould be preferred.
„ŗ◊ńmake(1)„ŗgained a „ŗE rm„ŗcommand-line tool that can be used to remove directories and files. This supersedes the existing „ŗE remove„ŗand „ŗE remove_directory„ŗtools and has better semantics.

cmake: updated to 3.16.0
3.16.0:
New Features
============
Languages
---------
* CMake learned to support the Objective C ("OBJC") and Objective
C++ ("OBJCXX") languages. They may be enabled via the "project()"
and "enable_language()" commands. When "OBJC" or "OBJCXX" is
enabled, source files with the ".m" or ".mm", respectively, will be
compiled as Objective C or C++. Otherwise they will be treated as
plain C++ sources as they were before.
Compilers
---------
* The "Clang" compiler is now supported on "Solaris".
Platforms
---------
* On AIX, executables using the "ENABLE_EXPORTS" target property now
produce a linker import file with a ".imp" extension in addition to
the executable file. Plugins (created via "add_library()" with the
"MODULE" option) that use "target_link_libraries()" to link to the
executable for its symbols are now linked using the import file. The
"install(TARGETS)" command now installs the import file as an
"ARCHIVE" artifact.
* On AIX, runtime linking is no longer enabled by default. CMake
provides the linker enough information to resolve all symbols up
front. One may manually enable runtime linking for shared libraries
and/or loadable modules by adding "-Wl,-G" to their link flags (e.g.
in the "CMAKE_SHARED_LINKER_FLAGS" or "CMAKE_MODULE_LINKER_FLAGS"
variable). One may manually enable runtime linking for executables
by adding "-Wl,-brtl" to their link flags (e.g. in the
"CMAKE_EXE_LINKER_FLAGS" variable).
Command-Line
------------
* "cmake(1)" "-E" now supports "true" and "false" commands, which do
nothing while returning exit codes of 0 and 1, respectively.
* "cmake(1)" gained a "--trace-redirect=" command line option
that can be used to redirect "--trace" output to a file instead of
"stderr".
* The "cmake(1)" "--loglevel" command line option has been renamed
to "--log-level" to make it consistent with the naming of other
command line options. The "--loglevel" option is still supported to
preserve backward compatibility.
Commands
--------
* The "add_test()" command learned the option "COMMAND_EXPAND_LISTS"
which causes lists in the "COMMAND" argument to be expanded,
including lists created by generator expressions.
* The "file()" command learned a new sub-command,
"GET_RUNTIME_DEPENDENCIES", which allows you to recursively get the
list of libraries linked by an executable or library. This sub-
command is intended as a replacement for "GetPrerequisites".
* The "find_file()", "find_library()", "find_path()",
"find_package()", and "find_program()" commands have learned to
check the following variables to control searching
* "CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH" - Controls the searching
the cmake-specific environment variables.
* "CMAKE_FIND_USE_CMAKE_PATH" - Controls the searching the cmake-
specific cache variables.
* "CMAKE_FIND_USE_CMAKE_SYSTEM_PATH" - Controls the searching
cmake platform specific variables.
* "CMAKE_FIND_USE_PACKAGE_ROOT_PATH" - Controls the searching of
"_ROOT" variables.
* "CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH" - Controls the
searching the standard system environment variables.
* The "find_package()" command has learned to check the following
variables to control searching
* "CMAKE_FIND_USE_PACKAGE_REGISTRY" - Controls the searching the
cmake user registry.
* The "message()" command learned indentation control with the new
"CMAKE_MESSAGE_INDENT" variable.
* The "target_precompile_headers()" command was added to specify a
list of headers to precompile for faster compilation times.
Variables
---------
* The "CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS" variable has been
introduced to optionally initialize the
"CUDA_RESOLVE_DEVICE_SYMBOLS" target property.
* The "CMAKE_ECLIPSE_RESOURCE_ENCODING" variable was added to
specify the resource encoding for the the "Eclipse CDT4" extra
generator.
Properties
----------
* The "BUILD_RPATH" and "INSTALL_RPATH" target properties now
support "generator expressions".
* The "INSTALL_REMOVE_ENVIRONMENT_RPATH" target property was added
to remove compiler-defined "RPATH" entries from a target. This
property is initialized by the
"CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH" variable.
* The "PRECOMPILE_HEADERS" target property was added to specify a
list of headers to precompile for faster compilation times. Set it
using the "target_precompile_headers()" command.
* The "UNITY_BUILD" target property was added to tell generators to
batch include source files for faster compilation times.
* The "VS_CONFIGURATION_TYPE" target property now supports
"generator expressions".
* The "VS_DPI_AWARE" target property was added to tell Visual Studio
Generators to set the "EnableDpiAwareness" property in ".vcxproj"
files.
* The "XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING" target property was
added to tell the "Xcode" generator to set the value of the "Allow
debugging when using document Versions Browser" schema option.
Modules
-------
* The "FindDoxygen" module "doxygen_add_docs()" command gained a new
"USE_STAMP_FILE" option. When this option present, the custom
target created by the command will only re-run Doxygen if any of the
source files have changed since the last successful run.
* The "FindGnuTLS" module now provides an imported target.
* The "FindPackageHandleStandardArgs" module
"find_package_handle_standard_args()" command gained a new
"REASON_FAILURE_MESSAGE" option to specify a message giving the
reason for the failure.
* The "FindPkgConfig" module "pkg_search_module()" macro now defines
a "_MODULE_NAME" result variable containing the first
matching module name.
* The "FindPython3" and "FindPython" modules gained options to
control which "ABIs" will be searched.
* The "FindPython3", "FindPython2", and "FindPython" modules now
support direct specification of artifacts via cache entries.
Autogen
-------
* When using "AUTOMOC", CMake now generates the "-p" path prefix
option for "moc". This ensures that "moc" output files are
identical on different build setups (given, that the headers
compiled by "moc" are in an "include directory"). Also it ensures
that "moc" output files will compile correctly when the source
and/or build directory is a symbolic link.
The "moc" path prefix generation behavior can be configured by
setting the new "CMAKE_AUTOMOC_PATH_PREFIX" variable and/or
"AUTOMOC_PATH_PREFIX" target property.
CTest
-----
* "ctest(1)" now has the ability to serialize tests based on
resource requirements for each test. See Resource Allocation for
details.
* A new test property, "SKIP_REGULAR_EXPRESSION", has been added.
This property is similar to "FAIL_REGULAR_EXPRESSION" and
"PASS_REGULAR_EXPRESSION", but with the same meaning as
"SKIP_RETURN_CODE". This is useful, for example, in cases where the
user has no control over the return code of the test. For example,
in Catch2, the return value is the number of assertion failed,
therefore it is impossible to use it for "SKIP_RETURN_CODE".
CPack
-----
* "cpack(1)" learned support for multiple configurations for "-C"
option.
* The "CPack DEB Generator" is now able to format generic text
(usually used as the description for multiple CPack generators)
according to the Debian Policy Manual. See the
"CPACK_PACKAGE_DESCRIPTION_FILE" and
"CPACK_DEBIAN__DESCRIPTION" variables.
* The "CPack Archive Generator" learned to generate ".tar.zst"
packages with Zstandard compression.
Deprecated and Removed Features
===============================
* An explicit deprecation diagnostic was added for policy "CMP0067"
("CMP0066" and below were already deprecated). The "cmake-
policies(7)" manual explains that the OLD behaviors of all policies
are deprecated and that projects should port to the NEW behaviors.
* The "CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY" variable has been
deprecated. Use the "CMAKE_FIND_USE_PACKAGE_REGISTRY" variable
instead.
* The "GetPrerequisites" module has been deprecated, as it has been
superceded by "file(GET_RUNTIME_DEPENDENCIES)".
* The "CPACK_INSTALL_SCRIPT" variable has been deprecated in favor
of the new, more accurately named "CPACK_INSTALL_SCRIPTS" variable.
Other Changes
=============
* The "cmake(1)" "-C " option now evaluates the
initial cache script with "CMAKE_SOURCE_DIR" and "CMAKE_BINARY_DIR"
set to the top-level source and build trees.
* The "cmake(1)" "-E remove_directory" command-line tool, when given
the path to a symlink to a directory, now removes just the symlink.
It no longer removes content of the linked directory.
* The "ctest(1)" "--build-makeprogram" command-line option now
specifies the make program used when configuring a project with the
"Ninja" generator or the Makefile Generators.
* The "ExternalProject" module "ExternalProject_Add()" command has
been updated so that "GIT_SUBMODULES """ initializes no submodules.
See policy "CMP0097".
* The "FindGTest" module has been updated to recognize MSVC build
trees generated by GTest 1.8.1.
* The "project()" command no longer strips leading zeros in version
components. See policy "CMP0096".
* The Qt Compressed Help file is now named "CMake.qch", which no
longer contains the release version in the file name. When CMake is
upgraded in-place, the name and location of this file will remain
constant. Tools such as IDEs, help viewers, etc. should now be able
to refer to this file at a fixed location that remains valid across
CMake upgrades.
* "RPATH" entries are properly escaped in the generated CMake
scripts used for installation. See policy "CMP0095".
* When using "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS" on Windows the auto-
generated exports are now updated only when the object files
providing the symbols are updated.

cmake: updated to 3.15.0
3.15.0:
New Features
============
Generators
----------
* The "Xcode" generator now supports per-target schemes. See the
"CMAKE_XCODE_GENERATE_SCHEME" variable and "XCODE_GENERATE_SCHEME"
target property.
* The "Green Hills MULTI" generator has been updated:
* It now supports the "add_custom_command()" and
"add_custom_target()" commands.
* It is now available on Linux.
Languages
---------
* Preliminary support for the "Swift" language was added to the
"Ninja" generator:
* Use the "SWIFTC" environment variable to specify a compiler.
* The "Swift_DEPENDENCIES_FILE" target property and
"Swift_DEPENDENCIES_FILE" source file property were added to
customize dependency files.
* The "Swift_MODULE_NAME" target property was added to customize
the Swift module name.
* The "Swift_DIAGNOSTICS_FILE" source property was added to
indicate where to write the serialised Swift diagnostics.
The Swift support is experimental, not considered stable, and may
change in future releases of CMake.
Compilers
---------
* The "Clang" compiler variant on Windows that targets the MSVC ABI
but has a GNU-like command line is now supported.
* Support for the Clang-based ARM compiler was added with compiler
id "ARMClang".
* Support was added for the IAR compiler architectures Renesas RX,
RL78, RH850 and Texas Instruments MSP430.
* Support was added for the IAR compilers built for Linux (IAR
BuildLx).
Command-Line
------------
* The "CMAKE_GENERATOR" environment variable was added to specify a
default generator to use when "cmake(1)" is run without a "-G"
option. Additionally, environment variables
"CMAKE_GENERATOR_PLATFORM", "CMAKE_GENERATOR_TOOLSET", and
"CMAKE_GENERATOR_INSTANCE" were created to configure the generator.
* The "cmake(1)" "--build" tool "--target" parameter gained support
for multiple targets, e.g. "cmake --build . --target Library1
Library2". It now also has a short form "-t" alias, e.g. "cmake
--build . -t Library1 Library2".
* The "cmake(1)" command gained a new "--install" option. This may
be used after building a project to run installation without using
the generated build system or the native build tool.
* The "cmake(1)" command learned a new CLI option "--loglevel".
* The "cmake(1)" "-E remove_directory" command-line tool learned to
support removing multiple directories.
* The "cmake(1)" "-E tar" tool has been improved:
* It now continues adding files to an archive even if some of the
files are not readable. This behavior is more consistent with the
classic "tar" tool.
* It now parses all flags, and if an invalid flag was provided, a
warning is issued.
* It now displays an error if no action flag was specified, along
with a list of possible actions: "t" (list), "c" (create) or "x"
(extract).
* It now supports extracting ("-x") or listing ("-t") only
specific files or directories.
* It now supports Zstandard compression with a "--zstd" option.
Zstandard was designed to give a compression ratio comparable to
that of the DEFLATE (zip) algorithm, but faster, especially for
decompression.
Commands
--------
* The "add_custom_command()" and "add_custom_target()" commands
gained a new "JOB_POOL" option that works with the "Ninja" generator
to set the pool variable on the build statement.
* The "add_library()" command "ALIAS" option learned to support
import libraries of the "UNKNOWN" type.
* The "cmake_parse_arguments()" command gained an additional
"_KEYWORDS_MISSING_VALUES" output variable to report keyword
arguments that were given by the caller with no values.
* The "execute_process()" command gained a "COMMAND_ECHO" option and
supporting "CMAKE_EXECUTE_PROCESS_COMMAND_ECHO" variable to enable
echoing of the command-line string before execution.
* The "file(INSTALL)" command learned a new argument,
"FOLLOW_SYMLINK_CHAIN", which can be used to recursively resolve and
install symlinks.
* "list()" learned new sub-commands: "PREPEND", "POP_FRONT" and
"POP_BACK".
* The "message()" command learned new types: "NOTICE", "VERBOSE",
"DEBUG" and "TRACE".
* The "string()" learned a new sub-command "REPEAT".
Variables
---------
* The "CMAKE_CROSSCOMPILING_EMULATOR" variable and corresponding
"CROSSCOMPILING_EMULATOR" target property learned to support
arguments to the emulator.
* The "CMAKE_FIND_PACKAGE_PREFER_CONFIG" variable was added to tell
"find_package()" calls to look for a package configuration file
first even if a find module is available.
* The "CMAKE_FRAMEWORK" variable was added to initialize the
"FRAMEWORK" property on all targets.
* The "CMAKE_VS_JUST_MY_CODE_DEBUGGING" variable and
"VS_JUST_MY_CODE_DEBUGGING" target property were added to enable the
Just My Code feature of the Visual Studio Debugger when compiling
with MSVC cl 19.05 and higher.
* The "CMAKE_MSVC_RUNTIME_LIBRARY" variable and
"MSVC_RUNTIME_LIBRARY" target property were introduced to select the
runtime library used by compilers targeting the MSVC ABI. See policy
"CMP0091".
* The "CMAKE_PROJECT_INCLUDE" and "CMAKE_PROJECT_INCLUDE_BEFORE"
variables were added to allow injection of custom code at the sites
of "project()" calls without knowing the project name a priori.
Properties
----------
* The "ADDITIONAL_CLEAN_FILES" target property and
"ADDITIONAL_CLEAN_FILES" directory property were added. They allow
to register additional files that should be removed during the clean
stage.
* The "PUBLIC_HEADER" and "PRIVATE_HEADER" properties may now be set
on Interface Libraries. The headers specified by those properties
can be installed using the "install(TARGETS)" command by passing the
"PUBLIC_HEADER" and "PRIVATE_HEADER" arguments respectively.
* The "VS_PACKAGE_REFERENCES" target property was added to tell
Visual Studio Generators to add references to "nuget" packages.
* The "VS_PROJECT_IMPORT" target property was added to allow managed
Visual Studio project files to import external ".props" files.
* The "VS_NO_SOLUTION_DEPLOY" target property was added to tell
Visual Studio Generators whether to deploy an artifact to the WinCE
or Windows Phone target device.
Modules
-------
* The "FindBoost" module was reworked to expose a more consistent
user experience between its „ŗ◊§onfig„ŗand „ŗ◊ģodule„ŗmodes and with
other find modules in general.
* A new imported target "Boost::headers" is now defined (same as
"Boost::boost").
* New output variables "Boost_VERSION_MACRO",
"Boost_VERSION_MAJOR", "Boost_VERSION_MINOR",
"Boost_VERSION_PATCH", and "Boost_VERSION_COUNT" were added.
* The "QUIET" argument passed to "find_package()" is no longer
ignored in config mode. Note that the CMake package shipped with
Boost "1.70.0" ignores the "QUIET" argument passed to
"find_package()". This is fixed in the next Boost release.
* The input switch "Boost_DETAILED_FAILURE_MSG" was removed.
* "Boost_VERSION" now reports the version in "x.y.z" format in
module mode. See policy "CMP0093".
* The "FindCups" module now provides imported targets.
* The "FindEnvModules" module was added to use Lua- and TCL-based
environment modules in CTest Scripts.
* The "FindGLEW" module now provides an interface more consistent
with what upstream GLEW provides in its own CMake package files.
* The "FindPkgConfig" now populates "INTERFACE_LINK_OPTIONS"
property of imported targets with other (non-library) linker flags.
* The "FindPostgreSQL" module learned to find debug and release
variants separately.
* Modules "FindPython3", "FindPython2" and "FindPython" gained
additional lookup strategies and controls, and a new default. See
policy "CMP0094".
* Modules "FindPython", "FindPython2" and "FindPython3" gain a new
target (respectively "Python::Module", "Python2::Module" and
"Python3::Module") which can be used to develop Python modules.
* Modules "FindPython3", "FindPython2" and "FindPython" gain
capability to control how virtual environments are handled.
* The "UseSWIG" module learned to manage alternate library names by
passing "-interface " for "python" language or
"-dllimport " for "CSharp" language to the "SWIG"
compiler.
Generator Expressions
---------------------
* The "generator expressions" "C_COMPILER_ID", "CXX_COMPILER_ID",
"CUDA_COMPILER_ID", "Fortran_COMPILER_ID", "COMPILE_LANGUAGE",
"COMPILE_LANG_AND_ID", and "PLATFORM_ID" learned to support matching
one value from a comma-separated list.
CTest
-----
* The "ctest_submit()" command learned a new option: "BUILD_ID".
This can be used to store the ID assigned to this build by CDash to
a variable.
* The "ctest_update()" command learned to honor a new variable:
"CTEST_UPDATE_VERSION_OVERRIDE". This can be used to specify the
current version of your source tree rather than using the update
command to discover the current version that is checked out.
CPack
-----
* The "CPack IFW Generator" gained a new
"CPACK_IFW_PACKAGE_STYLE_SHEET" variable to customize the installer
stylesheet.
Deprecated and Removed Features
===============================
* The "cmake-server(7)" mode has been deprecated and will be removed
from a future version of CMake. Please port clients to use the
"cmake-file-api(7)" instead.
* The "ADDITIONAL_MAKE_CLEAN_FILES" directory property is now
deprecated. Use the "ADDITIONAL_CLEAN_FILES" directory property
instead.
* The variable "CMAKE_AUTOMOC_RELAXED_MODE" is considered
deprecated. Support still exists but will be removed in future
versions.
* The "export(PACKAGE)" command now does nothing unless enabled via
"CMAKE_EXPORT_PACKAGE_REGISTRY". See policy "CMP0090".
* The "Xcode" generator now requires at least Xcode 5.
* An explicit deprecation diagnostic was added for policy "CMP0066"
("CMP0065" and below were already deprecated). The "cmake-
policies(7)" manual explains that the OLD behaviors of all policies
are deprecated and that projects should port to the NEW behaviors.
Other Changes
=============
* CMake learned how to compile C++14 with the IBM AIX XL compiler
and the SunPro compiler and to compile C++20 with the AppleClang
compiler.
* With MSVC-like compilers the value of "CMAKE__FLAGS" no
longer contains warning flags like "/W3" by default. See policy
"CMP0092".
* IBM Clang-based XL compilers that define "__ibmxl__" now use the
compiler id "XLClang" instead of "XL". See policy "CMP0089".
* The "file(REMOVE)" and "file(REMOVE_RECURSE)" commands were
changed to ignore empty arguments with a warning instead of treating
them as a relative path and removing the contents of the current
directory.

cmake: updated to 3.13.0
CMake 3.13.0:
The Visual Studio Generators for VS 2010 and above learned to
support the „ŗ◊™NTERPROCEDURAL_OPTIMIZATION„ŗtarget property and
supporting „ŗ◊§heckIPOSupported„ŗmodule.
The „ŗ◊®reen Hills MULTI„ŗgenerator has been updated to include
support for platform, architecture, and toolset selection.
The „ŗ◊ńmake„ŗcommand gained the „ŗS <source_dir>„ŗcommand line
option to specify the location of the source directory. This option
can be used independently of „ŗB„ŗ
The „ŗ◊ńmake„ŗcommand gained the „ŗB <build_dir>„ŗcommand line
option to specify the location of the build directory. This option
can be used independently of „ŗS„ŗ
The „ŗ◊ńmake„ŗ„ŗE create_symlink„ŗcommand can now be used on
Windows.
The „ŗ◊’arget_link_directories()„ŗcommand was created to specify
link directories for targets and their dependents.
The „ŗ◊’arget_link_options()„ŗcommand was created to specify link
options for targets and their dependents.
The „ŗ◊’arget_link_libraries()„ŗcommand may now be called to modify
targets created outside the current directory. See policy „ŗ◊§MP0079„ŗ
The „ŗ◊ nstall(TARGETS)„ŗcommand learned to install targets created
outside the current directory.
A „ŗ◊∑S_DEBUGGER_COMMAND_ARGUMENTS„ŗtarget property was created to
set the debugging command line arguments with Visual Studio
Generators for VS 2010 and above.
A „ŗ◊∑S_DEBUGGER_ENVIRONMENT„ŗtarget property was created to set the
debugging environment with Visual Studio Generators for VS 2010 and
above.
The „ŗ◊–ption()„ŗcommand now honors an existing normal variable of
the same name and does nothing instead of possibly creating a cache
entry (or setting its type) and removing the normal variable. See
policy „ŗ◊§MP0077„ŗ
The „ŗ◊’arget_sources()„ŗcommand now interprets relative source file
paths as relative to the current source directory. This simplifies
incrementally building up a target„ŗ—‘ sources from subdirectories.
The „ŗ◊§MP0076„ŗpolicy was added to provide backward compatibility
with the old behavior where required.

cmake: Use NetBSD curses(3) when possible
ccmake needs wsyncup(3) and since NetBSD 8.0 it is present on NetBSD.
Handle that via `USE_CURSES= wsyncup' and remove enforcements about
ncurses in CMakeLists.txt and Source/Checks/Curses/CMakeLists.txt.
Bump PKGREVISION

add CMAKE_PKGSRC_BUILD_FLAGS for pkgsrc build to set opts
With pkgsrc built packages, the goal is to have the user's compiler
optimization flags set by the user using CFLAGS, etc. To that end,
the cmake Makefile has subst.mk code to "sed -e 's,-O.,,'" out opt.
flags in Modules/Compiler/*.cmake for cmake compiles with the
CMAKE_BUILD_TYPE set (e.g. to Release).
Unfortunately, this sed-based approach has two drawbacks: First, it
gets applied to packages build with cmake outside of pkgsrc (changing
the semantics of -DCMAKE_BUILD_TYPE=Release in an unexpected way by
remove -O flags from it). Second, the sed expression damages some
of the Modules/Compiler/*.cmake as not all opt flags match the "-O."
regular expression.
To address this we:
1. remove the subst.mk sed operation on Modules/Compiler/*.cmake
2. add a new config variable CMAKE_PKGSRC_BUILD_FLAGS that should
be set for pkgsrc-based cmake builds (e.g. in mk/configure/cmake.mk)
3. we add a patch for Modules/Compiler/GNU.cmake to look for
CMAKE_PKGSRC_BUILD_FLAGS and choose a set of non-opt compiler
flags when this is set (to provide the desired behavior under pksrc).
note that the GNU.cmake file is also used by clang. We can
make the corresponding changes to other compilers if desired.
The result is that cmake compiles under pkgsrc set CMAKE_PKGSRC_BUILD_FLAGS
and follow CFLAGS, etc. (bypassing CMAKE_BUILD_TYPE), but cmake compiles
outside of pkgsrc follow the standard cmake semantics for CMAKE_BUILD_TYPE.
Also, we no longer damage Modules/Compiler/*.cmake with sed.

cmake: updated to 3.11.0
Some of the more significant changes in CMake 3.11 are:
The Makefile Generators and the „ŗ◊Įinja„ŗgenerator learned to add
compiler launcher tools along with the compiler for the „ŗ◊ßortran„ŗlanguage („ŗ◊§„ŗ „ŗ◊§XX„ŗ and „ŗ◊§UDA„ŗwere supported previously). See the
„ŗ◊§MAKE_<LANG>_COMPILER_LAUNCHER„ŗvariable and
„ŗLANG>_COMPILER_LAUNCHER„ŗtarget property for details.
Visual Studio Generators learned to support the „ŗ◊§OMPILE_LANGUAGE„ŗ„ŗ◊»enerator expression„ŗin target-wide „ŗ◊§OMPILE_DEFINITIONS„ŗ
„ŗ◊™NCLUDE_DIRECTORIES„ŗ „ŗ◊§OMPILE_OPTIONS„ŗ and „ŗ◊«ile(GENERATE)„ŗ See
generator expression documentation for caveats.
The „ŗ◊Ļcode„ŗGenerator learned to support the „ŗ◊§OMPILE_LANGUAGE„ŗ„ŗ◊»enerator expression„ŗin target-wide „ŗ◊§OMPILE_DEFINITIONS„ŗand
„ŗ◊™NCLUDE_DIRECTORIES„ŗ It previously supported only
„ŗ◊§OMPILE_OPTIONS„ŗand „ŗ◊«ile(GENERATE)„ŗ See generator expression
documentation for caveats.
„ŗ◊¬dd_library()„ŗand „ŗ◊¬dd_executable()„ŗcommands can now be called
without any sources and will not complain as long as sources are
added later via the „ŗ◊’arget_sources()„ŗcommand.
The „ŗ◊’arget_compile_definitions()„ŗcommand learned to set the
„ŗ◊™NTERFACE_COMPILE_DEFINITIONS„ŗproperty on Imported Targets.
The „ŗ◊’arget_compile_features()„ŗcommand learned to set the
„ŗ◊™NTERFACE_COMPILE_FEATURES„ŗproperty on Imported Targets.
The „ŗ◊’arget_compile_options()„ŗcommand learned to set the
„ŗ◊™NTERFACE_COMPILE_OPTIONS„ŗproperty on Imported Targets.
The „ŗ◊’arget_include_directories()„ŗcommand learned to set the
„ŗ◊™NTERFACE_INCLUDE_DIRECTORIES„ŗproperty on Imported Targets.
The „ŗ◊’arget_sources()„ŗcommand learned to set the
„ŗ◊™NTERFACE_SOURCES„ŗproperty on Imported Targets.
The „ŗ◊’arget_link_libraries()„ŗcommand learned to set the
„ŗ◊™NTERFACE_LINK_LIBRARIES„ŗproperty on Imported Targets.
The „ŗ◊§OMPILE_DEFINITIONS„ŗsource file property learned to support
„ŗ◊»enerator expressions„ŗ
A „ŗ◊§OMPILE_OPTIONS„ŗsource file property was added to manage list
of options to pass to the compiler.
When using „ŗ◊ĘUTOMOC„ŗor „ŗ◊ĘUTOUIC„ŗ CMake now starts multiple
parallel „ŗ◊őoc„ŗor „ŗ◊÷ic„ŗprocesses to reduce the build time. A new
„ŗ◊§MAKE_AUTOGEN_PARALLEL„ŗvariable and „ŗ◊ĘUTOGEN_PARALLEL„ŗtarget
property may be set to specify the number of parallel „ŗ◊őoc„ŗor „ŗ◊÷ic„ŗprocesses to start. The default is derived from the number of CPUs
on the host.

Changes 3.8.0:
CMake learned to support CSharp (C#) as a first-class language that can be enabled via the project() and enable_language() commands. It is currently supported by the Visual Studio Generators for VS 2010 and above.
C# assemblies and programs can be added just like common C++ targets using the add_library() and add_executable() commands. References between C# targets in the same source tree may be specified by target_link_libraries() like for C++. References to system or 3rd-party assemblies may be specified by the target properties VS_DOTNET_REFERENCE_<refname> and VS_DOTNET_REFERENCES.
More fine tuning of C# targets may be done using target and source file properties. Specifically the target properties related to Visual Studio (VS_*) are worth a look (for setting toolset versions, root namespaces, assembly icons, ...).
CMake learned to support CUDA as a first-class language that can be enabled via the project() and enable_language() commands.
CUDA is currently supported by the Makefile Generators and the Ninja generator on Linux, macOS, and Windows. Support for the Visual Studio IDE is under development but not included in this release.
The NVIDIA CUDA Toolkit compiler (nvcc) is supported.
The Compile Features functionality now offers meta-features that request compiler modes for specific language standard levels (e.g. cxx_std_11). See CMAKE_C_KNOWN_FEATURES and CMAKE_CXX_KNOWN_FEATURES.
The Compile Features functionality is now aware of C++ 17. No specific features are yet enumerated besides the cxx_std_17 meta-feature.
The Compile Features functionality is now aware of the availability of C99 in gcc since version 3.4.
A new minimal platform file for Fuchsia was added.
The CodeBlocks extra generator may now be used to generate with NMake Makefiles JOM.
The Visual Studio Generators for VS 2013 and above learned to support a host=x64 option in the CMAKE_GENERATOR_TOOLSET value (e.g. via the cmake(1) -T option) to request use of a VS 64-bit toolchain on 64-bit hosts.
The Visual Studio Generators learned to treat files passed to target_link_libraries() whose names end in .targets as MSBuild „ŗ◊’argets„ŗfiles to be imported into generated project files.
...more...

Some of the more significant changes in CMake 3.7 are:
CMake now supports Cross Compiling for Android with simple toolchain files.
The „ŗ◊Įinja„ŗgenerator learned to conditionally support Fortran when using a „ŗ◊Ōinja„ŗtool that has the necessary features. See generator documentation for details.
The „ŗ◊ f()„ŗcommand gained new boolean comparison operations „ŗ◊≠ESS_EQUAL„ŗ „ŗ◊®REATER_EQUAL„ŗ „ŗ◊īTRLESS_EQUAL„ŗ „ŗ◊īTRGREATER_EQUAL„ŗ „ŗ◊∑ERSION_LESS_EQUAL„ŗ and „ŗ◊∑ERSION_GREATER_EQUAL„ŗ
The „ŗ◊’ry_compile()„ŗcommand source file signature now honors configuration-specific flags (e.g. „ŗ◊§MAKE_<LANG>_FLAGS_DEBUG„ŗ in the generated test project. Previously only the default such flags for the current toolchain were used. See policy „ŗ◊§MP0066„ŗ
„ŗ◊Ķoolchain files„ŗmay now set „ŗ◊§MAKE_EXE_LINKER_FLAGS_INIT„ŗ „ŗ◊§MAKE_SHARED_LINKER_FLAGS_INIT„ŗ and „ŗ◊§MAKE_MODULE_LINKER_FLAGS_INIT„ŗvariables to initialize the „ŗ◊§MAKE_EXE_LINKER_FLAGS„ŗ „ŗ◊§MAKE_SHARED_LINKER_FLAGS„ŗ and „ŗ◊§MAKE_MODULE_LINKER_FLAGS„ŗcache entries the first time a language is enabled in a build tree.
CTest now supports test fixtures through the new „ŗ◊ßIXTURES_SETUP„ŗ „ŗ◊ßIXTURES_CLEANUP„ŗand „ŗ◊ßIXTURES_REQUIRED„ŗtest properties. When using regular expressions or „ŗōšrerun-failed„ŗto limit the tests to be run, a fixture„ŗ—‘ setup and cleanup tests will automatically be added to the execution set if any test requires that fixture.
We no longer provide Linux i386 binaries for download from „ŗ◊ńmake.org„ŗfor new versions of CMake.
Vim support files „ŗ◊ńmake-indent.vim„ŗ „ŗ◊ńmake-syntax.vim„ŗ and „ŗ◊ńmake-help.vim„ŗhave been removed in favor of the files now provided from the vim-cmake-syntax project.
Support for building CMake itself with some compilers was dropped:
Visual Studio 7.1 and 2005 „ŗsuperseded by VS 2008 and above
MinGW.org mingw32 „ŗsuperseded by MSYS2 mingw32 and mingw64
CMake still supports generating build systems for other projects using these compilers.

According to Brad King, cmake developer, who kindly reviewed our patches:
The SIZEOF_VOID_P macro is defined by code in CMakeLists.txt using
the value of CMAKE_SIZEOF_VOID_P. The former is a C++ preprocessor
macro. The latter is only visible in CMake code.

Update cmake to 3.6.1
CMake 3.6 Release Notes
***********************
Changes made since CMake 3.5 include the following.
New Features
============
Generators
----------
* The :generator:`Ninja` generator learned to produce phony targets
of the form ``sub/dir/all`` to drive the build of a subdirectory.
This is equivalent to ``cd sub/dir; make all`` with
:ref:`Makefile Generators`.
* The :generator:`Ninja` generator now includes system header files in build
dependencies to ensure correct re-builds when system packages are updated.
* The :generator:`Visual Studio 14 2015` generator learned to support the
Clang/C2 toolsets, e.g. with the ``-T v140_clang_3_7`` option.
This feature is experimental.
Commands
--------
* The :command:`add_custom_command` and :command:`add_custom_target` commands
learned how to use the :prop_tgt:`CROSSCOMPILING_EMULATOR` executable
target property.
* The :command:`install` command learned a new ``EXCLUDE_FROM_ALL`` option
to leave installation rules out of the default installation.
* The :command:`list` command gained a ``FILTER`` sub-command to filter
list elements by regular expression.
* The :command:`string(TIMESTAMP)` and :command:`file(TIMESTAMP)`
commands gained support for the ``%s`` placeholder. This is
the number of seconds since the UNIX Epoch.
Variables
---------
* A :variable:`CMAKE_DEPENDS_IN_PROJECT_ONLY` variable was introduced
to tell :ref:`Makefile Generators` to limit dependency scanning only
to files in the project source and build trees.
* A new :variable:`CMAKE_HOST_SOLARIS` variable was introduced to
indicate when CMake is running on an Oracle Solaris host.
* A :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES` variable was
added for use by toolchain files to specify system include directories
to be appended to all compiler command lines.
* The :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES` variable is now documented.
It is intended for use by toolchain files to specify system libraries to be
added to all linker command lines.
* A :variable:`CMAKE_NINJA_OUTPUT_PATH_PREFIX` variable was introduced
to tell the :generator:`Ninja` generator to configure the generated
``build.ninja`` file for use as a ``subninja``.
* A :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable was
added for use by toolchain files to specify platform-specific
variables that must be propagated by the :command:`try_compile`
command into test projects.
* A :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable was added
to optionally tell the :command:`try_compile` command to build
a static library instead of an executable. This is useful for
cross-compiling toolchains that cannot link binaries without
custom flags or scripts.
Properties
----------
* A :prop_tgt:`DEPLOYMENT_REMOTE_DIRECTORY` target property was introduced
to tell the :generator:`Visual Studio 9 2008` and
:generator:`Visual Studio 8 2005` generators to generate the "remote
directory" for WinCE project deployment and debugger settings.
* A :prop_tgt:`<LANG>_CLANG_TIDY` target property and supporting
:variable:`CMAKE_<LANG>_CLANG_TIDY` variable were introduced to tell the
:ref:`Makefile Generators` and the :generator:`Ninja` generator to run
``clang-tidy`` along with the compiler for ``C`` and ``CXX`` languages.
* A :prop_test:`TIMEOUT_AFTER_MATCH` test property was introduced to
optionally tell CTest to enforce a secondary timeout after matching
certain output from a test.
* A :prop_tgt:`VS_CONFIGURATION_TYPE` target property was introduced
to specify a custom project file type for :ref:`Visual Studio Generators`
supporting VS 2010 and above.
* A :prop_dir:`VS_STARTUP_PROJECT` directory property was introduced
to specify for :ref:`Visual Studio Generators` the default startup
project for generated solutions (``.sln`` files).
Modules
-------
* The :module:`CMakePushCheckState` module now pushes/pops/resets the variable
``CMAKE_EXTRA_INCLUDE_FILE`` used in :module:`CheckTypeSize`.
* The :module:`ExternalProject` module leared the ``GIT_SHALLOW 1``
option to perform a shallow clone of a Git repository.
* The :module:`ExternalProject` module learned to initialize Git submodules
recursively and also to initialize new submodules on updates. Use the
``GIT_SUBMODULES`` option to restrict which submodules are initalized and
updated.
* The :module:`ExternalProject` module leared the ``DOWNLOAD_NO_EXTRACT 1``
argument to skip extracting the file that is downloaded (e.g., for
self-extracting shell installers or ``.msi`` files).
* The :module:`ExternalProject` module now uses ``TLS_VERIFY`` when fetching
from git repositories.
* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to
support `OpenBLAS <http://www.openblas.net>`__.
* The :module:`FindCUDA` module learned to find the ``cublas_device`` library.
* The :module:`FindGTest` module ``gtest_add_tests`` function now causes
CMake to automatically re-run when test sources change so that they
can be re-scanned.
* The :module:`FindLTTngUST` module was introduced to find the LTTng-UST
library.
* The :module:`FindPkgConfig` module learned to optionally create imported
targets for the libraries it has found.
* The :module:`FindProtobuf` module learned to provide a ``Protobuf_VERSION``
variable and check the version number requested in a :command:`find_package`
call.
* The :module:`InstallRequiredSystemLibraries` module learned a new
``CMAKE_INSTALL_UCRT_LIBRARIES`` option to enable app-local deployment
of the Windows Universal CRT libraries with Visual Studio 2015.
Platforms
---------
* The Clang compiler is now supported on CYGWIN.
* Support was added for the Bruce C Compiler with compiler id ``Bruce``.
CTest
-----
* The :command:`ctest_update` command now looks at the
:variable:`CTEST_GIT_INIT_SUBMODULES` variable to determine whether
submodules should be updated or not before updating.
* The :command:`ctest_update` command will now synchronize submodules on an
update. Updates which add submodules or change a submodule's URL will now be
pulled properly.
CPack
-----
* The :module:`CPackDeb` module learned how to handle ``$ORIGIN``
in ``CMAKE_INSTALL_RPATH`` when :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS`
is used for dependency auto detection.
* The :module:`CPackDeb` module learned how to generate ``DEBIAN/shlibs``
contorl file when package contains shared libraries.
* The :module:`CPackDeb` module learned how to generate ``DEBIAN/postinst`` and
``DEBIAN/postrm`` files if the package installs libraries in
ldconfig-controlled locations (e.g. ``/lib/``, ``/usr/lib/``).
* The :module:`CPackDeb` module learned how to generate dependencies between
Debian packages if multi-component setup is used and
:variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables are set.
For backward compatibility this feature is disabled by default.
See :variable:`CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS`.
* The :module:`CPackDeb` module learned how to set custom package file names
including how to generate properly-named Debian packages::
<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
For backward compatibility this feature is disabled by default. See
:variable:`CPACK_DEBIAN_FILE_NAME` and
:variable:`CPACK_DEBIAN_<COMPONENT>_FILE_NAME`.
* The :module:`CPackDeb` module learned how to set the package release number
(``DebianRevisionNumber`` in package file name when used in combination with
``DEB-DEFAULT`` value set by :variable:`CPACK_DEBIAN_FILE_NAME`). See
:variable:`CPACK_DEBIAN_PACKAGE_RELEASE`.
* The :module:`CPackDeb` module learned how to set the package architecture
per-component. See :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE`.
* The :module:`CPackDMG` module learned a new option to tell the CPack
``DragNDrop`` generaor to skip the ``/Applications`` symlink.
See the :variable:`CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK` variable.
* The :module:`CPackIFW` module gained a new
:command:`cpack_ifw_update_repository` command to update a QtIFW-specific
repository from a remote repository.
* The :module:`CPackRPM` module learned how to set RPM ``dist`` tag as part of
RPM ``Release:`` tag when enabled (mandatory on some Linux distributions for
e.g. on Fedora).
See :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`.
* The :module:`CPackRPM` module learned how to set default values for owning
user/group and file/directory permissions of package content.
See :variable:`CPACK_RPM_DEFAULT_USER`, :variable:`CPACK_RPM_DEFAULT_GROUP`,
:variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`,
:variable:`CPACK_RPM_DEFAULT_DIR_PERMISSIONS` and their per component
counterparts.
* The :module:`CPackRPM` module learned how to set user defined package file
names, how to specify that rpmbuild should decide on file name format as
well as handling of multiple rpm packages generated by a single user defined
spec file.
See :variable:`CPACK_RPM_PACKAGE_NAME` and
:variable:`CPACK_RPM_<component>_PACKAGE_NAME`.
* The :module:`CPackRPM` module learned how to correctly handle symlinks
that are pointing outside generated packages.
Other
-----
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by Intel C++ compilers versions 12.1
through 16.0 on UNIX platforms.
Deprecated and Removed Features
===============================
* The :module:`CMakeForceCompiler` module and its macros are now deprecated.
See module documentation for an explanation.
* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
commands no longer search in installation prefixes derived from the ``PATH``
environment variable on non-Windows platforms. This behavior was added in
CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts.
Users that keep some ``<prefix>/bin`` directories in the ``PATH`` just for
their tools do not necessarily want any supporting ``<prefix>/lib``
directories searched. One may set the ``CMAKE_PREFIX_PATH`` environment
variable with a :ref:`;-list <CMake Language Lists>` of prefixes that are
to be searched.
* The :generator:`Visual Studio 7 .NET 2003` generator is now
deprecated and will be removed in a future version of CMake.
* The :generator:`Visual Studio 7` generator (for VS .NET 2002) has been
removed. It had been deprecated since CMake 3.3.
* The :generator:`Visual Studio 6` generator has been removed.
It had been deprecated since CMake 3.3.
Other Changes
=============
* The precompiled OS X binary provided on ``cmake.org`` now requires
OS X 10.7 or newer.
* On Linux and FreeBSD platforms, when building CMake itself from source and
not using a system-provided libcurl, OpenSSL is now used by default if it is
found on the system. This enables SSL/TLS support for commands supporting
network communication via ``https``, such as :command:`file(DOWNLOAD)`,
:command:`file(UPLOAD)`, and :command:`ctest_submit`.
* The :manual:`cmake(1)` ``--build`` command-line tool now rejects multiple
``--target`` options with an error instead of silently ignoring all but the
last one.
* :prop_tgt:`AUTOMOC` now diagnoses name collisions when multiple source
files in different directories use ``#include <moc_foo.cpp>`` with the
same name (because the generated ``moc_foo.cpp`` files would collide).
* The :module:`FindBISON` module ``BISON_TARGET`` macro now supports
special characters by passing the ``VERBATIM`` option to internal
:command:`add_custom_command` calls. This may break clients that
added escaping manually to work around the bug.
* The :module:`FindFLEX` module ``FLEX_TARGET`` macro now supports
special characters by passing the ``VERBATIM`` option to internal
:command:`add_custom_command` calls. This may break clients that
added escaping manually to work around the bug.
* The :module:`FindProtobuf` module input and output variables were all renamed
from ``PROTOBUF_`` to ``Protobuf_`` for consistency with other find modules.
Input variables of the old case will be honored if provided, and output
variables of the old case are always provided.
* The :module:`CPackRPM` module now supports upper cased component
names in per component CPackRPM specific variables.
E.g. component named ``foo`` now expects component specific
variable to be ``CPACK_RPM_FOO_PACKAGE_NAME`` while before
it expected ``CPACK_RPM_foo_PACKAGE_NAME``.
Upper cased component name part in variables is compatible
with convention used for other CPack variables.
For back compatibility old format of variables is still valid
and preferred if both versions of variable are set, but the
preferred future use is upper cased component names in variables.
New variables that will be added to CPackRPM in later versions
will only support upper cased component variable format.
* The CPack NSIS generator's configuration file template was fixed to
quote the path to the uninstaller tool used by the
:variable:`CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL` option.
This avoids depending on an insecure Windows feature to run an
uninstaller tool with a space in the path.

Changes 3.5.0:
The cmake-gui(1) gained options to control warnings about deprecated functionality.
The 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 cmake(1).
The 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.
The -Wdev and -Wno-dev 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 cmake(1) options.
The cmake(1) -E command-line tools copy, copy_if_different, copy_directory, and make_directory learned to support multiple input files or directories.
The cmake_parse_arguments() command is now implemented natively. The CMakeParseArguments module remains as an empty placeholder for compatibility.
The install(DIRECTORY) command learned to support generator expressions in the list of directories.
The CMAKE_ERROR_DEPRECATED variable can now be set using the -Werror=deprecated and -Wno-error=deprecated cmake(1) options.
The CMAKE_WARN_DEPRECATED variable can now be set using the -Wdeprecated and -Wno-deprecated cmake(1) options.
The VS_GLOBAL_<variable> target property is now implemented for VS 2010 and above. Previously it worked only in VS 2008 and below.
The ExternalProject module learned a new GIT_REMOTE_NAME option to control the git clone --origin value.
The FindBoost module now provides imported targets such as Boost::boost and Boost::filesystem.
The FindFLEX module FLEX_TARGET macro learned a new DEFINES_FILE option to specify a custom output header to be generated.
The FindGTest module now provides imported targets.
The 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 FindOpenMP module learned to support Clang.
The FindOpenSSL module gained a new OPENSSL_MSVC_STATIC_RT option to search for libraries using the MSVC static runtime.
The FindPNG module now provides imported targets.
The FindTIFF module now provides imported targets.
A FindXalanC module was introduced to find the Apache Xalan-C++ XSL transform processing library.
The FindXercesC module now provides imported targets.

Update cmake to 3.4.0:
CMake 3.4 Release Notes
***********************
Changes made since CMake 3.3 include the following.
New Features
============
Generators
----------
* The :generator:`Visual Studio 14 2015` generator learned to select
a Windows 10 SDK based on the value of the :variable:`CMAKE_SYSTEM_VERSION`
variable and the SDKs available on the host.
* CMake learned rudimentary support for the Apple Swift language. When using
the :generator:`Xcode` generator with Xcode 6.1 or higher, one may enable
the ``Swift`` language with the :command:`enable_language` command or the
:command:`project` command (this is an error with other generators or when
Xcode is too old). Then one may list ``.swift`` source files in targets
for compilation.
Commands
--------
* The :command:`find_program` command learned a ``NAMES_PER_DIR``
option to consider all given ``NAMES`` in each directory before
moving on to the next directory.
* The :command:`get_filename_component` command learned a new ``BASE_DIR``
subcommand. This is used to specify a base directory when calculating an
absolute path from a relative path.
* The :command:`if` command learned a new ``TEST`` operator that evaluates
to true if a given test name has been defined by the :command:`add_test`
command. See policy :policy:`CMP0064`.
* The :command:`install(DIRECTORY)` command ``DESTINATION`` option learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`install(FILES)` command ``DESTINATION`` option learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`string` command learned a new ``APPEND`` subcommand.
Variables
---------
* The :ref:`Makefile Generators` and the :generator:`Ninja` generator
learned to add compiler launcher tools like distcc and ccache along
with the compiler for ``C`` and ``CXX`` languages. See the
:variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.
* New :variable:`CMAKE_LINK_SEARCH_START_STATIC` and
:variable:`CMAKE_LINK_SEARCH_END_STATIC` variables were
introduced to initialize the
:prop_tgt:`LINK_SEARCH_START_STATIC` and
:prop_tgt:`LINK_SEARCH_END_STATIC` target properties,
respectively.
Properties
----------
* :ref:`Visual Studio Generators` learned to support additonal
target properties to customize projects for NVIDIA Nsight
Tegra Visual Studio Edition:
* :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS`
* :prop_tgt:`ANDROID_ARCH`
* :prop_tgt:`ANDROID_ASSETS_DIRECTORIES`
* :prop_tgt:`ANDROID_JAR_DEPENDENCIES`
* :prop_tgt:`ANDROID_JAR_DIRECTORIES`
* :prop_tgt:`ANDROID_JAVA_SOURCE_DIR`
* :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES`
* :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES`
* :prop_tgt:`ANDROID_PROCESS_MAX`
* :prop_tgt:`ANDROID_PROGUARD`
* :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH`
* :prop_tgt:`ANDROID_SECURE_PROPS_PATH`
* :prop_tgt:`ANDROID_SKIP_ANT_STEP`
* :prop_tgt:`ANDROID_STL_TYPE`
* The :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY`,
:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`, and
:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target properties learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`SOURCE_DIR` and :prop_tgt:`BINARY_DIR` target properties
were introduced to allow project code to query where a target is defined.
* The :prop_tgt:`OUTPUT_NAME` target property and its variants learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* A :prop_gbl:`TARGET_MESSAGES` global property was added to tell the
:ref:`Makefile Generators` whether to generate commands to print output
after each target is completed.
* On Windows with MS-compatible tools, CMake learned to optionally
generate a module definition (``.def``) file for ``SHARED`` libraries.
See the :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property.
Modules
-------
* The :module:`ExternalProject` module :command:`ExternalProject_Add`
function ``GIT_SUBMODULES`` option now also limits the set of
submodules that are initialized in addition to the prior behavior
of limiting the set of submodules that are updated.
* The :module:`ExternalProject` module learned new ``USES_TERMINAL``
arguments for giving steps exclusive terminal access. This is
useful with the :generator:`Ninja` generator to monitor CMake
superbuild progress and prevent CPU oversubscription.
* The :module:`FindBISON` module ``BISON_TARGET`` macro learned a
new ``DEFINES_FILE`` option to specify a custom output header
to be generated.
* The :module:`FindHDF5` module learend a new ``HDF5_PREFER_PARALLEL``
option allowing users to specify that a parallel HDF5 tool is
preferred if both are available.
* The :module:`FindIce` module now provides imported targets.
* The :module:`FindJava` module learned to optionally find
the ``idlj`` and ``jarsigner`` tools.
* The :module:`FindOpenSSL` module now provides imported targets.
* The :module:`FindOpenSSL` module learned a new ``OPENSSL_USE_STATIC_LIBS``
option to search only for static libraries.
* The :module:`FindPkgConfig` learned a new :command:`pkg_get_variable`
command which may be used to query for arbitrary variables from a package
(such as for related tools or data and plugin install paths).
* The :module:`FindProtobuf` module gained a new
:command:`protobuf_generate_python` function to generate python
sources from ``.proto`` files.
* The :module:`FindTIFF` module learned to search separately for
debug and release variants.
* The :module:`FindwxWidgets` module learned to support version requests.
* The :module:`FindXercesC` module learned to search separately for
debug and release variants.
* The :module:`FindZLIB` module learned to search separately for
debug and release variants.
* The :module:`GNUInstallDirs` module learned special default values
for certain installation prefixes according to the `GNU Coding
Standards`_ and the `Filesystem Hierarchy Standard`_.
* The :module:`UseJava` module ``add_jar`` function learned
to support response files (e.g. ``@srcs.txt``) for source
specification.
* The :module:`UseJava` module ``install_jar`` function learned
new ``DESTINATION`` and ``COMPONENT`` options to specify
the corresponding :command:`install` command options.
* The :module:`UseJava` module gained a new ``create_javah``
function to create C headers from Java classes.
.. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
.. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
Generator Expressions
---------------------
* A new ``$<SHELL_PATH:...>``
:manual:`generator expression <cmake-generator-expressions(7)>`
has been added.
CTest
-----
* CTest learned to optionally measure the CPU load during parallel
testing and avoid starting tests that may cause the load to exceed
a given threshold. See the :manual:`ctest(1)` command ``--test-load``
option, the ``TestLoad`` setting of the :ref:`CTest Test Step`,
the :variable:`CTEST_TEST_LOAD` variable, and the ``TEST_LOAD``
option of the :command:`ctest_test` command.
* :manual:`ctest(1)` learned options
``--test-output-size-passed`` and ``--test-output-size-failed``
to customize the limit on test output size submitted when
running as a :ref:`Dashboard Client`.
CPack
-----
* The :module:`CPackDeb` module learned to set package dependencies
per component. See variables:
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS`
* The :module:`CPack` module learned to package empty directories.
* The :module:`CPack` module gained a new setting, ``CPACK_VERBATIM_VARIABLES``,
which can be used to ensure the cpack program receives the settings' values
exactly as they were set, even if they contain CMake-special characters.
For compatibility, it's off by default.
Other
-----
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by GNU C compilers on Windows.
* CMake learned to honor ``*.manifest`` source files with MSVC tools.
Manifest files named as sources of ``.exe`` and ``.dll`` targets
will be merged with linker-generated manifests and embedded in the
binary.
* The `Concurrent Fortran 77 <https://ccur.com>`__ compiler is now supported.
Its :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` is ``CCur``.
* :manual:`cmake(1)` gained a new ``--trace-expand`` command line option
that is like ``--trace`` but expands variable references in the output.
Deprecated and Removed Features
===============================
* The :module:`CMakeExpandImportedTargets` module is now documented
as deprecated. See module documentation for an explanation.
* The :variable:`CMAKE_USE_RELATIVE_PATHS` variable no longer has any
effect. Previously it was partially implemented and unreliable.
Other Changes
=============
* The :module:`CheckFunctionExists`, :module:`CheckLibraryExists`,
:module:`CheckSymbolExists`, and :module:`FindThreads` modules learned to
work in environments where only CXX is enabled.
* The :module:`CPackDeb` module now correctly excludes symlinks during package
checksum calculation.
* The :module:`CPackDeb` no longer uses fakeroot and system tar program for
packaging.
* The :module:`CPack` module no longer mangles settings with CMake-special
characters when they're used as defaults for other settings. The macro
``cpack_set_if_not_set``, which was responsible for this, is now deprecated.
* CMake no longer links executables with flags to export symbols
unless the :prop_tgt:`ENABLE_EXPORTS` target property is set.
See policy :policy:`CMP0065`.
* The ``SONAME`` field is no longer set for ``MODULE`` libraries
created with the :command:`add_library` command. ``MODULE``
libraries are meant for explicit dynamic loading at runtime.
They cannot be linked so ``SONAME`` is not useful.
* The internal :variable:`CMAKE_<LANG>_COMPILE_OBJECT` rule variable now
substitutes compiler include flags in a separate ``<INCLUDES>`` placeholder
instead of the main ``<FLAGS>`` placeholder.

Bump all packages that depend on curses.bui* or terminfo.bui* since they
might incur ncurses dependencies on some platforms, and ncurses just bumped
its shlib.
Some packages were bumped twice now, sorry for that.

Update to 3.3.0:
I am proud to announce that CMake 3.3.0 is now available for download.
Release notes appear are published at
http://www.cmake.org/cmake/help/v3.3/release/3.3.html
Some of the more significant features of CMake 3.3 are:
* The "if()" command learned a new "IN_LIST" operator that evaluates
to true if a given element is contained in a named list.
* The "add_dependencies()" command learned to allow dependencies to
be added to *interface libraries*. Dependencies added to an
interface library are followed transitively in its place since the
target itself does not build.
* The "find_library()", "find_path()", and "find_file()" commands
now search in installation prefixes derived from the "PATH"
environment variable.
* The "<LANG>_VISIBILITY_PRESET" and "VISIBILITY_INLINES_HIDDEN"
target properties now affect compilation in sources of all target
types. See policy "CMP0063".
* A "<LANG>_INCLUDE_WHAT_YOU_USE" target property and supporting
"CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE" variable were introduced to tell
the *Makefile Generators* and the "Ninja" generator to run "include-
what-you-use" along with the compiler for "C" and "CXX" languages.
Deprecated and Removed Features:
* The "ctest_build()" and "build_command()" commands no longer tell
"make" tools to ignore errors with the "-i" option. Previously this
was done for *Makefile Generators* but not others. See policy
"CMP0061".
* The "Visual Studio 7" generator (.NET 2002) is now deprecated and
will be removed in a future version of CMake.
* The "Visual Studio 6" generator is now deprecated and will be
removed in a future version of CMake.
* The "add_definitions()" command no longer causes a "DEFINITIONS"
directory property to be populated. See policy "CMP0059".

Changes 3.2.1:
* CMake learned to support unicode characters *encoded as UTF-8* on
Windows. This was already supported on platforms whose system APIs
accept UTF-8 encoded strings. Unicode characters may now be used in
CMake code, paths to source files, configured files such as ".h.in"
files, and other files read and written by CMake. Note that because
CMake interoperates with many other tools, there may still be some
limitations when using certain unicode characters.
* The "Compile Features" functionality is now aware of features
supported by more compilers, including:
* Apple Clang ("AppleClang") for Xcode versions 4.4 though 6.1.
* GNU compiler versions 4.4 through 5.0 on UNIX and Apple ("GNU").
* Microsoft Visual Studio ("MSVC") for versions 2010 through 2015.
* Oracle SolarisStudio ("SunPro") version 12.4.
* The "add_custom_command()" and "add_custom_target()" commands
learned a new "BYPRODUCTS" option to specify files produced as side
effects of the custom commands. These are not outputs because they
do not always have to be newer than inputs.
* The "file(GENERATE)" command can now generate files which are used
as source files for buildsystem targets. Generated files
automatically get their "GENERATED" property set to "TRUE".
Deprecated and Removed Features:
* Files written in the "cmake-language(7)", such as "CMakeLists.txt"
or "*.cmake" files, are now expected to be encoded as UTF-8. If
files are already ASCII, they will be compatible. If files were in
a different encoding, including Latin 1, they will need to be
converted.
* The "FindOpenGL" module no longer explicitly searches for any
dependency on X11 libraries with the "FindX11" module. Such
dependencies should not need to be explicit. Applications using X11
APIs themselves should find and link to X11 libraries explicitly.

Changes 3.1.0:
* Windows Phone and Windows Store support has been added to Visual Studio 11
(2012) and above Generators.
* NVIDIA Nsight Tegra support has been added to Visual Studio 10 (2010) and
above Generators.
* New "target_compile_features" command allows populating target based compile
features. CMake uses this information to ensure that the compiler in use is
capable of building the target, and to add any necessary compile flags
such as -std=gnu++11 to support language features.
More information on this is found at:
- http://www.cmake.org/cmake/help/v3.1/manual/cmake-compile-features.7.html
* The syntax for *Variable References* and *Escape Sequences* was simplified in
order to allow a much faster implementation. See policy "CMP0053".
* The "if" command no longer automatically dereferences variables named in
quoted or bracket arguments. See policy "CMP0054".
* The target property "SOURCES" now generally supports "Generator Expressions".
The generator expressions may be used in the "add_library" and
"add_executable" commands.
* It is now possible to write and append to the target property "SOURCES".
The variable "CMAKE_DEBUG_TARGET_PROPERTIES" can be used to trace the
origin of sources.
* CPack gained "7Z" and "TXZ" generators supporting lzma-compressed archives.
* The ExternalProject module has learned to support lzma-compressed
source tarballs with ".7z", ".tar.xz", and ".txz" extensions.
* The ExternalProject module ExternalProject_Add command learned a new
BUILD_ALWAYS option to cause the external project build step to run every
time the host project is built.
* The ctest_coverage command learned to support Intel coverage files with the
"codecov" tool.
* The ctest_memcheck command learned to support sanitizer modes, including
"AddressSanitizer", "MemorySanitizer", "ThreadSanitizer", and
"UndefinedBehaviorSanitizer".

Changes 3.0.1:
We are pleased to announce the release of CMake 3.0.0. In CMake 3.0, the CMake language has been extended with *Bracket Argument* and *Bracket Comment* syntax inspired by Lua long bracket, and the CMake documentation has been converted to reStructuredText.
Furthermore, new "CodeLite" and "Kate" extra generators are available for use with the Makefile or Ninja generators. In addition, the "add_library()" command learned a new "INTERFACE" library type, the "export()" command learned a new "EXPORT" mode that retrieves the list of targets to export from an export set configured by the "install(TARGETS)" command "EXPORT" option, and the "project()" command learned to set some version variables to values specified by the new "VERSION" option or to empty strings.

Changes 2.8.11:
This new release of CMake features the introduction of Target Usage Requirements and a Generator Toolset Selection for Visual Studio and XCode, as well as a variety of other improvements.
With the Target Usage Requirements, developers can now specify target usage requirements for their consumers such as include directories and preprocessor definitions, whereas in previous versions only link dependencies were supported. Additionally, with the target_link_libraries(myexe yourlib), developers can now build myexe sources with requirements specified by yourlib. There are also a new target include directory and target compile definitions commands that offer public, private, and interface options. The detailed discussion on this topic is available on the KDE website.
The new Generator Toolset selection for Visual Studio and XCode inform the IDE which compiler toolchain to use. Other improvements include the introduction of the ExternalData Module and the ability to reference data unambiguously from source tree by the content hash.

With the 2.8.10 release, users now have a new way to arrange exported targets that depend on other targets into "export sets." In addition, there are new target properties for PDB_OUTPUT_DIRECTORY and PDB_NAME implemented for Visual Studio 7 and later.
Generator expressions, which are used to introduce conditional statements at generate time rather than at CMake compile time, are now available in more contexts, notably in the INCLUDE_DIRECTORIES and COMPILE_DEFINITIONS target properties. There are also new generator expressions available in the 2.8.10 release.
The file(DOWNLOAD command can accommodate https URLs. The pre-built binaries for this are available from Kitware and link to OpenSSL. The team has also added uniform compiler "id" and version number variables available for nearly all known compilers and platforms.

Changes 2.8.7:
This release includes the addition of file( and string( commands for
computing hash values and more cryptographic hash implementations, such as
SHA1, SHA224, SHA256, SHA384, SHA512. There are new LINK_PUBLIC and LINK_PRIVATE
options for target_link_libraries command as well as a new DeployQt4 module.
With the 2.8.7 release, there are two sets of installers for the Mac. The
"Darwin" versions are for Mac OSX 10.4 and later, and are "ppc;i386" universal
binaries. The "Darwin64" versions are for 10.6 and later, and are "x86_64;i386"
universal binaries.

Changes 2.8.6:
Kitware is pleased to announce the release of CMake 2.8.6. This release features several notable changes, including a new AUTOMOC target property that helps make it easier to build Qt projects and support for the Intel Fortran compiler in VisualStudio10. Additionally, VisualStudio 9 and 10 generators for Itanium platform have been added, and appear as the ◊∑isual Studio 9 2008 IA64„ŗand „ŗ◊∑isual Studio 10 IA64„ŗgenerators on Windows builds of CMake.
This release also contains an experimental generator in the Windows build targeting VisualStudio 11. It will remain "Experimental" until VisualStudio 11 itself is finalized. If you have the developer preview of VisualStudio 11, we would appreciate any feedback you have. Please keep in mind that this is very new, and has only been tested enough to be useful to include for the community to test drive and provide feedback on.
Other improvements include the movement of many files from KDE's overrides of CMake module files, which have been accepted into upstream CMake thanks to the hard work of Alex Neundorf and Stephen Kelly. There have been many Xcode generator improvements, including support for iOS projects and the ability to switch between simulator and device builds.

Changes 2.8.4:
* Fix crash in GraphVizWriter when GRAPHVIZ_TARGET_IGNORE_REGEX is used
* FindPerlLibs: Add notice of copyright
* libarchive: Define major/minor/makedev only where needed
* libarchive: Use OpenSSL only if CMAKE_USE_OPENSSL
* Fix documentation of MSVC_VERSION
* Silence the may be used uninitialized warnings: initialize stuff.
* CPack Tests the different ways of packaging components
* Avoid foreach IN LISTS syntax which is not supported by CMake 2.6

CMake 2.8.1
We are happy to announce the release of CMake 2.8.1. This is a minor release
from 2.8.0. In addition to addressing many issues, this version of CMake adds
some new features as well. The parallel nmake replacement from Nokia jom, now
has its own tested generator in CMake.
CTest can correctly kill process trees when a timeout occurs. The ctest_*
commands have been enhanced to take more options. When using the Intel
compilers CMake can correctly determine 32 bit vs. 64 bit builds. When running
in parallel mode (-j N), CTest can now compute and use a cost value for each
test to ensure the tests are run in an optimal order.

* Unbreak searching software from /usr/local. There is no need to for all
this sed magic, _CMAKE_INSTALL_DIR in UnixPaths.cmake does that for us
already. Only X11BASE needs special attention.
* Remove patch-ae which never worked in fact.
* Bump PKGREVISION.
Discussed-with: Mark Davies

Update to cmake-2.6.1. I could not find any release notes concise enough
to include here; the changelog for this release is here:
<http://www.cmake.org/pipermail/cmake/2008-August/023188.html>
For changes prior to this release, please see ${WRKSRC}/ChangeLog.
While here, add a list of *.cmake files in which to replace
/usr/${X11R6,local} with X11BASE and LOCALBASE, respectively.
Also, the [pkgsrc-relative] API, e.g. 2.6 is now defined by a variable
so that it can be used in pathnames for the build and the PLIST.

Update to version 2.4.8. ChangeLog does not include relases, and I don't
have time to go through it now to see what to include here. See
${WRKSRC}/ChangeLog.txt if you're interested.
Insofar as I could tell, patch-ab and patch-ad no longer need apply.

Point MAINTAINER to pkgsrc-users@NetBSD.org in the case where no
developer is officially maintaining the package.
The rationale for changing this from "tech-pkg" to "pkgsrc-users" is
that it implies that any user can try to maintain the package (by
submitting patches to the mailing list). Since the folks most likely
to care about the package are the folks that want to use it or are
already using it, this would leverage the energy of users who aren't
developers.

Add a Modules/Platform/DragonFly.cmake file (copied from FreeBSD.cmake).
cmake not tested on DragonFly, but did build package on DragonFly.
Also hardcode "NetBSD" in PLIST instead of ${OPSYS} so deinstall
works on non-NetBSD platforms.
Bump PKGREVISION.

Libtool fix for PR pkg/26633, and other issues. Update libtool to 1.5.10
in the process. (More information on tech-pkg.)
Bump PKGREVISION and BUILDLINK_DEPENDS of all packages using libtool and
installing .la files.
Bump PKGREVISION (only) of all packages depending directly on the above
via a buildlink3 include.

Back out last change related to moving ncurses/buildlink2.mk to
curses.buildlink2.mk. This was wrong because we _really_ do want to
express that we want _n_curses when we include the buildlink2.mk file.
We should have a better way to say that the NetBSD curses doesn't
quite work well enough. In fact, it's far better to depend on ncurses
by default, and exceptionally note when it's okay to use NetBSD curses
for specific packages. We will look into this again in the future.

import cmake-1.6.6
CMake is an extensible, open-source system that manages the build
process in an operating system and compiler independent manner. Unlike
many cross-platform systems, CMake is designed to be used in
conjunction with the native build environment. Simple configuration
files placed in each source directory (called CMakeLists.txt files)
are used to generate standard build files (e.g., makefiles on Unix and
projects/workspaces in Windows MSVC) which are used in the usual
way. CMake can compile source code, create libraries, generate
wrappers, and build executables in arbitrary combinations. CMake
supports in-place and out-of-place builds, and can therefore support
multiple builds from a single source tree. CMake also supports static
and dynamic library builds. Another nice feature of CMake is that it
generates a cache file that is designed to be used with a graphical
editor. For example, when CMake runs, it locates include files,
libraries, and executable, and may encounter optional build
directives. This information is gathered into the cache, which may be
changed by the user prior to the generation of the native build files.