| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying   file Copyright.txt or https://cmake.org/licensing for details.  */#include "cmDefinePropertyCommand.h"#include "cmExecutionStatus.h"#include "cmMakefile.h"#include "cmProperty.h"#include "cmState.h"#include "cmStringAlgorithms.h"bool cmDefinePropertyCommand(std::vector<std::string> const& args,                             cmExecutionStatus& status){  if (args.empty()) {    status.SetError("called with incorrect number of arguments");    return false;  }  // Get the scope in which to define the property.  cmProperty::ScopeType scope;  std::string const& scope_arg = args[0];  if (scope_arg == "GLOBAL") {    scope = cmProperty::GLOBAL;  } else if (scope_arg == "DIRECTORY") {    scope = cmProperty::DIRECTORY;  } else if (scope_arg == "TARGET") {    scope = cmProperty::TARGET;  } else if (scope_arg == "SOURCE") {    scope = cmProperty::SOURCE_FILE;  } else if (scope_arg == "TEST") {    scope = cmProperty::TEST;  } else if (scope_arg == "VARIABLE") {    scope = cmProperty::VARIABLE;  } else if (scope_arg == "CACHED_VARIABLE") {    scope = cmProperty::CACHED_VARIABLE;  } else {    status.SetError(cmStrCat("given invalid scope ", scope_arg,                             ".  Valid scopes are GLOBAL, DIRECTORY, TARGET, "                             "SOURCE, TEST, VARIABLE, CACHED_VARIABLE."));    return false;  }  // Parse remaining arguments.  bool inherited = false;  std::string PropertyName;  std::string BriefDocs;  std::string FullDocs;  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;      PropertyName = args[i];    } else if (doing == DoingBrief) {      BriefDocs += args[i];    } else if (doing == DoingFull) {      FullDocs += args[i];    } else {      status.SetError(cmStrCat("given invalid argument \"", args[i], "\"."));      return false;    }  }  // Make sure a property name was found.  if (PropertyName.empty()) {    status.SetError("not given a PROPERTY <name> argument.");    return false;  }  // Make sure documentation was given.  if (BriefDocs.empty()) {    status.SetError("not given a BRIEF_DOCS <brief-doc> argument.");    return false;  }  if (FullDocs.empty()) {    status.SetError("not given a FULL_DOCS <full-doc> argument.");    return false;  }  // Actually define the property.  status.GetMakefile().GetState()->DefineProperty(    PropertyName, scope, BriefDocs, FullDocs, inherited);  return true;}
 |