summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2015-05-03 08:10:27 (GMT)
committerStephen Kelly <steveire@gmail.com>2015-05-04 20:32:18 (GMT)
commit5df267fa1dc5f8389f571eb6841e51b8fe333b2c (patch)
treecec97ab49e046edc252701e8efe65e840f8a4c85
parent2235cfebeeb3447a1c62d7a0207e899c9f7c9240 (diff)
downloadCMake-5df267fa1dc5f8389f571eb6841e51b8fe333b2c.zip
CMake-5df267fa1dc5f8389f571eb6841e51b8fe333b2c.tar.gz
CMake-5df267fa1dc5f8389f571eb6841e51b8fe333b2c.tar.bz2
cmPolicies: Implement version check with XMacro.
-rw-r--r--Source/cmPolicies.cxx55
1 files changed, 27 insertions, 28 deletions
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)
{