diff options
author | Sebastian Holtermann <sebholt@xwmw.org> | 2016-08-06 11:33:46 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-08-10 17:21:33 (GMT) |
commit | 41c9e14afb0bc7e68e4530f76329b7c11cdfa0e4 (patch) | |
tree | f0a46413fc47b1d14d51a6835b557ab07007fd3a /Source/cmQtAutoGenerators.cxx | |
parent | 3c3b37b0bbd3fb78aa60a2b38184b6397d2ea47f (diff) | |
download | CMake-41c9e14afb0bc7e68e4530f76329b7c11cdfa0e4.zip CMake-41c9e14afb0bc7e68e4530f76329b7c11cdfa0e4.tar.gz CMake-41c9e14afb0bc7e68e4530f76329b7c11cdfa0e4.tar.bz2 |
QtAutogen: Allow multiple moc files with the same name
Use cmFilePathUuid for moc files.
Closes: #12873
Diffstat (limited to 'Source/cmQtAutoGenerators.cxx')
-rw-r--r-- | Source/cmQtAutoGenerators.cxx | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx index ea8db71..33f7a54 100644 --- a/Source/cmQtAutoGenerators.cxx +++ b/Source/cmQtAutoGenerators.cxx @@ -14,6 +14,7 @@ #include "cmQtAutoGenerators.h" #include "cmAlgorithms.h" +#include "cmFilePathUuid.h" #include "cmGlobalGenerator.h" #include "cmMakefile.h" #include "cmOutputConverter.h" @@ -358,11 +359,13 @@ void cmQtAutoGenerators::WriteOldMocDefinitionsFile( void cmQtAutoGenerators::Init() { + this->TargetBuildSubDir = this->TargetName; + this->TargetBuildSubDir += ".dir/"; + this->OutMocCppFilenameRel = this->TargetName; this->OutMocCppFilenameRel += ".cpp"; - this->OutMocCppFilename = this->Builddir; - this->OutMocCppFilename += this->OutMocCppFilenameRel; + this->OutMocCppFilenameAbs = this->Builddir + this->OutMocCppFilenameRel; std::vector<std::string> cdefList; cmSystemTools::ExpandListArgument(this->MocCompileDefinitionsStr, cdefList); @@ -439,7 +442,7 @@ static std::string ReadAll(const std::string& filename) bool cmQtAutoGenerators::RunAutogen(cmMakefile* makefile) { - if (!cmsys::SystemTools::FileExists(this->OutMocCppFilename.c_str()) || + if (!cmsys::SystemTools::FileExists(this->OutMocCppFilenameAbs.c_str()) || (this->OldCompileSettingsStr != this->CurrentCompileSettingsStr)) { this->GenerateAll = true; } @@ -933,6 +936,8 @@ void cmQtAutoGenerators::ParseHeaders( std::map<std::string, std::string>& notIncludedMocs, std::map<std::string, std::vector<std::string> >& includedUis) { + cmFilePathUuid fpathUuid(this->Srcdir, this->Builddir, + this->ProjectSourceDir, this->ProjectBinaryDir); for (std::set<std::string>::const_iterator hIt = absHeaders.begin(); hIt != absHeaders.end(); ++hIt) { const std::string& headerName = *hIt; @@ -946,13 +951,10 @@ void cmQtAutoGenerators::ParseHeaders( this->LogInfo(err.str()); } - const std::string basename = - cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName); - - const std::string currentMoc = "moc_" + basename + ".cpp"; std::string macroName; if (requiresMocing(contents, macroName)) { - notIncludedMocs[headerName] = currentMoc; + notIncludedMocs[headerName] = + this->TargetBuildSubDir + fpathUuid.get(headerName, "moc_", ".cpp"); } } this->ParseForUic(headerName, contents, includedUis); @@ -1029,7 +1031,7 @@ bool cmQtAutoGenerators::GenerateMocFiles( // check if we even need to update _automoc.cpp if (!automocCppChanged) { // compare contents of the _automoc.cpp file - const std::string oldContents = ReadAll(this->OutMocCppFilename); + const std::string oldContents = ReadAll(this->OutMocCppFilenameAbs); if (oldContents == automocSource) { // nothing changed: don't touch the _automoc.cpp file if (this->Verbose) { @@ -1052,7 +1054,7 @@ bool cmQtAutoGenerators::GenerateMocFiles( } { cmsys::ofstream outfile; - outfile.open(this->OutMocCppFilename.c_str(), std::ios::trunc); + outfile.open(this->OutMocCppFilenameAbs.c_str(), std::ios::trunc); outfile << automocSource; outfile.close(); } |