Browse Source

VS 10: Escape ; as %3B in preprocessor definitions (#14073)

Use the suggestion from http://support.microsoft.com/kb/2262855 to escape
semicolons in preprocessor definitions for VS >= 10.  Update the
COMPILE_DEFINITIONS documentation disclaimer list of known limitations
accordingly.  Update our "Preprocess" test to cover the case.

Suggested-by: Jean-Christophe Fillion-Robin <[email protected]>
Brad King 12 years ago
parent
commit
4e4688e469

+ 1 - 1
Source/cmDocumentCompileDefinitions.h

@@ -23,7 +23,7 @@
   "in a (configured) header file.  Then report the limitation.  "       \
   "Known limitations include:\n"                                        \
   "  #          - broken almost everywhere\n"                           \
-  "  ;          - broken in VS IDE and Borland Makefiles\n"             \
+  "  ;          - broken in VS IDE 7.0 and Borland Makefiles\n"         \
   "  ,          - broken in VS IDE\n"                                   \
   "  %          - broken in some cases in NMake\n"                      \
   "  & |        - broken in some cases on MinGW\n"                      \

+ 1 - 0
Source/cmVisualStudioGeneratorOptions.cxx

@@ -6,6 +6,7 @@
 inline std::string cmVisualStudio10GeneratorOptionsEscapeForXML(const char* s)
 {
   std::string ret = s;
+  cmSystemTools::ReplaceString(ret, ";", "%3B");
   cmSystemTools::ReplaceString(ret, "&", "&amp;");
   cmSystemTools::ReplaceString(ret, "<", "&lt;");
   cmSystemTools::ReplaceString(ret, ">", "&gt;");

+ 1 - 2
Tests/Preprocess/CMakeLists.txt

@@ -55,7 +55,7 @@ endif()
 # must not have it escaped inside the configured header.
 set(STRING_EXTRA "")
 
-if(NOT BORLAND AND NOT PP_VS70 AND NOT PP_VS100 AND NOT PP_VS110)
+if(NOT BORLAND AND NOT PP_VS70)
   # Borland, VS70 IDE: ;
   # The Borland compiler will simply not accept a non-escaped semicolon
   # on the command line.  If it is escaped \; then the escape character
@@ -63,7 +63,6 @@ if(NOT BORLAND AND NOT PP_VS70 AND NOT PP_VS100 AND NOT PP_VS110)
   #
   # The VS 7.0 IDE separates definitions on semicolons and commas with
   # no regard for quotes.  Fortunately VS 7.1 and above are okay.
-  # VS 10 seems to also not like semicolons
   set(SEMICOLON "\;")
 endif()