diff options
-rw-r--r-- | Source/cmLocalGenerator.cxx | 11 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio6Generator.cxx | 5 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 5 | ||||
-rw-r--r-- | Tests/Preprocess/CMakeLists.txt | 5 |
4 files changed, 18 insertions, 8 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index c38bedd..f66988e 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1994,8 +1994,15 @@ void cmLocalGenerator::AppendDefines(std::string& defines, } else { - // Make the definition appear properly on the command line. - defines += this->EscapeForShell(di->c_str(), true); + // Make the definition appear properly on the command line. Use + // -DNAME="value" instead of -D"NAME=value" to help VS6 parser. + std::string::size_type eq = di->find("="); + defines += di->substr(0, eq); + if(eq != di->npos) + { + defines += "="; + defines += this->EscapeForShell(di->c_str() + eq + 1, true); + } } } } diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 8ecfa0d..9373e31 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -1712,11 +1712,12 @@ cmLocalVisualStudio6Generator } // Now do the VS6-specific check. - if(define.find_first_of(" ") != define.npos) + if(define.find_first_of(" ") != define.npos && + define.find_first_of("\"$;") != define.npos) { cmOStringStream e; e << "WARNING: The VS6 IDE does not support preprocessor definition " - << "values with spaces.\n" + << "values with spaces and '\"', '$', or ';'.\n" << "CMake is dropping a preprocessor definition: " << define << "\n" << "Consider defining the macro in a (configured) header file.\n"; cmSystemTools::Message(e.str().c_str()); diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index a0b536b..fc57276 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1216,10 +1216,11 @@ bool cmMakefile::ParseDefineFlag(std::string const& def, bool remove) return false; } - // VS6 IDE does not support definition values with spaces. + // VS6 IDE does not support definition values with spaces in + // combination with '"', '$', or ';'. if((strcmp(this->LocalGenerator->GetGlobalGenerator()->GetName(), "Visual Studio 6") == 0) && - (def.find(" ") != def.npos)) + (def.find(" ") != def.npos && def.find_first_of("\"$;") != def.npos)) { return false; } diff --git a/Tests/Preprocess/CMakeLists.txt b/Tests/Preprocess/CMakeLists.txt index bb33907..3187c36 100644 --- a/Tests/Preprocess/CMakeLists.txt +++ b/Tests/Preprocess/CMakeLists.txt @@ -66,8 +66,9 @@ if(NOT BORLAND AND NOT PP_VS70) endif(NOT BORLAND AND NOT PP_VS70) if(NOT PP_VS6) - # VS 6 IDE: spaces - # The project parser unconditionally separates arguments at spaces. + # VS 6 IDE: spaces and '"', '$', or ';' + # The project parser cannot handle spaces if there are quotes. + # Since we test passing in a quoted string, we cannot have spaces. set(STRING_EXTRA "${STRING_EXTRA} ") if(NOT PP_BORLAND AND NOT PP_WATCOM) |