From 4babc9058a996e9cccd183eb25eda5faedd04591 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Mon, 22 Oct 2018 16:48:28 -0400 Subject: 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. --- Source/cmTargetPropCommandBase.cxx | 20 +++++++++++--------- .../empty_keyword_args-result.txt | 1 - .../empty_keyword_args-stderr.txt | 5 ----- .../empty_keyword_args-result.txt | 1 - .../empty_keyword_args-stderr.txt | 5 ----- .../empty_keyword_args-result.txt | 1 - .../empty_keyword_args-stderr.txt | 5 ----- .../empty_keyword_args-result.txt | 1 - .../empty_keyword_args-stderr.txt | 5 ----- .../empty_keyword_args-result.txt | 1 - .../empty_keyword_args-stderr.txt | 5 ----- .../empty_keyword_args-result.txt | 1 - .../empty_keyword_args-stderr.txt | 4 ---- .../target_sources/empty_keyword_args-result.txt | 1 - .../target_sources/empty_keyword_args-stderr.txt | 4 ---- 15 files changed, 11 insertions(+), 49 deletions(-) delete mode 100644 Tests/RunCMake/target_compile_definitions/empty_keyword_args-result.txt delete mode 100644 Tests/RunCMake/target_compile_definitions/empty_keyword_args-stderr.txt delete mode 100644 Tests/RunCMake/target_compile_features/empty_keyword_args-result.txt delete mode 100644 Tests/RunCMake/target_compile_features/empty_keyword_args-stderr.txt delete mode 100644 Tests/RunCMake/target_compile_options/empty_keyword_args-result.txt delete mode 100644 Tests/RunCMake/target_compile_options/empty_keyword_args-stderr.txt delete mode 100644 Tests/RunCMake/target_include_directories/empty_keyword_args-result.txt delete mode 100644 Tests/RunCMake/target_include_directories/empty_keyword_args-stderr.txt delete mode 100644 Tests/RunCMake/target_link_directories/empty_keyword_args-result.txt delete mode 100644 Tests/RunCMake/target_link_directories/empty_keyword_args-stderr.txt delete mode 100644 Tests/RunCMake/target_link_options/empty_keyword_args-result.txt delete mode 100644 Tests/RunCMake/target_link_options/empty_keyword_args-stderr.txt delete mode 100644 Tests/RunCMake/target_sources/empty_keyword_args-result.txt delete mode 100644 Tests/RunCMake/target_sources/empty_keyword_args-stderr.txt diff --git a/Source/cmTargetPropCommandBase.cxx b/Source/cmTargetPropCommandBase.cxx index 48348f3..1b8ee81 100644 --- a/Source/cmTargetPropCommandBase.cxx +++ b/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); } diff --git a/Tests/RunCMake/target_compile_definitions/empty_keyword_args-result.txt b/Tests/RunCMake/target_compile_definitions/empty_keyword_args-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/target_compile_definitions/empty_keyword_args-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/target_compile_definitions/empty_keyword_args-stderr.txt b/Tests/RunCMake/target_compile_definitions/empty_keyword_args-stderr.txt deleted file mode 100644 index d8fb3ba..0000000 --- a/Tests/RunCMake/target_compile_definitions/empty_keyword_args-stderr.txt +++ /dev/null @@ -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\) diff --git a/Tests/RunCMake/target_compile_features/empty_keyword_args-result.txt b/Tests/RunCMake/target_compile_features/empty_keyword_args-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/target_compile_features/empty_keyword_args-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/target_compile_features/empty_keyword_args-stderr.txt b/Tests/RunCMake/target_compile_features/empty_keyword_args-stderr.txt deleted file mode 100644 index eecd3cf..0000000 --- a/Tests/RunCMake/target_compile_features/empty_keyword_args-stderr.txt +++ /dev/null @@ -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\) diff --git a/Tests/RunCMake/target_compile_options/empty_keyword_args-result.txt b/Tests/RunCMake/target_compile_options/empty_keyword_args-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/target_compile_options/empty_keyword_args-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/target_compile_options/empty_keyword_args-stderr.txt b/Tests/RunCMake/target_compile_options/empty_keyword_args-stderr.txt deleted file mode 100644 index 381ff48..0000000 --- a/Tests/RunCMake/target_compile_options/empty_keyword_args-stderr.txt +++ /dev/null @@ -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\) diff --git a/Tests/RunCMake/target_include_directories/empty_keyword_args-result.txt b/Tests/RunCMake/target_include_directories/empty_keyword_args-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/target_include_directories/empty_keyword_args-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/target_include_directories/empty_keyword_args-stderr.txt b/Tests/RunCMake/target_include_directories/empty_keyword_args-stderr.txt deleted file mode 100644 index 6200703..0000000 --- a/Tests/RunCMake/target_include_directories/empty_keyword_args-stderr.txt +++ /dev/null @@ -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\) diff --git a/Tests/RunCMake/target_link_directories/empty_keyword_args-result.txt b/Tests/RunCMake/target_link_directories/empty_keyword_args-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/target_link_directories/empty_keyword_args-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/target_link_directories/empty_keyword_args-stderr.txt b/Tests/RunCMake/target_link_directories/empty_keyword_args-stderr.txt deleted file mode 100644 index 26ee9a1..0000000 --- a/Tests/RunCMake/target_link_directories/empty_keyword_args-stderr.txt +++ /dev/null @@ -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\) diff --git a/Tests/RunCMake/target_link_options/empty_keyword_args-result.txt b/Tests/RunCMake/target_link_options/empty_keyword_args-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/target_link_options/empty_keyword_args-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/target_link_options/empty_keyword_args-stderr.txt b/Tests/RunCMake/target_link_options/empty_keyword_args-stderr.txt deleted file mode 100644 index 0103d00..0000000 --- a/Tests/RunCMake/target_link_options/empty_keyword_args-stderr.txt +++ /dev/null @@ -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\) diff --git a/Tests/RunCMake/target_sources/empty_keyword_args-result.txt b/Tests/RunCMake/target_sources/empty_keyword_args-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/target_sources/empty_keyword_args-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/target_sources/empty_keyword_args-stderr.txt b/Tests/RunCMake/target_sources/empty_keyword_args-stderr.txt deleted file mode 100644 index 9ff5bb0..0000000 --- a/Tests/RunCMake/target_sources/empty_keyword_args-stderr.txt +++ /dev/null @@ -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\) -- cgit v0.12