fixed if statements inside a foreach
This commit is contained in:
parent
3d3caacf9e
commit
fcc410de44
|
@ -21,10 +21,16 @@ bool cmForEachFunctionBlocker::
|
|||
IsFunctionBlocked(const char *name, const std::vector<std::string> &args,
|
||||
cmMakefile &mf)
|
||||
{
|
||||
// prevent recusion and don't let this blobker blobk its own commands
|
||||
if (m_Executing)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// at end of for each execute recorded commands
|
||||
if (!strcmp(name,"ENDFOREACH") && args[0] == m_Args[0])
|
||||
{
|
||||
m_Executing = true;
|
||||
std::string variable = "${";
|
||||
variable += m_Args[0];
|
||||
variable += "}";
|
||||
|
@ -90,7 +96,7 @@ bool cmForEachCommand::InitialPass(std::vector<std::string> const& argsIn)
|
|||
std::vector<std::string> args;
|
||||
cmSystemTools::ExpandListArguments(argsIn, args);
|
||||
|
||||
if(args.size() < 2 )
|
||||
if(args.size() < 1)
|
||||
{
|
||||
this->SetError("called with incorrect number of arguments");
|
||||
return false;
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
class cmForEachFunctionBlocker : public cmFunctionBlocker
|
||||
{
|
||||
public:
|
||||
cmForEachFunctionBlocker() {}
|
||||
cmForEachFunctionBlocker() {m_Executing = false;}
|
||||
virtual ~cmForEachFunctionBlocker() {}
|
||||
virtual bool IsFunctionBlocked(const char *name,
|
||||
const std::vector<std::string> &args,
|
||||
|
@ -44,6 +44,7 @@ public:
|
|||
std::vector<std::string> m_Args;
|
||||
std::vector<std::string> m_Commands;
|
||||
std::vector<std::vector<std::string> > m_CommandArguments;
|
||||
bool m_Executing;
|
||||
};
|
||||
|
||||
/** \class cmForEachCommand
|
||||
|
|
|
@ -193,6 +193,12 @@ bool cmMakefile::CommandExists(const char* name) const
|
|||
void cmMakefile::ExecuteCommand(std::string &name,
|
||||
std::vector<std::string> const& arguments)
|
||||
{
|
||||
// quick return if blocked
|
||||
if(this->IsFunctionBlocked(name.c_str(), arguments))
|
||||
{
|
||||
return;
|
||||
}
|
||||
// execute the command
|
||||
RegisteredCommandsMap::iterator pos = m_Commands.find(name);
|
||||
if(pos != m_Commands.end())
|
||||
{
|
||||
|
@ -342,13 +348,9 @@ bool cmMakefile::ReadListFile(const char* filename, const char* external)
|
|||
for(size_t i =0; i < numberFunctions; ++i)
|
||||
{
|
||||
cmListFileFunction& curFunction = lf->m_Functions[i];
|
||||
if(!this->IsFunctionBlocked(curFunction.m_Name.c_str(),
|
||||
curFunction.m_Arguments))
|
||||
{
|
||||
this->ExecuteCommand(curFunction.m_Name,
|
||||
curFunction.m_Arguments);
|
||||
}
|
||||
}
|
||||
|
||||
// send scope ended to and funciton blockers
|
||||
if (filename)
|
||||
|
|
|
@ -164,13 +164,13 @@ REMOVE(REMOVE_STRING ${removeVar1} f)
|
|||
# Test an IF inside a FOREACH.
|
||||
#
|
||||
FOREACH(x "a")
|
||||
IF(1)
|
||||
IF(${x} MATCHES "a")
|
||||
# Should always execute.
|
||||
SET(IF_INSIDE_FOREACH_THEN_EXECUTED 1)
|
||||
ELSE(1)
|
||||
ELSE(${x} MATCHES "a")
|
||||
# Should never execute.
|
||||
SET(IF_INSIDE_FOREACH_ELSE_EXECUTED 1)
|
||||
ENDIF(1)
|
||||
ENDIF(${x} MATCHES "a")
|
||||
ENDFOREACH(x)
|
||||
|
||||
|
||||
|
|
|
@ -164,13 +164,13 @@ REMOVE(REMOVE_STRING ${removeVar1} f)
|
|||
# Test an IF inside a FOREACH.
|
||||
#
|
||||
FOREACH(x "a")
|
||||
IF(1)
|
||||
IF(${x} MATCHES "a")
|
||||
# Should always execute.
|
||||
SET(IF_INSIDE_FOREACH_THEN_EXECUTED 1)
|
||||
ELSE(1)
|
||||
ELSE(${x} MATCHES "a")
|
||||
# Should never execute.
|
||||
SET(IF_INSIDE_FOREACH_ELSE_EXECUTED 1)
|
||||
ENDIF(1)
|
||||
ENDIF(${x} MATCHES "a")
|
||||
ENDFOREACH(x)
|
||||
|
||||
|
||||
|
|
|
@ -164,13 +164,13 @@ REMOVE(REMOVE_STRING ${removeVar1} f)
|
|||
# Test an IF inside a FOREACH.
|
||||
#
|
||||
FOREACH(x "a")
|
||||
IF(1)
|
||||
IF(${x} MATCHES "a")
|
||||
# Should always execute.
|
||||
SET(IF_INSIDE_FOREACH_THEN_EXECUTED 1)
|
||||
ELSE(1)
|
||||
ELSE(${x} MATCHES "a")
|
||||
# Should never execute.
|
||||
SET(IF_INSIDE_FOREACH_ELSE_EXECUTED 1)
|
||||
ENDIF(1)
|
||||
ENDIF(${x} MATCHES "a")
|
||||
ENDFOREACH(x)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue