summaryrefslogtreecommitdiffstats
path: root/Source/cmIfCommand.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmIfCommand.cxx')
-rw-r--r--Source/cmIfCommand.cxx66
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;
+}
+