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:
Stephen Kelly 2013-03-06 17:15:57 +01:00
parent efdf152fe1
commit 254687d31f
1 changed files with 5 additions and 2 deletions

View File

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