[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-devel
Subject: Re: KF5 with qmake problems
From: David Faure <faure () kde ! org>
Date: 2015-09-10 7:51:44
Message-ID: 2389132.Y1KDb9zAmv () asterix
[Download RAW message or body]
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, faure@kde.org, http://www.davidfaure.fr
Working on KDE Frameworks 5
["qmake.diff" (qmake.diff)]
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_output.diff" (debug_output.diff)]
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
[Attachment #5 (text/plain)]
>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic