diff options
Diffstat (limited to 'Source/cmIfCommand.cxx')
-rw-r--r-- | Source/cmIfCommand.cxx | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx new file mode 100644 index 0000000..5dab24b --- /dev/null +++ b/Source/cmIfCommand.cxx @@ -0,0 +1,66 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) 2000 National Library of Medicine + All rights reserved. + + See COPYRIGHT.txt for copyright details. + +=========================================================================*/ +#include "cmIfCommand.h" +#include "cmCacheManager.h" + +bool cmIfFunctionBlocker:: +IsFunctionBlocked(const char *name, const std::vector<std::string> &args, + const cmMakefile &mf) const +{ + if (strcmp(name,"ELSE") && strcmp(name,"ENDIF")) + { + return true; + } + if (strcmp(args[0].c_str(),m_Define.c_str())) + { + return true; + } + return false; +} + +bool cmIfFunctionBlocker:: +ShouldRemove(const char *name, const std::vector<std::string> &args, + const cmMakefile &mf) const +{ + return !this->IsFunctionBlocked(name,args,mf); +} + +bool cmIfCommand::Invoke(std::vector<std::string>& args) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // check to see if the argument is defined first + const char *def = m_Makefile->GetDefinition(args[0].c_str()); + if(def && strcmp(def,"0") && strcmp(def,"false") && strcmp(def,"") && + strcmp(def,"NOTFOUND")) + { + // do nothing + } + else + { + // create a function blocker + cmIfFunctionBlocker *f = new cmIfFunctionBlocker(); + f->m_Define = args[0]; + m_Makefile->AddFunctionBlocker(f); + } + + return true; +} + |