From 05f22d6eb287e732205fd0869a68a747781b6a35 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 25 Apr 2017 14:53:40 -0300 Subject: [PATCH] QtCore: include mocs Compilation and link times in CPU seconds with GCC 7, using precompiled headers (not including moc, rcc, uic, etc. steps or headersclean): Before After Debug -O0 198,1 180,3 Debug -Og 240,7 229,2 Release -O3 267,1 249,2 Release LTO 239,4 229,8 QtCore required a little manual adjusting because some files are bootstrapped into moc itself and into qmake. Change-Id: I84e363d735b443cb9beefffd14b8b57c10e7da36 Reviewed-by: Lars Knoll Reviewed-by: Marc Mutz Reviewed-by: Oswald Buddenhagen --- src/corelib/animation/qabstractanimation.cpp | 1 + src/corelib/io/qfile.cpp | 4 + src/corelib/io/qfiledevice.cpp | 4 + src/corelib/io/qfilesystemwatcher.cpp | 1 + src/corelib/io/qfilesystemwatcher_inotify.cpp | 2 + src/corelib/io/qfilesystemwatcher_polling.cpp | 3 + src/corelib/io/qiodevice.cpp | 4 + src/corelib/io/qnoncontiguousbytedevice.cpp | 1 + src/corelib/io/qsavefile.cpp | 4 + src/corelib/io/qsettings.cpp | 4 + src/corelib/io/qstandardpaths.cpp | 4 + src/corelib/io/qtemporaryfile.cpp | 4 +- src/corelib/io/qtextstream.cpp | 3 + src/corelib/itemmodels/qabstractitemmodel.cpp | 2 + src/corelib/itemmodels/qstringlistmodel.cpp | 2 + .../kernel/qabstracteventdispatcher.cpp | 2 + src/corelib/kernel/qcoreapplication.cpp | 4 + src/corelib/kernel/qcoreevent.cpp | 2 + src/corelib/kernel/qeventdispatcher_glib.cpp | 2 + src/corelib/kernel/qeventdispatcher_unix.cpp | 2 + src/corelib/kernel/qeventloop.cpp | 2 + src/corelib/kernel/qmimedata.cpp | 2 + src/corelib/kernel/qobjectcleanuphandler.cpp | 2 + src/corelib/kernel/qsharedmemory.cpp | 2 + src/corelib/kernel/qsocketnotifier.cpp | 2 + src/corelib/kernel/qtimer.cpp | 1 + src/corelib/kernel/qtranslator.cpp | 2 + src/corelib/plugin/qfactoryloader.cpp | 2 + src/corelib/plugin/qlibrary.cpp | 2 + src/corelib/plugin/qpluginloader.cpp | 1 + src/corelib/statemachine/qabstractstate.cpp | 2 + .../statemachine/qabstracttransition.cpp | 2 + src/corelib/statemachine/qeventtransition.cpp | 2 + src/corelib/statemachine/qfinalstate.cpp | 2 + src/corelib/statemachine/qhistorystate.cpp | 3 + .../statemachine/qsignaltransition.cpp | 2 + src/corelib/statemachine/qstate.cpp | 2 + src/corelib/thread/qfuturewatcher.cpp | 2 + src/corelib/thread/qthread.cpp | 2 + src/corelib/thread/qthreadpool.cpp | 2 + src/corelib/tools/qcryptographichash.cpp | 4 + src/corelib/tools/qeasingcurve.cpp | 2 + src/corelib/tools/qlocale.cpp | 4 + src/corelib/tools/qtimeline.cpp | 2 + util/includemocs/includemocs.pl | 138 ++++++++++++++++++ 45 files changed, 243 insertions(+), 1 deletion(-) create mode 100755 util/includemocs/includemocs.pl diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp index 8c189e92888..2041b8816e4 100644 --- a/src/corelib/animation/qabstractanimation.cpp +++ b/src/corelib/animation/qabstractanimation.cpp @@ -1484,5 +1484,6 @@ void QAbstractAnimation::updateDirection(QAbstractAnimation::Direction direction QT_END_NAMESPACE #include "moc_qabstractanimation.cpp" +#include "moc_qabstractanimation_p.cpp" #endif //QT_NO_ANIMATION diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index 41fae69bb23..06d706b9150 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -1106,3 +1106,7 @@ qint64 QFile::size() const } QT_END_NAMESPACE + +#ifndef QT_NO_QOBJECT +#include "moc_qfile.cpp" +#endif diff --git a/src/corelib/io/qfiledevice.cpp b/src/corelib/io/qfiledevice.cpp index ce9c8275cea..715dc7293ae 100644 --- a/src/corelib/io/qfiledevice.cpp +++ b/src/corelib/io/qfiledevice.cpp @@ -739,3 +739,7 @@ bool QFileDevice::unmap(uchar *address) } QT_END_NAMESPACE + +#ifndef QT_NO_QOBJECT +#include "moc_qfiledevice.cpp" +#endif diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp index 612b3fa57c7..ed597c415bd 100644 --- a/src/corelib/io/qfilesystemwatcher.cpp +++ b/src/corelib/io/qfilesystemwatcher.cpp @@ -497,6 +497,7 @@ QStringList QFileSystemWatcher::files() const QT_END_NAMESPACE #include "moc_qfilesystemwatcher.cpp" +#include "moc_qfilesystemwatcher_p.cpp" #endif // QT_NO_FILESYSTEMWATCHER diff --git a/src/corelib/io/qfilesystemwatcher_inotify.cpp b/src/corelib/io/qfilesystemwatcher_inotify.cpp index 5564bc7dcae..3cfc6a254fa 100644 --- a/src/corelib/io/qfilesystemwatcher_inotify.cpp +++ b/src/corelib/io/qfilesystemwatcher_inotify.cpp @@ -417,4 +417,6 @@ QString QInotifyFileSystemWatcherEngine::getPathFromID(int id) const QT_END_NAMESPACE +#include "moc_qfilesystemwatcher_inotify_p.cpp" + #endif // QT_NO_FILESYSTEMWATCHER diff --git a/src/corelib/io/qfilesystemwatcher_polling.cpp b/src/corelib/io/qfilesystemwatcher_polling.cpp index cbcb68e7d26..5bef8127f7b 100644 --- a/src/corelib/io/qfilesystemwatcher_polling.cpp +++ b/src/corelib/io/qfilesystemwatcher_polling.cpp @@ -151,4 +151,7 @@ void QPollingFileSystemWatcherEngine::timeout() } QT_END_NAMESPACE + +#include "moc_qfilesystemwatcher_polling_p.cpp" + #endif // !QT_NO_FILESYSTEMWATCHER diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index 41a4d7a1ba3..80122eac5ef 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -2059,3 +2059,7 @@ QDebug operator<<(QDebug debug, QIODevice::OpenMode modes) #endif QT_END_NAMESPACE + +#ifndef QT_NO_QOBJECT +#include "moc_qiodevice.cpp" +#endif diff --git a/src/corelib/io/qnoncontiguousbytedevice.cpp b/src/corelib/io/qnoncontiguousbytedevice.cpp index 61299b8aa80..beca6ccbf78 100644 --- a/src/corelib/io/qnoncontiguousbytedevice.cpp +++ b/src/corelib/io/qnoncontiguousbytedevice.cpp @@ -578,3 +578,4 @@ QIODevice* QNonContiguousByteDeviceFactory::wrap(QNonContiguousByteDevice* byteD QT_END_NAMESPACE +#include "moc_qnoncontiguousbytedevice_p.cpp" diff --git a/src/corelib/io/qsavefile.cpp b/src/corelib/io/qsavefile.cpp index d8166014dbe..0283c5f31fb 100644 --- a/src/corelib/io/qsavefile.cpp +++ b/src/corelib/io/qsavefile.cpp @@ -412,4 +412,8 @@ bool QSaveFile::directWriteFallback() const QT_END_NAMESPACE +#ifndef QT_NO_QOBJECT +#include "moc_qsavefile.cpp" +#endif + #endif // QT_NO_TEMPORARYFILE diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 16dab38a60e..d5460238ecb 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -3513,4 +3513,8 @@ QSettings::Format QSettings::registerFormat(const QString &extension, ReadFunc r QT_END_NAMESPACE +#ifndef QT_BOOTSTRAPPED +#include "moc_qsettings.cpp" +#endif + #endif // QT_NO_SETTINGS diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp index 4cf3a3e9bd0..f2368c3b234 100644 --- a/src/corelib/io/qstandardpaths.cpp +++ b/src/corelib/io/qstandardpaths.cpp @@ -645,4 +645,8 @@ bool QStandardPaths::isTestModeEnabled() QT_END_NAMESPACE +#ifndef QT_NO_QOBJECT +#include "moc_qstandardpaths.cpp" +#endif + #endif // QT_NO_STANDARDPATHS diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index 7aae128796c..8a99873fee1 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -796,4 +796,6 @@ QT_END_NAMESPACE #endif // QT_NO_TEMPORARYFILE - +#ifndef QT_NO_QOBJECT +#include "moc_qtemporaryfile.cpp" +#endif diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 9b565bff9dc..5144ac0ec99 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -3188,3 +3188,6 @@ QLocale QTextStream::locale() const QT_END_NAMESPACE +#ifndef QT_NO_QOBJECT +#include "moc_qtextstream_p.cpp" +#endif diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 0c87dd56594..c0737ffb364 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -3804,3 +3804,5 @@ void QAbstractItemModelPrivate::Persistent::insertMultiAtEnd(const QModelIndex& } QT_END_NAMESPACE + +#include "moc_qabstractitemmodel.cpp" diff --git a/src/corelib/itemmodels/qstringlistmodel.cpp b/src/corelib/itemmodels/qstringlistmodel.cpp index 0f7472aa5ae..2b47d434695 100644 --- a/src/corelib/itemmodels/qstringlistmodel.cpp +++ b/src/corelib/itemmodels/qstringlistmodel.cpp @@ -328,4 +328,6 @@ Qt::DropActions QStringListModel::supportedDropActions() const QT_END_NAMESPACE +#include "moc_qstringlistmodel.cpp" + #endif // QT_NO_STRINGLISTMODEL diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp index e94faa4587f..d234949d143 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.cpp +++ b/src/corelib/kernel/qabstracteventdispatcher.cpp @@ -521,3 +521,5 @@ bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, vo */ QT_END_NAMESPACE + +#include "moc_qabstracteventdispatcher.cpp" diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 0104ba01017..39e7c71a9c8 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -2914,3 +2914,7 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc */ QT_END_NAMESPACE + +#ifndef QT_NO_QOBJECT +#include "moc_qcoreapplication.cpp" +#endif diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 4efc38ac890..e90cd842ab7 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -652,3 +652,5 @@ QDeferredDeleteEvent::~QDeferredDeleteEvent() */ QT_END_NAMESPACE + +#include "moc_qcoreevent.cpp" diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp index 8ca2ac1c393..8cefa7a1185 100644 --- a/src/corelib/kernel/qeventdispatcher_glib.cpp +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp @@ -611,3 +611,5 @@ QEventDispatcherGlib::QEventDispatcherGlib(QEventDispatcherGlibPrivate &dd, QObj } QT_END_NAMESPACE + +#include "moc_qeventdispatcher_glib_p.cpp" diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index 802962d77d2..a28f2e3f0a9 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -553,3 +553,5 @@ void QEventDispatcherUNIX::flush() { } QT_END_NAMESPACE + +#include "moc_qeventdispatcher_unix_p.cpp" diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp index e4b819d9d28..8974ff77097 100644 --- a/src/corelib/kernel/qeventloop.cpp +++ b/src/corelib/kernel/qeventloop.cpp @@ -441,3 +441,5 @@ QEventLoopLocker::~QEventLoopLocker() } QT_END_NAMESPACE + +#include "moc_qeventloop.cpp" diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp index a550ca6ca1b..73307e925a6 100644 --- a/src/corelib/kernel/qmimedata.cpp +++ b/src/corelib/kernel/qmimedata.cpp @@ -678,3 +678,5 @@ void QMimeData::removeFormat(const QString &mimeType) } QT_END_NAMESPACE + +#include "moc_qmimedata.cpp" diff --git a/src/corelib/kernel/qobjectcleanuphandler.cpp b/src/corelib/kernel/qobjectcleanuphandler.cpp index f3d23c4b449..b6c62af4b39 100644 --- a/src/corelib/kernel/qobjectcleanuphandler.cpp +++ b/src/corelib/kernel/qobjectcleanuphandler.cpp @@ -145,3 +145,5 @@ void QObjectCleanupHandler::objectDestroyed(QObject *object) } QT_END_NAMESPACE + +#include "moc_qobjectcleanuphandler.cpp" diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp index 29b3e870766..7f185ee9dc1 100644 --- a/src/corelib/kernel/qsharedmemory.cpp +++ b/src/corelib/kernel/qsharedmemory.cpp @@ -598,3 +598,5 @@ QString QSharedMemory::errorString() const #endif // QT_NO_SHAREDMEMORY QT_END_NAMESPACE + +#include "moc_qsharedmemory.cpp" diff --git a/src/corelib/kernel/qsocketnotifier.cpp b/src/corelib/kernel/qsocketnotifier.cpp index 933eac19abd..2268cb83bb0 100644 --- a/src/corelib/kernel/qsocketnotifier.cpp +++ b/src/corelib/kernel/qsocketnotifier.cpp @@ -270,3 +270,5 @@ bool QSocketNotifier::event(QEvent *e) } QT_END_NAMESPACE + +#include "moc_qsocketnotifier.cpp" diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 0c314526cbb..55f75ab17e1 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -670,3 +670,4 @@ int QTimer::remainingTime() const QT_END_NAMESPACE #include "qtimer.moc" +#include "moc_qtimer.cpp" diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index 04a5e7ed7a4..2232e24a254 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -1143,4 +1143,6 @@ bool QTranslator::isEmpty() const QT_END_NAMESPACE +#include "moc_qtranslator.cpp" + #endif // QT_NO_TRANSLATION diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index 21f1007d5b0..40000e7b24e 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -346,4 +346,6 @@ int QFactoryLoader::indexOf(const QString &needle) const QT_END_NAMESPACE +#include "moc_qfactoryloader_p.cpp" + #endif // QT_NO_QOBJECT diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 6421e7c5d8f..3d04d0802d3 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -1129,3 +1129,5 @@ bool qt_debug_component() } QT_END_NAMESPACE + +#include "moc_qlibrary.cpp" diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index dbd3bee556e..aab00cc7eb6 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -479,3 +479,4 @@ QJsonObject QStaticPlugin::metaData() const QT_END_NAMESPACE +#include "moc_qpluginloader.cpp" diff --git a/src/corelib/statemachine/qabstractstate.cpp b/src/corelib/statemachine/qabstractstate.cpp index 13bf41faa9c..1a9ad4601d2 100644 --- a/src/corelib/statemachine/qabstractstate.cpp +++ b/src/corelib/statemachine/qabstractstate.cpp @@ -234,3 +234,5 @@ bool QAbstractState::event(QEvent *e) } QT_END_NAMESPACE + +#include "moc_qabstractstate.cpp" diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp index 8c30d5f11c7..53c713d6a84 100644 --- a/src/corelib/statemachine/qabstracttransition.cpp +++ b/src/corelib/statemachine/qabstracttransition.cpp @@ -431,3 +431,5 @@ bool QAbstractTransition::event(QEvent *e) } QT_END_NAMESPACE + +#include "moc_qabstracttransition.cpp" diff --git a/src/corelib/statemachine/qeventtransition.cpp b/src/corelib/statemachine/qeventtransition.cpp index cd0cfe2f858..a90f1477737 100644 --- a/src/corelib/statemachine/qeventtransition.cpp +++ b/src/corelib/statemachine/qeventtransition.cpp @@ -252,3 +252,5 @@ bool QEventTransition::event(QEvent *e) } QT_END_NAMESPACE + +#include "moc_qeventtransition.cpp" diff --git a/src/corelib/statemachine/qfinalstate.cpp b/src/corelib/statemachine/qfinalstate.cpp index bef9fc42391..d8bfd309747 100644 --- a/src/corelib/statemachine/qfinalstate.cpp +++ b/src/corelib/statemachine/qfinalstate.cpp @@ -137,3 +137,5 @@ bool QFinalState::event(QEvent *e) } QT_END_NAMESPACE + +#include "moc_qfinalstate.cpp" diff --git a/src/corelib/statemachine/qhistorystate.cpp b/src/corelib/statemachine/qhistorystate.cpp index b1c5a92d00c..a179d7c75ba 100644 --- a/src/corelib/statemachine/qhistorystate.cpp +++ b/src/corelib/statemachine/qhistorystate.cpp @@ -310,3 +310,6 @@ bool QHistoryState::event(QEvent *e) */ QT_END_NAMESPACE + +#include "moc_qhistorystate.cpp" +#include "moc_qhistorystate_p.cpp" diff --git a/src/corelib/statemachine/qsignaltransition.cpp b/src/corelib/statemachine/qsignaltransition.cpp index 3b219bda532..c05b4617b25 100644 --- a/src/corelib/statemachine/qsignaltransition.cpp +++ b/src/corelib/statemachine/qsignaltransition.cpp @@ -284,3 +284,5 @@ void QSignalTransitionPrivate::callOnTransition(QEvent *e) QT_END_NAMESPACE + +#include "moc_qsignaltransition.cpp" diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp index 48456424cf9..76dcbf784b4 100644 --- a/src/corelib/statemachine/qstate.cpp +++ b/src/corelib/statemachine/qstate.cpp @@ -599,3 +599,5 @@ bool QState::event(QEvent *e) */ QT_END_NAMESPACE + +#include "moc_qstate.cpp" diff --git a/src/corelib/thread/qfuturewatcher.cpp b/src/corelib/thread/qfuturewatcher.cpp index aa6f00c3179..d2ec18850f1 100644 --- a/src/corelib/thread/qfuturewatcher.cpp +++ b/src/corelib/thread/qfuturewatcher.cpp @@ -592,4 +592,6 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event) QT_END_NAMESPACE +#include "moc_qfuturewatcher.cpp" + #endif // QT_NO_QFUTURE diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 0828400733c..996a1df9a0a 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -901,3 +901,5 @@ QDaemonThread::~QDaemonThread() } QT_END_NAMESPACE + +#include "moc_qthread.cpp" diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp index e45aaec1034..f3ce1f258f6 100644 --- a/src/corelib/thread/qthreadpool.cpp +++ b/src/corelib/thread/qthreadpool.cpp @@ -679,4 +679,6 @@ void QThreadPool::cancel(QRunnable *runnable) QT_END_NAMESPACE +#include "moc_qthreadpool.cpp" + #endif diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp index 963a91b9a97..5410adc737a 100644 --- a/src/corelib/tools/qcryptographichash.cpp +++ b/src/corelib/tools/qcryptographichash.cpp @@ -494,3 +494,7 @@ QByteArray QCryptographicHash::hash(const QByteArray &data, Algorithm method) } QT_END_NAMESPACE + +#ifndef QT_NO_QOBJECT +#include "moc_qcryptographichash.cpp" +#endif diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index 4b5f5e7830a..03bb1a14118 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -1501,3 +1501,5 @@ QDataStream &operator>>(QDataStream &stream, QEasingCurve &easing) #endif // QT_NO_DATASTREAM QT_END_NAMESPACE + +#include "moc_qeasingcurve.cpp" diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 697e0062dd2..5eb45f3b2ca 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -3665,3 +3665,7 @@ QDebug operator<<(QDebug dbg, const QLocale &l) } #endif QT_END_NAMESPACE + +#ifndef QT_NO_QOBJECT +#include "moc_qlocale.cpp" +#endif diff --git a/src/corelib/tools/qtimeline.cpp b/src/corelib/tools/qtimeline.cpp index adbc2900e39..e70e7f8e166 100644 --- a/src/corelib/tools/qtimeline.cpp +++ b/src/corelib/tools/qtimeline.cpp @@ -784,3 +784,5 @@ void QTimeLine::timerEvent(QTimerEvent *event) } QT_END_NAMESPACE + +#include "moc_qtimeline.cpp" diff --git a/util/includemocs/includemocs.pl b/util/includemocs/includemocs.pl new file mode 100755 index 00000000000..ce04d961d86 --- /dev/null +++ b/util/includemocs/includemocs.pl @@ -0,0 +1,138 @@ +#!/usr/bin/perl +############################################################################# +## +## Copyright (C) 2017 Intel Corporation. +## Contact: https://www.qt.io/licensing/ +## +## This file is the build configuration utility of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# +use strict; + +MAKEFILE: while ($_ = shift @ARGV) { + chdir($ENV{PWD}); + open MAKEFILE, "<", $_ + or die("Could not open Makefile"); + print "includemocs.pl: Processing $_\n"; + + my $srcdir; + my $sourcesline; + + # Find "SOURCES =" line + while () { + $srcdir = $1 if m,^# Project:\s+(.*)/[^/]+.pro,; + if (/^# Template:\s+(\w+)/) { + next MAKEFILE if $1 eq "subdirs"; + } + if (/^SOURCES\s*=\s*(.*)/) { + $sourcesline = $1; + last; + } + } + if ($sourcesline =~ s/\s+\\//) { + # continuation + while () { + chomp; + /^\s*([^ ]+)/; + $sourcesline .= " $1"; + last unless m/\\$/; + } + } + close MAKEFILE; + + # Now parse the sources + my @mocs; + my @sources; + for (split(/ /, $sourcesline)) { + if (/\.moc\/(moc_.*\.cpp)/) { + push @mocs, $1; + } elsif (/^\.(rcc|uic)/) { + # ignore + } else { + push @sources, $_; + } + } + + chdir($srcdir) or die("Where's $srcdir? $!"); + for my $moc (@mocs) { + my $include = "#include \"$moc\"\n"; + + # Find a corresponding .cpp file to host the new #include + my $basename = ($moc =~ s/^moc_//r); + $basename =~ s/\.[^.]+//; + my @candidates = grep { m,\Q/$basename.\E, } @sources; + + if (scalar @candidates == 0) { + # Try without a _p suffix + $basename =~ s/_p$//; + @candidates = grep { m,\Q/$basename.\E, } @sources; + } + if (scalar @candidates == 0) { + print STDERR "includemocs.pl: Cannot find .cpp file for $moc\n"; + next; + } + + my $cpp = $candidates[0]; + undef @candidates; + + #print "$moc -> $cpp\n"; + open CPP, "<", $cpp + or die("Cannot open source $cpp: $!"); + + my @lines; + while () { + push @lines, $_; + next unless defined($include); + + # Print the new include next to a pre-existing moc include + if (/#include \"moc_/ || /#include ".*\.moc"/) { + push @lines, $include; + undef $include; + } + } + close CPP; + + if (defined($include)) { + # Try to insert the new #include between QT_END_NAMESPACE and any #endif lines + my $n = 0; + my $extrablank = ""; + while (defined($include)) { + --$n; + $_ = $lines[$n]; + if (/^#endif/) { + $extrablank = "\n"; + next; + } + + $_ .= "\n" unless /^$/; + splice @lines, $n, 1, ($_, $include, $extrablank); + undef $include; + } + } + + # Write the file again + open CPP, ">", $cpp + or die("Cannot open source $cpp for writing: $!"); + map { print CPP $_; } @lines; + close CPP; + } +}