Automoc: modified handling of included .moc files

-enable the KDE4-compatiblity mode only when using Qt4
-always (except in the KDE4 compat mode) error out if a cpp-file
 contains "Q_OBJECT", but does not include filename.moc

Alex
This commit is contained in:
Alex Neundorf 2011-11-16 22:35:06 +01:00
parent e44ebd5f9b
commit 72bb058e92
1 changed files with 14 additions and 3 deletions

View File

@ -652,13 +652,15 @@ void cmQtAutomoc::ParseCppFile(const std::string& absFilename,
// If this is the case, the moc_foo.cpp should probably be generated from // If this is the case, the moc_foo.cpp should probably be generated from
// foo.cpp instead of foo.h, because otherwise it won't build. // foo.cpp instead of foo.h, because otherwise it won't build.
// But warn, since this is not how it is supposed to be used. // But warn, since this is not how it is supposed to be used.
if ((dotMocIncluded == false) && (mocUnderscoreIncluded == true)) if ((dotMocIncluded == false) && (containsQ_OBJECT(contentsString)))
{ {
if (containsQ_OBJECT(contentsString)) if ((this->QtMajorVersion == "4") && (mocUnderscoreIncluded == true))
{ {
// this is for KDE4 compatibility:
std::cerr << "AUTOMOC: warning: " << absFilename << ": The file " std::cerr << "AUTOMOC: warning: " << absFilename << ": The file "
<< "contains a Q_OBJECT macro, but does not include " << "contains a Q_OBJECT macro, but does not include "
<< "\"" << scannedFileBasename << ".moc\", but instead includes " << "\"" << scannedFileBasename << ".moc\", but instead "
"includes "
<< "\"" << ownMocUnderscoreFile << "\". Running moc on " << "\"" << ownMocUnderscoreFile << "\". Running moc on "
<< "\"" << absFilename << "\" ! Better include \"" << "\"" << absFilename << "\" ! Better include \""
<< scannedFileBasename << ".moc\" for a robust build." << scannedFileBasename << ".moc\" for a robust build."
@ -666,6 +668,15 @@ void cmQtAutomoc::ParseCppFile(const std::string& absFilename,
includedMocs[absFilename] = ownMocUnderscoreFile; includedMocs[absFilename] = ownMocUnderscoreFile;
includedMocs.erase(ownMocHeaderFile); includedMocs.erase(ownMocHeaderFile);
} }
else
{
// otherwise always error out since it will not compile:
std::cerr << "AUTOMOC: error: " << absFilename << ": The file "
<< "contains a Q_OBJECT macro, but does not include "
<< "\"" << scannedFileBasename << ".moc\" !"
<< std::endl;
::exit(EXIT_FAILURE);
}
} }
// search for header files and private header files we may need to moc: // search for header files and private header files we may need to moc: