added for each command

This commit is contained in:
Ken Martin 2001-07-25 16:53:13 -04:00
parent f783252c62
commit 4ab2650802
6 changed files with 71 additions and 51 deletions

View File

@ -19,12 +19,14 @@
#include "cmConfigureGccXmlCommand.cxx"
#include "cmElseCommand.cxx"
#include "cmEnableTestingCommand.cxx"
#include "cmEndForEachCommand.cxx"
#include "cmEndIfCommand.cxx"
#include "cmExecProgramCommand.cxx"
#include "cmFindFileCommand.cxx"
#include "cmFindLibraryCommand.cxx"
#include "cmFindPathCommand.cxx"
#include "cmFindProgramCommand.cxx"
#include "cmForEachCommand.cxx"
#include "cmGetFilenameComponentCommand.cxx"
#include "cmIfCommand.cxx"
#include "cmIncludeCommand.cxx"
@ -71,12 +73,14 @@ void GetPredefinedCommands(std::list<cmCommand*>& commands)
commands.push_back(new cmConfigureGccXmlCommand);
commands.push_back(new cmElseCommand);
commands.push_back(new cmEnableTestingCommand);
commands.push_back(new cmEndForEachCommand);
commands.push_back(new cmEndIfCommand);
commands.push_back(new cmExecProgramCommand);
commands.push_back(new cmFindFileCommand);
commands.push_back(new cmFindLibraryCommand);
commands.push_back(new cmFindPathCommand);
commands.push_back(new cmFindProgramCommand);
commands.push_back(new cmForEachCommand);
commands.push_back(new cmGetFilenameComponentCommand);
commands.push_back(new cmIfCommand);
commands.push_back(new cmIncludeCommand);

View File

@ -56,7 +56,7 @@ public:
* should a function be blocked
*/
virtual bool IsFunctionBlocked(const char *name, const std::vector<std::string> &args,
const cmMakefile &mf) const = 0;
cmMakefile &mf) = 0;
/**
* should this function blocker be removed, useful when one function adds a
@ -64,14 +64,14 @@ public:
*/
virtual bool ShouldRemove(const char *name,
const std::vector<std::string> &args,
const cmMakefile &mf) const {return false;}
cmMakefile &mf) {return false;}
/**
* When the end of a CMakeList file is reached this method is called. It
* is not called on the end of an INCLUDE cmake file, just at the end of a
* regular CMakeList file
*/
virtual void ScopeEnded(const cmMakefile &mf) const {}
virtual void ScopeEnded(cmMakefile &mf) {}
virtual ~cmFunctionBlocker() {}
};

View File

@ -43,7 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bool cmIfFunctionBlocker::
IsFunctionBlocked(const char *name, const std::vector<std::string> &args,
const cmMakefile &mf) const
cmMakefile &mf)
{
if (!strcmp(name,"ELSE") || !strcmp(name,"ENDIF"))
{
@ -63,13 +63,13 @@ IsFunctionBlocked(const char *name, const std::vector<std::string> &args,
bool cmIfFunctionBlocker::
ShouldRemove(const char *name, const std::vector<std::string> &args,
const cmMakefile &mf) const
cmMakefile &mf)
{
return !this->IsFunctionBlocked(name,args,mf);
}
void cmIfFunctionBlocker::
ScopeEnded(const cmMakefile &mf) const
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(),

View File

@ -57,11 +57,11 @@ public:
virtual ~cmIfFunctionBlocker() {}
virtual bool IsFunctionBlocked(const char *name,
const std::vector<std::string> &args,
const cmMakefile &mf) const;
cmMakefile &mf);
virtual bool ShouldRemove(const char *name,
const std::vector<std::string> &args,
const cmMakefile &mf) const;
virtual void ScopeEnded(const cmMakefile &mf) const;
cmMakefile &mf);
virtual void ScopeEnded(cmMakefile &mf);
std::string m_Define;
bool m_Not;

View File

@ -217,6 +217,52 @@ void cmMakefile::Print() const
}
}
void cmMakefile::ExecuteCommand(std::string &name,
std::vector<std::string> &arguments)
{
RegisteredCommandsMap::iterator pos = m_Commands.find(name);
if(pos != m_Commands.end())
{
cmCommand* rm = (*pos).second;
cmCommand* usedCommand = rm->Clone();
usedCommand->SetMakefile(this);
bool keepCommand = false;
if(usedCommand->GetEnabled())
{
// if not running in inherit mode or
// if the command is inherited then InitialPass it.
if(!m_Inheriting || usedCommand->IsInherited())
{
if(!usedCommand->InitialPass(arguments))
{
cmSystemTools::Error(usedCommand->GetName(),
": Error : \n",
usedCommand->GetError(),
m_cmCurrentDirectory.c_str());
}
else
{
// use the command
keepCommand = true;
m_UsedCommands.push_back(usedCommand);
}
}
}
// if the Cloned command was not used
// then delete it
if(!keepCommand)
{
delete usedCommand;
}
}
else
{
cmSystemTools::Error("unknown CMake command ", name.c_str());
}
}
// Parse the given CMakeLists.txt file into a list of classes.
// Reads in current CMakeLists file and all parent CMakeLists files
// executing all inherited commands in the parents
@ -273,7 +319,7 @@ bool cmMakefile::ReadListFile(const char* filename, const char* external)
//
// this might, or might not be true, irrespective if we are
// off looking at an external makefile.
bool inheriting = (m_cmCurrentDirectory != m_cmStartDirectory);
m_Inheriting = (m_cmCurrentDirectory != m_cmStartDirectory);
// Now read the input file
const char *filenametoread= filename;
@ -299,45 +345,7 @@ bool cmMakefile::ReadListFile(const char* filename, const char* external)
if(cmSystemTools::ParseFunction(fin, name, arguments) &&
!this->IsFunctionBlocked(name.c_str(),arguments))
{
RegisteredCommandsMap::iterator pos = m_Commands.find(name);
if(pos != m_Commands.end())
{
cmCommand* rm = (*pos).second;
cmCommand* usedCommand = rm->Clone();
usedCommand->SetMakefile(this);
bool keepCommand = false;
if(usedCommand->GetEnabled())
{
// if not running in inherit mode or
// if the command is inherited then InitialPass it.
if(!inheriting || usedCommand->IsInherited())
{
if(!usedCommand->InitialPass(arguments))
{
cmSystemTools::Error(usedCommand->GetName(),
": Error : \n",
usedCommand->GetError(),
m_cmCurrentDirectory.c_str());
}
else
{
// use the command
keepCommand = true;
m_UsedCommands.push_back(usedCommand);
}
}
}
// if the Cloned command was not used
// then delete it
if(!keepCommand)
{
delete usedCommand;
}
}
else
{
cmSystemTools::Error("unknown CMake command ", name.c_str(), filename);
}
this->ExecuteCommand(name,arguments);
}
}
@ -923,7 +931,7 @@ cmMakefile::FindSourceGroup(const char* source,
bool cmMakefile::IsFunctionBlocked(const char *name,
std::vector<std::string> &args) const
std::vector<std::string> &args)
{
// loop over all function blockers to see if any block this command
std::set<cmFunctionBlocker *>::const_iterator pos;

View File

@ -493,6 +493,13 @@ public:
void RegisterData(const char*, cmData*);
cmData* LookupData(const char*) const;
/**
* execute a single CMake command
*/
void cmMakefile::ExecuteCommand(std::string &name,
std::vector<std::string> &args);
protected:
std::string m_Prefix;
std::vector<std::string> m_AuxSourceDirectories; //
@ -531,7 +538,7 @@ protected:
RegisteredCommandsMap m_Commands;
std::vector<cmCommand*> m_UsedCommands;
cmMakefileGenerator* m_MakefileGenerator;
bool IsFunctionBlocked(const char *name, std::vector<std::string> &args) const;
bool IsFunctionBlocked(const char *name, std::vector<std::string> &args);
private:
/**
@ -550,6 +557,7 @@ private:
typedef std::map<std::string, cmData*> DataMap;
DataMap m_DataMap;
bool m_Inheriting;
};