Help: Organize and revise 4.3 release notes

Add section headers similar to the 4.2 release notes and move each
individual bullet into an appropriate section.  Revise a few bullets.
This commit is contained in:
Brad King
2026-02-17 13:32:57 -05:00
parent 0454ef4764
commit 62d573134e
2 changed files with 203 additions and 141 deletions
+4
View File
@@ -52,6 +52,8 @@ than the previous indexing.
Indexing and can also be performed by manually invoking
:option:`ctest --collect-instrumentation`.
.. _`cmake-instrumentation Callbacks`:
Callbacks
---------
@@ -581,6 +583,8 @@ Each CMake content file contains the following:
``labels``
The :prop_tgt:`LABELS` property of the target.
.. _`cmake-instrumentation Google Trace File`:
Google Trace File
-----------------
+199 -141
View File
@@ -7,125 +7,154 @@ CMake 4.3 Release Notes
Changes made since CMake 4.2 include the following.
* The :manual:`cmake(1)` :option:`-E tar <cmake-E tar>` command-line tool,
and the :command:`file(ARCHIVE_EXTRACT)` command, now reject archive
entries whose paths are absolute or contain ``..`` path traversal
components.
New Features
============
Instrumentation
---------------
* :manual:`cmake-instrumentation(7)` was added to enable collection of
timing data, target information, and system diagnostic information during
the configure, generate, build, test, and install steps of a CMake project:
* Instrumentation data are :ref:`indexed <cmake-instrumentation Indexing>`
and provided to :ref:`callbacks <cmake-instrumentation Callbacks>` for
custom processing.
* Instrumentation data are included in submissions to CDash.
* Optionally,
:ref:`Google Trace Event Format <cmake-instrumentation Google Trace File>`
files may be generated to visualize instrumentation data.
File-Based API
--------------
* The :manual:`cmake-file-api(7)` "codemodel" version 2 version field
has been updated to 2.10.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object
gained a new ``interfaceSources`` array field, and the ``sourceGroups``
array items gained a new ``interfaceSourceIndexes`` array field.
Platforms
---------
* ``HIP`` language code may now be compiled for SPIR-V targets,
e.g., via chipStar. See the :variable:`CMAKE_HIP_PLATFORM` variable.
Command-Line
------------
* :option:`cmake --version` now supports a ``=json-v1`` value to print
detailed version information in a JSON format.
* :option:`cmake --build` now supports specifying a build directory and
preset together. The build preset will be used with the explicit
build directory substituted.
* The precompiled macOS binary provided on ``cmake.org`` for macOS 10.13+
now requires macOS 12 or newer for the :manual:`cmake-gui(1)` application.
The command-line tools still run on macOS 10.13.
* The :option:`cmake -E` commands
:option:`md5sum <cmake-E md5sum>`,
:option:`sha1sum <cmake-E sha1sum>`,
:option:`sha224sum <cmake-E sha224sum>`,
:option:`sha256sum <cmake-E sha256sum>`,
:option:`sha384sum <cmake-E sha384sum>`, and
:option:`sha512sum <cmake-E sha512sum>`
now support reading from standard input by passing ``-``.
* The precompiled Windows binaries provided on
`cmake.org <https://cmake.org/download/>`_ now require Windows 10 or higher.
* The :option:`cmake -E bin2c <cmake-E bin2c>` command-line tool was added.
* The :manual:`cmake(1)` ``-E tar`` tool supports support compression methods
specification for ``7zip`` and ``zip`` formats.
* The :manual:`cmake(1)` ``-E tar`` tool supports support compression levels
specification for ``7zip`` and ``zip`` formats.
* The :command:`file(ARCHIVE_CREATE)` command's ``COMPRESSION`` option,
supports ``Deflate`` compression. The ``Deflate`` compression is
an alias for ``GZip``.
* The :option:`cmake -E tar <cmake-E tar>` command-line tool:
* The :manual:`cmake(1)` ``-E tar`` tool supports specifying compression level
via ``--cmake-tar-compression-level`` option
* Gained a ``--cmake-tar-compression-level`` flag to specify the
compression level.
* Gained a ``--cmake-tar-compression-method`` flag to specify the
compression method.
* Gained a ``--cmake-tar-threads`` flag to enable multithreaded operations.
* Now supports specifying compression method and level for ``7zip`` and
``zip`` formats.
* Gained a ``--format=raw`` flag to disable compression.
* Gained a ``--lzma`` flag to specify ``LZMA`` compression.
* The :manual:`cmake(1)` ``-E tar`` tool supports specifying compression method
via ``--cmake-tar-compression-method`` option
* The :manual:`cmake(1)` ``-E tar`` tool supports packing raw files via ``--format=raw``. This is useful for compressing tar files without any compression
Commands
--------
* The :manual:`cmake(1)` ``-E tar`` tool supports support ``LZMA`` compression
via ``--lzma`` option.
* The :command:`file(ARCHIVE_CREATE)` command's ``COMPRESSION`` option,
supports ``LZMA`` and ``LZMA2`` compression. The ``LZMA2`` compression is
an alias for ``XZ``.
* The :module:`CTestCoverageCollectGCOV` supports ``LZMA`` and ``LZMA2`` compression.
The ``LZMA2`` compression is an alias for ``XZ``.
* The :module:`CTestCoverageCollectGCOV` supports ``LZMA`` and ``ZSTD`` compression
file extensions for ``FROM_EXT`` compression mode.
* The :command:`cmake_instrumentation` command was added to make
project-level instrumentation queries.
* The :manual:`cmake(1)` ``-E tar`` tool supports multithreading operations
via ``--cmake-tar-threads`` option
* The :command:`file(ARCHIVE_CREATE)` command supports multithreading via the
``THREADS`` option
* The :command:`file(ARCHIVE_CREATE)` command:
* The :variable:`CMAKE_ENABLE_EXPORTS` variable is deprecated in favor of
the :variable:`CMAKE_EXECUTABLE_ENABLE_EXPORTS` and
:variable:`CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS` variables.
* Gained a ``THREADS`` option to enable multithreaded operations.
* Now supports ``COMPRESSION`` method ``Deflate`` as an alias for ``GZip``.
* Now supports ``COMPRESSION`` method ``LZMA``.
* Now supports ``COMPRESSION`` method ``LZMA2`` as an alias for ``XZ``.
* Now supports ``COMPRESSION`` method ``PPMd`` for format ``7zip``.
* Now supports ``COMPRESSION`` and ``COMPRESSION_LEVEL`` options
for formats ``7zip`` and ``zip``.
* The variables :variable:`CMAKE_<LANG>_LINK_FLAGS` and
:variable:`CMAKE_<LANG>_LINK_FLAGS_<CONFIG>` were added to support
per-language link flags for all target types. See policy :policy:`CMP0210`.
* The :command:`get_property` and :command:`set_property` commands
now support a ``FILE_SET`` scope for file set properties of a target.
* The :command:`install(PACKAGE_INFO)` and :command:`export(PACKAGE_INFO)`
commands now support specifying ``CXX_MODULES_DIRECTORY`` for exporting
C++20 modules.
* The :command:`string(JSON)` command gained new ``GET_RAW`` and
``STRING_ENCODE`` modes.
* The :command:`source_group` command now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`cmake_host_system_information` command gained a
``LOCALE_CHARSET`` query for the expected :manual:`cmake-language(7)`
script encoding.
* The :option:`cmake --version` option and variants now support a ``=json-v1``
value to print detailed version information in a JSON format.
Variables
---------
* The :cpack_gen:`CPack Archive Generator` generator supports support compression
methods specification for ``7zip`` and ``zip`` formats.
* The :variable:`CMAKE_<LANG>_LINK_FLAGS` and
:variable:`CMAKE_<LANG>_LINK_FLAGS_<CONFIG>` variables were added
to support per-language link flags for all target types.
See policy :policy:`CMP0210`.
* :module:`CPack` gained the :variable:`CPACK_COMPRESSION_LEVEL`
variable to control the compression level used for creating
packages, that supports compression.
* The :cpack_gen:`CPack Archive Generator` gained a new variable
:variable:`CPACK_ARCHIVE_COMPRESSION_LEVEL` to control the
compression level used when creating archive packages.
* The :variable:`CMAKE_CXX_MODULE_STD` variable and corresponding
:prop_tgt:`CXX_MODULE_STD` target property were added to control the
availability of ``import std`` for C++ targets.
* The :cpack_gen:`CPack Archive Generator` generator gained new
:variable:`CPACK_ARCHIVE_UID` and :variable:`CPACK_ARCHIVE_GID`
options to specify the UID and GID of archive entries.
The default now UID 0 and GID 0. See policy :policy:`CMP0206`.
* The read-only :variable:`CMAKE_CXX_COMPILER_IMPORT_STD` variable was added
to list the C++ standard levels for which ``import std`` is available on
the current toolchain.
* The :cpack_gen:`CPack DEB Generator` gained a new variable
:variable:`CPACK_DEBIAN_COMPRESSION_LEVEL` to control the
compression level used when creating Debian packages.
* The :variable:`CMAKE_CXX_STDLIB_MODULES_JSON` variable was added to specify
an ``import std`` module metadata file instead of relying on automatic
detection from the C++ compiler.
* The :cpack_gen:`CPack WIX Generator` now supports per-user installers
by setting :variable:`CPACK_WIX_INSTALL_SCOPE` to ``perUser``.
* The :variable:`CMAKE_VERIFY_PRIVATE_HEADER_SETS` variable and corresponding
:prop_tgt:`VERIFY_PRIVATE_HEADER_SETS` target property were added to
enable build rules that verify all headers in private file sets can be used
on their own.
* The :command:`install(PACKAGE_INFO)` and :command:`export(PACKAGE_INFO)`
commands now support specifying `CXX_MODULES_DIRECTORY` for exporting C++20
modules.
Properties
----------
* The :module:`FindCUDAToolkit` module now creates a ``CUDA::bin2c`` imported
target for the :ref:`bin2c <FindCUDAToolkit_bin2c>` utility.
* A :prop_tgt:`<LANG>_PVS_STUDIO` target property and supporting
:variable:`CMAKE_<LANG>_PVS_STUDIO` variable were introduced to tell
:ref:`Makefile Generators` and :ref:`Ninja Generators` to run
``pvs-studio-analyzer`` with the compiler for ``C`` and ``CXX`` languages.
:manual:`cmake -E <cmake(1)>` gained a new ``bin2c`` mode.
* When :prop_tgt:`VERIFY_INTERFACE_HEADER_SETS` is set to true on an executable
target, that target's interface file sets are verified regardless of its
:prop_tgt:`ENABLE_EXPORTS` property. See policy :policy:`CMP0209`.
* The :manual:`cmake(1)` ``-E`` commands ``md5sum``, ``sha1sum``,
``sha224sum``, ``sha256sum``, ``sha384sum``, and ``sha512sum`` now have the
ability to read from standard input by passing ``-``.
* The :prop_tgt:`PRIVATE_HEADER_SETS_TO_VERIFY` target property was added to
customize which private file sets to verify when the target's
:prop_tgt:`VERIFY_PRIVATE_HEADER_SETS` property is true.
* The :command:`export(EXPORT)` command no longer allows certain
arguments to be missing or empty. See policy :policy:`CMP0208`.
Modules
-------
* The :manual:`cmake-file-api(7)` "codemodel" version 2 version field has
been updated to 2.10.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object
gained a new ``interfaceSources`` array field, and the ``sourceGroups``
array items gained a new ``interfaceSourceIndexes`` array field.
* The :command:`file(ARCHIVE_CREATE)` command's ``COMPRESSION`` and
``COMPRESSION_LEVEL`` options can be used for ``7zip`` and ``zip`` formats.
* The :command:`file(ARCHIVE_CREATE)` command's ``COMPRESSION`` option,
supports ``PPMd`` compression algorithm. It can be used for ``7zip`` format only.
* The :command:`file(CREATE_LINK)` command's ``COPY_ON_ERROR`` option,
when used with a directory, now copies directory content.
See policy :policy:`CMP0205`.
* The :command:`file(GET_RUNTIME_DEPENDENCIES)`
and :command:`install(RUNTIME_DEPENDENCY_SET)` commands now normalize
paths before matching filters. See policy :policy:`CMP0207`.
* The ``FILE_SET`` type gained the support of properties.
* The :module:`FindCUDAToolkit` module now creates a ``CUDA::bin2c``
imported target for the :ref:`bin2c <FindCUDAToolkit_bin2c>` utility.
* The :module:`FindLibXml2` module gained a ``LibXml2_USE_STATIC_LIBS`` hint
to select static libraries.
@@ -135,76 +164,105 @@ Changes made since CMake 4.2 include the following.
* The :module:`FindSQLite3` module now provides imported
targets with the ``SQLite3::`` prefix.
* :genex:`$<FILE_SET_EXISTS>` and :genex:`$<FILE_SET_PROPERTY>` generator
expressions were added to query CMake file set existence and properties.
* The :module:`UseJava` module's :command:`add_jar` command now accepts a new
``INCLUDE_MODULES`` option that adds its arguments to the ``--module-path``
argument to the Java compiler. This allows building JAR files that use JPMS
modules in their build.
* :genex:`$<SOURCE_EXISTS>` and :genex:`$<SOURCE_PROPERTY>` generator
expressions were added to query CMake source files existence and properties.
Generator Expressions
---------------------
* CMake gains new :ref:`generator expressions
<String Comparisons Generator Expressions>` for string comparisons.
* :ref:`String Comparison <String Comparisons Generator Expressions>`
generator expressions were added.
* :genex:`$<STRING:...>` generator expressions were added for
:ref:`query <String Queries Generator Expressions>`,
:ref:`generation <String Generating Generator Expressions>`, and
:ref:`transformation <String Transforming Generator Expressions>` operations
on strings.
:ref:`transformation <String Transforming Generator Expressions>`
operations on strings.
* ``HIP`` language code may now be compiled for SPIR-V targets,
e.g., via chipStar. See the :variable:`CMAKE_HIP_PLATFORM` variable.
* The experimental gate for C++23's ``import std`` has been dropped.
* The :genex:`$<FILE_SET_EXISTS>` and :genex:`$<FILE_SET_PROPERTY>` generator
expressions were added to query file set existence and properties.
* Variable :variable:`CMAKE_CXX_MODULE_STD` and property target
:prop_tgt:`CXX_MODULE_STD` control the availability of ``import std`` for
C++ targets.
* The :genex:`$<SOURCE_EXISTS>` and :genex:`$<SOURCE_PROPERTY>` generator
expressions were added to query source file existence and properties.
* Read-only variable :variable:`CMAKE_CXX_COMPILER_IMPORT_STD` lists the C++
standard levels for which ``import std`` is available on the current
toolchain.
CTest
-----
* Variable :variable:`CMAKE_CXX_STDLIB_MODULES_JSON` sets a specific module
metadata file which CMake will use for constructing ``import std`` instead
of relying on automatic detection via the current C++ compiler.
* The :module:`CTestCoverageCollectGCOV` module:
* :manual:`cmake-instrumentation(7)` introduces a new API for the collection of
timing data, target information and system diagnostic information during the
configure, generate, build, test and install steps for a CMake project.
* When CMake instrumentation is enabled, instrumentation data will be sent
as part of submissions to CDash.
* CMake can generate Google Trace Event Format files to visualize
instrumentation data.
* The :command:`cmake_instrumentation` was added for adding project-level
instrumentation queries.
* Now supports ``TARBALL_COMPRESSION`` method ``LZMA``.
* A :prop_tgt:`<LANG>_PVS_STUDIO` target property and supporting
:variable:`CMAKE_<LANG>_PVS_STUDIO` variable were introduced to tell
:ref:`Makefile Generators` and :ref:`Ninja Generators` to run
``pvs-studio-analyzer`` with the compiler for ``C`` and ``CXX`` languages.
* Now supports ``TARBALL_COMPRESSION`` method ``LZMA2``
as an alias for ``XZ``.
* The precompiled Linux ``aarch64`` binaries provided on
`cmake.org <https://cmake.org/download/>`_ now require GLIBC 2.28 or higher.
* Now supports ``FROM_EXT`` with file extensions corresponding to
``LZMA`` and ``ZSTD`` compression.
* The :command:`source_group` supports generator expressions
CPack
-----
* The :command:`string(JSON)` command gained new ``GET_RAW`` and ``STRING_ENCODE`` modes.
* :module:`CPack` gained the :variable:`CPACK_COMPRESSION_LEVEL`
variable to control the compression level used when creating
packages.
* The :cpack_gen:`CPack Archive Generator`:
* Now supports compression method specification for formats
``7zip`` and ``zip``.
* Gained a :variable:`CPACK_ARCHIVE_COMPRESSION_LEVEL` option to
control the compression level used when creating archive packages.
* Gained :variable:`CPACK_ARCHIVE_UID` and :variable:`CPACK_ARCHIVE_GID`
options to specify the UID and GID of archive entries, respectively.
The defaults are UID ``0`` and GID ``0``. See policy :policy:`CMP0206`.
* The :cpack_gen:`CPack DEB Generator` gained a new
:variable:`CPACK_DEBIAN_COMPRESSION_LEVEL` variable to control the
compression level used when creating Debian packages.
* The :cpack_gen:`CPack WIX Generator` now supports per-user installers
by setting :variable:`CPACK_WIX_INSTALL_SCOPE` to ``perUser``.
Deprecated and Removed Features
===============================
* The :variable:`CMAKE_ENABLE_EXPORTS` variable is deprecated in favor of
the :variable:`CMAKE_EXECUTABLE_ENABLE_EXPORTS` and
:variable:`CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS` variables.
* The :command:`export(EXPORT)` command no longer allows certain
arguments to be missing or empty. See policy :policy:`CMP0208`.
Other Changes
=============
* The :option:`cmake -E tar <cmake-E tar>` command-line tool
and the :command:`file(ARCHIVE_EXTRACT)` command now reject archive
entries whose paths are absolute or contain ``..`` path traversal
components.
* The family of :option:`cmake --trace` and related commands now print "end"
commands for control structures: :command:`endblock`, :command:`endforeach`,
:command:`endfunction`, :command:`endif`, :command:`endmacro`, and
:command:`endwhile`.
* The :module:`UseJava` module's :command:`add_jar` command now accepts a new
option ``INCLUDE_MODULES`` that adds its arguments to the ``--module-path``
argument to the Java compiler. This allows building JAR files that use JPMS
modules in their build.
* The :command:`file(CREATE_LINK)` command's ``COPY_ON_ERROR`` option,
when used with a directory, now copies directory content.
See policy :policy:`CMP0205`.
* When :prop_tgt:`VERIFY_INTERFACE_HEADER_SETS` is set to true on an executable
target, that target's interface file sets are verified regardless of its
:prop_tgt:`ENABLE_EXPORTS` property. See policy :policy:`CMP0209`.
* The :variable:`CMAKE_VERIFY_PRIVATE_HEADER_SETS` variable and corresponding
:prop_tgt:`VERIFY_PRIVATE_HEADER_SETS` target property were added to
enable build rules that verify all headers in private file sets can be used
on their own.
* The :prop_tgt:`PRIVATE_HEADER_SETS_TO_VERIFY` target property was added to
customize which private file sets to verify when the target's
:prop_tgt:`VERIFY_PRIVATE_HEADER_SETS` property is true.
* The :command:`file(GET_RUNTIME_DEPENDENCIES)`
and :command:`install(RUNTIME_DEPENDENCY_SET)` commands now normalize
paths before matching filters. See policy :policy:`CMP0207`.
* The precompiled Linux ``aarch64`` binaries provided on
`cmake.org <https://cmake.org/download/>`_ now require GLIBC 2.28 or higher.
* The precompiled macOS binary provided on ``cmake.org`` for macOS 10.13+
now requires macOS 12 or newer for the :manual:`cmake-gui(1)` application.
The command-line tools still run on macOS 10.13.
* The precompiled Windows binaries provided on
`cmake.org <https://cmake.org/download/>`_ now require Windows 10 or higher.