From b001b6e129134e88dc958cecbcd4c326e8daf36a Mon Sep 17 00:00:00 2001 From: Alex Neundorf Date: Mon, 27 Aug 2012 21:39:50 +0200 Subject: fix #13494: rerun automoc also if include dirs or moc options change Until now it was only rerun if the compile definitions changed, but of course it also has to rerun if the include dirs or moc options change. Strange that I didn't notice this before... Alex --- Source/cmQtAutomoc.cxx | 29 ++++++++++++++++++++++++----- Source/cmQtAutomoc.h | 5 ++++- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx index 65ecdf7..71feffd 100644 --- a/Source/cmQtAutomoc.cxx +++ b/Source/cmQtAutomoc.cxx @@ -321,12 +321,31 @@ bool cmQtAutomoc::ReadAutomocInfoFile(cmMakefile* makefile, this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR"); this->TargetName = makefile->GetSafeDefinition("AM_TARGET_NAME"); + this->CurrentCompileSettingsStr = this->MakeCompileSettingsString(makefile); + this->RelaxedMode = makefile->IsOn("AM_RELAXED_MODE"); return true; } +std::string cmQtAutomoc::MakeCompileSettingsString(cmMakefile* makefile) +{ + std::string s; + s += makefile->GetSafeDefinition("AM_MOC_DEFINITIONS"); + s += " ~~~ "; + s += makefile->GetSafeDefinition("AM_MOC_INCLUDES"); + s += " ~~~ "; + s += makefile->GetSafeDefinition("AM_MOC_OPTIONS"); + s += " ~~~ "; + s += makefile->IsOn("AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE") ? "TRUE" + : "FALSE"; + s += " ~~~ "; + + return s; +} + + bool cmQtAutomoc::ReadOldMocDefinitionsFile(cmMakefile* makefile, const char* targetDirectory) { @@ -336,8 +355,8 @@ bool cmQtAutomoc::ReadOldMocDefinitionsFile(cmMakefile* makefile, if (makefile->ReadListFile(0, filename.c_str())) { - this->OldMocDefinitionsStr = - makefile->GetSafeDefinition("AM_OLD_MOC_DEFINITIONS"); + this->OldCompileSettingsStr = + makefile->GetSafeDefinition("AM_OLD_COMPILE_SETTINGS"); } return true; } @@ -352,9 +371,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 " + outfile << "set(AM_OLD_COMPILE_SETTINGS " << cmLocalGenerator::EscapeForCMake( - this->Join(this->MocDefinitions, ' ').c_str()) << ")\n"; + this->CurrentCompileSettingsStr.c_str()) << ")\n"; outfile.close(); } @@ -471,7 +490,7 @@ void cmQtAutomoc::Init() bool cmQtAutomoc::RunAutomoc() { if (!cmsys::SystemTools::FileExists(this->OutMocCppFilename.c_str()) - || (this->OldMocDefinitionsStr != this->Join(this->MocDefinitions, ' '))) + || (this->OldCompileSettingsStr != this->CurrentCompileSettingsStr)) { this->GenerateAll = true; } diff --git a/Source/cmQtAutomoc.h b/Source/cmQtAutomoc.h index 8cbbac1..f6d72e2 100644 --- a/Source/cmQtAutomoc.h +++ b/Source/cmQtAutomoc.h @@ -35,6 +35,8 @@ private: const char* targetDirectory); void WriteOldMocDefinitionsFile(const char* targetDirectory); + std::string MakeCompileSettingsString(cmMakefile* makefile); + bool RunAutomoc(); bool GenerateMoc(const std::string& sourceFile, const std::string& mocFileName); @@ -74,7 +76,8 @@ private: std::string ProjectSourceDir; std::string TargetName; - std::string OldMocDefinitionsStr; + std::string CurrentCompileSettingsStr; + std::string OldCompileSettingsStr; std::string OutMocCppFilename; std::list MocIncludes; -- cgit v0.12