diff options
author | David Cole <david.cole@kitware.com> | 2011-01-25 23:54:36 (GMT) |
---|---|---|
committer | David Cole <david.cole@kitware.com> | 2011-01-26 00:01:13 (GMT) |
commit | 662756036e4f4983b00ab7740773a55bef808c64 (patch) | |
tree | 187ec92cf99e4c04efa440539b4aa316b7180153 | |
parent | 0cde56dda4b93a8a51196dbd8c26fdf530a70968 (diff) | |
download | CMake-662756036e4f4983b00ab7740773a55bef808c64.zip CMake-662756036e4f4983b00ab7740773a55bef808c64.tar.gz CMake-662756036e4f4983b00ab7740773a55bef808c64.tar.bz2 |
VS10: Escape double quote chars in defines for rc files (#11695)
To get rc defines to work in the VS10 IDE requires \" when
constructing PreprocessorDefinitions strings. This is different
than defines for cl.
Also, per-file rc defines were not being generated. Fix that, too.
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.cxx | 8 | ||||
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 11 | ||||
-rw-r--r-- | Source/cmVisualStudioGeneratorOptions.cxx | 8 | ||||
-rw-r--r-- | Source/cmVisualStudioGeneratorOptions.h | 3 | ||||
-rw-r--r-- | Tests/VSResource/CMakeLists.txt | 10 | ||||
-rw-r--r-- | Tests/VSResource/test.rc | 7 |
6 files changed, 35 insertions, 12 deletions
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 21f6460..7d36153 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -755,7 +755,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout, } fout << "\"\n"; targetOptions.OutputFlagMap(fout, "\t\t\t\t"); - targetOptions.OutputPreprocessorDefinitions(fout, "\t\t\t\t", "\n"); + targetOptions.OutputPreprocessorDefinitions(fout, "\t\t\t\t", "\n", "CXX"); fout << "\t\t\t\tAssemblerListingLocation=\"" << configName << "\"\n"; fout << "\t\t\t\tObjectFile=\"$(IntDir)\\\"\n"; if(targetBuilds) @@ -789,7 +789,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout, } // add the -D flags to the RC tool fout << "\""; - targetOptions.OutputPreprocessorDefinitions(fout, "\n\t\t\t\t", ""); + targetOptions.OutputPreprocessorDefinitions(fout, "\n\t\t\t\t", "", "RC"); fout << "/>\n"; tool = "VCMIDLTool"; if(this->FortranProject) @@ -1462,6 +1462,7 @@ void cmLocalVisualStudio7Generator else if(!fcinfo.FileConfigMap.empty()) { const char* aCompilerTool = "VCCLCompilerTool"; + const char* lang = "CXX"; if(this->FortranProject) { aCompilerTool = "VFFortranCompilerTool"; @@ -1479,6 +1480,7 @@ void cmLocalVisualStudio7Generator if(ext == "rc") { aCompilerTool = "VCResourceCompilerTool"; + lang = "RC"; if(this->FortranProject) { aCompilerTool = "VFResourceCompilerTool"; @@ -1520,7 +1522,7 @@ void cmLocalVisualStudio7Generator fileOptions.OutputAdditionalOptions(fout, "\t\t\t\t\t", "\n"); fileOptions.OutputFlagMap(fout, "\t\t\t\t\t"); fileOptions.OutputPreprocessorDefinitions(fout, - "\t\t\t\t\t", "\n"); + "\t\t\t\t\t", "\n", lang); } if(!fc.AdditionalDeps.empty()) { diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 2d55e1e..4cb745e 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -717,6 +717,10 @@ void cmVisualStudio10TargetGenerator::WriteCLSources() // is ended on a new line this->WriteString("</ClCompile>\n", 2); } + else if(!header && rc && this->OutputSourceSpecificFlags(*source)) + { + this->WriteString("</ResourceCompile>\n", 2); + } else { (*this->BuildFileStream ) << " />\n"; @@ -853,8 +857,7 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags( clOptions.OutputAdditionalOptions(*this->BuildFileStream, " ", ""); clOptions.OutputFlagMap(*this->BuildFileStream, " "); clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, - " ", "\n"); - + " ", "\n", lang); } } return hasFlags; @@ -1120,7 +1123,7 @@ void cmVisualStudio10TargetGenerator::WriteClOptions( } clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, " ", - "\n"); + "\n", "CXX"); this->WriteString("<AssemblerListingLocation>", 3); *this->BuildFileStream << configName << "</AssemblerListingLocation>\n"; @@ -1155,7 +1158,7 @@ WriteRCOptions(std::string const& configName, this->WriteString("<ResourceCompile>\n", 2); Options& clOptions = *(this->ClOptions[configName]); clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, " ", - "\n"); + "\n", "RC"); this->OutputIncludes(includes); this->WriteString("</ResourceCompile>\n", 2); } diff --git a/Source/cmVisualStudioGeneratorOptions.cxx b/Source/cmVisualStudioGeneratorOptions.cxx index 9acae0d..ed0d60c 100644 --- a/Source/cmVisualStudioGeneratorOptions.cxx +++ b/Source/cmVisualStudioGeneratorOptions.cxx @@ -204,7 +204,8 @@ void cmVisualStudioGeneratorOptions ::OutputPreprocessorDefinitions(std::ostream& fout, const char* prefix, - const char* suffix) + const char* suffix, + const char* lang) { if(this->Defines.empty()) { @@ -251,6 +252,11 @@ cmVisualStudioGeneratorOptions if(this->Version == 10) { define = cmVisualStudio10GeneratorOptionsEscapeForXML(define.c_str()); + + if(0 == strcmp(lang, "RC")) + { + cmSystemTools::ReplaceString(define, "\"", "\\\""); + } } else { diff --git a/Source/cmVisualStudioGeneratorOptions.h b/Source/cmVisualStudioGeneratorOptions.h index 8619ba0..fadc4b5 100644 --- a/Source/cmVisualStudioGeneratorOptions.h +++ b/Source/cmVisualStudioGeneratorOptions.h @@ -54,7 +54,8 @@ public: // Write options to output. void OutputPreprocessorDefinitions(std::ostream& fout, const char* prefix, - const char* suffix); + const char* suffix, + const char* lang); void OutputFlagMap(std::ostream& fout, const char* indent); void OutputAdditionalOptions(std::ostream& fout, const char* prefix, diff --git a/Tests/VSResource/CMakeLists.txt b/Tests/VSResource/CMakeLists.txt index e842955..8c14f8d 100644 --- a/Tests/VSResource/CMakeLists.txt +++ b/Tests/VSResource/CMakeLists.txt @@ -1,7 +1,13 @@ -cmake_minimum_required (VERSION 2.6) +cmake_minimum_required(VERSION 2.8.3.20110118) project (VSResource) -add_definitions(/DCMAKE_RCDEFINE="test.txt") + string(REPLACE "/INCREMENTAL:YES" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}") + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.txt + "${CMAKE_CURRENT_BINARY_DIR}/test with spaces.txt" COPYONLY) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +add_definitions(/DCMAKE_RCDEFINE="test with spaces.txt") + add_executable(VSResource main.cpp test.rc) diff --git a/Tests/VSResource/test.rc b/Tests/VSResource/test.rc index 8aab8b7..2e87a68 100644 --- a/Tests/VSResource/test.rc +++ b/Tests/VSResource/test.rc @@ -1,5 +1,10 @@ #ifdef CMAKE_RCDEFINE hello TEXT DISCARDABLE CMAKE_RCDEFINE + +STRINGTABLE +BEGIN + 1 CMAKE_RCDEFINE +END #else #error "resource compiler did not get defines from command line!" -#endif
\ No newline at end of file +#endif |