summaryrefslogtreecommitdiffstats
path: root/Source/cmIfCommand.cxx
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2001-08-06 21:01:26 (GMT)
committerKen Martin <ken.martin@kitware.com>2001-08-06 21:01:26 (GMT)
commitd7702b4c302a15b2b20dc747112605ab0d84f1a5 (patch)
tree3a013a875934452cb25e3f2b26a4763c6a971a49 /Source/cmIfCommand.cxx
parentf70e0d6b1ee7aa36a51ad7b4c955a9d0979ddc0a (diff)
downloadCMake-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.cxx78
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;