Pārlūkot izejas kodu

Do Windows command line escapes for VS 10 too

Until now the VS 10 generator did no Windows command-line escaping and
just did XML escapes.  This commit teaches the generator to use the same
command-line escape addition code used by other generators.  The script
construction method cmLocalVisualStudioGenerator::ConstructScript need
not do XML escapes.  Each VS generator version adds the XML escapes
necessary for that version.
Brad King 16 gadi atpakaļ
vecāks
revīzija
355511ade9

+ 0 - 1
Source/cmLocalVisualStudio10Generator.cxx

@@ -68,7 +68,6 @@ class cmVS10XMLParser : public cmXMLParser
 //----------------------------------------------------------------------------
 cmLocalVisualStudio10Generator::cmLocalVisualStudio10Generator()
 {
-  this->NeedXMLEscape = true;
 }
 
 cmLocalVisualStudio10Generator::~cmLocalVisualStudio10Generator()

+ 1 - 20
Source/cmLocalVisualStudioGenerator.cxx

@@ -26,7 +26,6 @@ cmLocalVisualStudioGenerator::cmLocalVisualStudioGenerator()
 {
   this->WindowsShell = true;
   this->WindowsVSIDE = true;
-  this->NeedXMLEscape = false;
 }
 
 //----------------------------------------------------------------------------
@@ -232,26 +231,8 @@ cmLocalVisualStudioGenerator
         }
       else
         {
-        if(this->NeedXMLEscape)
-          {
-          std::string arg = commandLine[j];
-          cmSystemTools::ReplaceString(arg, "&", "&");
-          cmSystemTools::ReplaceString(arg, "<", "&lt;");
-          cmSystemTools::ReplaceString(arg, ">", "&gt;");
-          if(arg.find(" ") != arg.npos)
-            {
-            std::string q("\"");
-            arg = q + arg +q;
-            }
-          script += arg;
-          //script += this->EscapeForShell(arg.c_str(),
-          //escapeAllowMakeVars);
-          }
-        else
-          {
-          script += this->EscapeForShell(commandLine[j].c_str(),
+        script += this->EscapeForShell(commandLine[j].c_str(),
                                        escapeAllowMakeVars);
-          }
         }
       }
     }

+ 0 - 1
Source/cmLocalVisualStudioGenerator.h

@@ -56,7 +56,6 @@ protected:
                         std::map<cmStdString, int>& count);
   void InsertNeedObjectNames(const std::vector<cmSourceGroup>& groups,
                              std::map<cmStdString, int>& count);
-  bool NeedXMLEscape;
   std::set<const cmSourceFile*> NeedObjectName;
   friend class cmVisualStudio10TargetGenerator;
 };

+ 23 - 12
Source/cmVisualStudio10TargetGenerator.cxx

@@ -27,6 +27,13 @@
 #include "cmVS10LinkFlagTable.h"
 #include "cmVS10LibFlagTable.h"
 
+static std::string cmVS10EscapeXML(std::string arg)
+{
+  cmSystemTools::ReplaceString(arg, "&", "&amp;");
+  cmSystemTools::ReplaceString(arg, "<", "&lt;");
+  cmSystemTools::ReplaceString(arg, ">", "&gt;");
+  return arg;
+}
 
 cmVisualStudio10TargetGenerator::
 cmVisualStudio10TargetGenerator(cmTarget* target,
@@ -289,12 +296,14 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
   for(std::vector<std::string>::iterator i = configs->begin();
       i != configs->end(); ++i)
     {
-    std::string script = 
-      lg->ConstructScript(command.GetCommandLines(),
-                          command.GetWorkingDirectory(),
-                          i->c_str(),
-                          command.GetEscapeOldStyle(),
-                          command.GetEscapeAllowMakeVars());
+    std::string script =
+      cmVS10EscapeXML(
+        lg->ConstructScript(command.GetCommandLines(),
+                            command.GetWorkingDirectory(),
+                            i->c_str(),
+                            command.GetEscapeOldStyle(),
+                            command.GetEscapeAllowMakeVars())
+        );
     this->WritePlatformConfigTag("Message",i->c_str(), 3);
     (*this->BuildFileStream ) << comment << "</Message>\n";
     this->WritePlatformConfigTag("Command", i->c_str(), 3);
@@ -1202,12 +1211,14 @@ void cmVisualStudio10TargetGenerator::WriteEvent(
     comment += lg->ConstructComment(command);
     script += pre;
     pre = "\n";
-    script += 
-      lg->ConstructScript(command.GetCommandLines(),
-                          command.GetWorkingDirectory(),
-                          configName.c_str(),
-                          command.GetEscapeOldStyle(),
-                          command.GetEscapeAllowMakeVars());
+    script +=
+      cmVS10EscapeXML(
+        lg->ConstructScript(command.GetCommandLines(),
+                            command.GetWorkingDirectory(),
+                            configName.c_str(),
+                            command.GetEscapeOldStyle(),
+                            command.GetEscapeAllowMakeVars())
+        );
     }
   this->WriteString("<Message>",3);
   (*this->BuildFileStream ) << comment << "</Message>\n";