diff options
author | Ken Martin <ken.martin@kitware.com> | 2002-07-01 12:49:36 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2002-07-01 12:49:36 (GMT) |
commit | a43a65bf34285b55393fc1d8ec9df008e010bdd2 (patch) | |
tree | 8a48b0a91beb78179ae5ff1fe9ef3353b8ab3df2 /Source | |
parent | e0c3d1e959961bc4f531bee5bff23bc7607ef7af (diff) | |
download | CMake-a43a65bf34285b55393fc1d8ec9df008e010bdd2.zip CMake-a43a65bf34285b55393fc1d8ec9df008e010bdd2.tar.gz CMake-a43a65bf34285b55393fc1d8ec9df008e010bdd2.tar.bz2 |
consolidated IF handling and added checks for bad arguments
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmElseCommand.cxx | 145 | ||||
-rw-r--r-- | Source/cmIfCommand.cxx | 114 | ||||
-rw-r--r-- | Source/cmIfCommand.h | 5 |
3 files changed, 83 insertions, 181 deletions
diff --git a/Source/cmElseCommand.cxx b/Source/cmElseCommand.cxx index ad11fe7..dd39690 100644 --- a/Source/cmElseCommand.cxx +++ b/Source/cmElseCommand.cxx @@ -19,148 +19,19 @@ bool cmElseCommand::InitialPass(std::vector<std::string> const& args) { - if(args.size() < 1 ) - { - this->SetError("called with incorrect number of arguments"); - return false; - } - - // create a function blocker - cmIfFunctionBlocker *f = NULL; - - // check for the different signatures - const char *def; - const char *def2; - - if (args.size() == 1) - { - def = m_Makefile->GetDefinition(args[0].c_str()); - if(!cmSystemTools::IsOff(def)) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 2 && (args[0] == "COMMAND")) - { - if(m_Makefile->CommandExists(args[1].c_str())) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 2 && (args[0] == "EXISTS")) - { - if(cmSystemTools::FileExists(args[1].c_str())) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 2 && (args[0] == "NOT")) - { - def = m_Makefile->GetDefinition(args[1].c_str()); - if(cmSystemTools::IsOff(def)) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 3 && (args[1] == "AND")) - { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); - if(!cmSystemTools::IsOff(def) && !cmSystemTools::IsOff(def2)) - { - f = new cmIfFunctionBlocker(); - } - } + bool isValid; + bool isTrue = cmIfCommand::IsTrue(args,isValid,m_Makefile); - if (args.size() == 3 && (args[1] == "OR")) + if (!isValid) { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); - if(!cmSystemTools::IsOff(def) || !cmSystemTools::IsOff(def2)) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 3 && (args[1] == "LESS")) - { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); - if (!def) - { - def = args[0].c_str(); - } - if (!def2) - { - def2 = args[2].c_str(); - } - if(atof(def) < atof(def2)) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 3 && (args[1] == "GREATER")) - { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); - if (!def) - { - def = args[0].c_str(); - } - if (!def2) - { - def2 = args[2].c_str(); - } - if(atof(def) > atof(def2)) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 3 && (args[1] == "STRLESS")) - { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); - if(strcmp(def,def2) < 0) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 3 && (args[1] == "STRGREATER")) - { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); - if(strcmp(def,def2) > 0) - { - f = new cmIfFunctionBlocker(); - } - } - - if (args.size() == 3 && (args[1] == "MATCHES")) - { - def = m_Makefile->GetDefinition(args[0].c_str()); - if (!def) - { - def = args[0].c_str(); - } - cmRegularExpression regEntry(args[2].c_str()); - - // check for black line or comment - if (regEntry.find(def)) - { - f = new cmIfFunctionBlocker(); - } + this->SetError("An ELSE command had incorrect arguments"); + return false; } - // if we created a function blocker then set its args - if (f) + // if is true create a blocker for the else + if (isTrue) { + cmIfFunctionBlocker *f = new cmIfFunctionBlocker(); for(std::vector<std::string>::const_iterator j = args.begin(); j != args.end(); ++j) { diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx index 2a36853..5d207d4 100644 --- a/Source/cmIfCommand.cxx +++ b/Source/cmIfCommand.cxx @@ -71,75 +71,108 @@ ScopeEnded(cmMakefile &mf) bool cmIfCommand::InitialPass(std::vector<std::string> const& args) { - if(args.size() < 1 ) + bool isValid; + bool isTrue = cmIfCommand::IsTrue(args,isValid,m_Makefile); + + if (!isValid) { - this->SetError("called with incorrect number of arguments"); + this->SetError("An IF command had incorrect arguments"); return false; } - // create a function blocker - cmIfFunctionBlocker *f = NULL; + + // if is isn't true create a blocker + if (!isTrue) + { + cmIfFunctionBlocker *f = new cmIfFunctionBlocker(); + for(std::vector<std::string>::const_iterator j = args.begin(); + j != args.end(); ++j) + { + f->m_Args.push_back(*j); + } + m_Makefile->AddFunctionBlocker(f); + } + + return true; +} +bool cmIfCommand::IsTrue(const std::vector<std::string> &args, bool &isValid, + const cmMakefile *makefile) +{ // check for the different signatures + bool isTrue = true; + isValid = false; const char *def; const char *def2; + if(args.size() < 1 ) + { + return false; + } + if (args.size() == 1) { - def = m_Makefile->GetDefinition(args[0].c_str()); + def = makefile->GetDefinition(args[0].c_str()); if(cmSystemTools::IsOff(def)) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 2 && (args[0] == "NOT")) { - def = m_Makefile->GetDefinition(args[1].c_str()); + def = makefile->GetDefinition(args[1].c_str()); if(!cmSystemTools::IsOff(def)) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; + } if (args.size() == 2 && (args[0] == "COMMAND")) { - if(!m_Makefile->CommandExists(args[1].c_str())) + if(!makefile->CommandExists(args[1].c_str())) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 2 && (args[0] == "EXISTS")) { if(!cmSystemTools::FileExists(args[1].c_str())) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 3 && (args[1] == "AND")) { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); + def = makefile->GetDefinition(args[0].c_str()); + def2 = makefile->GetDefinition(args[2].c_str()); if(cmSystemTools::IsOff(def) || cmSystemTools::IsOff(def2)) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 3 && (args[1] == "OR")) { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); + def = makefile->GetDefinition(args[0].c_str()); + def2 = makefile->GetDefinition(args[2].c_str()); if(cmSystemTools::IsOff(def) && cmSystemTools::IsOff(def2)) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 3 && (args[1] == "MATCHES")) { - def = m_Makefile->GetDefinition(args[0].c_str()); + def = makefile->GetDefinition(args[0].c_str()); if (!def) { def = args[0].c_str(); @@ -149,14 +182,15 @@ bool cmIfCommand::InitialPass(std::vector<std::string> const& args) // check for black line or comment if (!regEntry.find(def)) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 3 && (args[1] == "LESS")) { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); + def = makefile->GetDefinition(args[0].c_str()); + def2 = makefile->GetDefinition(args[2].c_str()); if (!def) { def = args[0].c_str(); @@ -167,14 +201,15 @@ bool cmIfCommand::InitialPass(std::vector<std::string> const& args) } if(atof(def) >= atof(def2)) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 3 && (args[1] == "GREATER")) { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); + def = makefile->GetDefinition(args[0].c_str()); + def2 = makefile->GetDefinition(args[2].c_str()); if (!def) { def = args[0].c_str(); @@ -185,41 +220,32 @@ bool cmIfCommand::InitialPass(std::vector<std::string> const& args) } if(atof(def) <= atof(def2)) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 3 && (args[1] == "STRLESS")) { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); + def = makefile->GetDefinition(args[0].c_str()); + def2 = makefile->GetDefinition(args[2].c_str()); if(strcmp(def,def2) >= 0) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } if (args.size() == 3 && (args[1] == "STRGREATER")) { - def = m_Makefile->GetDefinition(args[0].c_str()); - def2 = m_Makefile->GetDefinition(args[2].c_str()); + def = makefile->GetDefinition(args[0].c_str()); + def2 = makefile->GetDefinition(args[2].c_str()); if(strcmp(def,def2) <= 0) { - f = new cmIfFunctionBlocker(); + isTrue = false; } + isValid = true; } - // if we created a function blocker then set its args - if (f) - { - for(std::vector<std::string>::const_iterator j = args.begin(); - j != args.end(); ++j) - { - f->m_Args.push_back(*j); - } - m_Makefile->AddFunctionBlocker(f); - } - - return true; + return isTrue; } - diff --git a/Source/cmIfCommand.h b/Source/cmIfCommand.h index 2453c3c..b9a4fbb 100644 --- a/Source/cmIfCommand.h +++ b/Source/cmIfCommand.h @@ -98,6 +98,11 @@ public: "and STRGREATER. LESS and GREATER do numeric comparison while " "STRLESS and STRGREATER do string comparisons."; } + + // this is a shared function for both If and Else to determine if + // the arguments were valid, and if so, was the response true + static bool IsTrue(const std::vector<std::string> &args, + bool &isValid, const cmMakefile *mf); cmTypeMacro(cmIfCommand, cmCommand); }; |