ENH: Added STRING(CONFIGURE ...) command.
This commit is contained in:
parent
1dd718457f
commit
4990e1481d
@ -49,6 +49,10 @@ bool cmStringCommand::InitialPass(std::vector<std::string> const& args)
|
|||||||
{
|
{
|
||||||
return this->HandleAsciiCommand(args);
|
return this->HandleAsciiCommand(args);
|
||||||
}
|
}
|
||||||
|
else if(subCommand == "CONFIGURE")
|
||||||
|
{
|
||||||
|
return this->HandleConfigureCommand(args);
|
||||||
|
}
|
||||||
|
|
||||||
std::string e = "does not recognize sub-command "+subCommand;
|
std::string e = "does not recognize sub-command "+subCommand;
|
||||||
this->SetError(e.c_str());
|
this->SetError(e.c_str());
|
||||||
@ -114,6 +118,53 @@ bool cmStringCommand::HandleAsciiCommand(std::vector<std::string> const& args)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
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)
|
bool cmStringCommand::HandleRegexCommand(std::vector<std::string> const& args)
|
||||||
{
|
{
|
||||||
|
@ -82,6 +82,8 @@ public:
|
|||||||
" STRING(COMPARE LESS <string1> <string2> <output variable>)\n"
|
" STRING(COMPARE LESS <string1> <string2> <output variable>)\n"
|
||||||
" STRING(COMPARE GREATER <string1> <string2> <output variable>)\n"
|
" STRING(COMPARE GREATER <string1> <string2> <output variable>)\n"
|
||||||
" STRING(ASCII <number> [<number> ...] <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(TOUPPER <string1> <output variable>)\n"
|
||||||
" STRING(TOLOWER <string1> <output variable>)\n"
|
" STRING(TOLOWER <string1> <output variable>)\n"
|
||||||
"REGEX MATCH will match the regular expression once and store the "
|
"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 "
|
"COMPARE EQUAL/NOTEQUAL/LESS/GREATER will compare the strings and "
|
||||||
"store true or false in the output variable.\n"
|
"store true or false in the output variable.\n"
|
||||||
"ASCII will convert all numbers into corresponding ASCII characters.\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.";
|
"TOUPPER/TOLOWER will convert string to upper/lower characters.";
|
||||||
}
|
}
|
||||||
|
|
||||||
cmTypeMacro(cmStringCommand, cmCommand);
|
cmTypeMacro(cmStringCommand, cmCommand);
|
||||||
protected:
|
protected:
|
||||||
|
bool HandleConfigureCommand(std::vector<std::string> const& args);
|
||||||
bool HandleAsciiCommand(std::vector<std::string> const& args);
|
bool HandleAsciiCommand(std::vector<std::string> const& args);
|
||||||
bool HandleRegexCommand(std::vector<std::string> const& args);
|
bool HandleRegexCommand(std::vector<std::string> const& args);
|
||||||
bool RegexMatch(std::vector<std::string> const& args);
|
bool RegexMatch(std::vector<std::string> const& args);
|
||||||
|
@ -55,6 +55,11 @@ FOREACH(var
|
|||||||
FILE(APPEND "${file}" "#define ${var} \"${${var}}\"\n")
|
FILE(APPEND "${file}" "#define ${var} \"${${var}}\"\n")
|
||||||
ENDFOREACH(var)
|
ENDFOREACH(var)
|
||||||
|
|
||||||
|
# Test configuration of the string
|
||||||
|
SET(TEST_DEFINED 123)
|
||||||
|
SET(TEST_NOT_DEFINED)
|
||||||
|
STRING(CONFIGURE "${infile}" infile @ONLY)
|
||||||
|
|
||||||
# Write include file to a file
|
# Write include file to a file
|
||||||
STRING(REGEX REPLACE "includefile" "${file}" outfile "${infile}")
|
STRING(REGEX REPLACE "includefile" "${file}" outfile "${infile}")
|
||||||
FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h" "${outfile}")
|
FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h" "${outfile}")
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
#include "includefile"
|
#include "includefile"
|
||||||
|
|
||||||
|
/* This should be configured to a define. */
|
||||||
|
#cmakedefine TEST_DEFINED @TEST_DEFINED@
|
||||||
|
/* This should be configured to a commented undef with the curlies in place */
|
||||||
|
#cmakedefine TEST_NOT_DEFINED ${TEST_NOT_DEFINED}
|
||||||
|
|
||||||
int CheckMethod(const char* var, const char* val )
|
int CheckMethod(const char* var, const char* val )
|
||||||
{
|
{
|
||||||
if ( !var )
|
if ( !var )
|
||||||
@ -17,5 +22,13 @@ int CheckMethod(const char* var, const char* val )
|
|||||||
printf("Var (%s) and Val (%s) are not the same...\n", var, val);
|
printf("Var (%s) and Val (%s) are not the same...\n", var, val);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#if !defined(TEST_DEFINED) || TEST_DEFINED != 123
|
||||||
|
printf("TEST_DEFINED is not defined to 123\n");
|
||||||
|
return 1;
|
||||||
|
#elif defined(TEST_NOT_DEFINED)
|
||||||
|
printf("TEST_NOT_DEFINED is defined\n");
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user