Просмотр исходного кода

BUG: Fixed cmLocalVisualStudio7Generator to deal with quotes in macro definitions properly. This addresses bug#4983.

Brad King 18 лет назад
Родитель
Сommit
adcd87c976

+ 8 - 9
Source/cmLocalVisualStudio7Generator.cxx

@@ -502,9 +502,9 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
     this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"));
 
   // Add a definition for the configuration name.
-  std::string configDefine = "CMAKE_INTDIR=\\\"";
+  std::string configDefine = "CMAKE_INTDIR=\"";
   configDefine += configName;
-  configDefine += "\\\"";
+  configDefine += "\"";
   targetOptions.AddDefine(configDefine);
 
   // Add the export symbol definition for shared library objects.
@@ -1836,14 +1836,13 @@ cmLocalVisualStudio7GeneratorOptions
   for(std::vector<cmStdString>::const_iterator di = this->Defines.begin();
       di != this->Defines.end(); ++di)
     {
-    // Escape this flag for the IDE.
-    std::string define =
-      cmLocalVisualStudio7GeneratorEscapeForXML(di->c_str());
-
-    // Old comment:
     // Double-quotes in the value of the definition must be escaped
-    // with a backslash.  The entire definition should be quoted in
-    // the generated xml attribute to avoid confusing the VS parser.
+    // with a backslash.
+    std::string define = di->c_str();
+    cmSystemTools::ReplaceString(define, "\"", "\\\"");
+
+    // Escape this flag for the IDE.
+    define = cmLocalVisualStudio7GeneratorEscapeForXML(define.c_str());
 
     // Write this flag.  Quote it if the definition is not
     // alphanumeric.

+ 2 - 1
Tests/Complex/Executable/CMakeLists.txt

@@ -87,7 +87,8 @@ ADD_CUSTOM_COMMAND(TARGET complex POST_BUILD
                         "${Complex_BINARY_DIR}/Executable/postbuild2.txt")
 
 SET_SOURCE_FILES_PROPERTIES(complex
-  COMPILE_FLAGS "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
+  COMPILE_FLAGS
+  "-DFILE_HAS_EXTRA_COMPILE_FLAGS -DFILE_DEFINE_STRING=\\\"hello\\\""
   OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
 )
 SET_TARGET_PROPERTIES(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")

+ 13 - 0
Tests/Complex/Executable/complex.cxx

@@ -1139,6 +1139,19 @@ int main()
   cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_HAS_EXTRA_COMPILE_FLAGS flag");
 #endif
 
+#ifndef FILE_DEFINE_STRING
+  cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag");
+#else
+  if(strcmp(FILE_DEFINE_STRING, "hello") != 0)
+    {
+    cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag correctly");
+    }
+  else
+    {
+    cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_DEFINE_STRING flag");
+    }
+#endif
+
 #ifndef FILE_HAS_ABSTRACT
   cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting ABSTRACT flag");
 #else

+ 2 - 1
Tests/ComplexOneConfig/Executable/CMakeLists.txt

@@ -87,7 +87,8 @@ ADD_CUSTOM_COMMAND(TARGET complex POST_BUILD
                         "${Complex_BINARY_DIR}/Executable/postbuild2.txt")
 
 SET_SOURCE_FILES_PROPERTIES(complex
-  COMPILE_FLAGS "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
+  COMPILE_FLAGS
+  "-DFILE_HAS_EXTRA_COMPILE_FLAGS -DFILE_DEFINE_STRING=\\\"hello\\\""
   OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
 )
 SET_TARGET_PROPERTIES(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")

+ 13 - 0
Tests/ComplexOneConfig/Executable/complex.cxx

@@ -1139,6 +1139,19 @@ int main()
   cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_HAS_EXTRA_COMPILE_FLAGS flag");
 #endif
 
+#ifndef FILE_DEFINE_STRING
+  cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag");
+#else
+  if(strcmp(FILE_DEFINE_STRING, "hello") != 0)
+    {
+    cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag correctly");
+    }
+  else
+    {
+    cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_DEFINE_STRING flag");
+    }
+#endif
+
 #ifndef FILE_HAS_ABSTRACT
   cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting ABSTRACT flag");
 #else

+ 2 - 1
Tests/ComplexRelativePaths/Executable/CMakeLists.txt

@@ -87,7 +87,8 @@ ADD_CUSTOM_COMMAND(TARGET complex POST_BUILD
                         "${Complex_BINARY_DIR}/Executable/postbuild2.txt")
 
 SET_SOURCE_FILES_PROPERTIES(complex
-  COMPILE_FLAGS "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
+  COMPILE_FLAGS
+  "-DFILE_HAS_EXTRA_COMPILE_FLAGS -DFILE_DEFINE_STRING=\\\"hello\\\""
   OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
 )
 SET_TARGET_PROPERTIES(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")

+ 13 - 0
Tests/ComplexRelativePaths/Executable/complex.cxx

@@ -1139,6 +1139,19 @@ int main()
   cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_HAS_EXTRA_COMPILE_FLAGS flag");
 #endif
 
+#ifndef FILE_DEFINE_STRING
+  cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag");
+#else
+  if(strcmp(FILE_DEFINE_STRING, "hello") != 0)
+    {
+    cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag correctly");
+    }
+  else
+    {
+    cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_DEFINE_STRING flag");
+    }
+#endif
+
 #ifndef FILE_HAS_ABSTRACT
   cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting ABSTRACT flag");
 #else