Hi, I tried compiling Qt5 from git (release branch) again tonight on my Linux machine (64bit Gentoo). The last time I did it was with Qt 5.1, so I had plenty of old stuff around.
TL;DR version -- despite the fact that I restored git modules as documented on the wiki, I still got hard to debug errors and wasted hours of time (both human and CPU) on this. A couple of questions/suggestions: - If a submodule is known [1] to be broken, why is is linked to from the release branch of the top-level repo? - Why is `make first` the default target instead of `make all`? - How comes that running `make` does not report an error at the very end of the process? The longer version follows now. If it sounds like a rant, I sincerely apologize. I realize that some of this might be obvious to a developer who builds Qt six times a day, but half of these came as a surprise to me despite the fact that I've been using a build-from-source distribution for years. So I followed the docs on the wiki which told me to run the following after I realized that I really do not want to fight with branches of submodules by hand, and that this is going to be much, much easier. $ git pull $ git submodule sync $ git submodule update --recursive OK, I actually want the "release" branch -- fair enough, `git checkout release && git pull` fixed this. After that, I re-run the `git submodule sync` and `git submodule update` again, and just to be sure cleared any leftovers via this: $ git submodule foreach --recursive "git clean -dfx" Please note that I did not run `init-repository` because I remember quite well that it ate my data before (I have some WIP branches in qttools, etc), and I do not want to repeat that experience. The docs talk about doing these steps via git commands alone anyway, so why shall I bother when I already run it months ago? Anyway, after restoring the tree to a reasonable state ("release" in the top level, and synced submodules to whatever the top-level repo suggested, and no local modifications whatsoever) via the commands I showed above, I run configure: $ ./configure -opensource -confirm-license -no-gtkstyle -system-sqlite -prefix /opt/qt5.2 ...followed by make: $ time make -j4 ...which failed, sort of, because after many lines of output, this is what I got: ln -s libQt1JsonDbPartition.so.1.0.0 libQt1JsonDbPartition.so ln -s libQt1JsonDbPartition.so.1.0.0 libQt1JsonDbPartition.so.1 ln -s libQt1JsonDbPartition.so.1.0.0 libQt1JsonDbPartition.so.1.0 rm -f ../../lib/libQt1JsonDbPartition.so.1.0.0 rm -f ../../lib/libQt1JsonDbPartition.so rm -f ../../lib/libQt1JsonDbPartition.so.1 rm -f ../../lib/libQt1JsonDbPartition.so.1.0 mv -f libQt1JsonDbPartition.so.1.0.0 ../../lib/ mv -f libQt1JsonDbPartition.so ../../lib/ mv -f libQt1JsonDbPartition.so.1 ../../lib/ mv -f libQt1JsonDbPartition.so.1.0 ../../lib/ make[3]: Leaving directory `/home/jkt/work/prog/qt5/qtjsondb/src/partition' cd client/ && ( test -e Makefile || /home/jkt/work/prog/qt5/qtbase/bin/qmake /home/jkt/work/prog/qt5/qtjsondb/src/client/client.pro -o Makefile ) && make -f Makefile Project MESSAGE: perl -w /home/jkt/work/prog/qt5/qtbase/bin/syncqt.pl -module QtJsonDb -version 1.0.0 -outdir /home/jkt/work/prog/qt5/qtjsondb /home/jkt/work/prog/qt5/qtjsondb <srcbase> = /home/jkt/work/prog/qt5/qtjsondb <outbase> = /home/jkt/work/prog/qt5/qtjsondb QtJsonDb: created fwd-include header(s) for <srcbase>/src/client/ { qjsondbconnection.h (2), qjsondbconnection_p.h (1), qjsondbflushrequest_p.h (1), qjsondbflushrequest_p_p.h (1 ), qjsondbglobal.h (2), qjsondblogrequest_p.h (1), qjsondblogrequest_p_p.h (1), qjsondbmodelcache_p.h (1), qjsondbmodelutils_p.h (1), qjsondbobject.h (2), qjsondbprivatepartitio n_p.h (1), qjsondbquerymodel_p.h (1), qjsondbquerymodel_p_p.h (1), qjsondbreadrequest.h (3), qjsondbreadrequest_p.h (1), qjsondbrequest.h (2), qjsondbrequest_p.h (1), qjsondbsta ndardpaths_p.h (1), qjsondbstrings_p.h (1), qjsondbwatcher.h (3), qjsondbwatcher_p.h (1), qjsondbwriterequest.h (5), qjsondbwriterequest_p.h (1) } QtJsonDb: created version header QtJsonDb: created master header QtJsonDb: created headers.pri file Project ERROR: Unknown module(s) in QT: jsondbpartition make[2]: *** [sub-client-make_first-ordered] Error 3 make[2]: Leaving directory `/home/jkt/work/prog/qt5/qtjsondb/src' make[1]: *** [sub-src-make_first] Error 2 make[1]: Leaving directory `/home/jkt/work/prog/qt5/qtjsondb' make: *** [module-qtjsondb-make_first] Error 2 make: *** Waiting for unfinished jobs... ...after which the build carried on for five more minutes. At the end, it left no *obvious* indication that it failed; this was displayed when the top-level make finished: g++ -c -pipe -O2 -fno-exceptions -Wall -W -D_REENTRANT -fPIE -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDI A_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/home/jkt/work/prog/qt5/qtbase/mkspecs/linux-g++ -I. -I../../../../include -I../../../../include/QtMultimedi aWidgets -I../../../../include/QtMultimedia -I/home/jkt/work/prog/qt5/qtbase/include -I/home/jkt/work/prog/qt5/qtbase/include/QtWidgets -I/home/jkt/work/prog/qt5/qtbase/include/ QtNetwork -I/home/jkt/work/prog/qt5/qtbase/include/QtGui -I/home/jkt/work/prog/qt5/qtbase/include/QtCore -I.moc -o .obj/moc_videowidgetsurface.o .moc/moc_videowidgetsurface.cpp g++ -Wl,-O1 -Wl,-rpath,/opt/qt5.2/lib -Wl,-rpath-link,/home/jkt/work/prog/qt5/qtbase/lib -o customvideowidget .obj/main.o .obj/videoplayer.o .obj/videowidget.o .obj/videowidgets urface.o .obj/moc_videoplayer.o .obj/moc_videowidget.o .obj/moc_videowidgetsurface.o -L/home/jkt/work/prog/qt5/qtmultimedia/lib -lQt5MultimediaWidgets -L/home/jkt/work/prog/qt 5/qtbase/lib -lQt5Multimedia -lQt5Widgets -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread make[5]: Leaving directory `/home/jkt/work/prog/qt5/qtmultimedia/examples/multimediawidgets/customvideosurface/customvideowidget' make[4]: Leaving directory `/home/jkt/work/prog/qt5/qtmultimedia/examples/multimediawidgets/customvideosurface' make[3]: Leaving directory `/home/jkt/work/prog/qt5/qtmultimedia/examples/multimediawidgets' make[2]: Leaving directory `/home/jkt/work/prog/qt5/qtmultimedia/examples' make[1]: Leaving directory `/home/jkt/work/prog/qt5/qtmultimedia' real 39m34.330s user 135m34.843s sys 6m22.613s But if one looks closely enough, the process surely failed: $ echo $? 2 ...except that any indication about the failure is now five minutes deep in the scrollback (this is a SandyBridge i5 with 16 GB of RAM). There is *no* user-friendly error message which might possibly tell me that there was an error. I have to go actively looking for it via the exit status. This is not sane. But surely I can just re-run make to see what was broken, right? (In fact, I was purposely logging the output so I know what happened now that I'm trying to debug this, but re-running make is what I would do if I was lazy, because it just works on projects with sane build setup.) Nope, not with Qt5, because the default target is "first", not "all", and running `make -j4` with its default target of "first" just spews plenty of lines of debug output saying which directory it descends into, but it does not produce any files and finishes succesfully. How exactly am I supposed to know that make's default target is completely useless for me, and that I absolutely must run `make all`? In the meanwhile, I've removed "qtjsondb", "qtpim" and "qtdocgallery" from the Makefile rules for "all" and "install" and let the build run -- hope it finishes over the night. It made it as far as to half of webkit already :). Cheers, Jan [1] https://bugreports.qt-project.org/browse/QTBUG-34932 -- Trojitá, a fast Qt IMAP e-mail client -- http://trojita.flaska.net/ _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest