diff options
author | Brad King <brad.king@kitware.com> | 2008-02-14 13:36:23 -0500 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2008-02-14 13:36:23 -0500 |
commit | b459ec9f57c8b0f8a03665f50a4ac3ded02b12da (patch) | |
tree | a6b58c8ab1cc6ecd8ccab4d7b585ea1f5649c1db /Source/cmDefinePropertyCommand.cxx | |
parent | 5b02a4a864d2e68c683be6275709ce3e38d51fee (diff) | |
download | cmake-b459ec9f57c8b0f8a03665f50a4ac3ded02b12da.tar.gz |
ENH: Updated DEFINE_PROPERTY command to be more extendible and more consistent with new SET_PROPERTY and GET_PROPERTY signatures.
Diffstat (limited to 'Source/cmDefinePropertyCommand.cxx')
-rw-r--r-- | Source/cmDefinePropertyCommand.cxx | 98 |
1 files changed, 85 insertions, 13 deletions
diff --git a/Source/cmDefinePropertyCommand.cxx b/Source/cmDefinePropertyCommand.cxx index 685f50d625..fbdefedeff 100644 --- a/Source/cmDefinePropertyCommand.cxx +++ b/Source/cmDefinePropertyCommand.cxx @@ -21,52 +21,124 @@ bool cmDefinePropertyCommand ::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &) { - if(args.size() < 5 ) + if(args.size() < 1) { this->SetError("called with incorrect number of arguments"); return false; } - // determine the scope + // Get the scope in which to define the property. cmProperty::ScopeType scope; - if (args[1] == "GLOBAL") + if(args[0] == "GLOBAL") { scope = cmProperty::GLOBAL; } - else if (args[1] == "DIRECTORY") + else if(args[0] == "DIRECTORY") { scope = cmProperty::DIRECTORY; } - else if (args[1] == "TARGET") + else if(args[0] == "TARGET") { scope = cmProperty::TARGET; } - else if (args[1] == "SOURCE_FILE") + else if(args[0] == "SOURCE") { scope = cmProperty::SOURCE_FILE; } - else if (args[1] == "TEST") + else if(args[0] == "TEST") { scope = cmProperty::TEST; } - else if (args[1] == "VARIABLE") + else if(args[0] == "VARIABLE") { scope = cmProperty::VARIABLE; } - else if (args[1] == "CACHED_VARIABLE") + else if (args[0] == "CACHED_VARIABLE") { scope = cmProperty::CACHED_VARIABLE; } else { - this->SetError("called with illegal arguments."); + 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) + { + doing = DoingNone; + this->BriefDocs = args[i]; + } + else if(doing == DoingFull) + { + doing = DoingNone; + 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 - (args[0].c_str(), scope,args[2].c_str(), args[3].c_str(), - cmSystemTools::IsOn(args[4].c_str())); - + (this->PropertyName.c_str(), scope, + this->BriefDocs.c_str(), this->FullDocs.c_str(), inherited); + return true; } |