From 72bb058e92167a272b40b4b710fc2fe41b1fc8fe Mon Sep 17 00:00:00 2001 From: Alex Neundorf Date: Wed, 16 Nov 2011 22:35:06 +0100 Subject: 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 --- Source/cmQtAutomoc.cxx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx index 3d92a59..ad11668 100644 --- a/Source/cmQtAutomoc.cxx +++ b/Source/cmQtAutomoc.cxx @@ -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 // 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. - 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 " << "contains a Q_OBJECT macro, but does not include " - << "\"" << scannedFileBasename << ".moc\", but instead includes " + << "\"" << scannedFileBasename << ".moc\", but instead " + "includes " << "\"" << ownMocUnderscoreFile << "\". Running moc on " << "\"" << absFilename << "\" ! Better include \"" << scannedFileBasename << ".moc\" for a robust build." @@ -666,6 +668,15 @@ void cmQtAutomoc::ParseCppFile(const std::string& absFilename, includedMocs[absFilename] = ownMocUnderscoreFile; 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: -- cgit v0.12