Merge topic 'move-CMP0059-handling'

52b9d828 cmMakefile: Move CMP0059 handling to command code.
fe603c7d cmGetDirectoryPropertyCommand: Move variable to the point of use.
8fc53c3c cmGetDirectoryPropertyCommand: Extract StoreResult method.
This commit is contained in:
Brad King 2015-06-09 09:19:00 -04:00 committed by CMake Topic Stage
commit d78fbb6ad4
5 changed files with 56 additions and 26 deletions

View File

@ -26,7 +26,6 @@ bool cmGetDirectoryPropertyCommand
std::vector<std::string>::const_iterator i = args.begin();
std::string variable = *i;
++i;
std::string output = "";
// get the directory argument if there is one
cmMakefile *dir = this->Makefile;
@ -79,7 +78,7 @@ bool cmGetDirectoryPropertyCommand
"providing the name of the variable to get.");
return false;
}
output = dir->GetSafeDefinition(*i);
std::string output = dir->GetSafeDefinition(*i);
this->Makefile->AddDefinition(variable, output.c_str());
return true;
}
@ -87,14 +86,37 @@ bool cmGetDirectoryPropertyCommand
const char *prop = 0;
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);
}
if (prop)
{
this->Makefile->AddDefinition(variable, prop);
return true;
}
this->Makefile->AddDefinition(variable, "");
this->StoreResult(variable, prop);
return true;
}
void cmGetDirectoryPropertyCommand::StoreResult(std::string const& variable,
const char* prop)
{
if (prop)
{
this->Makefile->AddDefinition(variable, prop);
return;
}
this->Makefile->AddDefinition(variable, "");
}

View File

@ -40,8 +40,9 @@ public:
virtual std::string GetName() const { return "get_directory_property";}
cmTypeMacro(cmGetDirectoryPropertyCommand, cmCommand);
private:
void StoreResult(const std::string& variable, const char* prop);
};
#endif

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.
return this->StoreResult(mf->GetProperty(this->PropertyName));
}

View File

@ -4171,22 +4171,6 @@ const char *cmMakefile::GetProperty(const std::string& prop,
this->GetListOfMacros(output);
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")
{
output = cmJoin(this->GetLinkDirectories(), ";");
@ -4674,6 +4658,11 @@ cmState::Snapshot cmMakefile::GetStateSnapshot() const
return this->StateSnapshot;
}
const char* cmMakefile::GetDefineFlagsCMP0059() const
{
return this->DefineFlagsOrig.c_str();
}
//----------------------------------------------------------------------------
cmPolicies::PolicyStatus
cmMakefile::GetPolicyStatus(cmPolicies::PolicyID id) const

View File

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