On Thursday 10 September 2015 07:57:11 Oswald Buddenhagen wrote: > On Sun, Sep 06, 2015 at 11:10:29AM +0200, David Faure wrote: > > This seems to be a bug in Qt. > > The code in qtAddModules (qtbase/mkspecs/features/qt_functions.prf ) > > turns "core gui KParts" into "core gui + all the deps from KParts". But > > KParts itself is missing. > > > > If I change > > # Topological resolution of modules based on their QT.<module>.depends > > variable > > $$1 = $$resolve_depends($$1, "QT.") > > to > > # Topological resolution of modules based on their QT.<module>.depends > > variable > > $$1 += $$resolve_depends($$1, "QT.") > > the problem is solved (note += instead of =). > > > > Oswald, do you confirm that this is the right fix? > > > nope. $$resolve_depends() is not supposed to drop anything, at least if > the .depends variables are correctly populated.
Ah (if it was documented, at least in the qmake source code, that would help ;) It definitely drops KParts. before: core gui KParts after: KBookmarks KXmlGui KConfigWidgets KWidgetsAddons KTextWidgets SonnetUi widgets KConfigGui gui xml dbus KConfigCore KCodecs KAuth KCoreAddons Solid KI18n core I tried debugging into qmake, but I'm getting lost. Can you take over? Testcase: # Set $QMAKEPATH to your KF5 install prefix if this is not found. QT += KParts -- David Faure, fa...@kde.org, http://www.davidfaure.fr Working on KDE Frameworks 5
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index a1c4996..35e38ce 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -65,6 +65,7 @@ defineTest(qtHaveModule) { # qt module, libs variable defineTest(qtAddModule) { + message(DAVID qtAddModule $${1}) MODULE_NAME = $$eval(QT.$${1}.name) MODULE_INCLUDES = $$eval(QT.$${1}.includes) MODULE_LIBS = $$eval(QT.$${1}.libs) @@ -156,13 +157,22 @@ defineTest(qtAddModule) { defineTest(qtAddModules) { # qmake variables cannot contain dashes, so normalize the names first $$1 = $$replace($$1, -private$, _private) +message(DAVID before:) + for(QTLIB, $$1) { + message($${QTLIB}) + } # Topological resolution of modules based on their QT.<module>.depends variable $$1 = $$resolve_depends($$1, "QT.") +message(DAVID after:) + for(QTLIB, $$1) { + message($${QTLIB}) + } # Finally actually add the modules unset(BAD_QT) for(QTLIB, $$1) { QTLIBNAME = $$eval(QT.$${QTLIB}.name) isEmpty(QTLIBNAME) { + message(BAD_QT $$QTLIB) BAD_QT += $$QTLIB next() } diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp index 02d5d5d..c270023 100644 --- a/qmake/library/qmakebuiltins.cpp +++ b/qmake/library/qmakebuiltins.cpp @@ -53,6 +53,7 @@ # include <qjsonobject.h> # include <qjsonarray.h> #endif +#include <qdebug.h> #ifdef PROEVALUATOR_THREAD_SAFE # include <qthreadpool.h> #endif @@ -435,19 +436,24 @@ void QMakeEvaluator::populateDeps( { foreach (const ProString &item, deps) if (!dependencies.contains(item.toKey())) { + traceMsg("populateDeps: looking at %s", qPrintable(item.toQString())); QSet<ProKey> &dset = dependencies[item.toKey()]; // Always create entry ProStringList depends; foreach (const ProString &suffix, suffixes) depends += values(ProKey(prefix + item + suffix)); if (depends.isEmpty()) { + traceMsg("populateDeps: inserting into rootSet: %s", qPrintable(item.toQString())); rootSet.insert(first(ProKey(prefix + item + priosfx)).toInt(), item); } else { foreach (const ProString &dep, depends) { dset.insert(dep.toKey()); dependees[dep.toKey()] << item; + traceMsg("populateDeps: adding %s to dependees for", qPrintable(item.toQString()), dbgKey(dep.toKey())); } populateDeps(depends, prefix, suffixes, priosfx, dependencies, dependees, rootSet); } + } else { + traceMsg("populateDeps: skipping %s", qPrintable(item.toQString())); } } @@ -984,6 +990,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand( while (!rootSet.isEmpty()) { QMultiMap<int, ProString>::iterator it = rootSet.begin(); const ProString item = *it; + traceMsg("(qmake) processing %s", qPrintable(item.toQString(m_tmp1))); rootSet.erase(it); if ((func_t == E_RESOLVE_DEPENDS) || orgList.contains(item)) ret.prepend(item); @@ -994,6 +1001,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand( rootSet.insert(first(ProKey(prefix + dep + priosfx)).toInt(), dep); } } + traceMsg("(qmake) after: %s", dbgSepStrList(ret)); } break; case E_ENUMERATE_VARS: {
DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:159: QT := core gui KParts DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: calling built-in $$resolve_depends(QT, QT.) DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: inserting into rootSet: core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at gui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding gui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KParts DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KParts to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KParts to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KParts to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KIOWidgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KIOWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KIOWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KIOWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KIOWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping KIOWidgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KBookmarks DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KBookmarks to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KBookmarks to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at widgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding widgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding widgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping gui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at xml DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding xml to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KXmlGui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KXmlGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KXmlGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KXmlGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KXmlGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KXmlGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at dbus DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding dbus to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping xml DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping widgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KConfigCore DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigCore to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KConfigWidgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KCodecs DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KCodecs to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KWidgetsAddons DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KWidgetsAddons to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping widgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KConfigGui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KConfigGui to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping gui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping xml DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping KConfigCore DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KAuth DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KAuth to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KAuth to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KCoreAddons DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KCoreAddons to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at Solid DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding Solid to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping KXmlGui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KTextWidgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KTextWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KTextWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KTextWidgets to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping widgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at SonnetUi DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding SonnetUi to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping widgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: looking at KI18n DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: adding KI18n to dependees for DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: populateDeps: skipping core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KI18n DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing Solid DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KCoreAddons DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KAuth DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KCodecs DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KConfigCore DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing dbus DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing xml DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing gui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KConfigGui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing widgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing SonnetUi DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KTextWidgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KWidgetsAddons DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KConfigWidgets DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KXmlGui DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) processing KBookmarks DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: (qmake) after: KBookmarks, KXmlGui, KConfigWidgets, KWidgetsAddons, KTextWidgets, SonnetUi, widgets, KConfigGui, gui, xml, dbus, KConfigCore, KCodecs, KAuth, KCoreAddons, Solid, KI18n, core DEBUG 1: /d/qt/5/kde/qtbase/mkspecs/features/qt_functions.prf:165: QT := KBookmarks KXmlGui KConfigWidgets KWidgetsAddons KTextWidgets SonnetUi widgets KConfigGui gui xml dbus KConfigCore KCodecs KAuth KCoreAddons Solid KI18n core
>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<