Browse Source

Merge topic 'revert-link-dedup-imported-targets' into release-3.31

262c277197 Revert "Ensure imported targets in sibling dirs are deduplicated"
645b57b8cd Tests/RunCMake/CMP0156: Match expected results more precisely

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !9909
Brad King 1 year ago
parent
commit
67aef2b2c5

+ 2 - 33
Source/cmComputeLinkDepends.cxx

@@ -33,7 +33,6 @@
 #include "cmState.h"
 #include "cmStateTypes.h"
 #include "cmStringAlgorithms.h"
-#include "cmSystemTools.h"
 #include "cmTarget.h"
 #include "cmValue.h"
 #include "cmake.h"
@@ -477,7 +476,6 @@ public:
           this->Target->GetPolicyStatusCMP0179() == cmPolicies::NEW) {
         // keep the first occurrence of the static libraries
         std::set<size_t> emitted{ this->Emitted };
-        std::set<std::string> importedEmitted;
         for (auto index : libEntries) {
           LinkEntry const& entry = this->Entries[index];
           if (!entry.Target ||
@@ -485,20 +483,7 @@ public:
             entries.emplace_back(index);
             continue;
           }
-          if (this->IncludeEntry(entry)) {
-            entries.emplace_back(index);
-            continue;
-          }
-          if (entry.Target->IsImported()) {
-            if (emitted.insert(index).second &&
-                importedEmitted
-                  .insert(cmSystemTools::GetRealPath(entry.Item.Value))
-                  .second) {
-              entries.emplace_back(index);
-            }
-            continue;
-          }
-          if (emitted.insert(index).second) {
+          if (this->IncludeEntry(entry) || emitted.insert(index).second) {
             entries.emplace_back(index);
           }
         }
@@ -604,22 +589,7 @@ private:
   {
     for (auto index : libEntries) {
       LinkEntry const& entry = this->Entries[index];
-      if (this->IncludeEntry(entry)) {
-        this->FinalEntries.emplace_back(entry);
-        continue;
-      }
-      if (entry.Target && entry.Target->IsImported()) {
-        // Different imported targets can point to the same library so check
-        // also library paths
-        if (this->Emitted.insert(index).second &&
-            this->ImportedEmitted
-              .insert(cmSystemTools::GetRealPath(entry.Item.Value))
-              .second) {
-          this->FinalEntries.emplace_back(entry);
-        }
-        continue;
-      }
-      if (this->Emitted.insert(index).second) {
+      if (this->IncludeEntry(entry) || this->Emitted.insert(index).second) {
         this->FinalEntries.emplace_back(entry);
       }
     }
@@ -632,7 +602,6 @@ private:
   EntryVector& Entries;
   EntryVector& FinalEntries;
   std::set<size_t> Emitted;
-  std::set<std::string> ImportedEmitted;
   const std::map<size_t, std::vector<size_t>>* Groups = nullptr;
 };
 }

+ 1 - 0
Tests/RunCMake/CMP0156/CMP0156-NEW-AppleClang-Imported-build-result.txt

@@ -0,0 +1 @@
+[^0]

+ 3 - 0
Tests/RunCMake/CMP0156/CMP0156-NEW-AppleClang-Imported-build-stdout.txt

@@ -0,0 +1,3 @@
+ld: warning: ignoring duplicate libraries: '[^']*liblib1\.a'
+ld: fatal warning\(s\) induced error \(-fatal_warnings\)
+(cc|clang): error: linker command failed with exit code 1 \(use -v to see invocation\)

+ 1 - 1
Tests/RunCMake/CMP0156/CMP0156-OLD-AppleClang-build-result.txt

@@ -1 +1 @@
-.+
+[^0]

+ 1 - 1
Tests/RunCMake/CMP0156/CMP0156-OLD-AppleClang-build-stdout.txt

@@ -1,3 +1,3 @@
-ld: warning: ignoring duplicate libraries: '.*liblib1.a', '.*liblib2.a'
+ld: warning: ignoring duplicate libraries: '[^']*liblib1\.a', '[^']*liblib2\.a'
 ld: fatal warning\(s\) induced error \(-fatal_warnings\)
 (cc|clang): error: linker command failed with exit code 1 \(use -v to see invocation\)

+ 1 - 1
Tests/RunCMake/CMP0156/RunCMakeTest.cmake

@@ -34,6 +34,6 @@ run_cmake_and_build(CMP0156-NEW-Imported)
 
 if (CMAKE_C_COMPILER_ID STREQUAL "AppleClang"
     AND CMAKE_C_COMPILER_VERSION GREATER_EQUAL "15.0")
-  # special case for Apple: with CMP0156=OLD, linker will warning on duplicate libraries
+  # special case for Apple: FIXME(#26284): linker will warning on duplicate libraries
   run_cmake_and_build(CMP0156-NEW-AppleClang-Imported)
 endif()