Browse Source

cmTargetPropCommandBase: check keywords after parsing

The following was disallowed:

   add_library(iface INTERFACE)
   target_link_libraries(iface PUBLIC)

just due to the mention of the `PUBLIC` keyword. Instead, only error if
there are actually `PUBLIC` dependencies specified (and analogously for
other restrictions).

Update tests to expect this new behavior.
Ben Boeckel 7 years ago
parent
commit
4babc9058a

+ 11 - 9
Source/cmTargetPropCommandBase.cxx

@@ -84,15 +84,6 @@ bool cmTargetPropCommandBase::ProcessContentArgs(
     this->SetError("called with invalid arguments");
     return false;
   }
-  if (this->Target->GetType() == cmStateEnums::INTERFACE_LIBRARY &&
-      scope != "INTERFACE") {
-    this->SetError("may only set INTERFACE properties on INTERFACE targets");
-    return false;
-  }
-  if (this->Target->IsImported() && scope != "INTERFACE") {
-    this->SetError("may only set INTERFACE properties on IMPORTED targets");
-    return false;
-  }
 
   ++argIndex;
 
@@ -105,6 +96,17 @@ bool cmTargetPropCommandBase::ProcessContentArgs(
     }
     content.push_back(args[i]);
   }
+  if (!content.empty()) {
+    if (this->Target->GetType() == cmStateEnums::INTERFACE_LIBRARY &&
+        scope != "INTERFACE") {
+      this->SetError("may only set INTERFACE properties on INTERFACE targets");
+      return false;
+    }
+    if (this->Target->IsImported() && scope != "INTERFACE") {
+      this->SetError("may only set INTERFACE properties on IMPORTED targets");
+      return false;
+    }
+  }
   return this->PopulateTargetProperies(scope, content, prepend, system);
 }
 

+ 0 - 1
Tests/RunCMake/target_compile_definitions/empty_keyword_args-result.txt

@@ -1 +0,0 @@
-1

+ 0 - 5
Tests/RunCMake/target_compile_definitions/empty_keyword_args-stderr.txt

@@ -1,5 +0,0 @@
-CMake Error at empty_keyword_args.cmake:2 \(target_compile_definitions\):
-  target_compile_definitions may only set INTERFACE properties on INTERFACE
-  targets
-Call Stack \(most recent call first\):
-  CMakeLists.txt:5 \(include\)

+ 0 - 1
Tests/RunCMake/target_compile_features/empty_keyword_args-result.txt

@@ -1 +0,0 @@
-1

+ 0 - 5
Tests/RunCMake/target_compile_features/empty_keyword_args-stderr.txt

@@ -1,5 +0,0 @@
-CMake Error at empty_keyword_args.cmake:2 \(target_compile_features\):
-  target_compile_features may only set INTERFACE properties on INTERFACE
-  targets
-Call Stack \(most recent call first\):
-  CMakeLists.txt:3 \(include\)

+ 0 - 1
Tests/RunCMake/target_compile_options/empty_keyword_args-result.txt

@@ -1 +0,0 @@
-1

+ 0 - 5
Tests/RunCMake/target_compile_options/empty_keyword_args-stderr.txt

@@ -1,5 +0,0 @@
-CMake Error at empty_keyword_args.cmake:2 \(target_compile_options\):
-  target_compile_options may only set INTERFACE properties on INTERFACE
-  targets
-Call Stack \(most recent call first\):
-  CMakeLists.txt:5 \(include\)

+ 0 - 1
Tests/RunCMake/target_include_directories/empty_keyword_args-result.txt

@@ -1 +0,0 @@
-1

+ 0 - 5
Tests/RunCMake/target_include_directories/empty_keyword_args-stderr.txt

@@ -1,5 +0,0 @@
-CMake Error at empty_keyword_args.cmake:2 \(target_include_directories\):
-  target_include_directories may only set INTERFACE properties on INTERFACE
-  targets
-Call Stack \(most recent call first\):
-  CMakeLists.txt:5 \(include\)

+ 0 - 1
Tests/RunCMake/target_link_directories/empty_keyword_args-result.txt

@@ -1 +0,0 @@
-1

+ 0 - 5
Tests/RunCMake/target_link_directories/empty_keyword_args-stderr.txt

@@ -1,5 +0,0 @@
-CMake Error at empty_keyword_args.cmake:2 \(target_link_directories\):
-  target_link_directories may only set INTERFACE properties on INTERFACE
-  targets
-Call Stack \(most recent call first\):
-  CMakeLists.txt:5 \(include\)

+ 0 - 1
Tests/RunCMake/target_link_options/empty_keyword_args-result.txt

@@ -1 +0,0 @@
-1

+ 0 - 4
Tests/RunCMake/target_link_options/empty_keyword_args-stderr.txt

@@ -1,4 +0,0 @@
-CMake Error at empty_keyword_args.cmake:2 \(target_link_options\):
-  target_link_options may only set INTERFACE properties on INTERFACE targets
-Call Stack \(most recent call first\):
-  CMakeLists.txt:5 \(include\)

+ 0 - 1
Tests/RunCMake/target_sources/empty_keyword_args-result.txt

@@ -1 +0,0 @@
-1

+ 0 - 4
Tests/RunCMake/target_sources/empty_keyword_args-stderr.txt

@@ -1,4 +0,0 @@
-CMake Error at empty_keyword_args.cmake:2 \(target_sources\):
-  target_sources may only set INTERFACE properties on INTERFACE targets
-Call Stack \(most recent call first\):
-  CMakeLists.txt:5 \(include\)