Qt-5.13.0

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

### Chapter 25. X Libraries

- Prev

  Pangomm-2.42.0

- Next

  QtWebEngine-5.13.0

- Up
- Home

# Qt-5.13.0

## 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-9.0 platform.

### Package Information

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

- Download MD5 sum: 3c168d9a3a08248ff36f4f54c82e437f

- Download size: 481 MB

- Estimated disk space required: 12.5 GB (245 MB installed)

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

### Additional Downloads

- Required Patch: http://www.linuxfromscratch.org/patches/blfs/9.0/qt-5.13.0-upstream_fixes-1.patch

### Qt5 Dependencies

#### Required

Xorg Libraries

#### Recommended

alsa-lib-1.1.9, make-ca-1.4, Cups-2.2.12, GLib-2.60.6, gst-plugins-base-1.16.0 (QtMultimedia backend), HarfBuzz-2.6.0, ICU-64.2, JasPer-2.0.14, libjpeg-turbo-2.0.2, libmng-2.0.3, libpng-1.6.37, LibTIFF-4.0.10, libwebp-1.0.3, libxkbcommon-0.8.4, Mesa-19.1.4, mtdev-1.1.5, pcre2-10.33, SQLite-3.29.0, Wayland-1.17.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.50 (for sdpscanner, and at runtime for QtConnectivity module), ibus-1.5.20, libinput-1.14.0, MariaDB-10.4.7 or MySQL, pciutils-3.6.2 (required for QtWebEngine), PostgreSQL-11.5, Python-2.7.16 (required for QtWebEngine), PulseAudio-12.2, SDL2-2.0.10, unixODBC-2.3.7, Firebird, and libproxy

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

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

First fix some issues found upstream:

    patch -Np1 -i ../qt-5.13.0-upstream_fixes-1.patch &&

Install Qt5 by running the following commands:

    sed -i 's/python /python3 /' qtdeclarative/qtdeclarative.pro \
                                 qtdeclarative/src/3rdparty/masm/masm.pri &&

    ./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.8 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.13.0 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.8.27 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, canbusutil, designer, fixqt4headers.pl, lconvert, linguist, lrelease, lupdate, moc, pixeltool, qcollectiongenerator, qdbuscpp2xml, qdbus, qdbusviewer, qdbusxml2cpp, qdoc, qdistancefieldgenerator, qgltf, qhelpgenerator, qlalr, qmake, qmlcachegen, qmleasing, qmlimportscanner, qmllint, qmlmin, qmlplugindump, qmlpreview, qmlprofiler, qml, qmlscene, qmltestrunner, qscxmlc, qtdiag, qtpaths, qtattributionscanner, qtplugininfo, qtwaylandscanner, qvkgen, rcc, repc, sdpscanner, syncqt.pl, uic, xmlpatterns, and xmlpatternsvalidator
Installed Libraries: libQt5AccessibilitySupport.a, libQt53DAnimation.so, libQt53DCore.so, libQt53DExtras.so, libQt53DInput.so, libQt53DLogic.so, libQt53DQuick.so, libQt53DQuickAnimation.so, libQt53DQuickExtras.so, libQt53DQuickInput.so, libQt53DQuickRender.so, libQt53DQuickScene2D.so, libQt53DRender.so, libQt5Bluetooth.so, libQt5Bootstrap.a, libQt53DCharts.so, libQt5Concurrent.so, libQt5Core.so, libQt5DataVisualization.so, libQt5DBus.so, libQt5DesignerComponents.so, libQt5Designer.so, libQt5DeviceDiscoverySupport.a, libQt5EdidSupport.a, libQt5EglFSDeviceIntegration.so, libQt5EglFsKmsSupport.so, libQt5EglSupport.a, libQt5EventDispatcher.a, libQt5FbSupport.a, libQt5FontDatabaseSupport.a, libQt5Gamepad.so, libQt5Glx.a, libQt5Gui.so,libQt5Help.so, libQt5InputSupport.a, libQt5KmsSupport.a, libQt5LinuxAccessibilitySupport.a, libQt5Location.so, libQt5Multimedia.so, libQt5MultimediaQuick.so, libQt5MultimediaGstTools.so, libQt5MultimediaWidgets.so, libQt5Network.so, libQt5NetworkAuth.so, libQt5Nfc.so, libQt5OpenGLExtensions.a, libQt5OpenGL.so, libQt5PacketProtocol.a, libQt5PlatformCompositiorSupport.a, libQt5Positioning.so, libQt5PositioningQuick.so, libQt5PrintSupport.so, libQt5Purchasing.so, libQt5QmlDebug.a, libQt5QmlDevTools.a, libQt5Qml.so, libQt5QuickControls2.so, libQt5QuickParticles.so, libQt5Quick.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, libQt5XmlPatterns.so, libQt5Xml.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.13.0

### Short Descriptions

assistant | is a tool for presenting on-line documentation.
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 a Qt project file and produces message files used by the application.
lupdate | reads a Qt project file, finds the translatable strings in the specified source, header and Qt Designer interface files, and produces or updates the translation files listed in the project file.
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,
qdoc | is a tool used by Qt Developers to generate documentation for software projects.
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.
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.
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.
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.
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.
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 2019-08-18 13:33:32 -0700

- Prev

  Pangomm-2.42.0

- Next

  QtWebEngine-5.13.0

- Up
- Home