From 28e1d2f8fc08516e8fc3a009777437d3e086b8e6 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 18 Mar 2014 16:21:08 +0100 Subject: [PATCH] cmStringCommand: Add GENEX_STRIP subcommand. Strip out any generator expressions in the input string. --- Help/command/string.rst | 5 +++++ Help/release/dev/string-GENEX_STRIP.rst | 6 ++++++ Source/cmStringCommand.cxx | 25 +++++++++++++++++++++++++ Source/cmStringCommand.h | 1 + Tests/StringFileTest/CMakeLists.txt | 6 ++++++ 5 files changed, 43 insertions(+) create mode 100644 Help/release/dev/string-GENEX_STRIP.rst diff --git a/Help/command/string.rst b/Help/command/string.rst index af1882527..abde6eeab 100644 --- a/Help/command/string.rst +++ b/Help/command/string.rst @@ -35,6 +35,7 @@ String operations. string(FIND [REVERSE]) string(TIMESTAMP [] [UTC]) string(MAKE_C_IDENTIFIER ) + string(GENEX_STRIP ) REGEX MATCH will match the regular expression once and store the match in the output variable. @@ -154,3 +155,7 @@ If no explicit is given it will default to: MAKE_C_IDENTIFIER will write a string which can be used as an identifier in C. + +``GENEX_STRIP`` will strip any +:manual:`generator expressions ` from the +``input string`` and store the result in the ``output variable``. diff --git a/Help/release/dev/string-GENEX_STRIP.rst b/Help/release/dev/string-GENEX_STRIP.rst new file mode 100644 index 000000000..b5b1074a0 --- /dev/null +++ b/Help/release/dev/string-GENEX_STRIP.rst @@ -0,0 +1,6 @@ +string-GENEX_STRIP +------------------ + +* The :command:`string` command learned a new ``GENEX_STRIP`` subcommand + which removes + :manual:`generator expression `. diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx index 7bc7b0581..ea762eba7 100644 --- a/Source/cmStringCommand.cxx +++ b/Source/cmStringCommand.cxx @@ -101,6 +101,10 @@ bool cmStringCommand { return this->HandleMakeCIdentifierCommand(args); } + else if(subCommand == "GENEX_STRIP") + { + return this->HandleGenexStripCommand(args); + } std::string e = "does not recognize sub-command "+subCommand; this->SetError(e); @@ -809,6 +813,27 @@ bool cmStringCommand return true; } +//---------------------------------------------------------------------------- +bool cmStringCommand +::HandleGenexStripCommand(std::vector const& args) +{ + if(args.size() != 3) + { + this->SetError("sub-command GENEX_STRIP requires two arguments."); + return false; + } + + const std::string& input = args[1]; + + std::string result = cmGeneratorExpression::Preprocess(input, + cmGeneratorExpression::StripAllGeneratorExpressions); + + const std::string& variableName = args[2]; + + this->Makefile->AddDefinition(variableName, result.c_str()); + return true; +} + //---------------------------------------------------------------------------- bool cmStringCommand::HandleStripCommand( std::vector const& args) diff --git a/Source/cmStringCommand.h b/Source/cmStringCommand.h index b8053c504..5b7412db3 100644 --- a/Source/cmStringCommand.h +++ b/Source/cmStringCommand.h @@ -75,6 +75,7 @@ protected: bool HandleFindCommand(std::vector const& args); bool HandleTimestampCommand(std::vector const& args); bool HandleMakeCIdentifierCommand(std::vector const& args); + bool HandleGenexStripCommand(std::vector const& args); class RegexReplacement { diff --git a/Tests/StringFileTest/CMakeLists.txt b/Tests/StringFileTest/CMakeLists.txt index 00383ab37..be6d8fe35 100644 --- a/Tests/StringFileTest/CMakeLists.txt +++ b/Tests/StringFileTest/CMakeLists.txt @@ -286,3 +286,9 @@ 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() + +string(GENEX_STRIP "one;$<1:two;three>;four;$" strip_result) + +if (NOT strip_result STREQUAL "one;four") + message(SEND_ERROR "GENEX_STRIP did not create expected result: ${strip_result}") +endif()