string: Add MAKE_C_IDENTIFIER subcommand

This commit is contained in:
Stephen Kelly 2013-03-21 19:34:32 +01:00 committed by Brad King
parent 272431a84f
commit 0ab50aea4c
3 changed files with 33 additions and 1 deletions

View File

@ -93,6 +93,10 @@ bool cmStringCommand
{
return this->HandleTimestampCommand(args);
}
else if(subCommand == "MAKE_C_IDENTIFIER")
{
return this->HandleMakeCIdentifierCommand(args);
}
std::string e = "does not recognize sub-command "+subCommand;
this->SetError(e.c_str());
@ -754,6 +758,24 @@ bool cmStringCommand
return true;
}
//----------------------------------------------------------------------------
bool cmStringCommand
::HandleMakeCIdentifierCommand(std::vector<std::string> const& args)
{
if(args.size() != 3)
{
this->SetError("sub-command MAKE_C_IDENTIFIER requires two arguments.");
return false;
}
const std::string& input = args[1];
const std::string& variableName = args[2];
this->Makefile->AddDefinition(variableName.c_str(),
cmSystemTools::MakeCidentifier(input.c_str()).c_str());
return true;
}
//----------------------------------------------------------------------------
bool cmStringCommand::HandleStripCommand(
std::vector<std::string> const& args)

View File

@ -94,6 +94,7 @@ public:
" [RANDOM_SEED <seed>] <output variable>)\n"
" string(FIND <string> <substring> <output variable> [REVERSE])\n"
" string(TIMESTAMP <output variable> [<format string>] [UTC])\n"
" string(MAKE_C_IDENTIFIER <input string> <output variable>)\n"
"REGEX MATCH will match the regular expression once and store the "
"match in the output variable.\n"
"REGEX MATCHALL will match the regular expression as many times as "
@ -176,7 +177,9 @@ public:
"and copied to the output as-is.\n"
"If no explicit <format string> is given it will default to:\n"
" %Y-%m-%dT%H:%M:%S for local time.\n"
" %Y-%m-%dT%H:%M:%SZ for UTC.";
" %Y-%m-%dT%H:%M:%SZ for UTC.\n"
"MAKE_C_IDENTIFIER will write a string which can be used as an "
"identifier in C.";
}
cmTypeMacro(cmStringCommand, cmCommand);
@ -200,6 +203,7 @@ protected:
bool HandleRandomCommand(std::vector<std::string> const& args);
bool HandleFindCommand(std::vector<std::string> const& args);
bool HandleTimestampCommand(std::vector<std::string> const& args);
bool HandleMakeCIdentifierCommand(std::vector<std::string> const& args);
class RegexReplacement
{

View File

@ -280,3 +280,9 @@ endif()
if(NOT ST_NINE STREQUAL "9")
message(SEND_ERROR "SUBSTRING does not return the tail when selected with -1")
endif()
string(MAKE_C_IDENTIFIER "1one-two$" MCI_1)
if(NOT MCI_1 STREQUAL _1one_two_)
message(SEND_ERROR "MAKE_C_IDENTIFIER did not create expected result.")
endif()