diff options
Diffstat (limited to 'Source/cmOptionCommand.cxx')
-rw-r--r-- | Source/cmOptionCommand.cxx | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Source/cmOptionCommand.cxx b/Source/cmOptionCommand.cxx new file mode 100644 index 0000000..f6f0ec3 --- /dev/null +++ b/Source/cmOptionCommand.cxx @@ -0,0 +1,57 @@ +/*============================================================================ + 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; +} |