Qt5 development primer
-
Hey All,
For anybody wanting to contribute to Qt5 I have started a wiki article on how to go about getting the code for the modularised Qt5 and building it.
Please feel free to edit for other platforms or as things change during development.
[EDIT: Updated link from nokia.com to wiki.qt.io --JKSH]
-
Hi, I took the liberty to link to this thread from the wiki page :) I'd like to suggest a couple of changes, but on the other side do not want to start an edit war ...
Don't advocate the use of "./qtrepotools/bin/qt5_tool -p" . It'll check out the master branches of every repo, which more likely than not break compilation . People who really want to live on the bleeding edge will find out how to achieve that ... There should be no further steps necessary (no git remote rm gerrit, no special webkit/v8 handling). It's IMO a high priority bug if that doesn't succeed, so don't advocate workarounds!
Along the same line, a way to update Qt5 repo isn't qt5_tool -p, but git pull && git submodule update --recursive!
-
Hi! Please feel free to edit the wiki article as to the latest recommendations. I put the basic instructions up a while ago now so I am not surprised if much has changed. The usage of qt5_tool -p came from a troll on #qt-labs at the time.
A quick question, if we should not use qt5_tool -p then why does it exist?
Others have added the gerrit-related stuff and other bits and pieces.
Could you add a brief not on how to live on the bleeding edge then please? This is supposed to be an article to help people do so so that they can contribute back under Open Governance.
Many thanks for any input you can give.
-
Okay. The thing is that now Qt is modularized, every module moves at it's own speed, but there are of course dependencies. E.g. a recent change in qtbase might break qtdeclarative and so on ... There's no way we can ensure that all master branches at a time work with each other (also due to the CI system). Therefore the qt5.git repo contains a list of 'known' SHA's from every module that are known to work together. It's of course not bleeding edge, but a good baseline to start with.
I'll do the changes now.
-
Okay, done. I was bold and removed some of the more obscure hacks that IMO aren't needed any more.
-
I have a problem compiling modules other than qtbase even when following these instructions
When running make I always getProject ERROR: Cannot load qmodule.pri!
when trying to build qtsvg and qtxmlpatterns.
Could the problem be that I am building in a different directory? Source is in ~/devel/qt5 and build dir is ~/devel/build/qt5
-
I'm afraid I still get same issue with an in-tree build. Maybe I should try with a clean checkout.
-
It seems to work now with a clean checkout, however I get following compilation error:
qsvgiconengine.cpp:47:26: fatal error: qsvgrenderer.h: File not found.
compilation terminated.when compiling qtsvg.
-
Do you have a qsvgrenderer.h in qt5/qtsvg/include/QtSvG ? If not you can run "syncqt" in your qtsvg root directory.
-
I did a new clean build and for some reason it worked now. Thank you for your help.
-
On mac 10.6.8, I have problems building this. The linker complains about an nonexistent "OpenGl" library. After replacing with "OpenGL" (notice capital L) in the offending files* this issue resolves.
Unfortunately QtQuick2.0 examples don't work. For some reason importing folders from QML files is not working as it should. qmlscene doesnt recognize the imported folders (despite the fact that they are there at the same level as the invoking qml file). I keep getting:.../somefile.qml: "SomeFolder": No such directory
(*) among them:
./qtbase/src/platformsupport/cglconvenience/cglconvenience.pri: LIBS += -framework Cocoa -framework OpenGl -
@jmfairlie: I'm not working on Mac OS X, sorry. You should raise your problems (after verifying that the problem is still there in latest master branch of e.g. qtbase) on IRC/freenode, #qt-labs channel . Or you raise it on qt5-feedback@qt.nokia.com .
-
Now I tried with Ubuntu 11.04 with an ATI gpu (might be relevant) and linker isn't able to find GL libraries. Indeed, for some reason, there is no /usr/lib/libGL.so in my machine (not sure if this is normal) but only in /usr/lib/mesa and /usr/lib/fglrx.
If I add "-opengl desktop" to configure then it shows the message:
The OpenGL functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in
.../qt5/qtbase/mkspecs/linux-g++.If I follow the suggestion and add those lines to qtbase/mkspecs/linux-g++/qmake.conf :
QMAKE_LIBDIR_OPENGL = /usr/lib/fglrx
QMAKE_INCDIR_OPENGL = /usr/include/GL
QMAKE_LIBS_OPENGL = -lGLIt doesn't make a difference and linker is still unable to find the GL libraries, (I guess those macros are not being used)
However if I just add a symlink to any of the GL libs to /usr/lib it finally finds them.
Unfortunately, QtQuick2.0 examples (what I'm interested in) don't work either, this time qmlscene SEGFAULTS in a seemingly unrelated call ... I guess I'll need to wait until a more stable version comes out.
-
Ubuntu 11.04 is used heavily in the development teams, so this should really work out of the box, without any environment variable tinkering. The libgl1-mesa-dev should include the /usr/lib/libGL.so file, try installing this package. (Btw, you can find out which package provides which file by using the "apt-get file search" command).
For reference, this is the output "configure -nokia-developer -nomake examples -nomake demos -nomake tests" gives me on an Ubuntu 11.04:
@
Build type: linux-g++
Architecture: i386
Host architecture: i386
Platform notes:- Also available for Linux: linux-kcc linux-icc linux-cxx
Build .................. libs
Configuration .......... debug shared dll qpa largefile stl precompile_header mmx 3dnow sse sse2 sse3 ssse3 sse4_1 sse4_2 avx minimal-config small-config medium-config large-config full-config fontconfig xlib xcb-xlib phonon-backend accessibility opengl qpa reduce_exports clock-gettime clock-monotonic mremap getaddrinfo ipv6ifname getifaddrs inotify system-jpeg system-mng system-png png system-tiff system-freetype system-zlib nis cups glib gstreamer dbus openssl xcb alsa pulseaudio concurrent audio-backend svg v8 debug private_tests
Debug .................. yes
Qt 3 compatibility ..... no
QtDBus module .......... yes (run-time)
QtConcurrent code ...... yes
QtGui module ........... yes
QtScript module ........ yes
QtScriptTools module ... yes
QtXmlPatterns module ... yes
Phonon module .......... yes
Multimedia module ...... auto
SVG module ............. yes
WebKit module .......... yes
JavaScriptCore JIT ..... To be decided by JavaScriptCore
V8 module .............. yes
Declarative module ..... yes
Declarative debugging ...yes
Location module ........ no
Support for S60 ........ no
Symbian DEF files ...... no
STL support ............ yes
PCH support ............ yes
MMX/3DNOW/SSE/SSE2/SSE3. yes/yes/yes/yes/yes
SSSE3/SSE4.1/SSE4.2..... yes/yes/yes
AVX..................... yes
IPv6 ifname support .... yes
getaddrinfo support .... yes
getifaddrs support ..... yes
Accessibility .......... yes
NIS support ............ yes
CUPS support ........... yes
Iconv support .......... no
Glib support ........... yes
GStreamer support ...... yes
PulseAudio support ..... yes
Large File support ..... yes
GIF support ............ plugin
TIFF support ........... plugin (system)
JPEG support ........... plugin (system)
PNG support ............ yes (system)
MNG support ............ plugin (system)
zlib support ........... system
Session management ..... auto
OpenGL support ......... yes (Desktop OpenGL)
OpenVG support ......... no
MySQL support .......... plugin
SQLite support ......... plugin (qt)
OpenSSL support ........ yes (run-time)
Alsa support ........... yes
ICD support ............ no
libICU support ......... no
Xcb support ............ limited (old version)
@ -
this is what I got, I'll check on Monday if getting rid of the differences makes any difference:
@
--- a/jean
+++ b/kkoehne
-QtDBus module .......... no
+QtDBus module .......... yes (run-time)
-Phonon module .......... no
+Phonon module .......... yes
-CUPS support ........... no
+CUPS support ........... yes
-GStreamer support ...... no
-PulseAudio support ..... no
+GStreamer support ...... yes
+PulseAudio support ..... yes
-MNG support ............ plugin (qt)
+MNG support ............ plugin (system)
+MySQL support .......... plugin
-OpenSSL support ........ no
-Alsa support ........... no
+OpenSSL support ........ yes (run-time)
+Alsa support ........... yes
@ -
pulled current latest version:
commit 0a0d66efceb64bcacffbf733053834829c657df7
Date: Wed Oct 19 07:38:37 2011 +1000and this time qmlscene spit some more info after segfault:
"Cannot create platform GL context, none of GLX, EGL, DRI2 is enabled"
This message directed me to:
http://comments.gmane.org/gmane.comp.lib.qt.qml/3060which suggests to install libx11-xcb-dev. Indeed I didn't have it, so I installed, cleaned and rebuilt, and now it works.
If this package is required for qtdeclarative to work properly shouldn't configure notice it and mention it somehow?
Anyhow, Just added this info to the wiki page.