summaryrefslogtreecommitdiffstats
path: root/Source/cmOptionCommand.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmOptionCommand.cxx')
-rw-r--r--Source/cmOptionCommand.cxx64
1 files changed, 64 insertions, 0 deletions
diff --git a/Source/cmOptionCommand.cxx b/Source/cmOptionCommand.cxx
new file mode 100644
index 0000000..92be5f1
--- /dev/null
+++ b/Source/cmOptionCommand.cxx
@@ -0,0 +1,64 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#include "cmOptionCommand.h"
+
+// cmOptionCommand
+bool cmOptionCommand
+::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &)
+{
+ bool argError = false;
+ if(args.size() < 2)
+ {
+ argError = true;
+ }
+ // for VTK 4.0 we have to support the option command with more than 3
+ // arguments if CMAKE_MINIMUM_REQUIRED_VERSION is not defined, if
+ // CMAKE_MINIMUM_REQUIRED_VERSION is defined, then we can have stricter
+ // checking.
+ if(this->Makefile->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"))
+ {
+ if(args.size() > 3)
+ {
+ argError = true;
+ }
+ }
+ if(argError)
+ {
+ std::string m = "called with incorrect number of arguments: ";
+ m += cmJoin(args, " ");
+ this->SetError(m);
+ return false;
+ }
+
+ std::string initialValue = "Off";
+ // Now check and see if the value has been stored in the cache
+ // already, if so use that value and don't look for the program
+ cmState* state = this->Makefile->GetState();
+ const char* existingValue = state->GetCacheEntryValue(args[0]);
+ if(existingValue)
+ {
+ if (state->GetCacheEntryType(args[0]) != cmState::UNINITIALIZED)
+ {
+ state->SetCacheEntryProperty(args[0], "HELPSTRING", args[1]);
+ return true;
+ }
+ initialValue = existingValue;
+ }
+ if(args.size() == 3)
+ {
+ initialValue = args[2];
+ }
+ bool init = cmSystemTools::IsOn(initialValue.c_str());
+ this->Makefile->AddCacheDefinition(args[0], init? "ON":"OFF",
+ args[1].c_str(), cmState::BOOL);
+ return true;
+}