From 8fc53c3ce89e76a4e5cf1968307c513041e9a7b7 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 8 Jun 2015 22:00:37 +0200 Subject: [PATCH 1/3] cmGetDirectoryPropertyCommand: Extract StoreResult method. --- Source/cmGetDirectoryPropertyCommand.cxx | 18 ++++++++++++------ Source/cmGetDirectoryPropertyCommand.h | 5 +++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/cmGetDirectoryPropertyCommand.cxx b/Source/cmGetDirectoryPropertyCommand.cxx index 228e53cd2..bb1801ca0 100644 --- a/Source/cmGetDirectoryPropertyCommand.cxx +++ b/Source/cmGetDirectoryPropertyCommand.cxx @@ -89,12 +89,18 @@ bool cmGetDirectoryPropertyCommand { 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, ""); +} + diff --git a/Source/cmGetDirectoryPropertyCommand.h b/Source/cmGetDirectoryPropertyCommand.h index 6c5750a9c..f4188861f 100644 --- a/Source/cmGetDirectoryPropertyCommand.h +++ b/Source/cmGetDirectoryPropertyCommand.h @@ -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 From fe603c7dfb8a3d0dfc892b46f9df0b4c32a892f9 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 8 Jun 2015 22:03:07 +0200 Subject: [PATCH 2/3] cmGetDirectoryPropertyCommand: Move variable to the point of use. --- Source/cmGetDirectoryPropertyCommand.cxx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/cmGetDirectoryPropertyCommand.cxx b/Source/cmGetDirectoryPropertyCommand.cxx index bb1801ca0..f60eba707 100644 --- a/Source/cmGetDirectoryPropertyCommand.cxx +++ b/Source/cmGetDirectoryPropertyCommand.cxx @@ -26,7 +26,6 @@ bool cmGetDirectoryPropertyCommand std::vector::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; } From 52b9d828ab482f5eaae3313d821d9a4a492f069b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 7 Jun 2015 14:50:54 +0200 Subject: [PATCH 3/3] 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. --- Source/cmGetDirectoryPropertyCommand.cxx | 17 +++++++++++++++++ Source/cmGetPropertyCommand.cxx | 16 ++++++++++++++++ Source/cmMakefile.cxx | 21 +++++---------------- Source/cmMakefile.h | 2 ++ 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/Source/cmGetDirectoryPropertyCommand.cxx b/Source/cmGetDirectoryPropertyCommand.cxx index f60eba707..c056d9527 100644 --- a/Source/cmGetDirectoryPropertyCommand.cxx +++ b/Source/cmGetDirectoryPropertyCommand.cxx @@ -86,6 +86,23 @@ 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); } this->StoreResult(variable, prop); diff --git a/Source/cmGetPropertyCommand.cxx b/Source/cmGetPropertyCommand.cxx index 36b6c6435..33d638b6a 100644 --- a/Source/cmGetPropertyCommand.cxx +++ b/Source/cmGetPropertyCommand.cxx @@ -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)); } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index a8b163a87..63dbe27fc 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -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 diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 6f6ed278b..86bde0ca7 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -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);