|
|
@@ -32,6 +32,10 @@ bool cmCMakePolicyCommand
|
|
|
{
|
|
|
return this->HandleSetMode(args);
|
|
|
}
|
|
|
+ else if(args[0] == "GET")
|
|
|
+ {
|
|
|
+ return this->HandleGetMode(args);
|
|
|
+ }
|
|
|
else if(args[0] == "PUSH")
|
|
|
{
|
|
|
if(args.size() > 1)
|
|
|
@@ -103,6 +107,63 @@ bool cmCMakePolicyCommand::HandleSetMode(std::vector<std::string> const& args)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+bool cmCMakePolicyCommand::HandleGetMode(std::vector<std::string> const& args)
|
|
|
+{
|
|
|
+ if(args.size() != 3)
|
|
|
+ {
|
|
|
+ this->SetError("GET must be given exactly 2 additional arguments.");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Get arguments.
|
|
|
+ std::string const& id = args[1];
|
|
|
+ std::string const& var = args[2];
|
|
|
+
|
|
|
+ // Lookup the policy number.
|
|
|
+ cmPolicies::PolicyID pid;
|
|
|
+ if(!this->Makefile->GetPolicies()->GetPolicyID(id.c_str(), pid))
|
|
|
+ {
|
|
|
+ cmOStringStream e;
|
|
|
+ e << "GET given policy \"" << id << "\" which is not known to this "
|
|
|
+ << "version of CMake.";
|
|
|
+ this->SetError(e.str().c_str());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Lookup the policy setting.
|
|
|
+ cmPolicies::PolicyStatus status = this->Makefile->GetPolicyStatus(pid);
|
|
|
+ switch (status)
|
|
|
+ {
|
|
|
+ case cmPolicies::OLD:
|
|
|
+ // Report that the policy is set to OLD.
|
|
|
+ this->Makefile->AddDefinition(var.c_str(), "OLD");
|
|
|
+ break;
|
|
|
+ case cmPolicies::WARN:
|
|
|
+ // Report that the policy is not set.
|
|
|
+ this->Makefile->AddDefinition(var.c_str(), "");
|
|
|
+ break;
|
|
|
+ case cmPolicies::NEW:
|
|
|
+ // Report that the policy is set to NEW.
|
|
|
+ this->Makefile->AddDefinition(var.c_str(), "NEW");
|
|
|
+ break;
|
|
|
+ case cmPolicies::REQUIRED_IF_USED:
|
|
|
+ case cmPolicies::REQUIRED_ALWAYS:
|
|
|
+ // The policy is required to be set before anything needs it.
|
|
|
+ {
|
|
|
+ cmOStringStream e;
|
|
|
+ e << this->Makefile->GetPolicies()->GetRequiredPolicyError(pid)
|
|
|
+ << "\n"
|
|
|
+ << "The call to cmake_policy(GET " << id << " ...) at which this "
|
|
|
+ << "error appears requests the policy, and this version of CMake "
|
|
|
+ << "requires that the policy be set to NEW before it is checked.";
|
|
|
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
//----------------------------------------------------------------------------
|
|
|
bool
|
|
|
cmCMakePolicyCommand::HandleVersionMode(std::vector<std::string> const& args)
|