diff options
-rw-r--r-- | Source/cmGetPropertyCommand.cxx | 3 | ||||
-rw-r--r-- | Source/cmGetTargetPropertyCommand.cxx | 2 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 25 | ||||
-rw-r--r-- | Source/cmTarget.h | 3 | ||||
-rw-r--r-- | Tests/RunCMake/CMP0026/CMP0026-WARN-Dir/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/CMP0026/CMP0026-WARN-stderr.txt | 13 | ||||
-rw-r--r-- | Tests/RunCMake/CMP0026/CMP0026-WARN.cmake | 3 | ||||
-rw-r--r-- | Tests/RunCMake/CMP0051/CMP0051-WARN-Dir/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/CMP0051/CMP0051-WARN-stderr.txt | 18 | ||||
-rw-r--r-- | Tests/RunCMake/CMP0051/CMP0051-WARN.cmake | 6 |
10 files changed, 62 insertions, 13 deletions
diff --git a/Source/cmGetPropertyCommand.cxx b/Source/cmGetPropertyCommand.cxx index 6dd40c9..512d789 100644 --- a/Source/cmGetPropertyCommand.cxx +++ b/Source/cmGetPropertyCommand.cxx @@ -302,7 +302,8 @@ bool cmGetPropertyCommand::HandleTargetMode() } if(cmTarget* target = this->Makefile->FindTargetToUse(this->Name)) { - return this->StoreResult(target->GetProperty(this->PropertyName)); + return this->StoreResult(target->GetProperty(this->PropertyName, + this->Makefile)); } else { diff --git a/Source/cmGetTargetPropertyCommand.cxx b/Source/cmGetTargetPropertyCommand.cxx index e3ec0bc..aa6f0c1 100644 --- a/Source/cmGetTargetPropertyCommand.cxx +++ b/Source/cmGetTargetPropertyCommand.cxx @@ -38,7 +38,7 @@ bool cmGetTargetPropertyCommand else if(cmTarget* tgt = this->Makefile->FindTargetToUse(targetName)) { cmTarget& target = *tgt; - const char* prop_cstr = target.GetProperty(args[2]); + const char* prop_cstr = target.GetProperty(args[2], this->Makefile); if(prop_cstr) { prop = prop_cstr; diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 6b8d51d..3f2ae9e 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -3178,7 +3178,7 @@ const char* cmTarget::GetFeature(const std::string& feature, } //---------------------------------------------------------------------------- -bool cmTarget::HandleLocationPropertyPolicy() const +bool cmTarget::HandleLocationPropertyPolicy(cmMakefile* context) const { if (this->IsImported()) { @@ -3187,7 +3187,7 @@ bool cmTarget::HandleLocationPropertyPolicy() const cmOStringStream e; const char *modal = 0; cmake::MessageType messageType = cmake::AUTHOR_WARNING; - switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0026)) + switch (context->GetPolicyStatus(cmPolicies::CMP0026)) { case cmPolicies::WARN: e << (this->Makefile->GetPolicies() @@ -3208,7 +3208,7 @@ bool cmTarget::HandleLocationPropertyPolicy() const << this->GetName() << "\". Use the target name directly with " "add_custom_command, or use the generator expression $<TARGET_FILE>, " "as appropriate.\n"; - this->Makefile->IssueMessage(messageType, e.str()); + context->IssueMessage(messageType, e.str()); } return messageType != cmake::FATAL_ERROR; @@ -3217,13 +3217,20 @@ bool cmTarget::HandleLocationPropertyPolicy() const //---------------------------------------------------------------------------- const char *cmTarget::GetProperty(const std::string& prop) const { + return this->GetProperty(prop, this->Makefile); +} + +//---------------------------------------------------------------------------- +const char *cmTarget::GetProperty(const std::string& prop, + cmMakefile* context) const +{ if (this->GetType() == INTERFACE_LIBRARY && !whiteListedInterfaceProperty(prop)) { cmOStringStream e; e << "INTERFACE_LIBRARY targets may only have whitelisted properties. " "The property \"" << prop << "\" is not allowed."; - this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + context->IssueMessage(cmake::FATAL_ERROR, e.str()); return 0; } @@ -3242,7 +3249,7 @@ const char *cmTarget::GetProperty(const std::string& prop) const { if(prop == "LOCATION") { - if (!this->HandleLocationPropertyPolicy()) + if (!this->HandleLocationPropertyPolicy(context)) { return 0; } @@ -3263,7 +3270,7 @@ const char *cmTarget::GetProperty(const std::string& prop) const // Support "LOCATION_<CONFIG>". if(cmHasLiteralPrefix(prop, "LOCATION_")) { - if (!this->HandleLocationPropertyPolicy()) + if (!this->HandleLocationPropertyPolicy(context)) { return 0; } @@ -3278,7 +3285,7 @@ const char *cmTarget::GetProperty(const std::string& prop) const std::string configName(prop.c_str(), prop.size() - 9); if(configName != "IMPORTED") { - if (!this->HandleLocationPropertyPolicy()) + if (!this->HandleLocationPropertyPolicy(context)) { return 0; } @@ -3416,7 +3423,7 @@ const char *cmTarget::GetProperty(const std::string& prop) const bool noMessage = true; cmOStringStream e; cmake::MessageType messageType = cmake::AUTHOR_WARNING; - switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0051)) + switch(context->GetPolicyStatus(cmPolicies::CMP0051)) { case cmPolicies::WARN: e << (this->Makefile->GetPolicies() @@ -3437,7 +3444,7 @@ const char *cmTarget::GetProperty(const std::string& prop) const "read at configure time. Code reading that property needs to be " "adapted to ignore the generator expression using the " "string(GENEX_STRIP) command."; - this->Makefile->IssueMessage(messageType, e.str()); + context->IssueMessage(messageType, e.str()); } if (addContent) { diff --git a/Source/cmTarget.h b/Source/cmTarget.h index 22462b9..bee6b34 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -231,6 +231,7 @@ public: void AppendProperty(const std::string& prop, const char* value, bool asString=false); const char *GetProperty(const std::string& prop) const; + const char *GetProperty(const std::string& prop, cmMakefile* context) const; bool GetPropertyAsBool(const std::string& prop) const; void CheckProperty(const std::string& prop, cmMakefile* context) const; @@ -587,7 +588,7 @@ public: const std::string &compatibilityType) const; private: - bool HandleLocationPropertyPolicy() const; + bool HandleLocationPropertyPolicy(cmMakefile* context) const; // The set of include directories that are marked as system include // directories. diff --git a/Tests/RunCMake/CMP0026/CMP0026-WARN-Dir/CMakeLists.txt b/Tests/RunCMake/CMP0026/CMP0026-WARN-Dir/CMakeLists.txt new file mode 100644 index 0000000..17a7db0 --- /dev/null +++ b/Tests/RunCMake/CMP0026/CMP0026-WARN-Dir/CMakeLists.txt @@ -0,0 +1 @@ +add_library(otherlib ../empty.cpp) diff --git a/Tests/RunCMake/CMP0026/CMP0026-WARN-stderr.txt b/Tests/RunCMake/CMP0026/CMP0026-WARN-stderr.txt index 9b88194..d122c4a 100644 --- a/Tests/RunCMake/CMP0026/CMP0026-WARN-stderr.txt +++ b/Tests/RunCMake/CMP0026/CMP0026-WARN-stderr.txt @@ -10,3 +10,16 @@ CMake Warning \(dev\) at CMP0026-WARN.cmake:5 \(get_target_property\): Call Stack \(most recent call first\): CMakeLists.txt:3 \(include\) This warning is for project developers. Use -Wno-dev to suppress it. ++ +CMake Warning \(dev\) at CMP0026-WARN.cmake:8 \(get_target_property\): + Policy CMP0026 is not set: Disallow use of the LOCATION target property. + Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy + command to set the policy and suppress this warning. + + The LOCATION property should not be read from target "otherlib". Use the + target name directly with add_custom_command, or use the generator + expression \$<TARGET_FILE>, as appropriate. + +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/CMP0026/CMP0026-WARN.cmake b/Tests/RunCMake/CMP0026/CMP0026-WARN.cmake index 89c5a8a..bfc9203 100644 --- a/Tests/RunCMake/CMP0026/CMP0026-WARN.cmake +++ b/Tests/RunCMake/CMP0026/CMP0026-WARN.cmake @@ -3,3 +3,6 @@ enable_language(CXX) add_library(somelib empty.cpp) get_target_property(_loc somelib LOCATION) + +add_subdirectory(CMP0026-WARN-Dir) +get_target_property(_loc otherlib LOCATION) diff --git a/Tests/RunCMake/CMP0051/CMP0051-WARN-Dir/CMakeLists.txt b/Tests/RunCMake/CMP0051/CMP0051-WARN-Dir/CMakeLists.txt new file mode 100644 index 0000000..77cbad5 --- /dev/null +++ b/Tests/RunCMake/CMP0051/CMP0051-WARN-Dir/CMakeLists.txt @@ -0,0 +1 @@ +add_library(empty2 ../empty.cpp $<TARGET_OBJECTS:objects>) diff --git a/Tests/RunCMake/CMP0051/CMP0051-WARN-stderr.txt b/Tests/RunCMake/CMP0051/CMP0051-WARN-stderr.txt index f1b0357..ae2e468 100644 --- a/Tests/RunCMake/CMP0051/CMP0051-WARN-stderr.txt +++ b/Tests/RunCMake/CMP0051/CMP0051-WARN-stderr.txt @@ -12,4 +12,20 @@ Call Stack \(most recent call first\): CMakeLists.txt:3 \(include\) This warning is for project developers. Use -Wno-dev to suppress it. -Sources: "empty.cpp"$ +Sources: "empty.cpp" +* +CMake Warning \(dev\) at CMP0051-WARN.cmake:12 \(get_target_property\): + Policy CMP0051 is not set: List TARGET_OBJECTS in SOURCES target property. + Run "cmake --help-policy CMP0051" for policy details. Use the cmake_policy + command to set the policy and suppress this warning. + + Target "empty2" contains \$<TARGET_OBJECTS> generator expression in its + sources list. This content was not previously part of the SOURCES property + when that property was read at configure time. Code reading that property + needs to be adapted to ignore the generator expression using the + string\(GENEX_STRIP\) command. +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. + +Sources: "../empty.cpp"$ diff --git a/Tests/RunCMake/CMP0051/CMP0051-WARN.cmake b/Tests/RunCMake/CMP0051/CMP0051-WARN.cmake index fd595ce..744598f 100644 --- a/Tests/RunCMake/CMP0051/CMP0051-WARN.cmake +++ b/Tests/RunCMake/CMP0051/CMP0051-WARN.cmake @@ -6,3 +6,9 @@ add_library(empty empty.cpp $<TARGET_OBJECTS:objects>) get_target_property(srcs empty SOURCES) message("Sources: \"${srcs}\"") + +add_subdirectory(CMP0051-WARN-Dir) + +get_target_property(srcs empty2 SOURCES) + +message("Sources: \"${srcs}\"") |