CMake 4.1.0-rc1 is ready for testing

I am proud to announce the first CMake 4.1 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v4.1
Release notes appear below and are also published at
https://cmake.org/cmake/help/v4.1/release/4.1.html
Release milestone is available at:
release milestone
Some of the most significant changes in CMake 4.1 are:
-
The “cmake-configure-log(7)” now reports events from
“find_package()” (in “CONFIG” mode), “find_path()”, “find_file()”,
“find_library()”, and “find_program()” commands when first invoked,
when their results transition between “not found” and “found”, or
when enabled explicitly by the “–debug-find” command-line option. -
The “cmake_pkg_config()” command now supports the “IMPORT” and
“POPULATE” subcommands for interfacing CMake targets with pkg-config
based dependencies. -
The “CMAKE_FIND_REQUIRED” variable was added to tell
“find_package()”, “find_path()”, “find_file()”, “find_library()”,
and “find_program()” to be “REQUIRED” by default. The commands also
gained an “OPTIONAL” keyword to ignore the variable for a specific
call. -
The “FindBLAS” and “FindLAPACK” modules now support the NVIDIA
Performance Libraries (NVPL). -
The “string(REGEX MATCHALL)”, “string(REGEX REPLACE)”, and
“list(TRANSFORM REPLACE)” commands now match the regular expression
“^” anchor at most once in repeated searches, at the start of the
input. See policy “CMP0186”. -
The “TARGET_PROPERTY” generator expression now evaluates the
“LINK_LIBRARIES” and “INTERFACE_LINK_LIBRARIES” target properties
transitively. See policy “CMP0189”.
CMake 4.1 Release Notes *********************** Changes made since CMake 4.0 include the following. New Features ============ File-Based API -------------- * The "cmake-file-api(7)" v1 now writes partial replies when buildsystem generation fails with an error. See the v1 Reply Error Index. Generators ---------- * Makefile Generators and Ninja Generators gained support for adding a linker launcher with "Fortran", "CUDA", and "HIP". See the "CMAKE_<LANG>_LINKER_LAUNCHER" variable and "<LANG>_LINKER_LAUNCHER" target property for details. Command-Line ------------ * The cmake --build command-line tool, when used with the "Xcode" generator, now detects when a third-party tool has wrapped the generated ".xcodeproj" in a ".xcworkspace", and drives the build through the workspace instead. Configure Log ------------- * The "cmake-configure-log(7)" now reports events from "find_package()" (in "CONFIG" mode), "find_path()", "find_file()", "find_library()", and "find_program()" commands when first invoked, when their results transition between "not found" and "found", or when enabled explicitly by the "--debug-find" command-line option. See Event Kind find and Event Kind find_package. Logging may also be controlled by the "CMAKE_FIND_DEBUG_MODE" and "CMAKE_FIND_DEBUG_MODE_NO_IMPLICIT_CONFIGURE_LOG" variables. Compilers --------- * Diab compilers from Wind River Systems, versions 5.9.x+, are now supported with "compiler id" "Diab" for languages "ASM", "C", and "CXX". Commands -------- * The "add_dependencies()" command may be called with no dependencies. * The "cmake_pkg_config()" command now supports the "IMPORT" and "POPULATE" subcommands for interfacing CMake targets with pkg-config based dependencies. * The "install(DIRECTORY)" command gained a new "EXCLUDE_EMPTY_DIRECTORIES" option to skip installation of empty directories. * The "project()" command now has experimental support for the "COMPAT_VERSION" keyword, gated by "CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_INFO". Variables --------- * The "CMAKE_FIND_REQUIRED" variable was added to tell "find_package()", "find_path()", "find_file()", "find_library()", and "find_program()" to be "REQUIRED" by default. The commands also gained an "OPTIONAL" keyword to ignore the variable for a specific call. * The "CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID" variable is now populated for most compilers, and documented for public use. * The "CMAKE_<LANG>_ICSTAT" variable and corresponding "<LANG>_ICSTAT" target property were added to tell the Makefile Generators and the Ninja Generators to run the IAR "icstat" tool along with the compiler for "C" and "CXX" languages. Environment Variables --------------------- * The "CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES_EXCLUDE" environment variable was added to optionally exclude specific libraries from the detected set of "CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES". Properties ---------- * The "AUTOMOC_INCLUDE_DIRECTORIES" target property and associated "CMAKE_AUTOMOC_INCLUDE_DIRECTORIES" variable were added to override the automatic discovery of moc includes from a target's transitive include directories. * The "MACOSX_PACKAGE_LOCATION" source file property now works when set on a source directory, and copies its entire tree into the bundle. * The "PDB_NAME" and "COMPILE_PDB_NAME" target properties now support "generator expressions". Modules ------- * The "FindASPELL" module now provides a version variable, imported targets, and components to optionally select the Aspell library and executable separately. * The "FindBLAS" and "FindLAPACK" modules now support the NVIDIA Performance Libraries (NVPL). * The "FindProtobuf" module's "protobuf_generate(DEPENDENCIES)" command argument now accepts multiple values. * The "FindProtobuf" module's "protobuf_generate_cpp()" and "protobuf_generate_python()" commands, together with their "Protobuf_IMPORT_DIRS" and "PROTOBUF_GENERATE_CPP_APPEND_PATH" hint variables, are now deprecated in favor of the "protobuf_generate()" command. Regular Expressions ------------------- * The "string(REGEX MATCHALL)", "string(REGEX REPLACE)", and "list(TRANSFORM REPLACE)" commands now match the regular expression "^" anchor at most once in repeated searches, at the start of the input. See policy "CMP0186". * The "string(REGEX REPLACE)" command now allows references to unmatched groups. They are replaced with empty strings. * The "string(REGEX MATCH)", "string(REGEX MATCHALL)", and "string(REGEX REPLACE)" commands now allow zero-length matches. CTest ----- * "ctest(1)" gained a "--schedule-random-seed" option to specify a numeric random seed to make "ctest --schedule-random" deterministic for reproduction. CPack ----- * The "CPack NuGet Generator" gained option "CPACK_NUGET_SYMBOL_PACKAGE" to generate NuGet symbol packages containing PDB files. * The "CPack RPM Generator" gained "CPACK_RPM_PACKAGE_ENHANCES", "CPACK_RPM_PACKAGE_RECOMMENDS", and "CPACK_RPM_PACKAGE_SUPPLEMENTS" variables to specify the corresponding RPM spec fields. Deprecated and Removed Features =============================== * The "FindGTest" module's result variables "GTEST_INCLUDE_DIRS", "GTEST_LIBRARIES", "GTEST_MAIN_LIBRARIES", and "GTEST_BOTH_LIBRARIES" are now deprecated in favor of using "GTest::gtest" and "GTest::gtest_main" imported targets. * The "FindGCCXML" module has been deprecated via policy "CMP0188". Port projects to CastXML instead. * The "FindCABLE" module has been deprecated via policy "CMP0191". * The "CMakeDetermineVSServicePack" module has been deprecated via policy "CMP0196". Port projects to the "CMAKE_<LANG>_COMPILER_VERSION" variable instead. Other Changes ============= * The "ExternalProject" module no longer checks the "URL" archive file extension. Any archive type that "cmake -E tar" can extract is now allowed. * Modules "FindPython3", "FindPython2" and "FindPython" now enforce consistency of artifacts in cross-compiling mode. This prevents mixing host and target artifacts. See policy "CMP0190". * The "GNUInstallDirs" module now prefers to default "SYSCONFDIR", "LOCALSTATEDIR", and "RUNSTATEDIR" to absolute paths when installing to special prefixes. See policy "CMP0192". * The "GNUInstallDirs" module now caches "CMAKE_INSTALL_*" variables with their leading "usr/" for install prefix "/". See policy "CMP0193". * The "install(TARGETS)" command no longer ignores file sets which haven't been defined at the point it is called. The ordering of "target_sources(FILE_SET)" and "install(TARGETS)" is no longer semantically relevant. * Enabling "ASM" no longer accidentally succeeds using "MSVC"'s "cl" C compiler as an assembler. See policy "CMP0194". * The MSVC link "-machine:" flag is no longer added to the "CMAKE_*_LINKER_FLAGS" variables. See policy "CMP0197". * The "TARGET_PROPERTY" generator expression now evaluates the "LINK_LIBRARIES" and "INTERFACE_LINK_LIBRARIES" target properties transitively. See policy "CMP0189".