Merge topic 'target-property-policy-context'

75c3d18d Merge branch 'backport-target-property-policy-context' into target-property-policy-context
911cc9a3 cmTarget: Evaluate CMP0026 and CMP0051 in calling context
cb810abe cmTarget: Drop unused GetProperty signature
23409f50 cmTarget: Evaluate CMP0026 in calling context
2e75bf67 cmTarget: Drop unused GetProperty signature
This commit is contained in:
Brad King 2014-05-12 09:31:02 -04:00 committed by CMake Topic Stage
commit c1e428c039
10 changed files with 64 additions and 24 deletions

View File

@ -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
{

View File

@ -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;

View File

@ -3178,13 +3178,7 @@ const char* cmTarget::GetFeature(const std::string& feature,
}
//----------------------------------------------------------------------------
const char *cmTarget::GetProperty(const std::string& prop) const
{
return this->GetProperty(prop, cmProperty::TARGET);
}
//----------------------------------------------------------------------------
bool cmTarget::HandleLocationPropertyPolicy() const
bool cmTarget::HandleLocationPropertyPolicy(cmMakefile* context) const
{
if (this->IsImported())
{
@ -3193,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()
@ -3214,15 +3208,21 @@ 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;
}
//----------------------------------------------------------------------------
const char *cmTarget::GetProperty(const std::string& prop) const
{
return this->GetProperty(prop, this->Makefile);
}
//----------------------------------------------------------------------------
const char *cmTarget::GetProperty(const std::string& prop,
cmProperty::ScopeType scope) const
cmMakefile* context) const
{
if (this->GetType() == INTERFACE_LIBRARY
&& !whiteListedInterfaceProperty(prop))
@ -3230,7 +3230,7 @@ const char *cmTarget::GetProperty(const std::string& 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;
}
@ -3249,7 +3249,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
{
if(prop == "LOCATION")
{
if (!this->HandleLocationPropertyPolicy())
if (!this->HandleLocationPropertyPolicy(context))
{
return 0;
}
@ -3270,7 +3270,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
// Support "LOCATION_<CONFIG>".
if(cmHasLiteralPrefix(prop, "LOCATION_"))
{
if (!this->HandleLocationPropertyPolicy())
if (!this->HandleLocationPropertyPolicy(context))
{
return 0;
}
@ -3285,7 +3285,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
std::string configName(prop.c_str(), prop.size() - 9);
if(configName != "IMPORTED")
{
if (!this->HandleLocationPropertyPolicy())
if (!this->HandleLocationPropertyPolicy(context))
{
return 0;
}
@ -3423,7 +3423,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
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()
@ -3444,7 +3444,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
"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)
{
@ -3489,10 +3489,10 @@ const char *cmTarget::GetProperty(const std::string& prop,
}
bool chain = false;
const char *retVal =
this->Properties.GetPropertyValue(prop, scope, chain);
this->Properties.GetPropertyValue(prop, cmProperty::TARGET, chain);
if (chain)
{
return this->Makefile->GetProperty(prop,scope);
return this->Makefile->GetProperty(prop, cmProperty::TARGET);
}
return retVal;
}

View File

@ -231,8 +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,
cmProperty::ScopeType scope) 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;
@ -589,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.

View File

@ -0,0 +1 @@
add_library(otherlib ../empty.cpp)

View File

@ -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.

View File

@ -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)

View File

@ -0,0 +1 @@
add_library(empty2 ../empty.cpp $<TARGET_OBJECTS:objects>)

View File

@ -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"$

View File

@ -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}\"")