Merge topic 'AutomocRerunFix'

b001b6e fix #13494: rerun automoc also if include dirs or moc options change
This commit is contained in:
Brad King 2012-08-30 11:55:18 -04:00 committed by CMake Topic Stage
commit a028fffaad
2 changed files with 28 additions and 6 deletions

View File

@ -321,12 +321,31 @@ bool cmQtAutomoc::ReadAutomocInfoFile(cmMakefile* makefile,
this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR"); this->ProjectSourceDir = makefile->GetSafeDefinition("AM_CMAKE_SOURCE_DIR");
this->TargetName = makefile->GetSafeDefinition("AM_TARGET_NAME"); this->TargetName = makefile->GetSafeDefinition("AM_TARGET_NAME");
this->CurrentCompileSettingsStr = this->MakeCompileSettingsString(makefile);
this->RelaxedMode = makefile->IsOn("AM_RELAXED_MODE"); this->RelaxedMode = makefile->IsOn("AM_RELAXED_MODE");
return true; 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, bool cmQtAutomoc::ReadOldMocDefinitionsFile(cmMakefile* makefile,
const char* targetDirectory) const char* targetDirectory)
{ {
@ -336,8 +355,8 @@ bool cmQtAutomoc::ReadOldMocDefinitionsFile(cmMakefile* makefile,
if (makefile->ReadListFile(0, filename.c_str())) if (makefile->ReadListFile(0, filename.c_str()))
{ {
this->OldMocDefinitionsStr = this->OldCompileSettingsStr =
makefile->GetSafeDefinition("AM_OLD_MOC_DEFINITIONS"); makefile->GetSafeDefinition("AM_OLD_COMPILE_SETTINGS");
} }
return true; return true;
} }
@ -352,9 +371,9 @@ void cmQtAutomoc::WriteOldMocDefinitionsFile(const char* targetDirectory)
std::fstream outfile; std::fstream outfile;
outfile.open(filename.c_str(), outfile.open(filename.c_str(),
std::ios::out | std::ios::trunc); std::ios::out | std::ios::trunc);
outfile << "set(AM_OLD_MOC_DEFINITIONS " outfile << "set(AM_OLD_COMPILE_SETTINGS "
<< cmLocalGenerator::EscapeForCMake( << cmLocalGenerator::EscapeForCMake(
this->Join(this->MocDefinitions, ' ').c_str()) << ")\n"; this->CurrentCompileSettingsStr.c_str()) << ")\n";
outfile.close(); outfile.close();
} }
@ -471,7 +490,7 @@ void cmQtAutomoc::Init()
bool cmQtAutomoc::RunAutomoc() bool cmQtAutomoc::RunAutomoc()
{ {
if (!cmsys::SystemTools::FileExists(this->OutMocCppFilename.c_str()) if (!cmsys::SystemTools::FileExists(this->OutMocCppFilename.c_str())
|| (this->OldMocDefinitionsStr != this->Join(this->MocDefinitions, ' '))) || (this->OldCompileSettingsStr != this->CurrentCompileSettingsStr))
{ {
this->GenerateAll = true; this->GenerateAll = true;
} }

View File

@ -35,6 +35,8 @@ private:
const char* targetDirectory); const char* targetDirectory);
void WriteOldMocDefinitionsFile(const char* targetDirectory); void WriteOldMocDefinitionsFile(const char* targetDirectory);
std::string MakeCompileSettingsString(cmMakefile* makefile);
bool RunAutomoc(); bool RunAutomoc();
bool GenerateMoc(const std::string& sourceFile, bool GenerateMoc(const std::string& sourceFile,
const std::string& mocFileName); const std::string& mocFileName);
@ -74,7 +76,8 @@ private:
std::string ProjectSourceDir; std::string ProjectSourceDir;
std::string TargetName; std::string TargetName;
std::string OldMocDefinitionsStr; std::string CurrentCompileSettingsStr;
std::string OldCompileSettingsStr;
std::string OutMocCppFilename; std::string OutMocCppFilename;
std::list<std::string> MocIncludes; std::list<std::string> MocIncludes;