Browse Source

cmOutputConverter: Add a flag for IsUnix

Remove the need for method parameters to represent the distinction.
Stephen Kelly 9 years ago
parent
commit
fd93b3605b
2 changed files with 22 additions and 20 deletions
  1. 16 16
      Source/cmOutputConverter.cxx
  2. 6 4
      Source/cmOutputConverter.h

+ 16 - 16
Source/cmOutputConverter.cxx

@@ -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 {

+ 6 - 4
Source/cmOutputConverter.h

@@ -66,7 +66,9 @@ public:
     Shell_Flag_AllowMakeVariables = (1 << 6),
 
     /** The target shell quoting uses extra single Quotes for Watcom tools.  */
-    Shell_Flag_WatcomQuote = (1 << 7)
+    Shell_Flag_WatcomQuote = (1 << 7),
+
+    Shell_Flag_IsUnix = (1 << 8)
   };
 
   std::string EscapeForShell(const std::string& str, bool makeVars = false,
@@ -116,11 +118,11 @@ private:
   static int Shell__CharIsWhitespace(char c);
   static int Shell__CharNeedsQuotesOnUnix(char c);
   static int Shell__CharNeedsQuotesOnWindows(char c);
-  static int Shell__CharNeedsQuotes(char c, int isUnix, int flags);
+  static int Shell__CharNeedsQuotes(char c, int flags);
   static int Shell__CharIsMakeVariableName(char c);
   static const char* Shell__SkipMakeVariables(const char* c);
-  static int Shell__ArgumentNeedsQuotes(const char* in, int isUnix, int flags);
-  static std::string Shell__GetArgument(const char* in, int isUnix, int flags);
+  static int Shell__ArgumentNeedsQuotes(const char* in, int flags);
+  static std::string Shell__GetArgument(const char* in, int flags);
 
 private:
   cmState::Snapshot StateSnapshot;