浏览代码

Merge topic 'policy-cmp0111-iface' into release-3.19

54ef732b0c cmVisualStudio10TargetGenerator: Avoid GetFullPath on INTERFACE library
f06f4b517c cmTarget: Do not enforce CMP0111 on imported INTERFACE libraries
43c95df8fb Tests: Match RunCMake.CMP0111 stderr more strictly

Acked-by: Kitware Robot <[email protected]>
Merge-request: !5530
Brad King 5 年之前
父节点
当前提交
1f1d705154

+ 29 - 27
Source/cmTarget.cxx

@@ -2045,35 +2045,37 @@ std::string cmTarget::ImportedGetFullPath(
   }
 
   if (result.empty()) {
-    auto message = [&]() -> std::string {
-      std::string unset;
-      std::string configuration;
-
-      if (artifact == cmStateEnums::RuntimeBinaryArtifact) {
-        unset = "IMPORTED_LOCATION";
-      } else if (artifact == cmStateEnums::ImportLibraryArtifact) {
-        unset = "IMPORTED_IMPLIB";
-      }
-
-      if (!config.empty()) {
-        configuration = cmStrCat(" configuration \"", config, "\"");
-      }
+    if (this->GetType() != cmStateEnums::INTERFACE_LIBRARY) {
+      auto message = [&]() -> std::string {
+        std::string unset;
+        std::string configuration;
+
+        if (artifact == cmStateEnums::RuntimeBinaryArtifact) {
+          unset = "IMPORTED_LOCATION";
+        } else if (artifact == cmStateEnums::ImportLibraryArtifact) {
+          unset = "IMPORTED_IMPLIB";
+        }
 
-      return cmStrCat(unset, " not set for imported target \"",
-                      this->GetName(), "\"", configuration, ".");
-    };
+        if (!config.empty()) {
+          configuration = cmStrCat(" configuration \"", config, "\"");
+        }
 
-    switch (this->GetPolicyStatus(cmPolicies::CMP0111)) {
-      case cmPolicies::WARN:
-        impl->Makefile->IssueMessage(
-          MessageType::AUTHOR_WARNING,
-          cmPolicies::GetPolicyWarning(cmPolicies::CMP0111) + "\n" +
-            message());
-        CM_FALLTHROUGH;
-      case cmPolicies::OLD:
-        break;
-      default:
-        impl->Makefile->IssueMessage(MessageType::FATAL_ERROR, message());
+        return cmStrCat(unset, " not set for imported target \"",
+                        this->GetName(), "\"", configuration, ".");
+      };
+
+      switch (this->GetPolicyStatus(cmPolicies::CMP0111)) {
+        case cmPolicies::WARN:
+          impl->Makefile->IssueMessage(
+            MessageType::AUTHOR_WARNING,
+            cmPolicies::GetPolicyWarning(cmPolicies::CMP0111) + "\n" +
+              message());
+          CM_FALLTHROUGH;
+        case cmPolicies::OLD:
+          break;
+        default:
+          impl->Makefile->IssueMessage(MessageType::FATAL_ERROR, message());
+      }
     }
 
     result = cmStrCat(this->GetName(), "-NOTFOUND");

+ 2 - 1
Source/cmVisualStudio10TargetGenerator.cxx

@@ -3944,7 +3944,8 @@ void cmVisualStudio10TargetGenerator::AddLibraries(
       if (managedType != cmGeneratorTarget::ManagedType::Native &&
           this->GeneratorTarget->GetManagedType(config) !=
             cmGeneratorTarget::ManagedType::Native &&
-          l.Target->IsImported()) {
+          l.Target->IsImported() &&
+          l.Target->GetType() != cmStateEnums::INTERFACE_LIBRARY) {
         auto location = l.Target->GetFullPath(config);
         if (!location.empty()) {
           ConvertToWindowsSlash(location);

+ 3 - 2
Tests/RunCMake/CMP0111/CMP0111-Common.cmake

@@ -4,6 +4,7 @@ set(CMAKE_IMPORT_LIBRARY_SUFFIX "placeholder")
 add_library(unknown_lib UNKNOWN IMPORTED)
 add_library(static_lib STATIC IMPORTED)
 add_library(shared_lib SHARED IMPORTED)
+add_library(interface_lib INTERFACE IMPORTED)
 
-add_executable(executable main.cpp)
-target_link_libraries(executable unknown_lib static_lib shared_lib)
+add_library(module MODULE module.cpp)
+target_link_libraries(module unknown_lib static_lib shared_lib interface_lib)

+ 12 - 2
Tests/RunCMake/CMP0111/CMP0111-NEW-stderr.txt

@@ -1,7 +1,17 @@
+^CMake Error in CMakeLists.txt:
+  IMPORTED_LOCATION not set for imported target "unknown_lib"( configuration
+  "[^"]+")?.
++
 CMake Error in CMakeLists.txt:
   IMPORTED_LOCATION not set for imported target "static_lib"( configuration
-  ".+")?.
+  "[^"]+")?.
 +
 CMake Error in CMakeLists.txt:
   IMPORTED_IMPLIB not set for imported target "shared_lib"( configuration
-  ".+")?.
+  "[^"]+")?.(
++
+CMake Error in CMakeLists.txt:
+  IMPORTED_(LOCATION|IMPLIB) not set for imported target "(unknown|static|shared)_lib"( configuration
+  "[^"]+")?.)*
++
+CMake Generate step failed.  Build files cannot be regenerated correctly.$

+ 15 - 5
Tests/RunCMake/CMP0111/CMP0111-WARN-stderr.txt

@@ -1,11 +1,11 @@
-CMake Warning \(dev\) in CMakeLists.txt:
+^CMake Warning \(dev\) in CMakeLists.txt:
   Policy CMP0111 is not set: An imported target missing its location property
   fails during generation.  Run "cmake --help-policy CMP0111" for policy
   details.  Use the cmake_policy command to set the policy and suppress this
   warning.
 
   IMPORTED_LOCATION not set for imported target "unknown_lib"( configuration
-  ".+")?.
+  "[^"]+")?.
 This warning is for project developers.  Use -Wno-dev to suppress it.
 +
 CMake Warning \(dev\) in CMakeLists.txt:
@@ -15,7 +15,7 @@ CMake Warning \(dev\) in CMakeLists.txt:
   warning.
 
   IMPORTED_LOCATION not set for imported target "static_lib"( configuration
-  ".+")?.
+  "[^"]+")?.
 This warning is for project developers.  Use -Wno-dev to suppress it.
 +
 CMake Warning \(dev\) in CMakeLists.txt:
@@ -25,5 +25,15 @@ CMake Warning \(dev\) in CMakeLists.txt:
   warning.
 
   IMPORTED_IMPLIB not set for imported target "shared_lib"( configuration
-  ".+")?.
-This warning is for project developers.  Use -Wno-dev to suppress it.
+  "[^"]+")?.
+This warning is for project developers.  Use -Wno-dev to suppress it.(
++
+CMake Warning \(dev\) in CMakeLists.txt:
+  Policy CMP0111 is not set: An imported target missing its location property
+  fails during generation.  Run "cmake --help-policy CMP0111" for policy
+  details.  Use the cmake_policy command to set the policy and suppress this
+  warning.
+
+  IMPORTED_(LOCATION|IMPLIB) not set for imported target "(unknown|static|shared)_lib"( configuration
+  "[^"]+")?.
+This warning is for project developers.  Use -Wno-dev to suppress it.)*$

+ 0 - 3
Tests/RunCMake/CMP0111/main.cpp

@@ -1,3 +0,0 @@
-int main()
-{
-}

+ 4 - 0
Tests/RunCMake/CMP0111/module.cpp

@@ -0,0 +1,4 @@
+int module()
+{
+  return 0;
+}