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

View File

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