|
|
@@ -30,6 +30,10 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
|
|
|
{
|
|
|
return this->HandleRegexCommand(args);
|
|
|
}
|
|
|
+ else if(subCommand == "COMPARE")
|
|
|
+ {
|
|
|
+ return this->HandleCompareCommand(args);
|
|
|
+ }
|
|
|
|
|
|
std::string e = "does not recognize sub-command "+subCommand;
|
|
|
this->SetError(e.c_str());
|
|
|
@@ -307,3 +311,59 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
|
|
|
m_Makefile->AddDefinition(outvar.c_str(), output.c_str());
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+bool cmStringCommand::HandleCompareCommand(std::vector<std::string> const& args)
|
|
|
+{
|
|
|
+ if(args.size() < 2)
|
|
|
+ {
|
|
|
+ this->SetError("sub-command COMPARE requires a mode to be specified.");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ std::string mode = args[1];
|
|
|
+ if((mode == "EQUAL") || (mode == "NOTEQUAL") ||
|
|
|
+ (mode == "LESS") || (mode == "GREATER"))
|
|
|
+ {
|
|
|
+ if(args.size() < 5)
|
|
|
+ {
|
|
|
+ std::string e = "sub-command COMPARE, mode ";
|
|
|
+ e += mode;
|
|
|
+ e += " needs at least 5 arguments total to command.";
|
|
|
+ this->SetError(e.c_str());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ const std::string& left = args[2];
|
|
|
+ const std::string& right = args[3];
|
|
|
+ const std::string& outvar = args[4];
|
|
|
+ bool result;
|
|
|
+ if(mode == "LESS")
|
|
|
+ {
|
|
|
+ result = (left < right);
|
|
|
+ }
|
|
|
+ else if(mode == "GREATER")
|
|
|
+ {
|
|
|
+ result = (left > right);
|
|
|
+ }
|
|
|
+ else if(mode == "EQUAL")
|
|
|
+ {
|
|
|
+ result = (left == right);
|
|
|
+ }
|
|
|
+ else // if(mode == "NOTEQUAL")
|
|
|
+ {
|
|
|
+ result = !(left == right);
|
|
|
+ }
|
|
|
+ if(result)
|
|
|
+ {
|
|
|
+ m_Makefile->AddDefinition(outvar.c_str(), "1");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_Makefile->AddDefinition(outvar.c_str(), "0");
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ std::string e = "sub-command COMPARE does not recognize mode "+mode;
|
|
|
+ this->SetError(e.c_str());
|
|
|
+ return false;
|
|
|
+}
|