diff options
Diffstat (limited to 'Source/cmDefinePropertyCommand.cxx')
-rw-r--r-- | Source/cmDefinePropertyCommand.cxx | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/Source/cmDefinePropertyCommand.cxx b/Source/cmDefinePropertyCommand.cxx new file mode 100644 index 0000000..5816829 --- /dev/null +++ b/Source/cmDefinePropertyCommand.cxx @@ -0,0 +1,137 @@ +/*============================================================================ + 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 "cmDefinePropertyCommand.h" +#include "cmake.h" + +// cmDefinePropertiesCommand +bool cmDefinePropertyCommand +::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &) +{ + if(args.size() < 1) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // Get the scope in which to define the property. + cmProperty::ScopeType scope; + if(args[0] == "GLOBAL") + { + scope = cmProperty::GLOBAL; + } + else if(args[0] == "DIRECTORY") + { + scope = cmProperty::DIRECTORY; + } + else if(args[0] == "TARGET") + { + scope = cmProperty::TARGET; + } + else if(args[0] == "SOURCE") + { + scope = cmProperty::SOURCE_FILE; + } + else if(args[0] == "TEST") + { + scope = cmProperty::TEST; + } + else if(args[0] == "VARIABLE") + { + scope = cmProperty::VARIABLE; + } + else if (args[0] == "CACHED_VARIABLE") + { + scope = cmProperty::CACHED_VARIABLE; + } + else + { + cmOStringStream e; + e << "given invalid scope " << args[0] << ". " + << "Valid scopes are " + << "GLOBAL, DIRECTORY, TARGET, SOURCE, " + << "TEST, VARIABLE, CACHED_VARIABLE."; + this->SetError(e.str().c_str()); + return false; + } + + // Parse remaining arguments. + bool inherited = false; + enum Doing { DoingNone, DoingProperty, DoingBrief, DoingFull }; + Doing doing = DoingNone; + for(unsigned int i=1; i < args.size(); ++i) + { + if(args[i] == "PROPERTY") + { + doing = DoingProperty; + } + else if(args[i] == "BRIEF_DOCS") + { + doing = DoingBrief; + } + else if(args[i] == "FULL_DOCS") + { + doing = DoingFull; + } + else if(args[i] == "INHERITED") + { + doing = DoingNone; + inherited = true; + } + else if(doing == DoingProperty) + { + doing = DoingNone; + this->PropertyName = args[i]; + } + else if(doing == DoingBrief) + { + this->BriefDocs += args[i]; + } + else if(doing == DoingFull) + { + this->FullDocs += args[i]; + } + else + { + cmOStringStream e; + e << "given invalid argument \"" << args[i] << "\"."; + this->SetError(e.str().c_str()); + return false; + } + } + + // Make sure a property name was found. + if(this->PropertyName.empty()) + { + this->SetError("not given a PROPERTY <name> argument."); + return false; + } + + // Make sure documentation was given. + if(this->BriefDocs.empty()) + { + this->SetError("not given a BRIEF_DOCS <brief-doc> argument."); + return false; + } + if(this->FullDocs.empty()) + { + this->SetError("not given a FULL_DOCS <full-doc> argument."); + return false; + } + + // Actually define the property. + this->Makefile->GetCMakeInstance()->DefineProperty + (this->PropertyName.c_str(), scope, + this->BriefDocs.c_str(), this->FullDocs.c_str(), inherited); + + return true; +} + |