|
|
@ -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; |
|
|
|