Only process transitive interface properties for valid target names.
Commit a1c4905f (Use the link information as a source of compile definitions and includes., 2013-02-12) introduced the use of link information as the source of target properties via the TARGET_PROPERTY generator expression. This generator expression has a strict interpretation of a valid target name and emits a fatal error for invalid names. Ensure that only targets with names valid for use with TARGET_PROPERTY or targets which are determined by generator expressions are processed by it. This means that at worst, invalid target names do not participate in the transitive evaluation of properties, but the validation generator expression can be extended where needed to resolve that.
This commit is contained in:
parent
efdf152fe1
commit
254687d31f
@ -2898,7 +2898,8 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
|
||||
ge.Parse(it->Value);
|
||||
std::string result = cge->Evaluate(this->Makefile, config,
|
||||
false, this, 0, 0);
|
||||
if (!this->Makefile->FindTargetToUse(result.c_str()))
|
||||
if (!cmGeneratorExpression::IsValidTargetName(result.c_str())
|
||||
|| !this->Makefile->FindTargetToUse(result.c_str()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -2975,7 +2976,9 @@ std::string cmTarget::GetCompileDefinitions(const char *config)
|
||||
for (std::vector<std::string>::const_iterator it = libs.begin();
|
||||
it != libs.end(); ++it)
|
||||
{
|
||||
if (this->Makefile->FindTargetToUse(it->c_str()))
|
||||
if ((cmGeneratorExpression::IsValidTargetName(it->c_str())
|
||||
|| cmGeneratorExpression::Find(it->c_str()) != std::string::npos)
|
||||
&& this->Makefile->FindTargetToUse(it->c_str()))
|
||||
{
|
||||
depString += sep + "$<TARGET_PROPERTY:"
|
||||
+ *it + ",INTERFACE_COMPILE_DEFINITIONS>";
|
||||
|
Loading…
x
Reference in New Issue
Block a user