Extend the cmTargetPropCommandBase interface property handling.

This can be used to handle INTERFACE SYSTEM include directories
in particular.
This commit is contained in:
Stephen Kelly 2013-07-01 23:19:25 +02:00
parent 83498d4135
commit 286f227709
2 changed files with 25 additions and 14 deletions

View File

@ -126,19 +126,27 @@ void cmTargetPropCommandBase
}
if (scope == "INTERFACE" || scope == "PUBLIC")
{
this->HandleInterfaceContent(this->Target, content, prepend);
}
}
//----------------------------------------------------------------------------
void cmTargetPropCommandBase::HandleInterfaceContent(cmTarget *tgt,
const std::vector<std::string> &content,
bool prepend)
{
if (prepend)
{
const std::string propName = std::string("INTERFACE_") + this->Property;
const char *propValue = this->Target->GetProperty(propName.c_str());
const char *propValue = tgt->GetProperty(propName.c_str());
const std::string totalContent = this->Join(content) + (propValue
? std::string(";") + propValue
: std::string());
this->Target->SetProperty(propName.c_str(), totalContent.c_str());
tgt->SetProperty(propName.c_str(), totalContent.c_str());
}
else
{
this->Target->AppendProperty(("INTERFACE_" + this->Property).c_str(),
tgt->AppendProperty(("INTERFACE_" + this->Property).c_str(),
this->Join(content).c_str());
}
}
}

View File

@ -36,6 +36,9 @@ protected:
std::string Property;
cmTarget *Target;
virtual void HandleInterfaceContent(cmTarget *tgt,
const std::vector<std::string> &content,
bool prepend);
private:
virtual void HandleImportedTarget(const std::string &tgt) = 0;
virtual void HandleMissingTarget(const std::string &name) = 0;