Table 6-8. Variables for Ports That Use Qt
USE_QT_VER | The port uses the Qt toolkit. The only possible value is 3. Appropriate parameters are passed to configure script and make. |
USE_QT4 | Specify tool and library dependencies for ports that use Qt 4. See Qt 4 component selection for more details. |
QT_PREFIX | Set to the path where Qt installed to (read-only variable). |
MOC | Set to the path of moc (read-only variable). Default set according to USE_QT_VER value. |
QTCPPFLAGS | Additional compiler flags passed via CONFIGURE_ENV for Qt toolkit. Default set according to USE_QT_VER. |
QTCFGLIBS | Additional libraries for linking passed via CONFIGURE_ENV for Qt toolkit. Default set according to USE_QT_VER. |
QTNONSTANDARD | Suppress modification of CONFIGURE_ENV, CONFIGURE_ARGS, CPPFLAGS and MAKE_ENV. |
Table 6-9. Additional Variables for Ports That Use Qt 4.x
UIC | Set to the path of uic (read-only variable). |
QMAKE | Set to the path of qmake (read-only variable). |
QMAKESPEC | Set to the path of configuration file for qmake (read-only variable). |
QMAKEFLAGS | Additional flags for qmake. |
QT_INCDIR | Set to Qt 4 include directories (read-only variable). |
QT_LIBDIR | Set to Qt 4 libraries path (read-only variable). |
QT_PLUGINDIR | Set to Qt 4 plugins path (read-only variable). |
When USE_QT_VER is set to 3, some useful settings are passed to the configure script:
CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \ --with-qt-libraries=${QT_PREFIX}/lib \ --with-extra-libs=${LOCALBASE}/lib \ --with-extra-includes=${LOCALBASE}/include CONFIGURE_ENV+= MOC="${MOC}" LIBS="${QTCFGLIBS}" \ QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}" CPPFLAGS+= ${QTCPPFLAGS}
If USE_QT4 is set, the following settings are deployed:
CONFIGURE_ARGS+= --with-qt-includes=${QT_INCDIR} \ --with-qt-libraries=${QT_LIBDIR} \ --with-extra-libs=${LOCALBASE}/lib \ --with-extra-includes=${LOCALBASE}/include CONFIGURE_ENV+= MOC="${MOC}" UIC="${UIC}" LIBS="${QTCFGLIBS}" \ QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}" QTDIR="${QT_PREFIX}" MAKE_ENV+= QMAKESPEC="${QMAKESPEC}" PLIST_SUB+= QT_INCDIR_REL=${QT_INCDIR_REL} \ QT_LIBDIR_REL=${QT_LIBDIR_REL} \ QT_PLUGINDIR_REL=${QT_PLUGINDIR_REL}
Individual Qt 4 tool and library dependencies must be specified in the USE_QT4 variable. Every component can be suffixed by either _build or _run, the suffix indicating whether the component should be depended on at buildtime or runtime, respectively. If unsuffixed, the component will be depended on at both build- and runtime. Usually, library components should be specified unsuffixed, tool components should be specified with the _build suffix and plugin components should be specified with the _run suffix. The most commonly used components are listed below (all available components are listed in _USE_QT4_ALL in /usr/ports/Mk/bsd.qt.mk):
Table 6-10. Available Qt 4 Library Components
Name | Description |
---|---|
corelib | core library (can be omitted unless the port uses nothing but corelib) |
gui | graphical user interface library |
network | network library |
opengl | OpenGL library |
qt3support | Qt 3 compatibility library |
qtestlib | unit testing library |
script | script library |
sql | SQL library |
xml | XML library |
You can determine which libraries the application depends on, by running ldd on the main executable after a successful compilation.
Table 6-11. Available Qt 4 Tool Components
Name | Description |
---|---|
moc | meta object compiler (needed for almost every Qt application at buildtime) |
qmake | Makefile generator / build utility |
rcc | resource compiler (needed if the application comes with *.rc or *.qrc files) |
uic | user interface compiler (needed if the application comes with *.ui files created by Qt Designer - in practice, every Qt application with a GUI) |
Table 6-12. Available Qt 4 Plugin Components
Name | Description |
---|---|
iconengines | SVG icon engine plugin (if the application ships SVG icons) |
imageformats | imageformat plugins for GIF, JPEG, MNG and SVG (if the application ships image files) |
Example 6-4. Selecting Qt 4 Components
In this example, the ported application uses the Qt 4 graphical user interface library, the Qt 4 core library, all of the Qt 4 code generation tools and Qt 4's Makefile generator. Since the gui library implies a dependency on the core library, corelib does not need to be specified. The Qt 4 code generation tools moc, uic and rcc, as well as the Makefile generator qmake are only needed at buildtime, thus they are specified with the _build suffix:
USE_QT4= gui moc_build qmake_build rcc_build uic_build
If the application does not provide a configure file but a .pro file, you can use the following:
HAS_CONFIGURE= yes do-configure: @cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \ ${QMAKE} ${QMAKEFLAGS} PREFIX=${PREFIX} texmaker.pro
Note the similarity to the qmake line from the provided BUILD.sh script. Passing CONFIGURE_ENV ensures qmake will see the QMAKESPEC variable, without which it cannot work. qmake generates standard Makefiles, so it is not necessary to write our own build target.
Qt applications often are written to be cross-platform and often X11/Unix is not the platform they are developed on, which in turn often leads to certain loose ends, like:
Missing additional include paths. Many applications come with system tray icon support, but neglect to look for includes and/or libraries in the X11 directories. You can tell qmake to add directories to the include and library search paths via the command line, for example:
${QMAKE} ${QMAKEFLAGS} PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \ LIBS+=-L${LOCALBASE}/lib sillyapp.pro
Bogus installation paths. Sometimes data such as icons or .desktop files are by default installed into directories which are not scanned by XDG-compatible applications. editors/texmaker is an example for this - look at patch-texmaker.pro in the files directory of that port for a template on how to remedy this directly in the qmake project file.