diff options
author | Brad King <brad.king@kitware.com> | 2004-03-04 15:05:14 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2004-03-04 15:05:14 (GMT) |
commit | 4990e1481d378e89a0d07d1a25d882a38530db31 (patch) | |
tree | a1fae72b8f0e2c723d47ee06844e71eff8e61a75 /Source | |
parent | 1dd718457fe1d410314d9443fa5d82462c5ae8ea (diff) | |
download | CMake-4990e1481d378e89a0d07d1a25d882a38530db31.zip CMake-4990e1481d378e89a0d07d1a25d882a38530db31.tar.gz CMake-4990e1481d378e89a0d07d1a25d882a38530db31.tar.bz2 |
ENH: Added STRING(CONFIGURE ...) command.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmStringCommand.cxx | 51 | ||||
-rw-r--r-- | Source/cmStringCommand.h | 5 |
2 files changed, 56 insertions, 0 deletions
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx index 6acb72c..76d60e0 100644 --- a/Source/cmStringCommand.cxx +++ b/Source/cmStringCommand.cxx @@ -49,6 +49,10 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args) { return this->HandleAsciiCommand(args); } + else if(subCommand == "CONFIGURE") + { + return this->HandleConfigureCommand(args); + } std::string e = "does not recognize sub-command "+subCommand; this->SetError(e.c_str()); @@ -115,6 +119,53 @@ bool cmStringCommand::HandleAsciiCommand(std::vector<std::string> const& args) } //---------------------------------------------------------------------------- +bool cmStringCommand::HandleConfigureCommand( + std::vector<std::string> const& args) +{ + if ( args.size() < 2 ) + { + this->SetError("No input string specified."); + return false; + } + else if ( args.size() < 3 ) + { + this->SetError("No output variable specified."); + return false; + } + + // Parse options. + bool escapeQuotes = false; + bool atOnly = false; + for(unsigned int i = 3; i < args.size(); ++i) + { + if(args[i] == "@ONLY") + { + atOnly = true; + } + else if(args[i] == "ESCAPE_QUOTES") + { + escapeQuotes = true; + } + else + { + cmOStringStream err; + err << "Unrecognized argument \"" << args[i] << "\""; + this->SetError(err.str().c_str()); + return false; + } + } + + // Configure the string. + std::string output; + m_Makefile->ConfigureString(args[1], output, atOnly, escapeQuotes); + + // Store the output in the provided variable. + m_Makefile->AddDefinition(args[2].c_str(), output.c_str()); + + return true; +} + +//---------------------------------------------------------------------------- bool cmStringCommand::HandleRegexCommand(std::vector<std::string> const& args) { if(args.size() < 2) diff --git a/Source/cmStringCommand.h b/Source/cmStringCommand.h index 1fb5158..ed28b4b 100644 --- a/Source/cmStringCommand.h +++ b/Source/cmStringCommand.h @@ -82,6 +82,8 @@ public: " STRING(COMPARE LESS <string1> <string2> <output variable>)\n" " STRING(COMPARE GREATER <string1> <string2> <output variable>)\n" " STRING(ASCII <number> [<number> ...] <output variable>)\n" + " STRING(CONFIGURE <string1> <output variable>\n" + " [@ONLY] [ESCAPE_QUOTES])\n" " STRING(TOUPPER <string1> <output variable>)\n" " STRING(TOLOWER <string1> <output variable>)\n" "REGEX MATCH will match the regular expression once and store the " @@ -94,11 +96,14 @@ public: "COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and " "store true or false in the output variable.\n" "ASCII will convert all numbers into corresponding ASCII characters.\n" + "CONFIGURE will transform a string like CONFIGURE_FILE transforms " + "a file.\n" "TOUPPER/TOLOWER will convert string to upper/lower characters."; } cmTypeMacro(cmStringCommand, cmCommand); protected: + bool HandleConfigureCommand(std::vector<std::string> const& args); bool HandleAsciiCommand(std::vector<std::string> const& args); bool HandleRegexCommand(std::vector<std::string> const& args); bool RegexMatch(std::vector<std::string> const& args); |