summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Neundorf <neundorf@kde.org>2012-03-20 21:52:05 (GMT)
committerAlex Neundorf <neundorf@kde.org>2012-03-26 19:45:27 (GMT)
commit2066511ca9a0b86d45e07357ebec8dd07f1c93b9 (patch)
tree00cb3def3937922b3793124c146cd13f304121a8
parentc652812af741c2468ad5b58e789244700aa51be5 (diff)
downloadCMake-2066511ca9a0b86d45e07357ebec8dd07f1c93b9.zip
CMake-2066511ca9a0b86d45e07357ebec8dd07f1c93b9.tar.gz
CMake-2066511ca9a0b86d45e07357ebec8dd07f1c93b9.tar.bz2
automoc: fix #13018, proper cmake escaping to avoid false rebuilds
The variables stored in the AutomocInfo.cmake file were not properly escaped, so when reading them back they could turn into lists, if they contained double quotes initially. This patch fixes this by using cmLocalGenerator::EscapeForCMake() to escape the variables properly. Alex
-rw-r--r--Modules/AutomocInfo.cmake.in14
-rw-r--r--Source/cmQtAutomoc.cxx26
2 files changed, 24 insertions, 16 deletions
diff --git a/Modules/AutomocInfo.cmake.in b/Modules/AutomocInfo.cmake.in
index 29dab97..13f2161 100644
--- a/Modules/AutomocInfo.cmake.in
+++ b/Modules/AutomocInfo.cmake.in
@@ -1,9 +1,9 @@
-set(AM_SOURCES "@_moc_files@" )
-set(AM_HEADERS "@_moc_headers@" )
-set(AM_MOC_COMPILE_DEFINITIONS "@_moc_compile_defs@")
-set(AM_MOC_DEFINITIONS "@_moc_defs@")
-set(AM_MOC_INCLUDES "@_moc_incs@")
-set(AM_MOC_OPTIONS "@_moc_options@")
+set(AM_SOURCES @_moc_files@ )
+set(AM_HEADERS @_moc_headers@ )
+set(AM_MOC_COMPILE_DEFINITIONS @_moc_compile_defs@)
+set(AM_MOC_DEFINITIONS @_moc_defs@)
+set(AM_MOC_INCLUDES @_moc_incs@)
+set(AM_MOC_OPTIONS @_moc_options@)
set(AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE "@CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE@")
set(AM_CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@/")
set(AM_CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@/")
@@ -12,5 +12,5 @@ set(AM_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@/")
set(AM_CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@/")
set(AM_QT_VERSION_MAJOR "@QT_VERSION_MAJOR@" )
set(AM_Qt5Core_VERSION_MAJOR "@Qt5Core_VERSION_MAJOR@" )
-set(AM_TARGET_NAME "@_moc_target_name@")
+set(AM_TARGET_NAME @_moc_target_name@)
set(AM_RELAXED_MODE "@_moc_relaxed_mode@")
diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx
index 0d0d80c..8b899bc 100644
--- a/Source/cmQtAutomoc.cxx
+++ b/Source/cmQtAutomoc.cxx
@@ -202,13 +202,20 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
cmMakefile::ScopePushPop varScope(makefile);
static_cast<void>(varScope);
- makefile->AddDefinition("_moc_target_name", automocTargetName.c_str());
- makefile->AddDefinition("_moc_incs", _moc_incs.c_str());
- makefile->AddDefinition("_moc_defs", _moc_defs.c_str());
- makefile->AddDefinition("_moc_compile_defs", _moc_compile_defs.c_str());
- makefile->AddDefinition("_moc_options", _moc_options.c_str());
- makefile->AddDefinition("_moc_files", _moc_files.c_str());
- makefile->AddDefinition("_moc_headers", _moc_headers.c_str());
+ makefile->AddDefinition("_moc_target_name",
+ cmLocalGenerator::EscapeForCMake(automocTargetName.c_str()).c_str());
+ makefile->AddDefinition("_moc_incs",
+ cmLocalGenerator::EscapeForCMake(_moc_incs.c_str()).c_str());
+ makefile->AddDefinition("_moc_defs",
+ cmLocalGenerator::EscapeForCMake(_moc_defs.c_str()).c_str());
+ makefile->AddDefinition("_moc_compile_defs",
+ cmLocalGenerator::EscapeForCMake(_moc_compile_defs.c_str()).c_str());
+ makefile->AddDefinition("_moc_options",
+ cmLocalGenerator::EscapeForCMake(_moc_options.c_str()).c_str());
+ makefile->AddDefinition("_moc_files",
+ cmLocalGenerator::EscapeForCMake(_moc_files.c_str()).c_str());
+ makefile->AddDefinition("_moc_headers",
+ cmLocalGenerator::EscapeForCMake(_moc_headers.c_str()).c_str());
makefile->AddDefinition("_moc_relaxed_mode", relaxedMode ? "TRUE" : "FALSE");
const char* cmakeRoot = makefile->GetSafeDefinition("CMAKE_ROOT");
@@ -340,8 +347,9 @@ void cmQtAutomoc::WriteOldMocDefinitionsFile(const char* targetDirectory)
std::fstream outfile;
outfile.open(filename.c_str(),
std::ios::out | std::ios::trunc);
- outfile << "set(AM_OLD_MOC_DEFINITIONS \""
- << this->Join(this->MocDefinitions, ' ') << "\")\n";
+ outfile << "set(AM_OLD_MOC_DEFINITIONS "
+ << cmLocalGenerator::EscapeForCMake(
+ this->Join(this->MocDefinitions, ' ').c_str()) << ")\n";
outfile.close();
}