Browse Source

Merge topic 'TRANSITIVE_LINK_PROPERTIES_isnt_usage' into release-3.30

2fc9e482a9 Evaluation of TRANSITIVE_LINK_PROPERTIES isn't considered a usage

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !9643
Kyle Edwards 1 year ago
parent
commit
b9e2f6828f

+ 1 - 0
Source/cmGeneratorTarget.h

@@ -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(

+ 4 - 1
Source/cmGeneratorTarget_Link.cxx

@@ -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;

+ 2 - 1
Source/cmGeneratorTarget_TransitiveProperty.cxx

@@ -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;
   }
   }

+ 1 - 0
Source/cmLinkItem.h

@@ -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;

+ 5 - 1
Tests/ExportImport/Export/CMakeLists.txt

@@ -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_

+ 4 - 0
Tests/RunCMake/install/EXPORT-InterfaceLinkNoexist.cmake

@@ -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)

+ 1 - 0
Tests/RunCMake/install/RunCMakeTest.cmake

@@ -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)