Qt5 is a cross-platform application framework that is widely used for developing application software with a graphical user interface (GUI) (in which cases qt5 is classified as a widget toolkit), and also used for developing non-GUI programs such as command-line tools and consoles for servers. Two of the major users of qt are KDE Frameworks 5 (KF5) and LXQt.
The full qt5 package consists of 43 separate components. These instructions use a small subset of the full qt5 installation instructions above. They cover most, but not all, of the components needed to build packages in BLFS. This page, and the next, are provided to reduce the amount of time, space, and dependencies needed to build these packages. They are not recommended if you will build the KDE Frameworks-5.109.0 based Plasma-5.27.7 desktop environment.
Development versions of BLFS may not build or run some packages properly if LFS or dependencies have been updated since the most recent stable versions of the books.
Download (HTTP): https://download.qt.io/archive/qt/5.15/5.15.11/single/qt-everywhere-opensource-src-5.15.11.tar.xz
Download MD5 sum: 37b79a3764b0c9157fa3686df209b25a
Download size: 630 MB
Estimated disk space required: 8.6 GB (153 MB installed)
Estimated build time: 4.8 SBU (using parallelism=8)
Now that qt5 updates are restricted to commercial customers, upstream patches for the various modules are being curated at kde. Patches for the modules required by packages in BLFS have been aggregated for the non-modular qt5 build we use.
Required patch: https://www.linuxfromscratch.org/patches/blfs/svn/qt-everywhere-opensource-src-5.15.11-kf5-1.patch
Details of the kde curation can be found at https://dot.kde.org/2021/04/06/announcing-kdes-qt-5-patch-collection and https://community.kde.org/Qt5PatchCollection.
alsa-lib-1.2.10, Cups-2.4.7, double-conversion-3.3.0, GLib-2.78.1, HarfBuzz-8.3.0, ICU-74.1, hicolor-icon-theme-0.17, Mesa-23.1.8, libjpeg-turbo-3.0.1, libxkbcommon-1.6.0, SQLite-3.44.2, Wayland-1.22.0 (Mesa must be built with Wayland EGL backend), xcb-util-image-0.4.1, xcb-util-keysyms-0.4.1, xcb-util-renderutil-0.3.10, and xcb-util-wm-0.4.2
GTK+-3.24.38, libinput-1.24.0 MariaDB-10.11.5 or MySQL, MIT Kerberos V5-1.21.2, mtdev-1.1.6 PostgreSQL-16.1, and unixODBC-2.3.12
Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/qt5
The BLFS editors recommend installing qt5 in a
directory other than /usr
, i.e.
/opt/qt5
. To do this, set the
following environment variable:
export QT5PREFIX=/opt/qt5
Sometimes, the installation paths are hardcoded into installed files.
This is the reason why /opt/qt5
is used as installation prefix instead of /opt/qt-5.15.11
. To create a
versioned qt5 directory after the
installation is complete, you may rename the directory and create a symlink:
mkdir -pv /opt/qt-5.15.11 ln -sfnv qt-5.15.11 /opt/qt5
Later on, you may want to install other versions of
qt5. To do that, just remove the symlink
and use /opt/qt5
as the
prefix again. Which version of qt5 you
use depends only on where the symlink points.
If qt5 is being reinstalled into the
same directory as an existing instance, run the commands done by
root
, such as
make install, from a console or non-qt5 based
window manager. It overwrites qt5
libraries that should not be in use during the install process.
If you did not install some of the recommended dependencies, examine ./configure --help output to check how to disable them or use internal versions bundled in the source tarball.
The BLFS editors do not recommend installing qt5 into the /usr hierarchy because it becomes difficult to find components and to update to a new version. If you do want to install qt5 in /usr, the directories need to be specified explicitly. In this case, set QT5PREFIX=/usr and add the following to the configure arguments below:
-archdatadir /usr/lib/qt5 \ -bindir /usr/bin \ -plugindir /usr/lib/qt5/plugins \ -importdir /usr/lib/qt5/imports \ -headerdir /usr/include/qt5 \ -datadir /usr/share/qt5 \ -docdir /usr/share/doc/qt5 \ -translationdir /usr/share/qt5/translations \ -examplesdir /usr/share/doc/qt5/examples
The libxkbcommon-1.6.0 package removes some definitions that are not used. Remove those here also:
sed -i '276,279d' qtbase/src/platformsupport/input/xkbcommon/qxkbcommon.cpp
Now apply a patch to pull in the fixes curated by kde for those modules which are required by packages mentioned in this book:
patch -Np1 -i ../qt-everywhere-opensource-src-5.15.11-kf5-1.patch
The patch is supposed to be used in a git repository. Otherwise some
files that should be modified by configure after
applying the patch are not touched. Fortunately, it is enough to create a
.git
directory in the
qmake
directory where the
configure script is run:
mkdir -pv qtbase/.git
At this point we want to set up skipping most components. Do that with:
ls -Fd qt* | grep / | sed 's/^/-skip /;s@/@@' > tempconf && sed -i -r '/base|tools|x11extras|svg|declarative|wayland/d' tempconf
Now, install qt5 by running the following commands:
./configure -prefix $QT5PREFIX \ -sysconfdir /etc/xdg \ -confirm-license \ -opensource \ -dbus-linked \ -openssl-linked \ -system-harfbuzz \ -system-sqlite \ -nomake examples \ -no-rpath \ -journald \ $(cat tempconf) \ && make
This package does not come with a test suite.
Now, as the root
user:
make install
Remove references to the build directory from installed library
dependency (prl) files by running the following
command as the root
user:
find $QT5PREFIX/ -name \*.prl \ -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;
Install images and create the menu entries for installed applications.
The QT5BINDIR
variable is used here to point to the
directory for the executable programs. If you have changed the bindir
above, QT5BINDIR
will need to be adjusted below. Be sure
that the QT5BINDIR
variable is defined in root's
environment and as the root
user:
QT5BINDIR=$QT5PREFIX/bin install -v -dm755 /usr/share/pixmaps/ && install -v -Dm644 qttools/src/assistant/assistant/images/assistant-128.png \ /usr/share/pixmaps/assistant-qt5.png && install -v -Dm644 qttools/src/designer/src/designer/images/designer.png \ /usr/share/pixmaps/designer-qt5.png && install -v -Dm644 qttools/src/linguist/linguist/images/icons/linguist-128-32.png \ /usr/share/pixmaps/linguist-qt5.png && install -v -Dm644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \ /usr/share/pixmaps/qdbusviewer-qt5.png && install -dm755 /usr/share/applications && cat > /usr/share/applications/assistant-qt5.desktop << EOF[Desktop Entry] Name=Qt5 Assistant Comment=Shows Qt5 documentation and examples Exec=$QT5BINDIR/assistant Icon=assistant-qt5.png Terminal=false Encoding=UTF-8 Type=Application Categories=Qt;Development;Documentation;
EOF cat > /usr/share/applications/designer-qt5.desktop << EOF[Desktop Entry] Name=Qt5 Designer GenericName=Interface Designer Comment=Design GUIs for Qt5 applications Exec=$QT5BINDIR/designer Icon=designer-qt5.png MimeType=application/x-designer; Terminal=false Encoding=UTF-8 Type=Application Categories=Qt;Development;
EOF cat > /usr/share/applications/linguist-qt5.desktop << EOF[Desktop Entry] Name=Qt5 Linguist Comment=Add translations to Qt5 applications Exec=$QT5BINDIR/linguist Icon=linguist-qt5.png MimeType=text/vnd.trolltech.linguist;application/x-linguist; Terminal=false Encoding=UTF-8 Type=Application Categories=Qt;Development;
EOF cat > /usr/share/applications/qdbusviewer-qt5.desktop << EOF[Desktop Entry] Name=Qt5 QDbusViewer GenericName=D-Bus Debugger Comment=Debug D-Bus applications Exec=$QT5BINDIR/qdbusviewer Icon=qdbusviewer-qt5.png Terminal=false Encoding=UTF-8 Type=Application Categories=Qt;Development;Debugger;
EOF
Some packages such as VLC-3.0.20 look for certain
executables with a -qt5 suffix. Run the following command as the
root
user
to create the necessary symlinks:
for file in moc uic rcc qmake lconvert lrelease lupdate; do ln -sfvn $QT5BINDIR/$file /usr/bin/$file-qt5 done
-confirm-license
: Accept license
without prompting user during configuration.
-opensource
: Install the opensource
version of qt.
-nomake examples
: This switch
disables building of the example programs included
in the source tarball. Remove it if you want to build
them.
-system-sqlite
: This switch enables use
of the system version of SQLite.
-system-harfbuzz
: This switch enables use
of the system version of Harfbuzz.
-dbus-linked -openssl-linked
: These
switches enable explicit linking of the
D-Bus and
OpenSSL libraries into
qt5 libraries instead of
dlopen()-ing them.
-journald
: This switch allows to send qt messages
to the journald logging system.
$(cat tempconf): This command provides a list of components that should not be built. These entries are in the form of "-skip <component>".
If Sudo-1.9.15p2 is installed, QT5DIR should be available to
the super user as well. Execute the following commands as the
root
user:
cat > /etc/sudoers.d/qt << "EOF"
Defaults env_keep += QT5DIR
EOF
If you installed qt5 in
/usr
, create an
environment variable needed by certain packages.
As the root
user:
cat > /etc/profile.d/qt5.sh << "EOF"
# Begin /etc/profile.d/qt5.sh
QT5DIR=/usr
export QT5DIR
# End /etc/profile.d/qt5.sh
EOF
If you installed qt5 in a location other
than /usr
, you need to update the
following configuration files so that qt5 is
correctly found by other packages and system processes.
As the root
user, update
the /etc/ld.so.conf
file and the dynamic linker's
run-time cache file:
cat >> /etc/ld.so.conf << EOF
# Begin Qt addition
/opt/qt5/lib
# End Qt addition
EOF
ldconfig
As the root
user, create
the /etc/profile.d/qt5.sh
file:
cat > /etc/profile.d/qt5.sh << "EOF"
# Begin /etc/profile.d/qt5.sh
QT5DIR=/opt/qt5
pathappend $QT5DIR/bin PATH
pathappend $QT5DIR/lib/pkgconfig PKG_CONFIG_PATH
export QT5DIR
# End /etc/profile.d/qt5.sh
EOF