Commit Graph
37749 Commits
Author SHA1 Message Date
Brad King 415881a36a Merge topic 'ctest-launch-stdin' into release-4.1
0cc24534d7 ctest --launch: Restore sharing of stdin with child process

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11709
2026-02-19 10:30:46 -05:00
Brad King 0cc24534d7 ctest --launch: Restore sharing of stdin with child process
This was broken by commit 96b3dd329e (cmCTestLaunchReporter: Replace
cmsysProcess with cmUVProcessChain, 2023-07-26, v3.28.0-rc1~138^2~2).
KWSys Process shares stdin by default.  Now it must be explicit.

Issue: #27610
2026-02-18 19:50:07 -05:00
Brad King cc05acf0a1 CMake 4.1.5 2026-01-27 10:11:40 -05:00
Brad King cd51ca47cb CMake 3.31.11 2026-01-26 13:45:51 -05:00
Brad King bad6ed00e5 Merge topic 'backport-4.0-fileapi-instrumentation-initial-cache' into release-4.1
bb23f65928 instrumentation: Fix crash on cmake_instrumentation() call in initial cache
8523e579dc Merge branch 'backport-3.31-fileapi-initial-cache'
4d712cfc25 fileapi: Fix crash on cmake_file_api() call in initial cache

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11598
2026-01-16 09:31:27 -05:00
Martin Duffy bb23f65928 instrumentation: Fix crash on cmake_instrumentation() call in initial cache 2026-01-15 15:13:34 -05:00
Brad King 8523e579dc Merge branch 'backport-3.31-fileapi-initial-cache' 2026-01-15 15:13:13 -05:00
Martin Duffy 4d712cfc25 fileapi: Fix crash on cmake_file_api() call in initial cache 2026-01-15 14:51:57 -05:00
Brad King 8039d1ffba Merge topic 'backport-sarif-path-encoding' into release-4.1
2eef2baf93 cmake: Fix SARIF diagnostics output path encoding on Windows

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11538
2025-12-20 09:28:36 -05:00
Brad King 2eef2baf93 cmake: Fix SARIF diagnostics output path encoding on Windows
Avoid using `filesystem::path` to hold the output path.  It performs
encoding conversions that violate our internal UTF-8 encoding.

Fixes: #27471
Issue: #27472
2025-12-19 14:33:42 -05:00
Brad King 91b9db90e5 VS: Restore subsystem link flag for DLLs
In commit 99d09ec45a (VS: Suppress MSBuild default link flags not
specified by project or user, 2025-06-17, v4.1.0-rc1~6^2) we removed our
default `-subsystem:...` link flag from `SHARED` and `MODULE` libraries
in Visual Studio generators for consistency with command-line generators.
However, unlike other flag suppressions for #27004, this change did not
just suppress MSBuild defaults, but actually changed flags the generator
was previously adding itself.

For the linker subsystem flag, consistency across generators should
perhaps achieved by adding the flag in other generators instead of
removing it from Visual Studio generators.  Restore the previous
behavior pending further investigation.

Issue: #27466
Fixes: #27464
2025-12-17 17:41:17 -05:00
Brad King 9c0cb30f06 Merge topic 'backport-linux32-system-libarchive' into release-4.1
cea7f7fc32 Linux: Do not force 64-bit `time_t` on 32-bit archs with system libarchive
16cc3e25d4 Utilities: Select bundled or external dependencies very early

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11505
2025-12-12 09:41:35 -05:00
Brad King 16cc3e25d4 Utilities: Select bundled or external dependencies very early 2025-12-11 14:40:16 -05:00
Brad King c55dfbf656 StdIo: Restore compilation on 32-bit MinGW
In commit e419429616 (StdIo: Restore Windows Console I/O modes on
Ctrl-C, 2025-11-26, v4.1.4~4^2) we relied on the compiler to generate a
lambda with an `operator()` for each calling convention.  MSVC does
this, but the GNU compiler for MinGW does not seem to.
2025-12-11 10:52:18 -05:00
Brad King 892fad3d23 CMake 4.1.4 2025-12-08 11:30:41 -05:00
Brad King 8c332a3c7f VS: Restore support for VS 2019 with toolset v142 versions before 14.29
Since commit 7db3dbddb2 (VS: Suppress MSBuild default flags not
specified by project or user, 2025-06-02, v4.1.0-rc1~69^2) we suppress
the `-Zc:inline` default flag when the project/user does not specify it.
That triggers an apparent bug in VS 2019 with v142 toolset versions
before 14.29 in which MSBuild fails when both `-Zc:inline` and `-nologo`
are suppressed.  This happens when `CMAKE_VERBOSE_MAKEFILE` is enabled,
such as in `try_compile` projects like our builtin compiler inspection.

Since `-nologo` is incidental, avoid suppressing it if `-Zc:inline` is
also suppressed.  Limit this workaround to relevant toolset versions.

Fixes: #27439
2025-12-05 12:47:53 -05:00
Brad King 121234b968 Merge topic 'fix-cps-export-definitions' into release-4.1
b2ca9fba8b CPS: Fix exporting definitions in CMake 4.1

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11469
2025-12-01 13:59:36 -05:00
Matthew Woehlke b2ca9fba8b CPS: Fix exporting definitions in CMake 4.1
Backport commit 37b15eda3b (CPS: Fix exporting definitions, 2025-11-21)
to CMake 4.1.

Export compile definitions to CPS using the correct attribute name.

Fixes: #27403
2025-12-01 12:15:51 -05:00
Brad King e419429616 StdIo: Restore Windows Console I/O modes on Ctrl-C
Extend commit fb3e7825f3 (StdIo: Restore Windows Console I/O modes on
exit, 2025-05-23, v4.1.0-rc1~114^2) to cover termination by Ctrl-C.

Fixes: #27427
2025-11-26 15:18:03 -05:00
Brad King 37171d9db0 Source: Improve detection of Linux architectures requiring explicit libatomic
Extend commit fa3c4b6dbf (Source: Link libatomic when needed on any
Linux architecture, 2023-08-24, v3.27.5~9^2) to decide based on the
architecture targeted by the compiler, known since CMake 4.1.
Use `CMAKE_SYSTEM_PROCESSOR` only as a fallback for older versions.

Fixes: #27406
2025-11-24 11:29:15 -05:00
Brad King 5961f5f3bc CMake 4.1.3 2025-11-18 09:55:48 -05:00
Brad King 5517be2bf1 CMake 4.0.5 2025-11-18 09:16:12 -05:00
Brad King ca626022f5 CMake 3.31.10 2025-11-17 14:28:31 -05:00
Brad King 39ccffa076 Merge topic 'process-timeout-terminate' into release-4.1
3dc641d99c Merge branch 'backport-3.31-process-timeout-terminate'
22e84c7e7f execute_process: Restore termination of processes on timeout
e2cfc61e5e execute_process: Restore termination of processes on timeout (3.31)

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11408
2025-11-12 10:53:09 -05:00
Brad King 22e84c7e7f execute_process: Restore termination of processes on timeout
Since commit 5420639a8d (cmExecuteProcessCommand: Replace cmsysProcess
with cmUVProcessChain, 2023-06-01, v3.28.0-rc1~138^2~8) we have not
actually terminated child processes on an `execute_process` timeout.
Similarly for other migrations from cmsysProcess to cmUVProcessChain.

Teach cmUVProcessChain clients that implement timeouts to actually
terminate remaining child processes when the timeout is reached.

Fixes: #27378
2025-11-11 09:10:29 -05:00
Brad King e2cfc61e5e execute_process: Restore termination of processes on timeout
Since commit 5420639a8d (cmExecuteProcessCommand: Replace cmsysProcess
with cmUVProcessChain, 2023-06-01, v3.28.0-rc1~138^2~8) we have not
actually terminated child processes on an `execute_process` timeout.
Similarly for other migrations from cmsysProcess to cmUVProcessChain.

Teach cmUVProcessChain clients that implement timeouts to actually
terminate remaining child processes when the timeout is reached.

Fixes: #27378
2025-11-11 09:06:49 -05:00
Brad King d11dceee4f Merge topic 'process-timeout-short' into release-4.1
6ec2c51f0c execute_process: Restore support for short timeouts

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11399
2025-11-10 09:07:39 -05:00
Brad King 1ec4e64227 Merge topic 'process-timeout-short' into release-4.0
6ec2c51f0c execute_process: Restore support for short timeouts

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11399
2025-11-10 09:06:55 -05:00
Brad King 6ec2c51f0c execute_process: Restore support for short timeouts
Since commit 5420639a8d (cmExecuteProcessCommand: Replace cmsysProcess
with cmUVProcessChain, 2023-06-01, v3.28.0-rc1~138^2~8) we've
occasionally observed immediate timeouts on processes that take longer
than the timeout to start, even though we only start the timer after the
child processes start.  The problem is that:

* `uv_loop_init` initializes `uv_loop_t`'s cached "now" time.
* Starting processes takes time but does not update the "now" time.
* `uv_timer_start` computes expiry relative the cached "now" time,
  so short timers may be expired as soon as they are started.
* `uv_run` invokes expired timer callbacks before polling for I/O
  or process completion, so we "timeout" immediately.

Fix this by updating the cached "now" time via `uv_update_time` just
before starting timers.  This is needed only for timers that start
before the `uv_run` event loop.  Update our `uv_timer_ptr` wrapper
to make all callers consider the choice when calling `start()`.
2025-11-09 09:13:43 -05:00
Brad King 66095fd31d Merge topic 'improve-cps-project-error' into release-4.1
f2b7184b98 cmPackageInfoArguments: Improve error message

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11363
2025-10-28 09:17:37 -04:00
Matthew Woehlke 86e647ef2a CPS: Improve invalid namespace error
When CPS export fails due to a dependency on an improperly named
external target, reiterate the "canonical namespace" in the error
message for clarity.
2025-10-27 14:40:34 -04:00
Matthew Woehlke f2b7184b98 cmPackageInfoArguments: Improve error message
When given the name of a project that doesn't exist, report it as an
"unknown project" rather than an "invalid project". This is more
consistent with other, similar reporting.
2025-10-27 12:29:40 -04:00
Martin Duffy 6e637b1102 install(PACKAGE_INFO): Fix error when usage requirements contain certain genex
Since commit 13c7bb5b0c (cmGeneratorExpression: Update strip function to
collect parsed expressions, 2025-04-08, v4.1.0-rc1~361^2~1), the logic
to strip generator expressions would error if the stripped expressions
were being collected and an expression without a `:` was found inside an
expression with a `:`. This resulted in an error when exporting a target
that contained such a generator expression in its link libraries or
compile definitions.

Address the error by checking whether the latest `$<` proceeded the
latest `:`.
2025-10-17 11:34:43 -04:00
Brad King 58880d6773 Merge topic 'ninja-trailing-newline-comment' into release-4.1
12a225d56d Ninja: handle trailing newlines in variable stanzas

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11286
2025-10-07 08:58:51 -04:00
Ben Boeckel 12a225d56d Ninja: handle trailing newlines in variable stanzas
When a variable ends with a newline, the Ninja generator escapes it as
expected with `$\n`. However, when writing it out, whitespace is
trimmed. This leaves a trailing `$` instead which consumes the newline
and masks the following stanza. In a custom command, this hides the
`restat = 1` setting.

Detect this case and restore the newline as necessary.

See: #25983
2025-10-06 09:54:15 -04:00
Robert Maynard 87a661a916 find_package: Fix regression on <PackageName>_ROOT relative to CWD
In commit 9d44a77454 (find_*: Explicitly normalize found paths as they
exist on disk, 2024-10-17, v4.0.0-rc1~597^2~1), we removed path
normalization from the internal `cmSearchPath::AddPathInternal` helper.
Most call sites were updated to normalize input paths first, but search
paths derived from `<PackageName>_ROOT` CMake variables are no longer
normalized.  Instead we normalize the path to the file found after
searching.

When `find_package` "config" mode considers a candidate CMake package
configuration file, normalize its path before loading the adjacent
package version file so that the latter is loaded by absolute path.
Otherwise `cmMakefile::ReadDependentFile` interprets a relative path
with respect to the current source directory rather than the current
working directory.

Fixes: #27279
2025-10-02 15:30:13 -04:00
Brad King fc059e1978 Merge branch 'backport-pkg-root-var' into pkg-root-var 2025-10-02 15:28:03 -04:00
Robert Maynard ab0a44a0a0 find_package: Fix regression on <PackageName>_ROOT relative to CWD
In commit 9d44a77454 (find_*: Explicitly normalize found paths as they
exist on disk, 2024-10-17, v4.0.0-rc1~597^2~1), we removed path
normalization from the internal `cmSearchPath::AddPathInternal` helper.
Most call sites were updated to normalize input paths first, but search
paths derived from `<PackageName>_ROOT` CMake variables are no longer
normalized.  Instead we normalize the path to the file found after
searching.

When `find_package` "config" mode considers a candidate CMake package
configuration file, normalize its path before loading the adjacent
package version file so that the latter is loaded by absolute path.
Otherwise `cmMakefile::ReadDependentFile` interprets a relative path
with respect to the current source directory rather than the current
working directory.

Fixes: #27279
2025-10-02 15:24:47 -04:00
Brad King d029b828b2 find_package: Avoid repeating search for lower-case .cps file 2025-10-02 15:24:47 -04:00
Brad King 11f3f34077 CMake 4.1.2 2025-09-30 10:48:33 -04:00
Brad King e0bbe79cea CMP0189: Restore support for linking $<TARGET_PROPERTY:tgt,LINK_LIBRARIES>
In general we disallow references to transitive target properties, such
as `COMPILE_DEFINITIONS`, in `[INTERFACE_]LINK_LIBRARIES` properties,
because the latter establish the transitivity itself.  Prior to CMP0189,
the `[INTERFACE_]LINK_LIBRARIES` properties were not themselves transitive
in `$<TARGET_PROPERTY>` expressions, so existing projects have code like

    target_link_libraries(foo PRIVATE "$<TARGET_PROPERTY:tgt,LINK_LIBRARIES>")

Policy CMP0189's NEW behavior, introduced by commit b3da9c6d60 (GenEx:
Evaluate LINK_LIBRARIES target properties transitively, 2025-02-24,
v4.1.0-rc1~731^2), makes `$<TARGET_PROPERTY:tgt,LINK_LIBRARIES>`
transitive, causing the above to be rejected.  Since evaluation of a
target's link libraries can already encounter and handle other targets'
link libraries, allow it in this case.

Fixes: #27265
2025-09-29 10:51:01 -04:00
Brad King cb69f750bf cmGeneratorTarget: Factor out helper to detect LINK_LIBRARIES evaluation 2025-09-26 17:41:41 -04:00
Brad King 7ef733450c Merge topic 'bootstrap-devirtualization' into release-4.1
ea04e19daf bootstrap: Fix compilation with gcc 16 devirtualization

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11243
2025-09-25 09:00:39 -04:00
Brad King 21bc83344c Merge topic 'bootstrap-devirtualization' into release-4.0
ea04e19daf bootstrap: Fix compilation with gcc 16 devirtualization

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11243
2025-09-25 08:58:51 -04:00
Brad King ea04e19daf bootstrap: Fix compilation with gcc 16 devirtualization
Avoid including a header for a subclass whose implementation is not
compiled during bootstrap.

Fixes: #27256
2025-09-24 17:20:35 -04:00
Brad King 622044ce33 CMake 3.31.9 2025-09-24 13:24:34 -04:00
Brad King deb7b4b658 file(GENERATE): Record CMP0189 at each call site
Policy CMP0189, introduced by commit b3da9c6d60 (GenEx: Evaluate
LINK_LIBRARIES target properties transitively, 2025-02-24,
v4.1.0-rc1~731^2), takes effect at generation time, and so uses the
policy value as of the end of each directory.  However, some projects
may rely on `file(GENERATE)` with the policy's OLD behavior in order
to extract targets' *direct* dependencies from `LINK_LIBRARIES`.
Pending a first-class solution to that problem, make it easier for
projects to port to the policy's NEW behavior in general while
retaining the OLD behavior in an isolated context.

Fixes: #27220
2025-09-23 11:30:22 -04:00
Brad King 9b862e7013 cmGeneratorTarget: Pass genex evaluation context to IsTransitiveProperty 2025-09-23 10:57:22 -04:00
Brad King 77570a1ac1 GenEx: Consolidate target property evaluation context arguments 2025-09-21 20:20:03 -04:00
Brad King 1735b0d147 GenEx: Construct cmGeneratorExpressionDAGChecker with full evaluation context
Extend commit e8010b67c7 (cmGeneratorExpressionDAGChecker: Make local
generator available in constructor, 2024-04-25, v3.30.0-rc1~172^2~6) and
commit 633afa0b2e (cmGeneratorExpressionDAGChecker: Make config name
available in constructor, 2024-05-08, v3.30.0-rc1~82^2~2) to make the
full evaluation context available in the constructor.
2025-09-21 20:20:03 -04:00