|
|
@ -239,9 +239,11 @@ std::string cmOutputConverter::EscapeForShell(const std::string& str, |
|
|
|
if (this->GetState()->UseNMake()) { |
|
|
|
flags |= Shell_Flag_NMake; |
|
|
|
} |
|
|
|
if (!this->GetState()->UseWindowsShell()) { |
|
|
|
flags |= Shell_Flag_IsUnix; |
|
|
|
} |
|
|
|
|
|
|
|
return Shell__GetArgument(str.c_str(), !this->GetState()->UseWindowsShell(), |
|
|
|
flags); |
|
|
|
return Shell__GetArgument(str.c_str(), flags); |
|
|
|
} |
|
|
|
|
|
|
|
std::string cmOutputConverter::EscapeForCMake(const std::string& str) |
|
|
@ -270,7 +272,7 @@ std::string cmOutputConverter::EscapeForCMake(const std::string& str) |
|
|
|
std::string cmOutputConverter::EscapeWindowsShellArgument(const char* arg, |
|
|
|
int shell_flags) |
|
|
|
{ |
|
|
|
return Shell__GetArgument(arg, 0, shell_flags); |
|
|
|
return Shell__GetArgument(arg, shell_flags); |
|
|
|
} |
|
|
|
|
|
|
|
cmOutputConverter::FortranFormat cmOutputConverter::GetFortranFormat( |
|
|
@ -356,10 +358,10 @@ int cmOutputConverter::Shell__CharNeedsQuotesOnWindows(char c) |
|
|
|
(c == '>') || (c == '|') || (c == '^')); |
|
|
|
} |
|
|
|
|
|
|
|
int cmOutputConverter::Shell__CharNeedsQuotes(char c, int isUnix, int flags) |
|
|
|
int cmOutputConverter::Shell__CharNeedsQuotes(char c, int flags) |
|
|
|
{ |
|
|
|
/* On Windows the built-in command shell echo never needs quotes. */ |
|
|
|
if (!isUnix && (flags & Shell_Flag_EchoWindows)) { |
|
|
|
if (!(flags & Shell_Flag_IsUnix) && (flags & Shell_Flag_EchoWindows)) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
@ -368,7 +370,7 @@ int cmOutputConverter::Shell__CharNeedsQuotes(char c, int isUnix, int flags) |
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
if (isUnix) { |
|
|
|
if (flags & Shell_Flag_IsUnix) { |
|
|
|
/* On UNIX several special characters need quotes to preserve them. */ |
|
|
|
if (Shell__CharNeedsQuotesOnUnix(c)) { |
|
|
|
return 1; |
|
|
@ -426,8 +428,7 @@ flag later when we understand applications of this better. |
|
|
|
*/ |
|
|
|
#define KWSYS_SYSTEM_SHELL_QUOTE_MAKE_VARIABLES 0
|
|
|
|
|
|
|
|
int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int isUnix, |
|
|
|
int flags) |
|
|
|
int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int flags) |
|
|
|
{ |
|
|
|
/* The empty string needs quotes. */ |
|
|
|
if (!*in) { |
|
|
@ -459,14 +460,14 @@ int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int isUnix, |
|
|
|
} |
|
|
|
|
|
|
|
/* Check whether this character needs quotes. */ |
|
|
|
if (Shell__CharNeedsQuotes(*c, isUnix, flags)) { |
|
|
|
if (Shell__CharNeedsQuotes(*c, flags)) { |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/* On Windows some single character arguments need quotes. */ |
|
|
|
if (!isUnix && *in && !*(in + 1)) { |
|
|
|
if (flags & Shell_Flag_IsUnix && *in && !*(in + 1)) { |
|
|
|
char c = *in; |
|
|
|
if ((c == '?') || (c == '&') || (c == '^') || (c == '|') || (c == '#')) { |
|
|
|
return 1; |
|
|
@ -476,8 +477,7 @@ int cmOutputConverter::Shell__ArgumentNeedsQuotes(const char* in, int isUnix, |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
std::string cmOutputConverter::Shell__GetArgument(const char* in, int isUnix, |
|
|
|
int flags) |
|
|
|
std::string cmOutputConverter::Shell__GetArgument(const char* in, int flags) |
|
|
|
{ |
|
|
|
std::ostringstream out; |
|
|
|
|
|
|
@ -488,11 +488,11 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int isUnix, |
|
|
|
int windows_backslashes = 0; |
|
|
|
|
|
|
|
/* Whether the argument must be quoted. */ |
|
|
|
int needQuotes = Shell__ArgumentNeedsQuotes(in, isUnix, flags); |
|
|
|
int needQuotes = Shell__ArgumentNeedsQuotes(in, flags); |
|
|
|
if (needQuotes) { |
|
|
|
/* Add the opening quote for this argument. */ |
|
|
|
if (flags & Shell_Flag_WatcomQuote) { |
|
|
|
if (isUnix) { |
|
|
|
if (flags & Shell_Flag_IsUnix) { |
|
|
|
out << '"'; |
|
|
|
} |
|
|
|
out << '\''; |
|
|
@ -524,7 +524,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int isUnix, |
|
|
|
} |
|
|
|
|
|
|
|
/* Check whether this character needs escaping for the shell. */ |
|
|
|
if (isUnix) { |
|
|
|
if (flags & Shell_Flag_IsUnix) { |
|
|
|
/* On Unix a few special characters need escaping even inside a
|
|
|
|
quoted argument. */ |
|
|
|
if (*c == '\\' || *c == '"' || *c == '`' || *c == '$') { |
|
|
@ -621,7 +621,7 @@ std::string cmOutputConverter::Shell__GetArgument(const char* in, int isUnix, |
|
|
|
/* Add the closing quote for this argument. */ |
|
|
|
if (flags & Shell_Flag_WatcomQuote) { |
|
|
|
out << '\''; |
|
|
|
if (isUnix) { |
|
|
|
if (flags & Shell_Flag_IsUnix) { |
|
|
|
out << '"'; |
|
|
|
} |
|
|
|
} else { |
|
|
|