[Cmake-commits] CMake branch, next, updated. v3.2.2-2497-gdcd76bd

Stephen Kelly steveire at gmail.com
Mon May 4 16:32:52 EDT 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  dcd76bd58f7876804bd15d96275f9874257e8277 (commit)
       via  013ada80eac9cb119a6288ee58724a8c9915a35c (commit)
       via  be6664c208c65e01dc175ae4d27e7fc18c28c97e (commit)
       via  de211686122166e7485a98fd027bd1d32fda40b0 (commit)
       via  13981f20688279b4e10faca67b7020946c9ef733 (commit)
       via  23e2bcc8dba21b532ebbde20518f8a9f2d312103 (commit)
       via  5641ba4fcaba322e6f189e33eaccc4621d6ba99d (commit)
       via  3de54497030b7d8f40f219c0fdfe991e2a9041be (commit)
       via  387aff200c94073560a961cd2971ab6826347d4d (commit)
       via  dbf680d670e399cc3b042721a1179fba0429073b (commit)
       via  8c204133e5b7dc278de64c66a6ce0be8ec4ab6f4 (commit)
       via  e3a8c0291e6ae364365bfe48f12c6a5f4ec0e76f (commit)
       via  cb765af0499d1ad51b7e4d3ff45f1e40d6ca843b (commit)
       via  5df267fa1dc5f8389f571eb6841e51b8fe333b2c (commit)
       via  2235cfebeeb3447a1c62d7a0207e899c9f7c9240 (commit)
       via  05d8438860cac1c1ec2d1bcc325b8bc05c0cfcdc (commit)
       via  6eaade8a827e2e120640f3fc2eb9999e2bca5992 (commit)
       via  fdca04db6850273157e3c50de476e0b9298e9948 (commit)
       via  a7ff97275159d094f55df481728a682c357bc438 (commit)
      from  ae9e9fcf50eb6a3731f0edda1c1ee7ea3b719cfd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=dcd76bd58f7876804bd15d96275f9874257e8277
commit dcd76bd58f7876804bd15d96275f9874257e8277
Merge: ae9e9fc 013ada8
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon May 4 16:32:50 2015 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon May 4 16:32:50 2015 -0400

    Merge topic 'refactor-cmPolicies' into next
    
    013ada80 cmPolicies: Implement PolicyMap in terms of bitset.
    be6664c2 cmPolicies: Implement abstraction for PolicyMap.
    de211686 Port to static cmPolicies API.
    13981f20 cmPolicies: Make all API static.
    23e2bcc8 cmPolicies: Remove unused DefinePolicy method.
    5641ba4f cmPolicies: Remove unused cmPolicy class.
    3de54497 cmPolicies: Loop over all policies using enum constants.
    387aff20 cmPolicies: Trivialize GetPolicyStatus method.
    dbf680d6 cmPolicies: Use more-direct ID access.
    8c204133 cmPolicies: Implement in terms of public API.
    e3a8c029 cmPolicies: Make private method file-static.
    cb765af0 cmPolicies: Implement short description access with XMacros.
    5df267fa cmPolicies: Implement version check with XMacro.
    2235cfeb cmPolicies: Implement id to version with XMacro.
    05d84388 cmPolicies: Implement id to string conversion with XMacro.
    6eaade8a cmPolicies: Introduce XMacro table for policy data.
    ...


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=013ada80eac9cb119a6288ee58724a8c9915a35c
commit 013ada80eac9cb119a6288ee58724a8c9915a35c
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:12:34 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:21 2015 +0200

    cmPolicies: Implement PolicyMap in terms of bitset.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 8996943..f8d61db 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -343,24 +343,51 @@ cmPolicies::GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id)
   return e.str();
 }
 
+cmPolicies::PolicyMap::PolicyMap()
+{
+  this->UNDEFINED.set();
+}
+
 cmPolicies::PolicyStatus
 cmPolicies::PolicyMap::Get(cmPolicies::PolicyID id) const
 {
-  return this->find(id)->second;
+  PolicyStatus status = cmPolicies::WARN;
+
+  if (this->OLD[id])
+    {
+    status = cmPolicies::OLD;
+    }
+  else if (this->NEW[id])
+    {
+    status = cmPolicies::NEW;
+    }
+  else if (this->REQUIRED_ALWAYS[id])
+    {
+    status = cmPolicies::REQUIRED_ALWAYS;
+    }
+  else if (this->REQUIRED_IF_USED[id])
+    {
+    status = cmPolicies::REQUIRED_IF_USED;
+    }
+  return status;
 }
 
 void cmPolicies::PolicyMap::Set(cmPolicies::PolicyID id,
                                 cmPolicies::PolicyStatus status)
 {
-  (*this)[id] = status;
+  this->UNDEFINED.reset(id);
+  this->OLD[id] = (status == cmPolicies::OLD);
+  this->NEW[id] = (status == cmPolicies::NEW);
+  this->REQUIRED_ALWAYS[id] = (status == cmPolicies::REQUIRED_ALWAYS);
+  this->REQUIRED_IF_USED[id] = (status == cmPolicies::REQUIRED_IF_USED);
 }
 
 bool cmPolicies::PolicyMap::IsDefined(cmPolicies::PolicyID id) const
 {
-  return this->find(id) != this->end();
+  return !this->UNDEFINED[id];
 }
 
 bool cmPolicies::PolicyMap::IsEmpty() const
 {
-  return this->empty();
+  return !this->UNDEFINED.none();
 }
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 46b725a..63376dd 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -14,6 +14,8 @@
 
 #include "cmCustomCommand.h"
 
+#include <bitset>
+
 class cmMakefile;
 class cmPolicy;
 
@@ -268,12 +270,20 @@ public:
   static std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
 
   /** Represent a set of policy values.  */
-  struct PolicyMap : private std::map<PolicyID, PolicyStatus>
+  struct PolicyMap
   {
+    PolicyMap();
     PolicyStatus Get(PolicyID id) const;
     void Set(PolicyID id, PolicyStatus status);
     bool IsDefined(PolicyID id) const;
     bool IsEmpty() const;
+
+  private:
+    std::bitset<cmPolicies::CMPCOUNT> UNDEFINED;
+    std::bitset<cmPolicies::CMPCOUNT> OLD;
+    std::bitset<cmPolicies::CMPCOUNT> NEW;
+    std::bitset<cmPolicies::CMPCOUNT> REQUIRED_IF_USED;
+    std::bitset<cmPolicies::CMPCOUNT> REQUIRED_ALWAYS;
   };
 };
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=be6664c208c65e01dc175ae4d27e7fc18c28c97e
commit be6664c208c65e01dc175ae4d27e7fc18c28c97e
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:12:28 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:21 2015 +0200

    cmPolicies: Implement abstraction for PolicyMap.
    
    Hide the detail that it is a std::map.

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 29d891c..3befbdd 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -569,7 +569,7 @@ cmMakefile::IncludeScope::~IncludeScope()
     // one we pushed above.  If the entry is empty, then the included
     // script did not set any policies that might affect the includer so
     // we do not need to enforce the policy.
-    if(this->CheckCMP0011 && this->Makefile->PolicyStack.back().empty())
+    if(this->CheckCMP0011 && this->Makefile->PolicyStack.back().IsEmpty())
       {
       this->CheckCMP0011 = false;
       }
@@ -4772,10 +4772,9 @@ cmMakefile::GetPolicyStatusInternal(cmPolicies::PolicyID id) const
   for(PolicyStackType::const_reverse_iterator psi = this->PolicyStack.rbegin();
       psi != this->PolicyStack.rend(); ++psi)
     {
-    PolicyStackEntry::const_iterator pse = psi->find(id);
-    if(pse != psi->end())
+    if(psi->IsDefined(id))
       {
-      return pse->second;
+      return psi->Get(id);
       }
     }
 
@@ -4840,7 +4839,7 @@ bool cmMakefile::SetPolicy(cmPolicies::PolicyID id,
   for(PolicyStackType::reverse_iterator psi = this->PolicyStack.rbegin();
       previous_was_weak && psi != this->PolicyStack.rend(); ++psi)
     {
-    (*psi)[id] = status;
+    psi->Set(id, status);
     previous_was_weak = psi->Weak;
     }
 
@@ -4960,7 +4959,7 @@ void cmMakefile::RecordPolicies(cmPolicies::PolicyMap& pm)
   for(PolicyID pid = cmPolicies::CMP0000;
       pid != cmPolicies::CMPCOUNT; pid = PolicyID(pid+1))
     {
-    pm[pid] = this->GetPolicyStatus(pid);
+    pm.Set(pid, this->GetPolicyStatus(pid));
     }
 }
 
diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index c95520f..8996943 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -342,3 +342,25 @@ cmPolicies::GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id)
     << "Run cmake --help-policy " << pid << " for more information.";
   return e.str();
 }
+
+cmPolicies::PolicyStatus
+cmPolicies::PolicyMap::Get(cmPolicies::PolicyID id) const
+{
+  return this->find(id)->second;
+}
+
+void cmPolicies::PolicyMap::Set(cmPolicies::PolicyID id,
+                                cmPolicies::PolicyStatus status)
+{
+  (*this)[id] = status;
+}
+
+bool cmPolicies::PolicyMap::IsDefined(cmPolicies::PolicyID id) const
+{
+  return this->find(id) != this->end();
+}
+
+bool cmPolicies::PolicyMap::IsEmpty() const
+{
+  return this->empty();
+}
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index fee7dd9..46b725a 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -268,7 +268,13 @@ public:
   static std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
 
   /** Represent a set of policy values.  */
-  typedef std::map<PolicyID, PolicyStatus> PolicyMap;
+  struct PolicyMap : private std::map<PolicyID, PolicyStatus>
+  {
+    PolicyStatus Get(PolicyID id) const;
+    void Set(PolicyID id, PolicyStatus status);
+    bool IsDefined(PolicyID id) const;
+    bool IsEmpty() const;
+  };
 };
 
 #endif

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=de211686122166e7485a98fd027bd1d32fda40b0
commit de211686122166e7485a98fd027bd1d32fda40b0
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:12:10 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:20 2015 +0200

    Port to static cmPolicies API.

diff --git a/Source/cmAddCustomCommandCommand.cxx b/Source/cmAddCustomCommandCommand.cxx
index ba9e663..fe516ea 100644
--- a/Source/cmAddCustomCommandCommand.cxx
+++ b/Source/cmAddCustomCommandCommand.cxx
@@ -380,8 +380,7 @@ bool cmAddCustomCommandCommand
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0050))
     {
     case cmPolicies::WARN:
-      e << (this->Makefile->GetPolicies()
-                ->GetPolicyWarning(cmPolicies::CMP0050)) << "\n";
+      e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0050) << "\n";
       break;
     case cmPolicies::OLD:
       issueMessage = false;
diff --git a/Source/cmAddCustomTargetCommand.cxx b/Source/cmAddCustomTargetCommand.cxx
index c246aee..42bd71c 100644
--- a/Source/cmAddCustomTargetCommand.cxx
+++ b/Source/cmAddCustomTargetCommand.cxx
@@ -194,8 +194,7 @@ bool cmAddCustomTargetCommand
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0037))
       {
       case cmPolicies::WARN:
-        e << (this->Makefile->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0037)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0037) << "\n";
         issueMessage = true;
       case cmPolicies::OLD:
         break;
diff --git a/Source/cmAddExecutableCommand.cxx b/Source/cmAddExecutableCommand.cxx
index 74dc8eb..d15fc1e 100644
--- a/Source/cmAddExecutableCommand.cxx
+++ b/Source/cmAddExecutableCommand.cxx
@@ -84,8 +84,7 @@ bool cmAddExecutableCommand
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0037))
       {
       case cmPolicies::WARN:
-        e << (this->Makefile->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0037)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0037) << "\n";
         issueMessage = true;
       case cmPolicies::OLD:
         break;
diff --git a/Source/cmAddLibraryCommand.cxx b/Source/cmAddLibraryCommand.cxx
index 74e1a93..a844cf1 100644
--- a/Source/cmAddLibraryCommand.cxx
+++ b/Source/cmAddLibraryCommand.cxx
@@ -222,8 +222,7 @@ bool cmAddLibraryCommand
       case cmPolicies::WARN:
         if(type != cmTarget::INTERFACE_LIBRARY)
           {
-          e << (this->Makefile->GetPolicies()
-            ->GetPolicyWarning(cmPolicies::CMP0037)) << "\n";
+          e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0037) << "\n";
           issueMessage = true;
           }
       case cmPolicies::OLD:
diff --git a/Source/cmBreakCommand.cxx b/Source/cmBreakCommand.cxx
index 34245b3..fc0c3f5 100644
--- a/Source/cmBreakCommand.cxx
+++ b/Source/cmBreakCommand.cxx
@@ -23,8 +23,7 @@ bool cmBreakCommand::InitialPass(std::vector<std::string> const &args,
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0055))
       {
       case cmPolicies::WARN:
-        e << (this->Makefile->GetPolicies()
-                  ->GetPolicyWarning(cmPolicies::CMP0055)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0055) << "\n";
         break;
       case cmPolicies::OLD:
         issueMessage = false;
@@ -58,8 +57,7 @@ bool cmBreakCommand::InitialPass(std::vector<std::string> const &args,
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0055))
       {
       case cmPolicies::WARN:
-        e << (this->Makefile->GetPolicies()
-                  ->GetPolicyWarning(cmPolicies::CMP0055)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0055) << "\n";
         break;
       case cmPolicies::OLD:
         issueMessage = false;
diff --git a/Source/cmCMakePolicyCommand.cxx b/Source/cmCMakePolicyCommand.cxx
index 9662fbf..3c878bf 100644
--- a/Source/cmCMakePolicyCommand.cxx
+++ b/Source/cmCMakePolicyCommand.cxx
@@ -111,7 +111,7 @@ bool cmCMakePolicyCommand::HandleGetMode(std::vector<std::string> const& args)
 
   // Lookup the policy number.
   cmPolicies::PolicyID pid;
-  if(!this->Makefile->GetPolicies()->GetPolicyID(id.c_str(), pid))
+  if(!cmPolicies::GetPolicyID(id.c_str(), pid))
     {
     std::ostringstream e;
     e << "GET given policy \"" << id << "\" which is not known to this "
@@ -141,7 +141,7 @@ bool cmCMakePolicyCommand::HandleGetMode(std::vector<std::string> const& args)
       // The policy is required to be set before anything needs it.
       {
       std::ostringstream e;
-      e << this->Makefile->GetPolicies()->GetRequiredPolicyError(pid)
+      e << cmPolicies::GetRequiredPolicyError(pid)
         << "\n"
         << "The call to cmake_policy(GET " << id << " ...) at which this "
         << "error appears requests the policy, and this version of CMake "
diff --git a/Source/cmCommand.h b/Source/cmCommand.h
index 6689243..0548c6b 100644
--- a/Source/cmCommand.h
+++ b/Source/cmCommand.h
@@ -180,7 +180,7 @@ public:
       {
       case cmPolicies::WARN:
         this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,
-          this->Makefile->GetPolicies()->GetPolicyWarning(pol));
+          cmPolicies::GetPolicyWarning(pol));
       case cmPolicies::OLD:
         return false;
       case cmPolicies::REQUIRED_IF_USED:
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index 6ecf0dc..3c90ae2 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -556,8 +556,7 @@ bool cmComputeLinkInformation::Compute()
   if (!this->CMP0060WarnItems.empty())
     {
     std::ostringstream w;
-    w << (this->Makefile->GetCMakeInstance()->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0060)) << "\n"
+    w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0060) << "\n"
       "Some library files are in directories implicitly searched by "
       "the linker when invoked for " << this->LinkLanguage << ":\n"
       " " << cmJoin(this->CMP0060WarnItems, "\n ") << "\n"
@@ -1534,8 +1533,7 @@ void cmComputeLinkInformation::HandleBadFullItem(std::string const& item,
         {
         this->CMakeInstance->GetState()->SetGlobalProperty(wid, "1");
         std::ostringstream w;
-        w << (this->Makefile->GetPolicies()
-              ->GetPolicyWarning(cmPolicies::CMP0008)) << "\n"
+        w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0008) << "\n"
           << "Target \"" << this->Target->GetName() << "\" links to item\n"
           << "  " << item << "\n"
           << "which is a full-path but not a valid library file name.";
@@ -1553,8 +1551,7 @@ void cmComputeLinkInformation::HandleBadFullItem(std::string const& item,
     case cmPolicies::REQUIRED_ALWAYS:
       {
       std::ostringstream e;
-      e << (this->Makefile->GetPolicies()->
-            GetRequiredPolicyError(cmPolicies::CMP0008)) << "\n"
+      e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0008) << "\n"
           << "Target \"" << this->Target->GetName() << "\" links to item\n"
           << "  " << item << "\n"
           << "which is a full-path but not a valid library file name.";
@@ -1600,8 +1597,7 @@ bool cmComputeLinkInformation::FinishLinkerSearchDirectories()
     case cmPolicies::REQUIRED_ALWAYS:
       {
       std::ostringstream e;
-      e << (this->Makefile->GetPolicies()->
-            GetRequiredPolicyError(cmPolicies::CMP0003)) << "\n";
+      e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0003) << "\n";
       this->PrintLinkPolicyDiagnosis(e);
       this->CMakeInstance->IssueMessage(cmake::FATAL_ERROR, e.str(),
                                         this->Target->GetBacktrace());
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index 11056cd..c7be221 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -361,15 +361,13 @@ void cmComputeTargetDepends::AddTargetDepend(
   if(!dependee && !linking &&
     (depender->GetType() != cmTarget::GLOBAL_TARGET))
     {
-    cmMakefile *makefile = depender->GetMakefile();
     cmake::MessageType messageType = cmake::AUTHOR_WARNING;
     bool issueMessage = false;
     std::ostringstream e;
     switch(depender->GetPolicyStatusCMP0046())
       {
       case cmPolicies::WARN:
-        e << (makefile->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0046)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0046) << "\n";
         issueMessage = true;
       case cmPolicies::OLD:
         break;
diff --git a/Source/cmConditionEvaluator.cxx b/Source/cmConditionEvaluator.cxx
index 1f9b9d4..73aface 100644
--- a/Source/cmConditionEvaluator.cxx
+++ b/Source/cmConditionEvaluator.cxx
@@ -118,8 +118,7 @@ const char* cmConditionEvaluator::GetDefinitionIfUnquoted(
     if(!hasBeenReported)
       {
       std::ostringstream e;
-      e << (this->Makefile.GetPolicies()->GetPolicyWarning(
-        cmPolicies::CMP0054)) << "\n";
+      e << (cmPolicies::GetPolicyWarning(cmPolicies::CMP0054)) << "\n";
       e << "Quoted variables like \"" << argument.GetValue() <<
         "\" will no longer be dereferenced "
         "when the policy is set to NEW.  "
@@ -168,8 +167,7 @@ bool cmConditionEvaluator::IsKeyword(std::string const& keyword,
     if(!hasBeenReported)
       {
       std::ostringstream e;
-      e << (this->Makefile.GetPolicies()->GetPolicyWarning(
-        cmPolicies::CMP0054)) << "\n";
+      e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0054) << "\n";
       e << "Quoted keywords like \"" << argument.GetValue() <<
         "\" will no longer be interpreted as keywords "
         "when the policy is set to NEW.  "
@@ -280,10 +278,9 @@ bool cmConditionEvaluator::GetBooleanValueWithAutoDereference(
       {
       case cmPolicies::WARN:
         {
-        cmPolicies* policies = this->Makefile.GetPolicies();
         errorString = "An argument named \"" + newArg.GetValue()
           + "\" appears in a conditional statement.  "
-          + policies->GetPolicyWarning(cmPolicies::CMP0012);
+          + cmPolicies::GetPolicyWarning(cmPolicies::CMP0012);
         status = cmake::AUTHOR_WARNING;
         }
       case cmPolicies::OLD:
@@ -291,10 +288,9 @@ bool cmConditionEvaluator::GetBooleanValueWithAutoDereference(
       case cmPolicies::REQUIRED_IF_USED:
       case cmPolicies::REQUIRED_ALWAYS:
         {
-        cmPolicies* policies = this->Makefile.GetPolicies();
         errorString = "An argument named \"" + newArg.GetValue()
           + "\" appears in a conditional statement.  "
-          + policies->GetRequiredPolicyError(cmPolicies::CMP0012);
+          + cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0012);
         status = cmake::FATAL_ERROR;
         }
       case cmPolicies::NEW:
@@ -493,8 +489,7 @@ bool cmConditionEvaluator::HandleLevel1(cmArgumentList &newArgs,
         {
         cmPolicies::PolicyID pid;
         this->HandlePredicate(
-          this->Makefile.GetPolicies()->GetPolicyID(
-            argP1->c_str(), pid),
+          cmPolicies::GetPolicyID(argP1->c_str(), pid),
             reducible, arg, newArgs, argP1, argP2);
         }
       // does a target exist
@@ -702,8 +697,7 @@ bool cmConditionEvaluator::HandleLevel2(cmArgumentList &newArgs,
           else if(this->Policy57Status == cmPolicies::WARN)
             {
             std::ostringstream e;
-            e << (this->Makefile.GetPolicies()->GetPolicyWarning(
-              cmPolicies::CMP0057)) << "\n";
+            e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0057) << "\n";
             e << "IN_LIST will be interpreted as an operator "
               "when the policy is set to NEW.  "
               "Since the policy is not set the OLD behavior will be used.";
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 56a884c..1109aca 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -334,8 +334,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
              "CMAKE_POLICY_WARNING_CMP0056"))
           {
           std::ostringstream w;
-          w << (this->Makefile->GetCMakeInstance()->GetPolicies()
-                ->GetPolicyWarning(cmPolicies::CMP0056)) << "\n"
+          w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0056) << "\n"
             "For compatibility with older versions of CMake, try_compile "
             "is not honoring caller link flags (e.g. CMAKE_EXE_LINKER_FLAGS) "
             "in the test project."
@@ -349,8 +348,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
       case cmPolicies::REQUIRED_ALWAYS:
         this->Makefile->IssueMessage(
           cmake::FATAL_ERROR,
-          this->Makefile->GetCMakeInstance()->GetPolicies()
-          ->GetRequiredPolicyError(cmPolicies::CMP0056)
+          cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0056)
           );
       case cmPolicies::NEW:
         // NEW behavior is to pass linker flags.
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index b4fad98..a51fb2a 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -257,8 +257,7 @@ static bool checkInterfaceDirs(const std::string &prepro,
           {
           case cmPolicies::WARN:
             messageType = cmake::WARNING;
-            e << target->GetMakefile()->GetPolicies()
-                        ->GetPolicyWarning(cmPolicies::CMP0041) << "\n";
+            e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0041) << "\n";
             break;
           case cmPolicies::OLD:
             continue;
@@ -306,8 +305,7 @@ static bool checkInterfaceDirs(const std::string &prepro,
             case cmPolicies::WARN:
               {
               std::ostringstream s;
-              s << target->GetMakefile()->GetPolicies()
-                        ->GetPolicyWarning(cmPolicies::CMP0052) << "\n";
+              s << cmPolicies::GetPolicyWarning(cmPolicies::CMP0052) << "\n";
               s << "Directory:\n    \"" << *li << "\"\nin "
                 "INTERFACE_INCLUDE_DIRECTORIES of target \""
                 << target->GetName() << "\" is a subdirectory of the install "
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 14f397c..f695393 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -1056,16 +1056,14 @@ bool cmFileCommand::HandleGlobCommand(std::vector<std::string> const& args,
         if(g.GetFollowedSymlinkCount() != 0)
           {
           this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,
-            this->Makefile->GetPolicies()->
-              GetPolicyWarning(cmPolicies::CMP0009));
+            cmPolicies::GetPolicyWarning(cmPolicies::CMP0009));
           }
         break;
       case cmPolicies::REQUIRED_IF_USED:
       case cmPolicies::REQUIRED_ALWAYS:
         this->SetError("policy CMP0009 error");
         this->Makefile->IssueMessage(cmake::FATAL_ERROR,
-          this->Makefile->GetPolicies()->
-            GetRequiredPolicyError(cmPolicies::CMP0009));
+          cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0009));
         return false;
       }
     }
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx
index 2654851..7cfef02 100644
--- a/Source/cmGeneratorExpressionNode.cxx
+++ b/Source/cmGeneratorExpressionNode.cxx
@@ -395,8 +395,7 @@ struct CompilerIdNode : public cmGeneratorExpressionNode
         case cmPolicies::WARN:
           {
           std::ostringstream e;
-          e << context->Makefile->GetPolicies()
-                      ->GetPolicyWarning(cmPolicies::CMP0044);
+          e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0044);
           context->Makefile->GetCMakeInstance()
                  ->IssueMessage(cmake::AUTHOR_WARNING,
                                 e.str(), context->Backtrace);
@@ -1495,8 +1494,7 @@ static const struct TargetPolicyNode : public cmGeneratorExpressionNode
           {
           case cmPolicies::WARN:
             mf->IssueMessage(cmake::AUTHOR_WARNING,
-                             mf->GetPolicies()->
-                             GetPolicyWarning(policyForString(policy)));
+                        cmPolicies::GetPolicyWarning(policyForString(policy)));
           case cmPolicies::REQUIRED_IF_USED:
           case cmPolicies::REQUIRED_ALWAYS:
           case cmPolicies::OLD:
diff --git a/Source/cmGetTargetPropertyCommand.cxx b/Source/cmGetTargetPropertyCommand.cxx
index eed19f4..315e851 100644
--- a/Source/cmGetTargetPropertyCommand.cxx
+++ b/Source/cmGetTargetPropertyCommand.cxx
@@ -56,8 +56,7 @@ bool cmGetTargetPropertyCommand
       {
       case cmPolicies::WARN:
         issueMessage = true;
-        e << this->Makefile->GetPolicies()
-                          ->GetPolicyWarning(cmPolicies::CMP0045) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0045) << "\n";
       case cmPolicies::OLD:
         break;
       case cmPolicies::REQUIRED_IF_USED:
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index cf3a037..1c90537 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -826,7 +826,6 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
 
   if(strcmp(compilerId, "AppleClang") == 0)
     {
-    cmPolicies* policies = this->CMakeInstance->GetPolicies();
     switch(mf->GetPolicyStatus(cmPolicies::CMP0025))
       {
       case cmPolicies::WARN:
@@ -834,7 +833,7 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
            mf->PolicyOptionalWarningEnabled("CMAKE_POLICY_WARNING_CMP0025"))
           {
           std::ostringstream w;
-          w << policies->GetPolicyWarning(cmPolicies::CMP0025) << "\n"
+          w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0025) << "\n"
             "Converting " << lang <<
             " compiler id \"AppleClang\" to \"Clang\" for compatibility."
             ;
@@ -848,7 +847,7 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
       case cmPolicies::REQUIRED_ALWAYS:
         mf->IssueMessage(
           cmake::FATAL_ERROR,
-          policies->GetRequiredPolicyError(cmPolicies::CMP0025)
+          cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0025)
           );
       case cmPolicies::NEW:
         // NEW behavior is to keep AppleClang.
@@ -858,7 +857,6 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
 
   if(strcmp(compilerId, "QCC") == 0)
     {
-    cmPolicies* policies = this->CMakeInstance->GetPolicies();
     switch(mf->GetPolicyStatus(cmPolicies::CMP0047))
       {
       case cmPolicies::WARN:
@@ -866,7 +864,7 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
            mf->PolicyOptionalWarningEnabled("CMAKE_POLICY_WARNING_CMP0047"))
           {
           std::ostringstream w;
-          w << policies->GetPolicyWarning(cmPolicies::CMP0047) << "\n"
+          w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0047) << "\n"
             "Converting " << lang <<
             " compiler id \"QCC\" to \"GNU\" for compatibility."
             ;
@@ -888,7 +886,7 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
       case cmPolicies::REQUIRED_ALWAYS:
         mf->IssueMessage(
           cmake::FATAL_ERROR,
-          policies->GetRequiredPolicyError(cmPolicies::CMP0047)
+          cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0047)
           );
       case cmPolicies::NEW:
         // NEW behavior is to keep QCC.
@@ -1327,9 +1325,7 @@ void cmGlobalGenerator::Generate()
   if(!this->CMP0042WarnTargets.empty())
     {
     std::ostringstream w;
-    w <<
-      (this->GetCMakeInstance()->GetPolicies()->
-       GetPolicyWarning(cmPolicies::CMP0042)) << "\n";
+    w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0042) << "\n";
     w << "MACOSX_RPATH is not specified for"
          " the following targets:\n";
     for(std::set<std::string>::iterator
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 074c4d1..678d60b 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -1103,9 +1103,7 @@ void cmGlobalNinjaGenerator::WriteUnknownExplicitDependencies(std::ostream& os)
   if (!warnExplicitDepends.empty())
     {
     std::ostringstream w;
-    w <<
-      (this->GetCMakeInstance()->GetPolicies()->
-       GetPolicyWarning(cmPolicies::CMP0058)) << "\n"
+    w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0058) << "\n"
       "This project specifies custom command DEPENDS on files "
       "in the build tree that are not specified as the OUTPUT or "
       "BYPRODUCTS of any add_custom_command or add_custom_target:\n"
diff --git a/Source/cmIncludeCommand.cxx b/Source/cmIncludeCommand.cxx
index 71dabaf..ce04d3e 100644
--- a/Source/cmIncludeCommand.cxx
+++ b/Source/cmIncludeCommand.cxx
@@ -104,8 +104,7 @@ bool cmIncludeCommand
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0024))
       {
       case cmPolicies::WARN:
-        e << (this->Makefile->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0024)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0024) << "\n";
         modal = "should";
       case cmPolicies::OLD:
         break;
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index fac9641..f1e0eb8 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -1404,7 +1404,7 @@ bool cmInstallCommand::CheckCMP0006(bool& failure)
       {
       this->Makefile->IssueMessage(
         cmake::AUTHOR_WARNING,
-        this->Makefile->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0006)
+        cmPolicies::GetPolicyWarning(cmPolicies::CMP0006)
         );
       }
     case cmPolicies::OLD:
@@ -1418,8 +1418,7 @@ bool cmInstallCommand::CheckCMP0006(bool& failure)
       failure = true;
       this->Makefile->IssueMessage(
         cmake::FATAL_ERROR,
-        this->Makefile->GetPolicies()
-        ->GetRequiredPolicyError(cmPolicies::CMP0006)
+        cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0006)
         );
       break;
     }
diff --git a/Source/cmLinkDirectoriesCommand.cxx b/Source/cmLinkDirectoriesCommand.cxx
index a21f517..f486bf7 100644
--- a/Source/cmLinkDirectoriesCommand.cxx
+++ b/Source/cmLinkDirectoriesCommand.cxx
@@ -40,18 +40,17 @@ void cmLinkDirectoriesCommand::AddLinkDir(std::string const& dir)
     e << "This command specifies the relative path\n"
       << "  " << unixPath << "\n"
       << "as a link directory.\n";
-    cmPolicies* policies = this->Makefile->GetPolicies();
     switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0015))
       {
       case cmPolicies::WARN:
-        e << policies->GetPolicyWarning(cmPolicies::CMP0015);
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0015);
         this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, e.str());
       case cmPolicies::OLD:
         // OLD behavior does not convert
         break;
       case cmPolicies::REQUIRED_IF_USED:
       case cmPolicies::REQUIRED_ALWAYS:
-        e << policies->GetRequiredPolicyError(cmPolicies::CMP0015);
+        e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0015);
         this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
       case cmPolicies::NEW:
         // NEW behavior converts
diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx
index d18269d..f96b4a8 100644
--- a/Source/cmListCommand.cxx
+++ b/Source/cmListCommand.cxx
@@ -121,8 +121,7 @@ bool cmListCommand::GetList(std::vector<std::string>& list,
       // empty values
       list.clear();
       cmSystemTools::ExpandListArgument(listString, list);
-      std::string warn = this->Makefile->GetPolicies()->
-        GetPolicyWarning(cmPolicies::CMP0007);
+      std::string warn = cmPolicies::GetPolicyWarning(cmPolicies::CMP0007);
       warn += " List has value = [";
       warn += listString;
       warn += "].";
@@ -143,8 +142,7 @@ bool cmListCommand::GetList(std::vector<std::string>& list,
     case cmPolicies::REQUIRED_ALWAYS:
       this->Makefile->IssueMessage(
         cmake::FATAL_ERROR,
-        this->Makefile->GetPolicies()
-        ->GetRequiredPolicyError(cmPolicies::CMP0007)
+        cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0007)
         );
       return false;
     }
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 6b705e8..88c88cd 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -209,7 +209,7 @@ void cmLocalGenerator::ReadInputFile()
         << "to work accidentally and is being allowed for "
         << "compatibility."
         << "\n"
-        << mf->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0014);
+        << cmPolicies::GetPolicyWarning(cmPolicies::CMP0014);
       mf->IssueMessage(cmake::AUTHOR_WARNING, e.str());
     case cmPolicies::OLD:
       // OLD behavior does not warn.
@@ -217,7 +217,7 @@ void cmLocalGenerator::ReadInputFile()
     case cmPolicies::REQUIRED_IF_USED:
     case cmPolicies::REQUIRED_ALWAYS:
       e << "\n"
-        << mf->GetPolicies()->GetRequiredPolicyError(cmPolicies::CMP0014);
+        << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0014);
     case cmPolicies::NEW:
       // NEW behavior prints the error.
       mf->IssueMessage(cmake::FATAL_ERROR, e.str());
@@ -2458,8 +2458,7 @@ bool cmLocalGenerator::GetShouldUseOldFlags(bool shared,
             "shared libraries and will use the " << flagsVar << " variable "
             "instead.  This may cause errors if the original content of "
             << flagsVar << " was removed.\n"
-            << this->Makefile->GetPolicies()->GetPolicyWarning(
-                                                      cmPolicies::CMP0018);
+            << cmPolicies::GetPolicyWarning(cmPolicies::CMP0018);
 
           this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, e.str());
           // fall through to OLD behaviour
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 5686b1b..29d891c 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -591,14 +591,13 @@ void cmMakefile::IncludeScope::EnforceCMP0011()
 {
   // We check the setting of this policy again because the included
   // script might actually set this policy for its includer.
-  cmPolicies* policies = this->Makefile->GetPolicies();
   switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0011))
     {
     case cmPolicies::WARN:
       // Warn because the user did not set this policy.
       {
       std::ostringstream w;
-      w << policies->GetPolicyWarning(cmPolicies::CMP0011) << "\n"
+      w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0011) << "\n"
         << "The included script\n  " << this->File << "\n"
         << "affects policy settings.  "
         << "CMake is implying the NO_POLICY_SCOPE option for compatibility, "
@@ -610,7 +609,7 @@ void cmMakefile::IncludeScope::EnforceCMP0011()
     case cmPolicies::REQUIRED_ALWAYS:
       {
       std::ostringstream e;
-      e << policies->GetRequiredPolicyError(cmPolicies::CMP0011) << "\n"
+      e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0011) << "\n"
         << "The included script\n  " << this->File << "\n"
         << "affects policy settings, so it requires this policy to be set.";
       this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
@@ -879,8 +878,7 @@ cmMakefile::AddCustomCommandToTarget(const std::string& target,
     switch(this->GetPolicyStatus(cmPolicies::CMP0040))
       {
       case cmPolicies::WARN:
-        e << (this->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0040)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0040) << "\n";
         issueMessage = true;
       case cmPolicies::OLD:
         break;
@@ -1438,7 +1436,7 @@ bool cmMakefile::ParseDefineFlag(std::string const& def, bool remove)
       case cmPolicies::WARN:
         this->IssueMessage(
           cmake::AUTHOR_WARNING,
-          this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0005)
+          cmPolicies::GetPolicyWarning(cmPolicies::CMP0005)
           );
       case cmPolicies::OLD:
         // OLD behavior is to not escape the value.  We should not
@@ -1448,7 +1446,7 @@ bool cmMakefile::ParseDefineFlag(std::string const& def, bool remove)
       case cmPolicies::REQUIRED_ALWAYS:
         this->IssueMessage(
           cmake::FATAL_ERROR,
-          this->GetPolicies()->GetRequiredPolicyError(cmPolicies::CMP0005)
+          cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0005)
           );
         return false;
       case cmPolicies::NEW:
@@ -2335,7 +2333,7 @@ void cmMakefile::ExpandVariablesCMP0019()
   if(!w.str().empty())
     {
     std::ostringstream m;
-    m << this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0019)
+    m << cmPolicies::GetPolicyWarning(cmPolicies::CMP0019)
       << "\n"
       << "The following variable evaluations were encountered:\n"
       << w.str();
@@ -2593,7 +2591,7 @@ const char *cmMakefile::ExpandVariablesInString(std::string& source,
   else if(compareResults && (newResult != source || newError != mtype))
     {
     std::string msg =
-      this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0053);
+      cmPolicies::GetPolicyWarning(cmPolicies::CMP0053);
     msg += "\n";
 
     std::string msg_input = original;
@@ -2745,9 +2743,7 @@ cmake::MessageType cmMakefile::ExpandVariablesInStringOld(
       switch(this->GetPolicyStatus(cmPolicies::CMP0010))
         {
         case cmPolicies::WARN:
-          error << "\n"
-                << (this->GetPolicies()
-                    ->GetPolicyWarning(cmPolicies::CMP0010));
+          error << "\n" << cmPolicies::GetPolicyWarning(cmPolicies::CMP0010);
         case cmPolicies::OLD:
           // OLD behavior is to just warn and continue.
           mtype = cmake::AUTHOR_WARNING;
@@ -2755,8 +2751,7 @@ cmake::MessageType cmMakefile::ExpandVariablesInStringOld(
         case cmPolicies::REQUIRED_IF_USED:
         case cmPolicies::REQUIRED_ALWAYS:
           error << "\n"
-                << (this->GetPolicies()
-                    ->GetRequiredPolicyError(cmPolicies::CMP0010));
+                << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0010);
         case cmPolicies::NEW:
           // NEW behavior is to report the error.
           break;
@@ -3820,7 +3815,7 @@ std::string cmMakefile::GetModulesFile(const char* filename) const
             << moduleInCMakeModulePath
             << " (found via CMAKE_MODULE_PATH) which shadows "
             << moduleInCMakeRoot  << ". This may cause errors later on .\n"
-            << this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0017);
+            << cmPolicies::GetPolicyWarning(cmPolicies::CMP0017);
 
           this->IssueMessage(cmake::AUTHOR_WARNING, e.str());
            // break;  // fall through to OLD behaviour
@@ -4188,7 +4183,7 @@ const char *cmMakefile::GetProperty(const std::string& prop,
     switch(this->GetPolicyStatus(cmPolicies::CMP0059))
       {
       case cmPolicies::WARN:
-          this->IssueMessage(cmake::AUTHOR_WARNING, this->GetPolicies()->
+          this->IssueMessage(cmake::AUTHOR_WARNING, cmPolicies::
                              GetPolicyWarning(cmPolicies::CMP0059));
       case cmPolicies::OLD:
         output += this->DefineFlagsOrig;
@@ -4558,14 +4553,14 @@ bool cmMakefile::EnforceUniqueName(std::string const& name, std::string& msg,
       switch (this->GetPolicyStatus(cmPolicies::CMP0002))
         {
         case cmPolicies::WARN:
-          this->IssueMessage(cmake::AUTHOR_WARNING, this->GetPolicies()->
+          this->IssueMessage(cmake::AUTHOR_WARNING, cmPolicies::
                              GetPolicyWarning(cmPolicies::CMP0002));
         case cmPolicies::OLD:
           return true;
         case cmPolicies::REQUIRED_IF_USED:
         case cmPolicies::REQUIRED_ALWAYS:
           this->IssueMessage(cmake::FATAL_ERROR,
-            this->GetPolicies()->GetRequiredPolicyError(cmPolicies::CMP0002)
+            cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0002)
             );
           return true;
         case cmPolicies::NEW:
@@ -4637,7 +4632,7 @@ bool cmMakefile::EnforceUniqueDir(const std::string& srcPath,
     {
     case cmPolicies::WARN:
       // Print the warning.
-      e << this->GetPolicies()->GetPolicyWarning(cmPolicies::CMP0013)
+      e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0013)
         << "\n"
         << "The binary directory\n"
         << "  " << binPath << "\n"
@@ -4654,7 +4649,7 @@ bool cmMakefile::EnforceUniqueDir(const std::string& srcPath,
       return true;
     case cmPolicies::REQUIRED_IF_USED:
     case cmPolicies::REQUIRED_ALWAYS:
-      e << this->GetPolicies()->GetRequiredPolicyError(cmPolicies::CMP0013)
+      e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0013)
         << "\n";
     case cmPolicies::NEW:
       // NEW behavior prints the error.
@@ -4757,7 +4752,7 @@ cmMakefile::GetPolicyStatus(cmPolicies::PolicyID id) const
       {
       return cur;
       }
-    cmPolicies::PolicyStatus def = this->GetPolicies()->GetPolicyStatus(id);
+    cmPolicies::PolicyStatus def = cmPolicies::GetPolicyStatus(id);
     if(def == cmPolicies::REQUIRED_ALWAYS ||
        def == cmPolicies::REQUIRED_IF_USED)
       {
@@ -4792,7 +4787,7 @@ cmMakefile::GetPolicyStatusInternal(cmPolicies::PolicyID id) const
     }
 
   // The policy is not set.  Use the default for this CMake version.
-  return this->GetPolicies()->GetPolicyStatus(id);
+  return cmPolicies::GetPolicyStatus(id);
 }
 
 //----------------------------------------------------------------------------
@@ -4815,7 +4810,7 @@ bool cmMakefile::SetPolicy(const char *id,
                            cmPolicies::PolicyStatus status)
 {
   cmPolicies::PolicyID pid;
-  if (!this->GetPolicies()->GetPolicyID(id, /* out */ pid))
+  if (!cmPolicies::GetPolicyID(id, /* out */ pid))
     {
     std::ostringstream e;
     e << "Policy \"" << id << "\" is not known to this version of CMake.";
@@ -4831,11 +4826,11 @@ bool cmMakefile::SetPolicy(cmPolicies::PolicyID id,
 {
   // A REQUIRED_ALWAYS policy may be set only to NEW.
   if(status != cmPolicies::NEW &&
-     this->GetPolicies()->GetPolicyStatus(id) ==
+     cmPolicies::GetPolicyStatus(id) ==
      cmPolicies::REQUIRED_ALWAYS)
     {
     std::string msg =
-      this->GetPolicies()->GetRequiredAlwaysPolicyError(id);
+      cmPolicies::GetRequiredAlwaysPolicyError(id);
     this->IssueMessage(cmake::FATAL_ERROR, msg);
     return false;
     }
@@ -4937,18 +4932,7 @@ void cmMakefile::PopPolicyBarrier(bool reportError)
 //----------------------------------------------------------------------------
 bool cmMakefile::SetPolicyVersion(const char *version)
 {
-  return this->GetCMakeInstance()->GetPolicies()->
-    ApplyPolicyVersion(this,version);
-}
-
-//----------------------------------------------------------------------------
-cmPolicies *cmMakefile::GetPolicies() const
-{
-  if (!this->GetCMakeInstance())
-  {
-    return 0;
-  }
-  return this->GetCMakeInstance()->GetPolicies();
+  return cmPolicies::ApplyPolicyVersion(this,version);
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx
index afacc1b..a9029a0 100644
--- a/Source/cmProjectCommand.cxx
+++ b/Source/cmProjectCommand.cxx
@@ -216,8 +216,7 @@ bool cmProjectCommand
     if(!vw.empty())
       {
       std::ostringstream w;
-      w << (this->Makefile->GetPolicies()
-            ->GetPolicyWarning(cmPolicies::CMP0048))
+      w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0048)
         << "\nThe following variable(s) would be set to empty:" << vw;
       this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, w.str());
       }
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index f69e9ae..8d1367e 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -974,8 +974,7 @@ std::string cmTarget::ProcessSourceItemCMP0049(const std::string& s)
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0049))
       {
       case cmPolicies::WARN:
-        e << (this->Makefile->GetPolicies()
-              ->GetPolicyWarning(cmPolicies::CMP0049)) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0049) << "\n";
         break;
       case cmPolicies::OLD:
         noMessage = true;
@@ -2008,8 +2007,7 @@ static void processIncludeDirectories(cmTarget const* tgt,
           switch(tgt->GetPolicyStatusCMP0027())
             {
             case cmPolicies::WARN:
-              e << (mf->GetPolicies()
-                    ->GetPolicyWarning(cmPolicies::CMP0027)) << "\n";
+              e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0027) << "\n";
             case cmPolicies::OLD:
               messageType = cmake::AUTHOR_WARNING;
               break;
@@ -2049,8 +2047,7 @@ static void processIncludeDirectories(cmTarget const* tgt,
             {
             case cmPolicies::WARN:
               {
-              e << (mf->GetPolicies()
-                    ->GetPolicyWarning(cmPolicies::CMP0021)) << "\n";
+              e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0021) << "\n";
               messageType = cmake::AUTHOR_WARNING;
               }
               break;
@@ -2398,8 +2395,7 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
         case cmPolicies::WARN:
           {
           std::ostringstream e;
-          e << this->Makefile->GetCMakeInstance()->GetPolicies()
-                   ->GetPolicyWarning(cmPolicies::CMP0043);
+          e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0043);
           this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,
                                        e.str());
           }
@@ -2874,8 +2870,7 @@ bool cmTarget::HandleLocationPropertyPolicy(cmMakefile* context) const
   switch (context->GetPolicyStatus(cmPolicies::CMP0026))
     {
     case cmPolicies::WARN:
-      e << (this->Makefile->GetPolicies()
-        ->GetPolicyWarning(cmPolicies::CMP0026)) << "\n";
+      e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0026) << "\n";
       modal = "should";
     case cmPolicies::OLD:
       break;
@@ -3138,8 +3133,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
             switch(context->GetPolicyStatus(cmPolicies::CMP0051))
               {
               case cmPolicies::WARN:
-                e << (this->Makefile->GetPolicies()
-                      ->GetPolicyWarning(cmPolicies::CMP0051)) << "\n";
+                e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0051) << "\n";
                 noMessage = false;
               case cmPolicies::OLD:
                 break;
@@ -3236,8 +3230,7 @@ public:
           {
           case cmPolicies::WARN:
             {
-            e << (this->Makefile->GetPolicies()
-                  ->GetPolicyWarning(cmPolicies::CMP0028)) << "\n";
+            e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0028) << "\n";
             messageType = cmake::AUTHOR_WARNING;
             }
             break;
@@ -5993,9 +5986,7 @@ cmTargetInternals::ComputeLinkInterfaceLibraries(
         && strcmp(newExplicitLibraries, explicitLibraries) != 0)
       {
       std::ostringstream w;
-      w <<
-        (thisTarget->Makefile->GetPolicies()
-         ->GetPolicyWarning(cmPolicies::CMP0022)) << "\n"
+      w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0022) << "\n"
         "Target \"" << thisTarget->GetName() << "\" has an "
         "INTERFACE_LINK_LIBRARIES property which differs from its " <<
         linkIfaceProp << " properties."
@@ -6064,9 +6055,7 @@ cmTargetInternals::ComputeLinkInterfaceLibraries(
           { newLibraries = "(empty)"; }
 
         std::ostringstream w;
-        w <<
-          (thisTarget->Makefile->GetPolicies()
-           ->GetPolicyWarning(cmPolicies::CMP0022)) << "\n"
+        w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0022) << "\n"
           "Target \"" << thisTarget->GetName() << "\" has an "
           "INTERFACE_LINK_LIBRARIES property.  "
           "This should be preferred as the source of the link interface "
@@ -6323,8 +6312,7 @@ cmTargetInternals::ComputeLinkImplementationLibraries(
             {
             case cmPolicies::WARN:
               {
-              e << (thisTarget->Makefile->GetPolicies()
-                    ->GetPolicyWarning(cmPolicies::CMP0038)) << "\n";
+              e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0038) << "\n";
               messageType = cmake::AUTHOR_WARNING;
               }
               break;
@@ -6461,8 +6449,7 @@ std::string cmTarget::CheckCMP0004(std::string const& item) const
       case cmPolicies::WARN:
         {
         std::ostringstream w;
-        w << (this->Makefile->GetPolicies()
-              ->GetPolicyWarning(cmPolicies::CMP0004)) << "\n"
+        w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0004) << "\n"
           << "Target \"" << this->GetName() << "\" links to item \""
           << item << "\" which has leading or trailing whitespace.";
         cm->IssueMessage(cmake::AUTHOR_WARNING, w.str(),
@@ -6483,8 +6470,7 @@ std::string cmTarget::CheckCMP0004(std::string const& item) const
       case cmPolicies::REQUIRED_ALWAYS:
         {
         std::ostringstream e;
-        e << (this->Makefile->GetPolicies()
-              ->GetRequiredPolicyError(cmPolicies::CMP0004)) << "\n"
+        e << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0004) << "\n"
           << "Target \"" << this->GetName() << "\" links to item \""
           << item << "\" which has leading or trailing whitespace.";
         cm->IssueMessage(cmake::FATAL_ERROR, e.str(), this->GetBacktrace());
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 9be7d46..df37d66 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -58,16 +58,14 @@ bool cmTargetLinkLibrariesCommand
           e << "\n"
             << "CMake does not support this but it used to work accidentally "
             << "and is being allowed for compatibility."
-            << "\n" << this->Makefile->GetPolicies()->
-                                        GetPolicyWarning(cmPolicies::CMP0016);
+            << "\n" << cmPolicies::GetPolicyWarning(cmPolicies::CMP0016);
            break;
         case cmPolicies::OLD:          // OLD behavior does not warn.
           t = cmake::MESSAGE;
           break;
         case cmPolicies::REQUIRED_IF_USED:
         case cmPolicies::REQUIRED_ALWAYS:
-          e << "\n" << this->Makefile->GetPolicies()->
-                                  GetRequiredPolicyError(cmPolicies::CMP0016);
+          e << "\n" << cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0016);
           break;
         case cmPolicies::NEW:  // NEW behavior prints the error.
           break;
@@ -108,8 +106,7 @@ bool cmTargetLinkLibrariesCommand
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0039))
       {
       case cmPolicies::WARN:
-        e << this->Makefile->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0039) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0039) << "\n";
         modal = "should";
       case cmPolicies::OLD:
         break;
@@ -379,8 +376,7 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const std::string& lib,
     switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0023))
       {
       case cmPolicies::WARN:
-        e << this->Makefile->GetPolicies()
-          ->GetPolicyWarning(cmPolicies::CMP0023) << "\n";
+        e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0023) << "\n";
         modal = "should";
       case cmPolicies::OLD:
         break;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=13981f20688279b4e10faca67b7020946c9ef733
commit 13981f20688279b4e10faca67b7020946c9ef733
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:11:05 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:20 2015 +0200

    cmPolicies: Make all API static.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 51bcde3..c95520f 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -243,7 +243,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
     {
     if (isPolicyNewerThan(pid, majorVer, minorVer, patchVer))
       {
-      if(this->GetPolicyStatus(pid) == cmPolicies::REQUIRED_ALWAYS)
+      if(cmPolicies::GetPolicyStatus(pid) == cmPolicies::REQUIRED_ALWAYS)
         {
         ancientPolicies.push_back(pid);
         }
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 1e2849d..fee7dd9 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -250,22 +250,22 @@ public:
   };
 
   ///! convert a string policy ID into a number
-  bool GetPolicyID(const char *id, /* out */ cmPolicies::PolicyID &pid);
+  static bool GetPolicyID(const char *id, /* out */ cmPolicies::PolicyID &pid);
 
   ///! Get the default status for a policy
-  cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id);
+  static cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id);
 
   ///! Set a policy level for this listfile
-  bool ApplyPolicyVersion(cmMakefile *mf, const char *version);
+  static bool ApplyPolicyVersion(cmMakefile *mf, const char *version);
 
   ///! return a warning string for a given policy
-  std::string GetPolicyWarning(cmPolicies::PolicyID id);
+  static std::string GetPolicyWarning(cmPolicies::PolicyID id);
 
   ///! return an error string for when a required policy is unspecified
-  std::string GetRequiredPolicyError(cmPolicies::PolicyID id);
+  static std::string GetRequiredPolicyError(cmPolicies::PolicyID id);
 
   ///! return an error string for when a required policy is unspecified
-  std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
+  static std::string GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id);
 
   /** Represent a set of policy values.  */
   typedef std::map<PolicyID, PolicyStatus> PolicyMap;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=23e2bcc8dba21b532ebbde20518f8a9f2d312103
commit 23e2bcc8dba21b532ebbde20518f8a9f2d312103
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:11:01 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:20 2015 +0200

    cmPolicies: Remove unused DefinePolicy method.
    
    Policies are no longer defined at runtime.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 5d023ee..51bcde3 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -121,16 +121,6 @@ const char* idToShortDescription(cmPolicies::PolicyID id)
   return 0;
 }
 
-void cmPolicies::DefinePolicy(cmPolicies::PolicyID,
-                              const char *,
-                              const char *,
-                              unsigned int,
-                              unsigned int,
-                              unsigned int,
-                              cmPolicies::PolicyStatus)
-{
-}
-
 //----------------------------------------------------------------------------
 static void DiagnoseAncientPolicies(
     std::vector<cmPolicies::PolicyID> const& ancient,
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 50ffe81..1e2849d 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -255,15 +255,6 @@ public:
   ///! Get the default status for a policy
   cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id);
 
-  ///! Define a Policy for CMake
-  void DefinePolicy(cmPolicies::PolicyID id,
-                    const char *stringID,
-                    const char *shortDescription,
-                    unsigned int majorVersionIntroduced,
-                    unsigned int minorVersionIntroduced,
-                    unsigned int patchVersionIntroduced,
-                    cmPolicies::PolicyStatus status);
-
   ///! Set a policy level for this listfile
   bool ApplyPolicyVersion(cmMakefile *mf, const char *version);
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5641ba4fcaba322e6f189e33eaccc4621d6ba99d
commit 5641ba4fcaba322e6f189e33eaccc4621d6ba99d
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:42 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:20 2015 +0200

    cmPolicies: Remove unused cmPolicy class.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 12f945a..5d023ee 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -121,337 +121,7 @@ const char* idToShortDescription(cmPolicies::PolicyID id)
   return 0;
 }
 
-class cmPolicy
-{
-public:
-  cmPolicy(cmPolicies::PolicyID iD)
-  {
-    this->ID = iD;
-  }
-
-  cmPolicies::PolicyID ID;
-};
-
-cmPolicies::cmPolicies()
-{
-  // define all the policies
-  this->DefinePolicy(
-    CMP0000, "CMP0000",
-    "A minimum required CMake version must be specified.",
-    2,6,0, cmPolicies::WARN
-    );
-
-  this->DefinePolicy(
-    CMP0001, "CMP0001",
-    "CMAKE_BACKWARDS_COMPATIBILITY should no longer be used.",
-    2,6,0, cmPolicies::WARN
-    );
-
-  this->DefinePolicy(
-    CMP0002, "CMP0002",
-    "Logical target names must be globally unique.",
-    2,6,0, cmPolicies::WARN
-    );
-
-  this->DefinePolicy(
-    CMP0003, "CMP0003",
-    "Libraries linked via full path no longer produce linker search paths.",
-    2,6,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0004, "CMP0004",
-    "Libraries linked may not have leading or trailing whitespace.",
-    2,6,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0005, "CMP0005",
-    "Preprocessor definition values are now escaped automatically.",
-    2,6,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0006, "CMP0006",
-    "Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION.",
-    2,6,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0007, "CMP0007",
-    "list command no longer ignores empty elements.",
-    2,6,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0008, "CMP0008",
-    "Libraries linked by full-path must have a valid library file name.",
-    2,6,1, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0009, "CMP0009",
-    "FILE GLOB_RECURSE calls should not follow symlinks by default.",
-    2,6,2, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0010, "CMP0010",
-    "Bad variable reference syntax is an error.",
-    2,6,3, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0011, "CMP0011",
-    "Included scripts do automatic cmake_policy PUSH and POP.",
-    2,6,3, cmPolicies::WARN);
-
-    this->DefinePolicy(
-    CMP0012, "CMP0012",
-    "if() recognizes numbers and boolean constants.",
-    2,8,0, cmPolicies::WARN);
-
-    this->DefinePolicy(
-    CMP0013, "CMP0013",
-    "Duplicate binary directories are not allowed.",
-    2,8,0, cmPolicies::WARN);
-
-    this->DefinePolicy(
-    CMP0014, "CMP0014",
-    "Input directories must have CMakeLists.txt.",
-    2,8,0, cmPolicies::WARN);
-
-    this->DefinePolicy(
-    CMP0015, "CMP0015",
-    "link_directories() treats paths relative to the source dir.",
-    2,8,1, cmPolicies::WARN);
-
-    this->DefinePolicy(
-    CMP0016, "CMP0016",
-    "target_link_libraries() reports error if its only argument "
-    "is not a target.",
-    2,8,3, cmPolicies::WARN);
-
-    this->DefinePolicy(
-    CMP0017, "CMP0017",
-    "Prefer files from the CMake module directory when including from there.",
-    2,8,4, cmPolicies::WARN);
-
-    this->DefinePolicy(
-    CMP0018, "CMP0018",
-    "Ignore CMAKE_SHARED_LIBRARY_<Lang>_FLAGS variable.",
-    2,8,9, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0019, "CMP0019",
-    "Do not re-expand variables in include and link information.",
-    2,8,11, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0020, "CMP0020",
-    "Automatically link Qt executables to qtmain target on Windows.",
-    2,8,11, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0021, "CMP0021",
-    "Fatal error on relative paths in INCLUDE_DIRECTORIES target property.",
-    2,8,12, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0022, "CMP0022",
-    "INTERFACE_LINK_LIBRARIES defines the link interface.",
-    2,8,12, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0023, "CMP0023",
-    "Plain and keyword target_link_libraries signatures cannot be mixed.",
-    2,8,12, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0024, "CMP0024",
-    "Disallow include export result.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0025, "CMP0025",
-    "Compiler id for Apple Clang is now AppleClang.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0026, "CMP0026",
-    "Disallow use of the LOCATION target property.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0027, "CMP0027",
-    "Conditionally linked imported targets with missing include directories.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0028, "CMP0028",
-    "Double colon in target name means ALIAS or IMPORTED target.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0029, "CMP0029",
-    "The subdir_depends command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0030, "CMP0030",
-    "The use_mangled_mesa command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0031, "CMP0031",
-    "The load_command command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0032, "CMP0032",
-    "The output_required_files command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0033, "CMP0033",
-    "The export_library_dependencies command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0034, "CMP0034",
-    "The utility_source command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0035, "CMP0035",
-    "The variable_requires command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0036, "CMP0036",
-    "The build_name command should not be called.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0037, "CMP0037",
-    "Target names should not be reserved and should match a validity pattern.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0038, "CMP0038",
-    "Targets may not link directly to themselves.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0039, "CMP0039",
-    "Utility targets may not have link dependencies.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0040, "CMP0040",
-    "The target in the TARGET signature of add_custom_command() must exist.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0041, "CMP0041",
-    "Error on relative include with generator expression.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0042, "CMP0042",
-    "MACOSX_RPATH is enabled by default.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0043, "CMP0043",
-    "Ignore COMPILE_DEFINITIONS_<Config> properties.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0044, "CMP0044",
-    "Case sensitive <LANG>_COMPILER_ID generator expressions.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0045, "CMP0045",
-    "Error on non-existent target in get_target_property.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0046, "CMP0046",
-    "Error on non-existent dependency in add_dependencies.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0047, "CMP0047",
-    "Use QCC compiler id for the qcc drivers on QNX.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0048, "CMP0048",
-    "project() command manages VERSION variables.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0049, "CMP0049",
-    "Do not expand variables in target source entries.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0050, "CMP0050",
-    "Disallow add_custom_command SOURCE signatures.",
-    3,0,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0051, "CMP0051",
-    "List TARGET_OBJECTS in SOURCES target property.",
-    3,1,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0052, "CMP0052",
-    "Reject source and build dirs in installed "
-    "INTERFACE_INCLUDE_DIRECTORIES.",
-    3,1,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0053, "CMP0053",
-    "Simplify variable reference and escape sequence evaluation.",
-    3,1,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0054, "CMP0054",
-    "Only interpret if() arguments as variables or keywords when unquoted.",
-    3,1,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0055, "CMP0055",
-    "Strict checking for break() command.",
-    3,2,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0056, "CMP0056",
-    "Honor link flags in try_compile() source-file signature.",
-    3,2,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0058, "CMP0058",
-    "Ninja requires custom command byproducts to be explicit.",
-    3,3,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0059, "CMP0059",
-    "Do no treat DEFINITIONS as a built-in directory property.",
-    3,3,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0060, "CMP0060",
-    "Link libraries by full path even in implicit directories.",
-    3,3,0, cmPolicies::WARN);
-
-  this->DefinePolicy(
-    CMP0057, "CMP0057",
-    "Support new IN_LIST if() operator.",
-    3,3,0, cmPolicies::WARN);
-}
-
-cmPolicies::~cmPolicies()
-{
-  cmDeleteAll(this->Policies);
-}
-
-void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
+void cmPolicies::DefinePolicy(cmPolicies::PolicyID,
                               const char *,
                               const char *,
                               unsigned int,
@@ -459,7 +129,6 @@ void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
                               unsigned int,
                               cmPolicies::PolicyStatus)
 {
-  this->Policies[iD] = new cmPolicy(iD);
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 2b96939..50ffe81 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -223,9 +223,6 @@ class cmPolicy;
 class cmPolicies
 {
 public:
-  cmPolicies();
-  ~cmPolicies();
-
   /// Status of a policy
   enum PolicyStatus {
     OLD, ///< Use old behavior
@@ -281,10 +278,6 @@ public:
 
   /** Represent a set of policy values.  */
   typedef std::map<PolicyID, PolicyStatus> PolicyMap;
-
-  private:
-  // might have to make these internal for VS6 not sure yet
-  std::map<PolicyID,cmPolicy *> Policies;
 };
 
 #endif

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3de54497030b7d8f40f219c0fdfe991e2a9041be
commit 3de54497030b7d8f40f219c0fdfe991e2a9041be
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:42 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:19 2015 +0200

    cmPolicies: Loop over all policies using enum constants.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 75d12d4..12f945a 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -579,20 +579,20 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
 
   // now loop over all the policies and set them as appropriate
   std::vector<cmPolicies::PolicyID> ancientPolicies;
-  for(std::map<cmPolicies::PolicyID,cmPolicy *>::iterator i
-                     = this->Policies.begin(); i != this->Policies.end(); ++i)
+  for(PolicyID pid = cmPolicies::CMP0000;
+      pid != cmPolicies::CMPCOUNT; pid = PolicyID(pid+1))
     {
-    if (isPolicyNewerThan(i->first, majorVer, minorVer, patchVer))
+    if (isPolicyNewerThan(pid, majorVer, minorVer, patchVer))
       {
-      if(this->GetPolicyStatus(i->first) == cmPolicies::REQUIRED_ALWAYS)
+      if(this->GetPolicyStatus(pid) == cmPolicies::REQUIRED_ALWAYS)
         {
-        ancientPolicies.push_back(i->first);
+        ancientPolicies.push_back(pid);
         }
       else
         {
         cmPolicies::PolicyStatus status = cmPolicies::WARN;
-        if(!GetPolicyDefault(mf, idToString(i->first), &status) ||
-           !mf->SetPolicy(i->first, status))
+        if(!GetPolicyDefault(mf, idToString(pid), &status) ||
+           !mf->SetPolicy(pid, status))
           {
           return false;
           }
@@ -600,7 +600,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
       }
     else
       {
-      if (!mf->SetPolicy(i->first, cmPolicies::NEW))
+      if (!mf->SetPolicy(pid, cmPolicies::NEW))
         {
         return false;
         }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=387aff200c94073560a961cd2971ab6826347d4d
commit 387aff200c94073560a961cd2971ab6826347d4d
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:38 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:19 2015 +0200

    cmPolicies: Trivialize GetPolicyStatus method.
    
    It would be possible to implement this with an XMacro and switch
    statement, but every codepath currently would still return WARN.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 10f85ac..75d12d4 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -124,15 +124,12 @@ const char* idToShortDescription(cmPolicies::PolicyID id)
 class cmPolicy
 {
 public:
-  cmPolicy(cmPolicies::PolicyID iD,
-            cmPolicies::PolicyStatus status)
+  cmPolicy(cmPolicies::PolicyID iD)
   {
     this->ID = iD;
-    this->Status = status;
   }
 
   cmPolicies::PolicyID ID;
-  cmPolicies::PolicyStatus Status;
 };
 
 cmPolicies::cmPolicies()
@@ -460,10 +457,9 @@ void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
                               unsigned int,
                               unsigned int,
                               unsigned int,
-                              cmPolicies::PolicyStatus status)
+                              cmPolicies::PolicyStatus)
 {
-  this->Policies[iD] = new cmPolicy(iD,
-                                    status);
+  this->Policies[iD] = new cmPolicy(iD);
 }
 
 //----------------------------------------------------------------------------
@@ -664,18 +660,9 @@ std::string cmPolicies::GetRequiredPolicyError(cmPolicies::PolicyID id)
 
 ///! Get the default status for a policy
 cmPolicies::PolicyStatus
-cmPolicies::GetPolicyStatus(cmPolicies::PolicyID id)
+cmPolicies::GetPolicyStatus(cmPolicies::PolicyID)
 {
-  // if the policy is not know then what?
-  std::map<cmPolicies::PolicyID,cmPolicy *>::iterator pos =
-    this->Policies.find(id);
-  if (pos == this->Policies.end())
-    {
-    // TODO is this right?
-    return cmPolicies::WARN;
-    }
-
-  return pos->second->Status;
+  return cmPolicies::WARN;
 }
 
 //----------------------------------------------------------------------------

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=dbf680d670e399cc3b042721a1179fba0429073b
commit dbf680d670e399cc3b042721a1179fba0429073b
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:27:36 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:19 2015 +0200

    cmPolicies: Use more-direct ID access.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 2d7c710..10f85ac 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -596,7 +596,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
         {
         cmPolicies::PolicyStatus status = cmPolicies::WARN;
         if(!GetPolicyDefault(mf, idToString(i->first), &status) ||
-           !mf->SetPolicy(i->second->ID, status))
+           !mf->SetPolicy(i->first, status))
           {
           return false;
           }
@@ -604,7 +604,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
       }
     else
       {
-      if (!mf->SetPolicy(i->second->ID, cmPolicies::NEW))
+      if (!mf->SetPolicy(i->first, cmPolicies::NEW))
         {
         return false;
         }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8c204133e5b7dc278de64c66a6ce0be8ec4ab6f4
commit 8c204133e5b7dc278de64c66a6ce0be8ec4ab6f4
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:25:14 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:19 2015 +0200

    cmPolicies: Implement in terms of public API.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index acb591b..2d7c710 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -588,7 +588,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
     {
     if (isPolicyNewerThan(i->first, majorVer, minorVer, patchVer))
       {
-      if(i->second->Status == cmPolicies::REQUIRED_ALWAYS)
+      if(this->GetPolicyStatus(i->first) == cmPolicies::REQUIRED_ALWAYS)
         {
         ancientPolicies.push_back(i->first);
         }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e3a8c0291e6ae364365bfe48f12c6a5f4ec0e76f
commit e3a8c0291e6ae364365bfe48f12c6a5f4ec0e76f
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:35 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:19 2015 +0200

    cmPolicies: Make private method file-static.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index c1a2d2f..acb591b 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -467,6 +467,31 @@ void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
 }
 
 //----------------------------------------------------------------------------
+static void DiagnoseAncientPolicies(
+    std::vector<cmPolicies::PolicyID> const& ancient,
+    unsigned int majorVer,
+    unsigned int minorVer,
+    unsigned int patchVer,
+    cmMakefile* mf)
+{
+  std::ostringstream e;
+  e << "The project requests behavior compatible with CMake version \""
+    << majorVer << "." << minorVer << "." << patchVer
+    << "\", which requires the OLD behavior for some policies:\n";
+  for(std::vector<cmPolicies::PolicyID>::const_iterator
+        i = ancient.begin(); i != ancient.end(); ++i)
+    {
+    e << "  " << idToString(*i) << ": " << idToShortDescription(*i) << "\n";
+    }
+  e << "However, this version of CMake no longer supports the OLD "
+    << "behavior for these policies.  "
+    << "Please either update your CMakeLists.txt files to conform to "
+    << "the new behavior or use an older version of CMake that still "
+    << "supports the old behavior.";
+  mf->IssueMessage(cmake::FATAL_ERROR, e.str());
+}
+
+//----------------------------------------------------------------------------
 static bool GetPolicyDefault(cmMakefile* mf, std::string const& policy,
                              cmPolicies::PolicyStatus* defaultSetting)
 {
@@ -589,8 +614,8 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
   // Make sure the project does not use any ancient policies.
   if(!ancientPolicies.empty())
     {
-    this->DiagnoseAncientPolicies(ancientPolicies,
-                                  majorVer, minorVer, patchVer, mf);
+    DiagnoseAncientPolicies(ancientPolicies,
+                            majorVer, minorVer, patchVer, mf);
     cmSystemTools::SetFatalErrorOccured();
     return false;
     }
@@ -671,28 +696,3 @@ cmPolicies::GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id)
     << "Run cmake --help-policy " << pid << " for more information.";
   return e.str();
 }
-
-//----------------------------------------------------------------------------
-void
-cmPolicies::DiagnoseAncientPolicies(std::vector<PolicyID> const& ancient,
-                                    unsigned int majorVer,
-                                    unsigned int minorVer,
-                                    unsigned int patchVer,
-                                    cmMakefile* mf)
-{
-  std::ostringstream e;
-  e << "The project requests behavior compatible with CMake version \""
-    << majorVer << "." << minorVer << "." << patchVer
-    << "\", which requires the OLD behavior for some policies:\n";
-  for(std::vector<PolicyID>::const_iterator
-        i = ancient.begin(); i != ancient.end(); ++i)
-    {
-    e << "  " << idToString(*i) << ": " << idToShortDescription(*i) << "\n";
-    }
-  e << "However, this version of CMake no longer supports the OLD "
-    << "behavior for these policies.  "
-    << "Please either update your CMakeLists.txt files to conform to "
-    << "the new behavior or use an older version of CMake that still "
-    << "supports the old behavior.";
-  mf->IssueMessage(cmake::FATAL_ERROR, e.str());
-}
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index df04fdf..2b96939 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -285,10 +285,6 @@ public:
   private:
   // might have to make these internal for VS6 not sure yet
   std::map<PolicyID,cmPolicy *> Policies;
-
-  void DiagnoseAncientPolicies(std::vector<PolicyID> const& ancient,
-                               unsigned int majorVer, unsigned int minorVer,
-                               unsigned int patchVer, cmMakefile* mf);
 };
 
 #endif

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cb765af0499d1ad51b7e4d3ff45f1e40d6ca843b
commit cb765af0499d1ad51b7e4d3ff45f1e40d6ca843b
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:31 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:18 2015 +0200

    cmPolicies: Implement short description access with XMacros.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 5e58f23..c1a2d2f 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -49,6 +49,10 @@ static bool stringToId(const char* input, cmPolicies::PolicyID& pid)
 #define CM_FOR_EACH_POLICY_ID_VERSION(POLICY) \
   CM_FOR_EACH_POLICY_TABLE(POLICY, CM_SELECT_ID_VERSION)
 
+#define CM_SELECT_ID_DOC(F, A1, A2, A3, A4, A5, A6) F(A1, A2)
+#define CM_FOR_EACH_POLICY_ID_DOC(POLICY) \
+  CM_FOR_EACH_POLICY_TABLE(POLICY, CM_SELECT_ID_DOC)
+
 static const char* idToString(cmPolicies::PolicyID id)
 {
   switch(id)
@@ -102,20 +106,32 @@ static bool isPolicyNewerThan(cmPolicies::PolicyID id,
   return false;
 }
 
+const char* idToShortDescription(cmPolicies::PolicyID id)
+{
+  switch(id)
+    {
+#define POLICY_CASE(ID, SHORT_DESCRIPTION) \
+    case cmPolicies::ID: \
+      return SHORT_DESCRIPTION;
+  CM_FOR_EACH_POLICY_ID_DOC(POLICY_CASE)
+#undef POLICY_CASE
+    case cmPolicies::CMPCOUNT:
+      return 0;
+    }
+  return 0;
+}
+
 class cmPolicy
 {
 public:
   cmPolicy(cmPolicies::PolicyID iD,
-            const char *shortDescription,
             cmPolicies::PolicyStatus status)
   {
     this->ID = iD;
-    this->ShortDescription = shortDescription;
     this->Status = status;
   }
 
   cmPolicies::PolicyID ID;
-  std::string ShortDescription;
   cmPolicies::PolicyStatus Status;
 };
 
@@ -440,14 +456,13 @@ cmPolicies::~cmPolicies()
 
 void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
                               const char *,
-                              const char *shortDescription,
+                              const char *,
                               unsigned int,
                               unsigned int,
                               unsigned int,
                               cmPolicies::PolicyStatus status)
 {
   this->Policies[iD] = new cmPolicy(iD,
-                                    shortDescription,
                                     status);
 }
 
@@ -591,13 +606,10 @@ bool cmPolicies::GetPolicyID(const char *id, cmPolicies::PolicyID &pid)
 ///! return a warning string for a given policy
 std::string cmPolicies::GetPolicyWarning(cmPolicies::PolicyID id)
 {
-  std::map<cmPolicies::PolicyID,cmPolicy *>::iterator pos =
-    this->Policies.find(id);
-
   std::ostringstream msg;
   msg <<
     "Policy " << idToString(id) << " is not set: "
-    "" << pos->second->ShortDescription << "  "
+    "" << idToShortDescription(id) << "  "
     "Run \"cmake --help-policy " << idToString(id) << "\" for "
     "policy details.  "
     "Use the cmake_policy command to set the policy "
@@ -609,13 +621,10 @@ std::string cmPolicies::GetPolicyWarning(cmPolicies::PolicyID id)
 ///! return an error string for when a required policy is unspecified
 std::string cmPolicies::GetRequiredPolicyError(cmPolicies::PolicyID id)
 {
-  std::map<cmPolicies::PolicyID,cmPolicy *>::iterator pos =
-    this->Policies.find(id);
-
   std::ostringstream error;
   error <<
     "Policy " << idToString(id) << " is not set to NEW: "
-    "" << pos->second->ShortDescription << "  "
+    "" << idToShortDescription(id) << "  "
     "Run \"cmake --help-policy " << idToString(id) << "\" for "
     "policy details.  "
     "CMake now requires this policy to be set to NEW by the project.  "
@@ -678,8 +687,7 @@ cmPolicies::DiagnoseAncientPolicies(std::vector<PolicyID> const& ancient,
   for(std::vector<PolicyID>::const_iterator
         i = ancient.begin(); i != ancient.end(); ++i)
     {
-    cmPolicy const* policy = this->Policies[*i];
-    e << "  " << idToString(*i) << ": " << policy->ShortDescription << "\n";
+    e << "  " << idToString(*i) << ": " << idToShortDescription(*i) << "\n";
     }
   e << "However, this version of CMake no longer supports the OLD "
     << "behavior for these policies.  "

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5df267fa1dc5f8389f571eb6841e51b8fe333b2c
commit 5df267fa1dc5f8389f571eb6841e51b8fe333b2c
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:27 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:18 2015 +0200

    cmPolicies: Implement version check with XMacro.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index bd43cc3..5e58f23 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -79,41 +79,43 @@ static const char* idToVersion(cmPolicies::PolicyID id)
   return 0;
 }
 
+static bool isPolicyNewerThan(cmPolicies::PolicyID id,
+                       unsigned int majorV,
+                       unsigned int minorV,
+                       unsigned int patchV)
+{
+  switch(id)
+    {
+#define POLICY_CASE(ID, V_MAJOR, V_MINOR, V_PATCH) \
+    case cmPolicies::ID: \
+      return (majorV < V_MAJOR || \
+             (majorV == V_MAJOR && \
+              minorV + 1 < V_MINOR + 1) || \
+             (majorV == V_MAJOR && \
+              minorV == V_MINOR && \
+              patchV + 1 < V_PATCH + 1));
+  CM_FOR_EACH_POLICY_ID_VERSION(POLICY_CASE)
+#undef POLICY_CASE
+    case cmPolicies::CMPCOUNT:
+      return false;
+    }
+  return false;
+}
+
 class cmPolicy
 {
 public:
   cmPolicy(cmPolicies::PolicyID iD,
             const char *shortDescription,
-            unsigned int majorVersionIntroduced,
-            unsigned int minorVersionIntroduced,
-            unsigned int patchVersionIntroduced,
             cmPolicies::PolicyStatus status)
   {
     this->ID = iD;
     this->ShortDescription = shortDescription;
-    this->MajorVersionIntroduced = majorVersionIntroduced;
-    this->MinorVersionIntroduced = minorVersionIntroduced;
-    this->PatchVersionIntroduced = patchVersionIntroduced;
     this->Status = status;
   }
 
-  bool IsPolicyNewerThan(unsigned int majorV,
-                         unsigned int minorV,
-                         unsigned int patchV)
-  {
-    return (majorV < this->MajorVersionIntroduced ||
-        (majorV == this->MajorVersionIntroduced &&
-         minorV < this->MinorVersionIntroduced) ||
-        (majorV == this->MajorVersionIntroduced &&
-         minorV == this->MinorVersionIntroduced &&
-         patchV < this->PatchVersionIntroduced));
-  }
-
   cmPolicies::PolicyID ID;
   std::string ShortDescription;
-  unsigned int MajorVersionIntroduced;
-  unsigned int MinorVersionIntroduced;
-  unsigned int PatchVersionIntroduced;
   cmPolicies::PolicyStatus Status;
 };
 
@@ -439,16 +441,13 @@ cmPolicies::~cmPolicies()
 void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
                               const char *,
                               const char *shortDescription,
-                              unsigned int majorVersionIntroduced,
-                              unsigned int minorVersionIntroduced,
-                              unsigned int patchVersionIntroduced,
+                              unsigned int,
+                              unsigned int,
+                              unsigned int,
                               cmPolicies::PolicyStatus status)
 {
   this->Policies[iD] = new cmPolicy(iD,
                                     shortDescription,
-                                    majorVersionIntroduced,
-                                    minorVersionIntroduced,
-                                    patchVersionIntroduced,
                                     status);
 }
 
@@ -547,7 +546,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
   for(std::map<cmPolicies::PolicyID,cmPolicy *>::iterator i
                      = this->Policies.begin(); i != this->Policies.end(); ++i)
     {
-    if (i->second->IsPolicyNewerThan(majorVer,minorVer,patchVer))
+    if (isPolicyNewerThan(i->first, majorVer, minorVer, patchVer))
       {
       if(i->second->Status == cmPolicies::REQUIRED_ALWAYS)
         {

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2235cfebeeb3447a1c62d7a0207e899c9f7c9240
commit 2235cfebeeb3447a1c62d7a0207e899c9f7c9240
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:20 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:18 2015 +0200

    cmPolicies: Implement id to version with XMacro.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index d75ea23..bd43cc3 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -45,6 +45,10 @@ static bool stringToId(const char* input, cmPolicies::PolicyID& pid)
   return true;
 }
 
+#define CM_SELECT_ID_VERSION(F, A1, A2, A3, A4, A5, A6) F(A1, A3, A4, A5)
+#define CM_FOR_EACH_POLICY_ID_VERSION(POLICY) \
+  CM_FOR_EACH_POLICY_TABLE(POLICY, CM_SELECT_ID_VERSION)
+
 static const char* idToString(cmPolicies::PolicyID id)
 {
   switch(id)
@@ -60,6 +64,21 @@ static const char* idToString(cmPolicies::PolicyID id)
   return 0;
 }
 
+static const char* idToVersion(cmPolicies::PolicyID id)
+{
+  switch(id)
+    {
+#define POLICY_CASE(ID, V_MAJOR, V_MINOR, V_PATCH) \
+    case cmPolicies::ID: \
+      return #V_MAJOR "." #V_MINOR "." #V_PATCH;
+  CM_FOR_EACH_POLICY_ID_VERSION(POLICY_CASE)
+#undef POLICY_CASE
+    case cmPolicies::CMPCOUNT:
+      return 0;
+    }
+  return 0;
+}
+
 class cmPolicy
 {
 public:
@@ -78,17 +97,6 @@ public:
     this->Status = status;
   }
 
-  std::string GetVersionString()
-  {
-    std::ostringstream v;
-    v << this->MajorVersionIntroduced << "." << this->MinorVersionIntroduced;
-    if(this->PatchVersionIntroduced > 0)
-      {
-      v << "." << this->PatchVersionIntroduced;
-      }
-    return v.str();
-  }
-
   bool IsPolicyNewerThan(unsigned int majorV,
                          unsigned int minorV,
                          unsigned int patchV)
@@ -615,7 +623,7 @@ std::string cmPolicies::GetRequiredPolicyError(cmPolicies::PolicyID id)
     "The policy may be set explicitly using the code\n"
     "  cmake_policy(SET " << idToString(id) << " NEW)\n"
     "or by upgrading all policies with the code\n"
-    "  cmake_policy(VERSION " << pos->second->GetVersionString() <<
+    "  cmake_policy(VERSION " << idToVersion(id) <<
     ") # or later\n"
     "Run \"cmake --help-command cmake_policy\" for more information.";
   return error.str();
@@ -646,7 +654,7 @@ cmPolicies::GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id)
   e << "Policy " << pid << " may not be set to OLD behavior because this "
     << "version of CMake no longer supports it.  "
     << "The policy was introduced in "
-    << "CMake version " << this->Policies[id]->GetVersionString()
+    << "CMake version " << idToVersion(id)
     << ", and use of NEW behavior is now required."
     << "\n"
     << "Please either update your CMakeLists.txt files to conform to "

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=05d8438860cac1c1ec2d1bcc325b8bc05c0cfcdc
commit 05d8438860cac1c1ec2d1bcc325b8bc05c0cfcdc
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:15 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:18 2015 +0200

    cmPolicies: Implement id to string conversion with XMacro.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 9250620..d75ea23 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -45,11 +45,25 @@ static bool stringToId(const char* input, cmPolicies::PolicyID& pid)
   return true;
 }
 
+static const char* idToString(cmPolicies::PolicyID id)
+{
+  switch(id)
+    {
+#define POLICY_CASE(ID) \
+    case cmPolicies::ID: \
+      return #ID;
+  CM_FOR_EACH_POLICY_ID(POLICY_CASE)
+#undef POLICY_CASE
+    case cmPolicies::CMPCOUNT:
+      return 0;
+    }
+  return 0;
+}
+
 class cmPolicy
 {
 public:
   cmPolicy(cmPolicies::PolicyID iD,
-            const char *idString,
             const char *shortDescription,
             unsigned int majorVersionIntroduced,
             unsigned int minorVersionIntroduced,
@@ -57,7 +71,6 @@ public:
             cmPolicies::PolicyStatus status)
   {
     this->ID = iD;
-    this->IDString = idString;
     this->ShortDescription = shortDescription;
     this->MajorVersionIntroduced = majorVersionIntroduced;
     this->MinorVersionIntroduced = minorVersionIntroduced;
@@ -89,7 +102,6 @@ public:
   }
 
   cmPolicies::PolicyID ID;
-  std::string IDString;
   std::string ShortDescription;
   unsigned int MajorVersionIntroduced;
   unsigned int MinorVersionIntroduced;
@@ -417,14 +429,14 @@ cmPolicies::~cmPolicies()
 }
 
 void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
-                              const char *idString,
+                              const char *,
                               const char *shortDescription,
                               unsigned int majorVersionIntroduced,
                               unsigned int minorVersionIntroduced,
                               unsigned int patchVersionIntroduced,
                               cmPolicies::PolicyStatus status)
 {
-  this->Policies[iD] = new cmPolicy(iD, idString,
+  this->Policies[iD] = new cmPolicy(iD,
                                     shortDescription,
                                     majorVersionIntroduced,
                                     minorVersionIntroduced,
@@ -536,7 +548,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
       else
         {
         cmPolicies::PolicyStatus status = cmPolicies::WARN;
-        if(!GetPolicyDefault(mf, i->second->IDString, &status) ||
+        if(!GetPolicyDefault(mf, idToString(i->first), &status) ||
            !mf->SetPolicy(i->second->ID, status))
           {
           return false;
@@ -569,18 +581,6 @@ bool cmPolicies::GetPolicyID(const char *id, cmPolicies::PolicyID &pid)
   return stringToId(id, pid);
 }
 
-std::string cmPolicies::GetPolicyIDString(cmPolicies::PolicyID pid)
-{
-  std::map<cmPolicies::PolicyID,cmPolicy *>::iterator pos =
-    this->Policies.find(pid);
-  if (pos == this->Policies.end())
-    {
-    return "";
-    }
-  return pos->second->IDString;
-}
-
-
 ///! return a warning string for a given policy
 std::string cmPolicies::GetPolicyWarning(cmPolicies::PolicyID id)
 {
@@ -589,9 +589,9 @@ std::string cmPolicies::GetPolicyWarning(cmPolicies::PolicyID id)
 
   std::ostringstream msg;
   msg <<
-    "Policy " << pos->second->IDString << " is not set: "
+    "Policy " << idToString(id) << " is not set: "
     "" << pos->second->ShortDescription << "  "
-    "Run \"cmake --help-policy " << pos->second->IDString << "\" for "
+    "Run \"cmake --help-policy " << idToString(id) << "\" for "
     "policy details.  "
     "Use the cmake_policy command to set the policy "
     "and suppress this warning.";
@@ -607,13 +607,13 @@ std::string cmPolicies::GetRequiredPolicyError(cmPolicies::PolicyID id)
 
   std::ostringstream error;
   error <<
-    "Policy " << pos->second->IDString << " is not set to NEW: "
+    "Policy " << idToString(id) << " is not set to NEW: "
     "" << pos->second->ShortDescription << "  "
-    "Run \"cmake --help-policy " << pos->second->IDString << "\" for "
+    "Run \"cmake --help-policy " << idToString(id) << "\" for "
     "policy details.  "
     "CMake now requires this policy to be set to NEW by the project.  "
     "The policy may be set explicitly using the code\n"
-    "  cmake_policy(SET " << pos->second->IDString << " NEW)\n"
+    "  cmake_policy(SET " << idToString(id) << " NEW)\n"
     "or by upgrading all policies with the code\n"
     "  cmake_policy(VERSION " << pos->second->GetVersionString() <<
     ") # or later\n"
@@ -641,7 +641,7 @@ cmPolicies::GetPolicyStatus(cmPolicies::PolicyID id)
 std::string
 cmPolicies::GetRequiredAlwaysPolicyError(cmPolicies::PolicyID id)
 {
-  std::string pid = this->GetPolicyIDString(id);
+  std::string pid = idToString(id);
   std::ostringstream e;
   e << "Policy " << pid << " may not be set to OLD behavior because this "
     << "version of CMake no longer supports it.  "
@@ -672,7 +672,7 @@ cmPolicies::DiagnoseAncientPolicies(std::vector<PolicyID> const& ancient,
         i = ancient.begin(); i != ancient.end(); ++i)
     {
     cmPolicy const* policy = this->Policies[*i];
-    e << "  " << policy->IDString << ": " << policy->ShortDescription << "\n";
+    e << "  " << idToString(*i) << ": " << policy->ShortDescription << "\n";
     }
   e << "However, this version of CMake no longer supports the OLD "
     << "behavior for these policies.  "
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index e9881ac..df04fdf 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -254,7 +254,6 @@ public:
 
   ///! convert a string policy ID into a number
   bool GetPolicyID(const char *id, /* out */ cmPolicies::PolicyID &pid);
-  std::string GetPolicyIDString(cmPolicies::PolicyID pid);
 
   ///! Get the default status for a policy
   cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id);

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6eaade8a827e2e120640f3fc2eb9999e2bca5992
commit 6eaade8a827e2e120640f3fc2eb9999e2bca5992
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:10:06 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:18 2015 +0200

    cmPolicies: Introduce XMacro table for policy data.
    
    Use it to populate the policy enum.

diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index a3654f1..e9881ac 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -17,6 +17,202 @@
 class cmMakefile;
 class cmPolicy;
 
+#define CM_FOR_EACH_POLICY_TABLE(POLICY, SELECT) \
+  SELECT(POLICY, CMP0000, \
+    "A minimum required CMake version must be specified.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0001, \
+    "CMAKE_BACKWARDS_COMPATIBILITY should no longer be used.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0002, \
+  "Logical target names must be globally unique.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0003, \
+    "Libraries linked via full path no longer produce linker search paths.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0004, \
+    "Libraries linked may not have leading or trailing whitespace.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0005, \
+    "Preprocessor definition values are now escaped automatically.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0006, \
+    "Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0007, \
+    "list command no longer ignores empty elements.", \
+    2, 6, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0008, \
+    "Libraries linked by full-path must have a valid library file name.", \
+    2, 6, 1, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0009, \
+    "FILE GLOB_RECURSE calls should not follow symlinks by default.", \
+    2, 6, 2, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0010, \
+    "Bad variable reference syntax is an error.", \
+    2, 6, 3, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0011, \
+    "Included scripts do automatic cmake_policy PUSH and POP.", \
+    2, 6, 3, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0012, \
+    "if() recognizes numbers and boolean constants.", \
+    2, 8, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0013, \
+    "Duplicate binary directories are not allowed.", \
+    2, 8, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0014, \
+    "Input directories must have CMakeLists.txt.", \
+    2, 8, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0015, \
+    "link_directories() treats paths relative to the source dir.", \
+    2, 8, 1, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0016, \
+    "target_link_libraries() reports error if its only argument " \
+    "is not a target.", \
+    2, 8, 3, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0017, \
+    "Prefer files from the CMake module directory when including from " \
+    "there.", \
+    2, 8, 4, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0018, \
+    "Ignore CMAKE_SHARED_LIBRARY_<Lang>_FLAGS variable.", \
+    2, 8, 9, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0019, \
+    "Do not re-expand variables in include and link information.", \
+    2, 8, 11, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0020, \
+    "Automatically link Qt executables to qtmain target on Windows.", \
+    2, 8, 11, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0021, \
+    "Fatal error on relative paths in INCLUDE_DIRECTORIES target property.", \
+    2, 8, 12, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0022, \
+    "INTERFACE_LINK_LIBRARIES defines the link interface.", \
+    2, 8, 12, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0023, \
+    "Plain and keyword target_link_libraries signatures cannot be mixed.", \
+    2, 8, 12, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0024, \
+    "Disallow include export result.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0025, \
+    "Compiler id for Apple Clang is now AppleClang.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0026, \
+    "Disallow use of the LOCATION target property.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0027, \
+    "Conditionally linked imported targets with missing include " \
+    "directories.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0028, \
+    "Double colon in target name means ALIAS or IMPORTED target.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0029, \
+    "The subdir_depends command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0030, \
+    "The use_mangled_mesa command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0031, \
+    "The load_command command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0032, \
+    "The output_required_files command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0033, \
+    "The export_library_dependencies command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0034, \
+    "The utility_source command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0035, \
+    "The variable_requires command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0036, \
+    "The build_name command should not be called.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0037, \
+    "Target names should not be reserved and should match a validity " \
+    "pattern.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0038, \
+    "Targets may not link directly to themselves.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0039, \
+    "Utility targets may not have link dependencies.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0040, \
+    "The target in the TARGET signature of add_custom_command() must " \
+    "exist.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0041, \
+    "Error on relative include with generator expression.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0042, \
+    "MACOSX_RPATH is enabled by default.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0043, \
+    "Ignore COMPILE_DEFINITIONS_<Config> properties.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0044, \
+    "Case sensitive <LANG>_COMPILER_ID generator expressions.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0045, \
+    "Error on non-existent target in get_target_property.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0046, \
+    "Error on non-existent dependency in add_dependencies.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0047, \
+    "Use QCC compiler id for the qcc drivers on QNX.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0048, \
+    "project() command manages VERSION variables.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0049, \
+    "Do not expand variables in target source entries.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0050, \
+    "Disallow add_custom_command SOURCE signatures.", \
+    3, 0, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0051, \
+    "List TARGET_OBJECTS in SOURCES target property.", \
+    3, 1, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0052, \
+    "Reject source and build dirs in installed " \
+    "INTERFACE_INCLUDE_DIRECTORIES.", \
+    3, 1, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0053, \
+    "Simplify variable reference and escape sequence evaluation.", \
+    3, 1, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0054, \
+    "Only interpret if() arguments as variables or keywords when unquoted.", \
+    3, 1, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0055, \
+    "Strict checking for break() command.", \
+    3, 2, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0056, \
+    "Honor link flags in try_compile() source-file signature.", \
+    3, 2, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0057, \
+    "Support new IN_LIST if() operator.", \
+    3, 3, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0058, \
+    "Ninja requires custom command byproducts to be explicit.", \
+    3, 3, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0059, \
+    "Do no treat DEFINITIONS as a built-in directory property.", \
+    3, 3, 0, cmPolicies::WARN) \
+  SELECT(POLICY, CMP0060, \
+    "Link libraries by full path even in implicit directories.", \
+    3, 3, 0, cmPolicies::WARN)
+
+#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
+#define CM_FOR_EACH_POLICY_ID(POLICY) \
+  CM_FOR_EACH_POLICY_TABLE(POLICY, CM_SELECT_ID)
+
+
 /** \class cmPolicies
  * \brief Handles changes in CMake behavior and policies
  *
@@ -44,78 +240,9 @@ public:
   /// Policy identifiers
   enum PolicyID
   {
-    CMP0000, ///< Policy version specification
-    CMP0001, ///< Ignore old compatibility variable
-    CMP0002, ///< Target names must be unique
-    CMP0003, ///< Linking does not include extra -L paths
-    CMP0004, ///< Libraries linked may not have leading or trailing whitespace
-    CMP0005, ///< Definition value escaping
-    CMP0006, ///< BUNDLE install rules needed for MACOSX_BUNDLE targets
-    CMP0007, ///< list command handling of empty elements
-    CMP0008, ///< Full-path libraries must be a valid library file name
-    CMP0009, ///< GLOB_RECURSE should not follow symlinks by default
-    CMP0010, ///< Bad variable reference syntax is an error
-    CMP0011, ///< Strong policy scope for include and find_package
-    CMP0012, ///< Recognize numbers and boolean constants in if()
-    CMP0013, ///< Duplicate binary directories not allowed
-    CMP0014, ///< Input directories must have CMakeLists.txt
-    CMP0015, ///< link_directories() treats paths relative to source dir
-    /// target_link_libraries() fails if only argument is not a target
-    CMP0016,
-    CMP0017, ///< Prefer files in CMAKE_ROOT when including from CMAKE_ROOT
-    CMP0018, ///< Ignore language flags for shared libs, and adhere to
-    /// POSITION_INDEPENDENT_CODE property and *_COMPILE_OPTIONS_PI{E,C}
-    /// instead.
-    CMP0019, ///< No variable re-expansion in include and link info
-    CMP0020, ///< Automatically link Qt executables to qtmain target
-    CMP0021, ///< Fatal error on relative paths in INCLUDE_DIRECTORIES
-    /// target property
-    CMP0022, ///< INTERFACE_LINK_LIBRARIES defines the link interface
-    CMP0023, ///< Disallow mixing keyword and plain tll signatures
-    CMP0024, ///< Disallow including export() result.
-    CMP0025, ///< Compiler id for Apple Clang is now AppleClang
-    CMP0026, ///< Disallow use of the LOCATION target property.
-    CMP0027, ///< Conditionally linked imported targets with missing include
-    /// directories.
-    CMP0028, ///< Double colon in target name means ALIAS or IMPORTED target.
-    CMP0029, ///< Disallow command: subdir_depends
-    CMP0030, ///< Disallow command: use_mangled_mesa
-    CMP0031, ///< Disallow command: load_command
-    CMP0032, ///< Disallow command: output_required_files
-    CMP0033, ///< Disallow command: export_library_dependencies
-    CMP0034, ///< Disallow command: utility_source
-    CMP0035, ///< Disallow command: variable_requires
-    CMP0036, ///< Disallow command: build_name
-    CMP0037, ///< Target names should not be reserved and
-    /// should match a validity pattern.
-    CMP0038, ///< Targets may not link directly to themselves
-    CMP0039, ///< Utility targets may not have link dependencies
-    CMP0040, ///< The target in the TARGET signature of
-    /// add_custom_command() must exist.
-    CMP0041, ///< Error on relative include with generator expression
-    CMP0042, ///< Enable MACOSX_RPATH by default
-    CMP0043, ///< Ignore COMPILE_DEFINITIONS_<Config> properties
-    CMP0044, ///< Case sensitive <LANG>_COMPILER_ID generator expressions
-    CMP0045, ///< Error on non-existent target in get_target_property
-    CMP0046, ///< Error on non-existent dependency in add_dependencies
-    CMP0047, ///< Use QCC compiler id for the qcc drivers on QNX.
-    CMP0048, ///< project() command manages VERSION variables
-    CMP0049, ///< Do not expand variables in target source entries
-    CMP0050, ///< Disallow add_custom_command SOURCE signatures
-    CMP0051, ///< List TARGET_OBJECTS in SOURCES target property
-    CMP0052, ///< Reject source and build dirs in installed
-    /// INTERFACE_INCLUDE_DIRECTORIES
-
-    CMP0053, ///< Simplify variable reference and escape sequence evaluation
-    CMP0054, ///< Only interpret if() arguments as variables
-    /// or keywords when unquoted.
-    CMP0055, ///< Strict checking for break() command.
-    CMP0056, ///< Honor link flags in try_compile() source-file signature.
-    CMP0057, ///< Support new IN_LIST if() operator.
-    CMP0058, ///< Ninja requires custom command byproducts to be explicit
-    CMP0059, ///< Do not treat ``DEFINITIONS`` as a built-in directory
-    /// property.
-    CMP0060, ///< Link libraries by full path even in implicit directories.
+#define POLICY_ENUM(POLICY_ID) POLICY_ID,
+    CM_FOR_EACH_POLICY_ID(POLICY_ENUM)
+#undef POLICY_ENUM
 
     /** \brief Always the last entry.
      *

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fdca04db6850273157e3c50de476e0b9298e9948
commit fdca04db6850273157e3c50de476e0b9298e9948
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:09:57 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:17 2015 +0200

    cmPolicies: Implement more-compact IsPolicyNewerThan.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 6a15965..9250620 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -80,23 +80,12 @@ public:
                          unsigned int minorV,
                          unsigned int patchV)
   {
-    if (majorV < this->MajorVersionIntroduced)
-      {
-      return true;
-      }
-    if (majorV > this->MajorVersionIntroduced)
-      {
-      return false;
-      }
-    if (minorV < this->MinorVersionIntroduced)
-      {
-      return true;
-      }
-    if (minorV > this->MinorVersionIntroduced)
-      {
-      return false;
-      }
-    return (patchV < this->PatchVersionIntroduced);
+    return (majorV < this->MajorVersionIntroduced ||
+        (majorV == this->MajorVersionIntroduced &&
+         minorV < this->MinorVersionIntroduced) ||
+        (majorV == this->MajorVersionIntroduced &&
+         minorV == this->MinorVersionIntroduced &&
+         patchV < this->PatchVersionIntroduced));
   }
 
   cmPolicies::PolicyID ID;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a7ff97275159d094f55df481728a682c357bc438
commit a7ff97275159d094f55df481728a682c357bc438
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun May 3 10:09:29 2015 +0200
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon May 4 22:32:17 2015 +0200

    cmPolicies: Parse string for id conversion.
    
    Remove now-unused PolicyStringMap.

diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 3f9c6f0..6a15965 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -9,6 +9,42 @@
 #include <queue>
 #include <assert.h>
 
+static bool stringToId(const char* input, cmPolicies::PolicyID& pid)
+{
+  assert(input);
+  if (strlen(input) != 7)
+    {
+    return false;
+    }
+  if (!cmHasLiteralPrefix(input, "CMP"))
+    {
+    return false;
+    }
+  if (cmHasLiteralSuffix(input, "0000"))
+    {
+    pid = cmPolicies::CMP0000;
+    return true;
+    }
+  for (int i = 3; i < 7; ++i)
+    {
+    if (!isdigit(*(input + i)))
+      {
+      return false;
+      }
+    }
+  long id;
+  if (!cmSystemTools::StringToLong(input + 3, &id))
+    {
+    return false;
+    }
+  if (id >= cmPolicies::CMPCOUNT)
+    {
+    return false;
+    }
+  pid = cmPolicies::PolicyID(id);
+  return true;
+}
+
 class cmPolicy
 {
 public:
@@ -405,7 +441,6 @@ void cmPolicies::DefinePolicy(cmPolicies::PolicyID iD,
                                     minorVersionIntroduced,
                                     patchVersionIntroduced,
                                     status);
-  this->PolicyStringMap[idString] = iD;
 }
 
 //----------------------------------------------------------------------------
@@ -542,18 +577,7 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
 
 bool cmPolicies::GetPolicyID(const char *id, cmPolicies::PolicyID &pid)
 {
-  if (!id || strlen(id) < 1)
-    {
-    return false;
-    }
-  std::map<std::string,cmPolicies::PolicyID>::iterator pos =
-    this->PolicyStringMap.find(id);
-  if (pos == this->PolicyStringMap.end())
-    {
-    return false;
-    }
-  pid = pos->second;
-  return true;
+  return stringToId(id, pid);
 }
 
 std::string cmPolicies::GetPolicyIDString(cmPolicies::PolicyID pid)
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 9de0298..a3654f1 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -159,7 +159,6 @@ public:
   private:
   // might have to make these internal for VS6 not sure yet
   std::map<PolicyID,cmPolicy *> Policies;
-  std::map<std::string,PolicyID> PolicyStringMap;
 
   void DiagnoseAncientPolicies(std::vector<PolicyID> const& ancient,
                                unsigned int majorVer, unsigned int minorVer,

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list