115425e68c Configure CMake itself with policies through CMake 3.29
ed376e470e export: Increase maximum policy version in exported files to 3.29
4394464501 Add deprecation warnings for policies CMP0129 and below
2eb4382d6b Tests: Modernize RunCMake.CMP0129 test conventions and conditions
Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !9585
The files generated by `install(EXPORT)`, `export()`, and
`install_jar_exports()` commands are known to work with policies
as of CMake 3.29, so enable them in sufficiently new CMake versions.
The OLD behaviors of all policies are deprecated, but only by
documentation. Add an explicit deprecation diagnostic for policies
introduced in CMake 3.23 and below to encourage projects to port
away from setting policies to OLD.
Set the close-on-exec flag to prevent the jobserver FIFO file
descriptor from leaking to subprocesses spawned by `ctest`.
This leak is usually harmless, but can cause `make test -jN` to hang
at the end of the build if a test leaves a background process running
with the jobserver FIFO file descriptor open.
Fixes: #26027
Exporting targets having large FILE_SETs with install(EXPORT) or export(EXPORT)
currently performs poorly on Windows compared to Unix-like systems,
because cmFileSet::EvaluateDirectoryEntries calls SystemTools::SameFile on every
pair of parent directories in the file set. SystemTools::SameFile opens and closes
two read-only filesystem handles. This causes a significant performance drop
on Windows for FILE_SETs with even a couple of dozens of files.
Use the recently added SystemTools::GetFileId function in kwsys
(https://gitlab.kitware.com/utils/kwsys/-/merge_requests/298) instead of SameFile
to cache the identity of a directory in cmFileSet::EvaluateDirectoryEntries.
This means only one filesystem handle is needed per distinct directory path,
instead of two per (even if they're equal) directory pair.
This makes a difference when projects compare things like
CMAKE_SOURCE_DIR with CMAKE_CURRENT_SOURCE_DIR and the source
directory has a trailing slash in the GUI. The command line cmake invocation
cleans the paths at the beginning, so such comparisons return true. But the
GUI currently passes the paths unmodified, so such comparisons return false.
Change the logic to sanitize the paths used through the GUI in the same way
that the command line invocation does.
Fixes: #21421
Projects may be generating a list of files or directories to pass as arguments
to file(TOUCH), file(TOUCH_NOCREATE), or file(MAKE_DIRECTORY). Those
lists might end up being empty, so rather than requiring at least one item,
allow an empty list.
Fixes: #24897
MSVC 14.38+ toolsets deprecate `stdext::checked_array_iterator`.
Support building with versions of Qt that have not been updated
to avoid the deprecated API.
Qt-Issue: https://bugreports.qt.io/browse/QTBUG-118993