diff options
author | Brendan O'Rourke <brendan.orourke@precisionplanting.com> | 2021-11-08 17:44:44 (GMT) |
---|---|---|
committer | Brendan O'Rourke <obrendan@gmail.com> | 2021-11-08 18:14:53 (GMT) |
commit | 144e8dcf404893f10febf97744cbbcab96b88586 (patch) | |
tree | 60d12b7e2f21e1f6ee4ba6aa6ff1474de94f2bb5 | |
parent | 1fad6998091b65905bcf5bd8b7edd30b7b0b7362 (diff) | |
download | CMake-144e8dcf404893f10febf97744cbbcab96b88586.zip CMake-144e8dcf404893f10febf97744cbbcab96b88586.tar.gz CMake-144e8dcf404893f10febf97744cbbcab96b88586.tar.bz2 |
cmOutputConverter: Quote hyphens in response files
Fixes: #20070
-rw-r--r-- | Source/cmOutputConverter.cxx | 20 | ||||
-rw-r--r-- | Source/cmOutputConverter.h | 5 |
2 files changed, 20 insertions, 5 deletions
diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 02b4821..4503038 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -143,7 +143,7 @@ std::string cmOutputConverter::ConvertToOutputFormat(cm::string_view source, result = this->EscapeForShell(result, true, false, output == WATCOMQUOTE, output == NINJAMULTI); } else if (output == RESPONSE) { - result = this->EscapeForShell(result, false, false, false); + result = this->EscapeForShell(result, false, false, false, false, true); } return result; } @@ -175,9 +175,11 @@ static bool cmOutputConverterIsShellOperator(cm::string_view str) return (shellOperators.count(str) != 0); } -std::string cmOutputConverter::EscapeForShell( - cm::string_view str, bool makeVars, bool forEcho, bool useWatcomQuote, - bool unescapeNinjaConfiguration) const +std::string cmOutputConverter::EscapeForShell(cm::string_view str, + bool makeVars, bool forEcho, + bool useWatcomQuote, + bool unescapeNinjaConfiguration, + bool forResponse) const { // Do not escape shell operators. if (cmOutputConverterIsShellOperator(str)) { @@ -203,6 +205,9 @@ std::string cmOutputConverter::EscapeForShell( if (useWatcomQuote) { flags |= Shell_Flag_WatcomQuote; } + if (forResponse) { + flags |= Shell_Flag_IsResponse; + } if (this->GetState()->UseWatcomWMake()) { flags |= Shell_Flag_WatcomWMake; } @@ -360,6 +365,13 @@ bool cmOutputConverter::Shell_CharNeedsQuotes(char c, int flags) return true; } + /* Quote hyphens in response files */ + if (flags & Shell_Flag_IsResponse) { + if (c == '-') { + return true; + } + } + if (flags & Shell_Flag_IsUnix) { /* On UNIX several special characters need quotes to preserve them. */ if (Shell_CharNeedsQuotesOnUnix(c)) { diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index 53ec247..335442d 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -88,11 +88,14 @@ public: Shell_Flag_IsUnix = (1 << 8), Shell_Flag_UnescapeNinjaConfiguration = (1 << 9), + + Shell_Flag_IsResponse = (1 << 10) }; std::string EscapeForShell(cm::string_view str, bool makeVars = false, bool forEcho = false, bool useWatcomQuote = false, - bool unescapeNinjaConfiguration = false) const; + bool unescapeNinjaConfiguration = false, + bool forResponse = false) const; enum class WrapQuotes { |