1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-16 05:26:58 +08:00

Evaluation of TRANSITIVE_LINK_PROPERTIES isn't considered a usage

Fixes #26108
This commit is contained in:
Robert Maynard
2024-07-05 09:24:02 -04:00
parent c7232c3a2a
commit 2fc9e482a9
7 changed files with 18 additions and 3 deletions

View File

@@ -264,6 +264,7 @@ public:
{ {
Compile, // Usage requirements for compiling. Excludes $<LINK_ONLY>. Compile, // Usage requirements for compiling. Excludes $<LINK_ONLY>.
Link, // Usage requirements for linking. Includes $<LINK_ONLY>. Link, // Usage requirements for linking. Includes $<LINK_ONLY>.
LinkInterfaceEval,
}; };
cmLinkInterfaceLibraries const* GetLinkInterfaceLibraries( cmLinkInterfaceLibraries const* GetLinkInterfaceLibraries(

View File

@@ -392,7 +392,7 @@ void cmGeneratorTarget::CheckLinkLibraries() const
// should be a subset of LinkInterfaceMap (with LINK_ONLY left out). // should be a subset of LinkInterfaceMap (with LINK_ONLY left out).
for (auto const& hmp : this->LinkInterfaceMap) { for (auto const& hmp : this->LinkInterfaceMap) {
for (auto const& hmi : hmp.second) { for (auto const& hmi : hmp.second) {
if (!hmi.second.LibrariesDone) { if (!hmi.second.LibrariesDone || hmi.second.LinkOnlyEval) {
continue; continue;
} }
for (cmLinkItem const& item : hmi.second.Libraries) { for (cmLinkItem const& item : hmi.second.Libraries) {
@@ -642,6 +642,7 @@ cmLinkInterface const* cmGeneratorTarget::GetLinkInterface(
if (secondPass) { if (secondPass) {
iface = cmOptionalLinkInterface(); iface = cmOptionalLinkInterface();
} }
iface.LinkOnlyEval = false;
if (!iface.LibrariesDone) { if (!iface.LibrariesDone) {
iface.LibrariesDone = true; iface.LibrariesDone = true;
this->ComputeLinkInterfaceLibraries(config, iface, head, UseTo::Link); this->ComputeLinkInterfaceLibraries(config, iface, head, UseTo::Link);
@@ -765,6 +766,7 @@ const cmLinkInterfaceLibraries* cmGeneratorTarget::GetLinkInterfaceLibraries(
} }
cmOptionalLinkInterface& iface = hm[head]; cmOptionalLinkInterface& iface = hm[head];
iface.LinkOnlyEval = (usage == UseTo::LinkInterfaceEval);
if (!iface.LibrariesDone) { if (!iface.LibrariesDone) {
iface.LibrariesDone = true; iface.LibrariesDone = true;
this->ComputeLinkInterfaceLibraries(config, iface, head, usage); this->ComputeLinkInterfaceLibraries(config, iface, head, usage);
@@ -1034,6 +1036,7 @@ const cmLinkInterface* cmGeneratorTarget::GetImportLinkInterface(
if (secondPass) { if (secondPass) {
iface = cmOptionalLinkInterface(); iface = cmOptionalLinkInterface();
} }
iface.LinkOnlyEval = (usage == UseTo::LinkInterfaceEval);
if (!iface.AllDone) { if (!iface.AllDone) {
iface.AllDone = true; iface.AllDone = true;
iface.LibrariesDone = true; iface.LibrariesDone = true;

View File

@@ -286,7 +286,8 @@ cmGeneratorTarget::GetCustomTransitiveProperties(std::string const& config,
} }
} }
}; };
addTransitiveProperties("TRANSITIVE_LINK_PROPERTIES", UseTo::Link); addTransitiveProperties("TRANSITIVE_LINK_PROPERTIES",
UseTo::LinkInterfaceEval);
addTransitiveProperties("TRANSITIVE_COMPILE_PROPERTIES", UseTo::Compile); addTransitiveProperties("TRANSITIVE_COMPILE_PROPERTIES", UseTo::Compile);
i = ctpm.emplace(config, std::move(ctp)).first; i = ctpm.emplace(config, std::move(ctp)).first;
} }

View File

@@ -120,6 +120,7 @@ struct cmLinkInterface : public cmLinkInterfaceLibraries
struct cmOptionalLinkInterface : public cmLinkInterface struct cmOptionalLinkInterface : public cmLinkInterface
{ {
bool LinkOnlyEval = false;
bool LibrariesDone = false; bool LibrariesDone = false;
bool AllDone = false; bool AllDone = false;
bool Exists = false; bool Exists = false;

View File

@@ -29,6 +29,9 @@ add_library(compileOnly INTERFACE)
target_compile_definitions(compileOnly INTERFACE FROM_compileOnly) target_compile_definitions(compileOnly INTERFACE FROM_compileOnly)
target_link_options(compileOnly INTERFACE -fthis-flag-does-not-exist) target_link_options(compileOnly INTERFACE -fthis-flag-does-not-exist)
add_library(noUses INTERFACE)
target_link_libraries(noUses INTERFACE this::target_does_not_exist)
add_library(testLib1 STATIC testLib1.c) add_library(testLib1 STATIC testLib1.c)
add_library(testLib2 STATIC testLib2.c) add_library(testLib2 STATIC testLib2.c)
target_link_libraries(testLib2 testLib1) target_link_libraries(testLib2 testLib1)
@@ -601,6 +604,7 @@ install(FILES
install( install(
TARGETS TARGETS
compileOnly compileOnly
noUses
testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3 testExe4 testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3 testExe4
testExe2lib testLib4lib testLib4libdbg testLib4libopt testExe2lib testLib4lib testLib4libdbg testLib4libopt
testLib6 testLib7 testLib8 testLib6 testLib7 testLib8
@@ -676,7 +680,7 @@ export(TARGETS testExe1 testLib1 testLib2 testLib3
testSharedLibDepends renamed_on_export testSharedLibDepends renamed_on_export
cmp0022NEW cmp0022OLD cmp0022NEW cmp0022OLD
TopDirLib SubDirLinkA TopDirLib SubDirLinkA
systemlib systemlib noUses
testInterfaceIncludeUser testInterfaceIncludeUser
testInterfaceIncludeUser2 testInterfaceIncludeUser2
NAMESPACE bld_ NAMESPACE bld_

View File

@@ -0,0 +1,4 @@
add_library(foo INTERFACE)
target_link_libraries(foo INTERFACE nonexistent::bar)
install(TARGETS foo DESTINATION lib EXPORT foo-targets)
install(EXPORT foo-targets FILE foo-targets.cmake DESTINATION lib)

View File

@@ -85,6 +85,7 @@ run_cmake(EXPORT-UnknownExport)
run_cmake(EXPORT-NamelinkOnly) run_cmake(EXPORT-NamelinkOnly)
run_cmake(EXPORT-SeparateNamelink) run_cmake(EXPORT-SeparateNamelink)
run_cmake(EXPORT-TargetTwice) run_cmake(EXPORT-TargetTwice)
run_cmake(EXPORT-InterfaceLinkNoexist)
run_cmake(CMP0062-OLD) run_cmake(CMP0062-OLD)
run_cmake(CMP0062-NEW) run_cmake(CMP0062-NEW)
run_cmake(CMP0062-WARN) run_cmake(CMP0062-WARN)