diff options
author | Ken Martin <ken.martin@kitware.com> | 2001-08-06 21:01:26 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2001-08-06 21:01:26 (GMT) |
commit | d7702b4c302a15b2b20dc747112605ab0d84f1a5 (patch) | |
tree | 3a013a875934452cb25e3f2b26a4763c6a971a49 /Source/cmIfCommand.cxx | |
parent | f70e0d6b1ee7aa36a51ad7b4c955a9d0979ddc0a (diff) | |
download | CMake-d7702b4c302a15b2b20dc747112605ab0d84f1a5.zip CMake-d7702b4c302a15b2b20dc747112605ab0d84f1a5.tar.gz CMake-d7702b4c302a15b2b20dc747112605ab0d84f1a5.tar.bz2 |
added new if commands
Diffstat (limited to 'Source/cmIfCommand.cxx')
-rw-r--r-- | Source/cmIfCommand.cxx | 78 |
1 files changed, 52 insertions, 26 deletions
diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx index d0bd577..0599e8f 100644 --- a/Source/cmIfCommand.cxx +++ b/Source/cmIfCommand.cxx @@ -47,13 +47,7 @@ IsFunctionBlocked(const char *name, const std::vector<std::string> &args, { if (!strcmp(name,"ELSE") || !strcmp(name,"ENDIF")) { - if (m_Not && (args.size() == 2) && !strcmp(args[0].c_str(),"NOT") && - !strcmp(args[1].c_str(),m_Define.c_str())) - { - return false; - } - if (!m_Not && (args.size() == 1) && - !strcmp(args[0].c_str(),m_Define.c_str())) + if (args == m_Args) { return false; } @@ -72,9 +66,7 @@ void cmIfFunctionBlocker:: ScopeEnded(cmMakefile &mf) { cmSystemTools::Error("The end of a CMakeLists file was reached with an IF statement that was not closed properly. Within the directory: ", - mf.GetCurrentDirectory(), - (m_Not ? " The arguments to the if were: NOT " : " The arguments to the if were: "), - m_Define.c_str()); + mf.GetCurrentDirectory()); } bool cmIfCommand::InitialPass(std::vector<std::string>& args) @@ -85,38 +77,72 @@ bool cmIfCommand::InitialPass(std::vector<std::string>& args) return false; } - // check for the NOT value + // 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] == "NOT")) { def = m_Makefile->GetDefinition(args[1].c_str()); if(!cmSystemTools::IsOff(def)) { - // create a function blocker - cmIfFunctionBlocker *f = new cmIfFunctionBlocker(); - f->m_Define = args[1]; - f->m_Not = true; - m_Makefile->AddFunctionBlocker(f); + f = new cmIfFunctionBlocker(); } - else + } + + 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)) { - // do nothing + f = new cmIfFunctionBlocker(); } } - else + + if (args.size() == 3 && (args[1] == "OR")) { def = m_Makefile->GetDefinition(args[0].c_str()); - if(!cmSystemTools::IsOff(def)) + def2 = m_Makefile->GetDefinition(args[2].c_str()); + if(!cmSystemTools::IsOff(def) || !cmSystemTools::IsOff(def2)) { - // do nothing + f = new cmIfFunctionBlocker(); } - else + } + + if (args.size() == 3 && (args[1] == "MATCHES")) + { + def = m_Makefile->GetDefinition(args[0].c_str()); + cmRegularExpression regEntry(args[2].c_str()); + + // check for black line or comment + if (regEntry.find(def)) { - // create a function blocker - cmIfFunctionBlocker *f = new cmIfFunctionBlocker(); - f->m_Define = args[0]; - m_Makefile->AddFunctionBlocker(f); + f = new cmIfFunctionBlocker(); + } + } + + // if we created a function blocker then set its args + if (f) + { + for(std::vector<std::string>::iterator j = args.begin(); + j != args.end(); ++j) + { + f->m_Args.push_back(*j); } + m_Makefile->AddFunctionBlocker(f); } return true; |