cmMakefile: Move CMP0059 handling to command code.

Don't pay a penalty for it in all GetProperty calls.

Additionally, the storage of properties will eventually move to
cmState, which should only contain state and not logic for policies
like this.
This commit is contained in:
Stephen Kelly 2015-06-07 14:50:54 +02:00
parent fe603c7dfb
commit 52b9d828ab
4 changed files with 40 additions and 16 deletions

View File

@ -86,6 +86,23 @@ bool cmGetDirectoryPropertyCommand
const char *prop = 0; const char *prop = 0;
if (!i->empty()) if (!i->empty())
{ {
if (*i == "DEFINITIONS")
{
switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0059))
{
case cmPolicies::WARN:
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,
cmPolicies::GetPolicyWarning(cmPolicies::CMP0059));
case cmPolicies::OLD:
this->StoreResult(variable,
this->Makefile->GetDefineFlagsCMP0059());
return true;
case cmPolicies::NEW:
case cmPolicies::REQUIRED_ALWAYS:
case cmPolicies::REQUIRED_IF_USED:
break;
}
}
prop = dir->GetProperty(*i); prop = dir->GetProperty(*i);
} }
this->StoreResult(variable, prop); this->StoreResult(variable, prop);

View File

@ -279,6 +279,22 @@ bool cmGetPropertyCommand::HandleDirectoryMode()
} }
} }
if (this->PropertyName == "DEFINITIONS")
{
switch(mf->GetPolicyStatus(cmPolicies::CMP0059))
{
case cmPolicies::WARN:
mf->IssueMessage(cmake::AUTHOR_WARNING,
cmPolicies::GetPolicyWarning(cmPolicies::CMP0059));
case cmPolicies::OLD:
return this->StoreResult(mf->GetDefineFlagsCMP0059());
case cmPolicies::NEW:
case cmPolicies::REQUIRED_ALWAYS:
case cmPolicies::REQUIRED_IF_USED:
break;
}
}
// Get the property. // Get the property.
return this->StoreResult(mf->GetProperty(this->PropertyName)); return this->StoreResult(mf->GetProperty(this->PropertyName));
} }

View File

@ -4171,22 +4171,6 @@ const char *cmMakefile::GetProperty(const std::string& prop,
this->GetListOfMacros(output); this->GetListOfMacros(output);
return output.c_str(); return output.c_str();
} }
else if (prop == "DEFINITIONS")
{
switch(this->GetPolicyStatus(cmPolicies::CMP0059))
{
case cmPolicies::WARN:
this->IssueMessage(cmake::AUTHOR_WARNING, cmPolicies::
GetPolicyWarning(cmPolicies::CMP0059));
case cmPolicies::OLD:
output += this->DefineFlagsOrig;
return output.c_str();
case cmPolicies::NEW:
case cmPolicies::REQUIRED_ALWAYS:
case cmPolicies::REQUIRED_IF_USED:
break;
}
}
else if (prop == "LINK_DIRECTORIES") else if (prop == "LINK_DIRECTORIES")
{ {
output = cmJoin(this->GetLinkDirectories(), ";"); output = cmJoin(this->GetLinkDirectories(), ";");
@ -4674,6 +4658,11 @@ cmState::Snapshot cmMakefile::GetStateSnapshot() const
return this->StateSnapshot; return this->StateSnapshot;
} }
const char* cmMakefile::GetDefineFlagsCMP0059() const
{
return this->DefineFlagsOrig.c_str();
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmPolicies::PolicyStatus cmPolicies::PolicyStatus
cmMakefile::GetPolicyStatus(cmPolicies::PolicyID id) const cmMakefile::GetPolicyStatus(cmPolicies::PolicyID id) const

View File

@ -838,6 +838,8 @@ public:
cmState::Snapshot GetStateSnapshot() const; cmState::Snapshot GetStateSnapshot() const;
const char* GetDefineFlagsCMP0059() const;
protected: protected:
// add link libraries and directories to the target // add link libraries and directories to the target
void AddGlobalLinkInformation(const std::string& name, cmTarget& target); void AddGlobalLinkInformation(const std::string& name, cmTarget& target);