mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-01 11:50:11 -05:00
deb7b4b658
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
66 lines
4.2 KiB
CMake
66 lines
4.2 KiB
CMake
set(out "${CMAKE_CURRENT_BINARY_DIR}/out-OLD-$<CONFIG>.txt")
|
|
file(GENERATE OUTPUT "${out}" CONTENT "# file(GENERATE) produced:
|
|
${in_LINK_LIBRARIES}
|
|
")
|
|
add_custom_target(check-CMP0189-OLD ALL VERBATIM
|
|
COMMAND ${CMAKE_COMMAND} -Dconfig=$<CONFIG> -Dout=${out} -P${CMAKE_CURRENT_SOURCE_DIR}/check-OLD.cmake
|
|
)
|
|
|
|
cmake_policy(SET CMP0189 NEW)
|
|
set(out "${CMAKE_CURRENT_BINARY_DIR}/out-NEW-$<CONFIG>.txt")
|
|
file(GENERATE OUTPUT "${out}" CONTENT "# file(GENERATE) produced:
|
|
${in_LINK_LIBRARIES}
|
|
")
|
|
add_custom_target(check-CMP0189-NEW ALL VERBATIM
|
|
COMMAND ${CMAKE_COMMAND} -Dconfig=$<CONFIG> -Dout=${out} -P${CMAKE_CURRENT_SOURCE_DIR}/check-NEW.cmake
|
|
COMMAND check-args
|
|
"$<TARGET_PROPERTY:iface1,LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface1,INTERFACE_LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface2,LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface2,INTERFACE_LINK_LIBRARIES>" "iface1"
|
|
"$<TARGET_PROPERTY:static1,LINK_LIBRARIES>" "iface2;iface1"
|
|
"$<TARGET_PROPERTY:static1,INTERFACE_LINK_LIBRARIES>" "iface2;iface1"
|
|
"$<TARGET_PROPERTY:CustomTransitiveProperties,LINK_LIBRARIES>" "static1;object1;iface2;iface1;iface2"
|
|
"$<TARGET_PROPERTY:CustomTransitiveProperties,INTERFACE_LINK_LIBRARIES>" ""
|
|
COMMAND check-args
|
|
"$<TARGET_PROPERTY:iface10,LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface10,INTERFACE_LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface11,LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface11,INTERFACE_LINK_LIBRARIES>" "iface10"
|
|
"$<TARGET_PROPERTY:static10,LINK_LIBRARIES>" "iface11;iface10"
|
|
# _/ \__
|
|
# / \
|
|
# "static10[iface11];iface11[iface10]"
|
|
"$<TARGET_PROPERTY:static10,INTERFACE_LINK_LIBRARIES>" "iface11;iface10"
|
|
"$<TARGET_PROPERTY:static11,LINK_LIBRARIES>" "static10;iface11;iface11;iface10"
|
|
# __/ __/ \__ \__________
|
|
# / / \ \
|
|
# "static11[static10;iface11];static10[iface11;iface11[iface10]]"
|
|
"$<TARGET_PROPERTY:static11,INTERFACE_LINK_LIBRARIES>" "static10;iface11;iface11;iface10"
|
|
"$<TARGET_PROPERTY:main10,LINK_LIBRARIES>" "static11;static10;static10;iface11;iface11;iface10"
|
|
# _______/ _______/ | | \______ \______________
|
|
# / / | | \ \
|
|
# "main10[static11;static10];static11[static10;iface11;static10[iface11;iface11[iface10]]]"
|
|
"$<TARGET_PROPERTY:main10,INTERFACE_LINK_LIBRARIES>" ""
|
|
COMMAND check-args
|
|
"$<TARGET_PROPERTY:iface20,LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface20,INTERFACE_LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface21,LINK_LIBRARIES>" ""
|
|
"$<TARGET_PROPERTY:iface21,INTERFACE_LINK_LIBRARIES>" "iface20"
|
|
"$<TARGET_PROPERTY:static20,LINK_LIBRARIES>" "iface21;iface20"
|
|
# _/ \__
|
|
# / \
|
|
# "static20[iface21];iface21[iface20]"
|
|
"$<TARGET_PROPERTY:static20,INTERFACE_LINK_LIBRARIES>" "iface21;iface20"
|
|
"$<TARGET_PROPERTY:static21,LINK_LIBRARIES>" "static20;iface21;iface21;iface20"
|
|
# __/ __/ \__ \__________
|
|
# / / \ \
|
|
# "static21[static20;iface21];static20[iface21;iface21[iface20]]"
|
|
"$<TARGET_PROPERTY:static21,INTERFACE_LINK_LIBRARIES>" "static20;iface21;iface21;iface20"
|
|
"$<TARGET_PROPERTY:main20,LINK_LIBRARIES>" "static21;static20;static20;iface21;iface21;iface20"
|
|
# _______/ _______/ | | \______ \______________
|
|
# / / | | \ \
|
|
# "main20[static21;static20];static21[static20;iface21;static20[iface21;iface21[iface20]]]"
|
|
"$<TARGET_PROPERTY:main20,INTERFACE_LINK_LIBRARIES>" ""
|
|
)
|