#### Beyond Linux® From Scratch (systemd Edition) - Version 10.1

### Chapter 25. X Libraries

- Prev

  Pangomm-2.46.0

- Next

  QtWebEngine-5.15.2

- Up
- Home

# Qt-5.15.2

## Introduction to Qt5

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. One of the major users of Qt is KDE Frameworks 5 (KF5).

This package is known to build and work properly using an LFS-10.1 platform.

### Package Information

- Download (HTTP): https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz

- Download MD5 sum: e1447db4f06c841d8947f0a6ce83a7b5

- Download size: 560 MB

- Estimated disk space required: 14 GB (255 MB installed)

- Estimated build time: 22 SBU (using parallelism=4)

### Qt5 Dependencies

#### Required

Xorg Libraries

#### Recommended

alsa-lib-1.2.4, make-ca-1.7, Cups-2.3.3, GLib-2.66.7, gst-plugins-base-1.18.3 (QtMultimedia backend), HarfBuzz-2.7.4, ICU-68.2, JasPer-2.0.25, libjpeg-turbo-2.0.6, libmng-2.0.3, libpng-1.6.37, LibTIFF-4.2.0, libwebp-1.2.0, libxkbcommon-1.0.3, Mesa-20.3.4, MIT Kerberos V5-1.19.1, mtdev-1.1.6, pcre2-10.36, SQLite-3.34.1, Wayland-1.19.0 (Mesa must be built with Wayland EGL backend), xcb-util-image-0.4.0, xcb-util-keysyms-0.4.0, xcb-util-renderutil-0.3.9, and xcb-util-wm-0.4.1

#### Optional

BlueZ-5.55 (for sdpscanner, and at runtime for QtConnectivity module), ibus-1.5.23, libinput-1.16.4, MariaDB-10.5.8 or MySQL, pciutils-3.7.0 (required for QtWebEngine), PostgreSQL-13.2, Python-2.7.18 (required for QtWebEngine), PulseAudio-14.2, SDL2-2.0.14, unixODBC-2.3.9, assimp, Flite, Firebird, FreeTDS, libproxy, OpenAL, speech-dispatcher, tslib, and Vulkan

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qt5

## Setting the installation prefix

### Installing in /opt/qt5

The BLFS editors recommend installing Qt5 in a directory other than `/usr`, ie `/opt/qt5`. To do this, set the following environment variable:

    export QT5PREFIX=/opt/qt5

### Tip

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.2`. To create a versioned Qt5 directory after the installation is complete, you may rename the directory and create a symlink:

    mkdir /opt/qt-5.15.2
    ln -sfnv qt-5.15.2 /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.

### Note

If qca-2.3.2 has been installed and you are reinstalling or updating this package, then qca will need to be reinstalled.

## Installation of Qt5

### Warning

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.

### Caution

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.

### Note

The build time and space required for the full Qt5 is quite long. The instructions below do not build the tutorials and examples. Removing the `-nomake` line will create a complete build.

### Note

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

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                                 \
                -skip qtwebengine                         &&
    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.12 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 -sfrvn $QT5BINDIR/$file /usr/bin/$file-qt5
    done

## Command Explanations

sed ...: Allows using Python 3 instead of Python 2. This command destroys the build for QtWebEngine, so do not use it if you remove the `-skip qtwebengine` switch.

`-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.

`-dbus-linked -openssl-linked`: These switches enable explicit linking of the D-Bus and OpenSSL libraries into Qt5 libraries instead of dlopen()-ing them.

`-skip qtwebengine`: This switch disables building the QtWebEngine. The BLFS editors have chosen to build qtwebengine-5.15.2 separately.

`-system-harfbuzz`: This switch enables use of the system version of Harfbuzz.

## Configuring Qt5

###

#### Configuration Information

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
    pathappend $QT5DIR/bin

    # End /etc/profile.d/qt5.sh
    EOF

If Sudo-1.9.5p2 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 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

## Contents

Installed Programs: assistant, balsam, canbusutil, designer, fixqt4headers.pl, lconvert, linguist, lprodump, lrelease, lrelease-pro, lupdate, lupdate-pro, meshdebug, moc, pixeltool, qcollectiongenerator, qdbus, qdbuscpp2xml, qdbusviewer, qdbusxml2cpp, qdistancefieldgenerator, qdoc, qgltf, qhelpgenerator, qlalr, qmake, qml, qmlcachegen, qmleasing, qmlformat, qmlimportscanner, qmllint, qmlmin, qmlplugindump, qmlpreview, qmlprofiler, qmlscene, qmltestrunner, qscxmlc, qtattributionscanner, qtdiag, qtpaths, qtplugininfo, qtwaylandscanner, qvkgen, rcc, repc, sdpscanner, syncqt.pl, tracegen, uic, xmlpatterns, and xmlpatternsvalidator
Installed Libraries: libQt53DAnimation.so, libQt53DCore.so, libQt53DExtras.so, libQt53DInput.so, libQt53DLogic.so, libQt53DQuick.so, libQt53DQuickAnimation.so, libQt53DQuickExtras.so, libQt53DQuickInput.so, libQt53DQuickRender.so, libQt53DQuickScene2D.so, libQt53DRender.so, libQt5AccessibilitySupport.a, libQt5Bluetooth.so, libQt5Bodymovin.so, libQt5Bootstrap.a, libQt5Charts.so, libQt5Concurrent.so, libQt5Core.so, libQt5DataVisualization.so, libQt5DBus.so, libQt5DesignerComponents.so, libQt5Designer.so, libQt5DeviceDiscoverySupport.a, libQt5EdidSupport.a, libQt5EglFSDeviceIntegration.so, libQt5EglFsKmsSupport.so, libQt5EglSupport.a, libQt5EventDispatcherSupport.a, libQt5FbSupport.a, libQt5FontDatabaseSupport.a, libQt5Gamepad.so, libQt5GlxSupport.a, libQt5Gui.so,libQt5Help.so, libQt5InputSupport.a, libQt5KmsSupport.a, libQt5LinuxAccessibilitySupport.a, libQt5Location.so, libQt5Multimedia.so, libQt5MultimediaGstTools.so, libQt5MultimediaQuick.so, libQt5MultimediaWidgets.so, libQt5Network.so, libQt5NetworkAuth.so, libQt5Nfc.so, libQt5OpenGLExtensions.a, libQt5OpenGL.so, libQt5PacketProtocol.a, libQt5PlatformCompositorSupport.a, libQt5Positioning.so, libQt5PositioningQuick.so, libQt5PrintSupport.so, libQt5Purchasing.so, libQt5Qml.so, libQt5QmlDebug.a, libQt5QmlDevTools.a, libQt5QmlModels.so, libQt5QmlWorkerScript.so, libQt5Quick.so, libQt5Quick3D.so, libQt5Quick3DAssetImport.so, libQt5Quick3DRender.so, libQt5Quick3DRuntimeRender.so, libQt5Quick3DUtils.so, libQt5QuickControls2.so, libQt5QuickParticles.so, libQt5QuickShapes.so, libQt5QuickTemplates2.so, libQt5QuickTest.so, libQt5QuickWidgets.so, libQt5RemoteObjects.so, libQt5Script.so, libQt5ScriptTools.so, libQt5Scxml.so, libQt5Sensors.so, libQt5SerialBus.so, libQt5SerialPort.so, libQt5ServiceSupport.a, libQt5Sql.so, libQt5Svg.so, libQt5Test.so, libQt5TextToSpeech.so, libQt5ThemeSupport.a, libQt5UiTools.a, libQt5VirtualKeyboard.so, libQt5WaylandClient.so, libQt5WaylandCompositor.so, libQt5WebChannel.so, libQt5WebSockets.so, libQt5WebView.so, libQt5Widgets.so, libQt5X11Extras.so, libQt5XcbQpa.so, libQt5XkbCommonSupport.a, libQt5Xml.so, libQt5XmlPatterns.so, and several plugins under /opt/qt5/{plugins,qml}
Installed Directories: /usr/include/qt5, /usr/lib/qt5, /usr/share/doc/qt5, and /usr/share/qt5 OR /opt/qt5 and /opt/qt-5.15.2

### Short Descriptions

assistant | is a tool for presenting on-line documentation
balsam | is a tool to convert 3D scenes from various creation tools to QML format, for use by the new QtQuick 3D library
canbustil | is a tool to deal with arbitrary CAN bus frames. A Controller Area Network (CAN) is a vehicle bus standard designed to allow microcontrollers and devices to communicate with each other in applications without a host computer
designer | is a full-fledged GUI builder. It includes powerful features such as preview mode, automatic widget layout, support for custom widgets, and an advanced property editor
fixqt4headers.pl | is a script to replace all Qt 4 style includes with Qt 5 includes
lconvert | is part of Qt5's Linguist tool chain. It can be used as a standalone tool to convert and filter translation data files
linguist | provides support for translating applications into local languages
lrelease | is a simple command line tool. It reads XML-based translation file in TS format and produces message files used by the application
lrelease-pro | extracts project information from qmake projects and passes it to lrelease
lupdate | finds the translatable strings in the specified source, header and Qt Designer interface files, and stores the extracted messages in translation files to be processed by lrelease
lupdate-pro | reads a Qt project file, an passes the collected information to lupdate
meshdebug | displays information about qtquick-3d mesh files
moc | generates Qt meta object support code
pixeltool | is a desktop magnifier and as you move your mouse around the screen it will show the magnified contents in its window
qcollectiongenerator | processes and converts Qt help files
qdbuscpp2xml | takes a C++ source file and generates a D-Bus XML definition of the interface
qdbus | lists available services, object paths, methods, signals, and properties of objects on a bus
qdbusviewer | is a graphical D-Bus browser
qdbusxml2cpp | is a tool that can be used to parse interface descriptions and produce static code representing those interfaces,
qdistancefieldgenerator | allows a font cache to be pregenerated for Text.QtRendering to speed up an application's startup if the user interface has a lot of text, or multiple fonts, or a large amount of distinct characters, e.g. in CJK writing systems
qdoc | is a tool used by Qt Developers to generate documentation for software projects
qgltf | imports a a variety of 3D model formats and exports into fast-to-load, optimized glTF assets embedded into Qt resource files
qhelpgenerator | is a tool used to generate a Qt compressed help file
qlalr | is a tool used to generate code from grammar specifications
qmake | uses information stored in project files to determine what should go in the makefiles it generates
qml | executes a QML file
qmlcachegen | supports the creation of cache files at build time
qmleasing | is a tool used to define the easing curves using an interactive curve editor
qmlformat | formats QML files according to the QML coding conventions
qmlimportscanner | is a tool used to import QML files from a directory
qmllint | is a syntax checker for QML files
qmlmin | removes comments and layout characters from a QML file
qmlplugindump | is a tool to create a qmltypes file
qmlpreview | is a tool used to analyze QML applications
qmlprofiler | is a tool which watches QML and JavaScript files on disk and updates the application live with any changes
qmlscene | is a utility that loads and displays QML documents even before the application is complete
qmltestrunner | is a tool used to make tests
qscxml | converts an input.scxml file to a header and cpp file
qtattributionsscanner | processes qt_attribution.json files in Qt sources
qtdiag | is a tool for reporting diagnostic information about Qt and its environment
qtpaths | is a tool to query Qt path information
qtplugininfo | dumps meta-data about Qt plugins in JSON format
qtwaylandscanner | converts Wayland specfiles to C++ headers and code needed for QtWayland
qvkgen | converts Vulkan specfiles to C++ headers and code
rcc | is a resource compiler used in conjunction with designer
repc | is the Replica Compiler, which generates QObject header files based on an API definition file
sdpscanner | performs a Session Description Protocol scan on a remote device, using the SDP server represented by the local Bluetooth device
syncqt.pl | is a script to create the forwarding headers in the include directories. It is an internal development tool
tracegen | is a trace generator for LTTng or ETW
uic | is a Qt user interface compiler
xmlpatterns | provides support for XPath, XQuery, XSLT, and XML Schema validation
xmlpatternsvalidator | is a tool used to validate XML documents

Last updated on 2021-02-21 20:38:24 -0800

- Prev

  Pangomm-2.46.0

- Next

  QtWebEngine-5.15.2

- Up
- Home