summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmCMakeMinimumRequired.cxx11
-rw-r--r--Source/cmCMakePolicyCommand.cxx9
-rw-r--r--Source/cmPolicies.cxx24
3 files changed, 30 insertions, 14 deletions
diff --git a/Source/cmCMakeMinimumRequired.cxx b/Source/cmCMakeMinimumRequired.cxx
index bb5bdb0..f04600e 100644
--- a/Source/cmCMakeMinimumRequired.cxx
+++ b/Source/cmCMakeMinimumRequired.cxx
@@ -99,13 +99,12 @@ bool cmCMakeMinimumRequired
{
// The current version is too low.
cmOStringStream e;
- e << "This project requires version " << version_string.c_str()
- << " of CMake. "
- << "You are running version "
- << current_major << "." << current_minor << "." << current_patch
- << ".\n";
- cmSystemTools::Error(e.str().c_str());
+ e << "CMake " << version_string.c_str()
+ << " or higher is required. You are running version "
+ << current_major << "." << current_minor << "." << current_patch;
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
cmSystemTools::SetFatalErrorOccured();
+ return true;
}
if (required_major < 2 || required_major == 2 && required_minor < 4)
diff --git a/Source/cmCMakePolicyCommand.cxx b/Source/cmCMakePolicyCommand.cxx
index f29938d..d6f1b3e 100644
--- a/Source/cmCMakePolicyCommand.cxx
+++ b/Source/cmCMakePolicyCommand.cxx
@@ -117,13 +117,6 @@ cmCMakePolicyCommand::HandleVersionMode(std::vector<std::string> const& args)
this->SetError("VERSION given too many arguments");
return false;
}
- if(!this->Makefile->SetPolicyVersion(args[1].c_str()))
- {
- cmOStringStream e;
- e << "VERSION given invalid value \"" << args[1] << "\". "
- << "A numeric major.minor[.patch] must be given.";
- this->SetError(e.str().c_str());
- return false;
- }
+ this->Makefile->SetPolicyVersion(args[1].c_str());
return true;
}
diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 074bd7a..b37171b 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -301,6 +301,10 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
if(sscanf(ver.c_str(), "%u.%u.%u",
&majorVer, &minorVer, &patchVer) < 2)
{
+ cmOStringStream e;
+ e << "Invalid policy version value \"" << ver << "\". "
+ << "A numeric major.minor[.patch] must be given.";
+ mf->IssueMessage(cmake::FATAL_ERROR, e.str());
return false;
}
@@ -317,6 +321,26 @@ bool cmPolicies::ApplyPolicyVersion(cmMakefile *mf,
"CMAKE_BACKWARDS_COMPATIBILITY variable. "
"One way to so this is to set the policy version to 2.4 exactly."
);
+ return false;
+ }
+
+ // It is an error if the policy version is greater than the running
+ // CMake.
+ if (majorVer > cmVersion::GetMajorVersion() ||
+ (majorVer == cmVersion::GetMajorVersion() &&
+ minorVer > cmVersion::GetMinorVersion()) ||
+ (majorVer == cmVersion::GetMajorVersion() &&
+ minorVer == cmVersion::GetMinorVersion() &&
+ patchVer > cmVersion::GetPatchVersion()))
+ {
+ cmOStringStream e;
+ e << "An attempt was made to set the policy version of CMake to \""
+ << version << "\" which is greater than this version of CMake. "
+ << "This is not allowed because the greater version may have new "
+ << "policies not known to this CMake. "
+ << "You may need a newer CMake version to build this project.";
+ mf->IssueMessage(cmake::FATAL_ERROR, e.str());
+ return false;
}
// now loop over all the policies and set them as appropriate