Building KDE Frameworks 5 (KF5)

KDE Frameworks 5 is a collection of libraries based on top of Qt5 and QML derived from the monolithic KDE 4 libraries. They can be used independent of the KDE Display Environment (Plasma 5).

[Note]

Note

Development versions of BLFS may not build or run some packages properly if dependencies have been updated since the most recent stable versions of the book.

The instructions below build all of the KDE Frameworks packages in one step by using a bash script.

Package Information

KF5 Dependencies

Required

Boost-1.80.0, extra-cmake-modules-5.94.0, docbook-xml-4.5, docbook-xsl-nons-1.79.2, giflib-5.2.1, libepoxy-1.5.10, libgcrypt-1.10.1, libical-3.0.14, libjpeg-turbo-2.1.3, libpng-1.6.37, libxslt-1.1.35, lmdb-0.9.29, qrencode-4.1.1, phonon-4.11.1, plasma-wayland-protocols-1.7.0, shared-mime-info-2.2, URI-5.12, and Wget-1.21.3 (required to download the packages)

Recommended

Optional

BlueZ-5.65 (needed to build Bluez-Qt), ModemManager-1.18.10 (needed to build ModemManager-Qt), Datamatrix (deemed recommended for Prison by upstream)

Runtime dependency for FrameworkIntegration

Oxygen fonts and Noto fonts

Additional image formats support in KImageFormats

JasPer-3.0.6 and OpenEXR

Optional dependencies for KIO

MIT Kerberos V5-1.20

Optional dependencies for Solid

UDisks-2.9.4, UPower-1.90.0 and media-player-info (runtime)

Optional dependency for KWallet

GPGME-1.18.0, built with C++ bindings (which is the default).

Optional dictionary backends for Sonnet

Hspell and Hunspell

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/kf5

Downloading KDE Frameworks

The easiest way to get the KDE Frameworks packages is to use a single wget to fetch them all at once:

url=https://download.kde.org/stable/frameworks/5.94/
wget -r -nH -nd -A '*.xz' -np $url

The options used here are:
  -r            recurse through child directories
  -nH           disable generation of host-prefixed directories
  -nd           do not create a hierarchy of directories
  -A '*.xz'     just get the *.xz files
  -np           don't get parent directories

Setting Package Order

The order of building files is important due to internal dependencies. Create the list of files in the proper order as follows:

cat > frameworks-5.94.0.md5 << "EOF"
4c58b14c3e9b566efa1192d4ecd2af79  attica-5.94.0.tar.xz
#87284231fba89d63a644fd5580a93419  extra-cmake-modules-5.94.0.tar.xz
#05881681bb54a656df941760ec95f78f  kapidox-5.94.0.tar.xz
7755930b43e6d1c2ffd84d3a0900837c  karchive-5.94.0.tar.xz
5e369a4776d905113ffd3ff4253ec242  kcodecs-5.94.0.tar.xz
ef377ebb6a0a186f0b0c1d866e9cd9e0  kconfig-5.94.0.tar.xz
08307d77429c08cace165ee332774150  kcoreaddons-5.94.0.tar.xz
ec62f262f1e18f18f98583e2c2a9eef0  kdbusaddons-5.94.0.tar.xz
6e904e169b64308f26a849e97b57a229  kdnssd-5.94.0.tar.xz
b2c6301308c0d14e175ed7247a20a2f5  kguiaddons-5.94.0.tar.xz
a5ed561a992e8c153ba8ee9e928df775  ki18n-5.94.0.tar.xz
a20e40478fd1d97dfb1de841c618ddbb  kidletime-5.94.0.tar.xz
5d8a593d887dd87ec275ecd60463c23e  kimageformats-5.94.0.tar.xz
c70d3292fd64cf0601031a77b952da16  kitemmodels-5.94.0.tar.xz
598084088d4aa8774ed45fd90f27b889  kitemviews-5.94.0.tar.xz
a405d0efed821d49046701e23df3a15a  kplotting-5.94.0.tar.xz
28ec585eb7b021d9fe36c34a04e15e45  kwidgetsaddons-5.94.0.tar.xz
dc4600c342cf19a59f77a0a3e6f15f9a  kwindowsystem-5.94.0.tar.xz
13b415dae8fecc7bc13fd74da8dcbd5c  networkmanager-qt-5.94.0.tar.xz
f01586b53ec25461a79e9b041384ccf6  solid-5.94.0.tar.xz
4d9bb4004e793c74090b09c517a73ed3  sonnet-5.94.0.tar.xz
e0587825e0f9a9900907ebc5bdec4fc7  threadweaver-5.94.0.tar.xz
63298692e6643c2f9c46f5e896092249  kauth-5.94.0.tar.xz
df116b33cd4701417804995181043e17  kcompletion-5.94.0.tar.xz
b15403397a15cdd19cc9c37cc641a390  kcrash-5.94.0.tar.xz
89150622d44cbe16d0866630679ed344  kdoctools-5.94.0.tar.xz
8c9e66d27034ab827a7bff258c26ac40  kpty-5.94.0.tar.xz
e4614a7ff9b50b45f0d331569b1f037c  kunitconversion-5.94.0.tar.xz
99b651617d4aa11de8da3a29fca4f293  kconfigwidgets-5.94.0.tar.xz
0b503bfe8fa34c67d7cd05c3e4569deb  kservice-5.94.0.tar.xz
8962279f6b830f6facb2b4774fe3bbd5  kglobalaccel-5.94.0.tar.xz
f21bde21930493488e580b7ab2fb9a68  kpackage-5.94.0.tar.xz
0740b92bcdf9a693337a44d8d60010a8  kdesu-5.94.0.tar.xz
4074814f4ef40b9c4ef98730d04eacc3  kemoticons-5.94.0.tar.xz
39d57f459d465ee36257afa00d14c4af  kiconthemes-5.94.0.tar.xz
4efc13aa9b4c25e0c8ecdccbded0258b  kjobwidgets-5.94.0.tar.xz
b1eed570adcf176e26732e11d443b45f  knotifications-5.94.0.tar.xz
02196b04420b82dea5a8cfb1afe4c3ed  ktextwidgets-5.94.0.tar.xz
9e3262d243d0647fa449637bb6721257  kxmlgui-5.94.0.tar.xz
fdf2b3aa23143a61245d5c9c71b1e10a  kbookmarks-5.94.0.tar.xz
33dfaa62d9a29c728d5517cb470f4cab  kwallet-5.94.0.tar.xz
df17b4d7749752ea870f41ee939a6de2  kded-5.94.0.tar.xz
b173ed937a1031bbe3fcb9b00cde8ddf  kio-5.94.0.tar.xz
e1545546a5dffb1a204ee52ce35f262a  kdeclarative-5.94.0.tar.xz
1db143e7ae245d53c83310532f22c42c  kcmutils-5.94.0.tar.xz
a7dd929fe16bee46a7a6405496e07c1a  kirigami2-5.94.0.tar.xz
0b5af5f1b6a01fbfc2f9409080b1ed6d  syndication-5.94.0.tar.xz
910e635386cdbc7fb001a26188f2ad2f  knewstuff-5.94.0.tar.xz
e1234f34020f69e96029159b985a90fe  frameworkintegration-5.94.0.tar.xz
22d387e61144829658ee37e39dc63cd3  kinit-5.94.0.tar.xz
1eda63d543969f2e92a4bcd3431042d7  kparts-5.94.0.tar.xz
21e2b0a1a22a23b10396c8eed8c31b00  kactivities-5.94.0.tar.xz
#c67ab93795b50e39b1e31628da1ca011  kdewebkit-5.94.0.tar.xz
1848474b94ea30081d287870f9cba116  syntax-highlighting-5.94.0.tar.xz
0b2d6b28c7d543c1d32ad9726e29e40f  ktexteditor-5.94.0.tar.xz
4fbb3293df1edb2605ce928dcb562d97  kdesignerplugin-5.94.0.tar.xz
71e3be9e7c55af746b96d6ac72434019  kwayland-5.94.0.tar.xz
a3e74066c093105e4bb46f6feeecf16c  plasma-framework-5.94.0.tar.xz
#37ee3c5a952c19c827bb183ae0c30af1  modemmanager-qt-5.94.0.tar.xz
add7886e4c40a1f391bdb590130bc7ab  kpeople-5.94.0.tar.xz
f4b6e612931d90c89719a91710c1ca5c  kxmlrpcclient-5.94.0.tar.xz
f26170bc0c78b72cdeb0908df7524181  bluez-qt-5.94.0.tar.xz
3c1187cff306f87dce08100996a93b96  kfilemetadata-5.94.0.tar.xz
a453a4ab37073aafeb6e5a5c487230b9  baloo-5.94.0.tar.xz
#30d8ecac16f36e4b9fd1794a39460c42  breeze-icons-5.94.0.tar.xz
#0101721db51fdce9dd6e3e3b6de46f2a  oxygen-icons5-5.94.0.tar.xz
ff23ccf6ade8f2a7709b36846748758e  kactivities-stats-5.94.0.tar.xz
69f5c374d56ff468b8cd5d0cf6b3e223  krunner-5.94.0.tar.xz
60c71e3c275b97caacd7568987a4fab4  prison-5.94.0.tar.xz
5a24bcad8364bc54f08eeef64920d2c5  qqc2-desktop-style-5.94.0.tar.xz
10cd152091f2c14d7dcb888cd69aa902  kjs-5.94.0.tar.xz
caa2c3e5dcc94924877e5f1d2430b5a6  kdelibs4support-5.94.0.tar.xz
3afa34590fcc12338c17118859a604b3  khtml-5.94.0.tar.xz
7b2dd5afb48757ea1ec22f22a9fe880e  kjsembed-5.94.0.tar.xz
42434eaee534d1d82cd152368fd695a8  kmediaplayer-5.94.0.tar.xz
0ded971b6d9aa1fdc27d721c022fd6e4  kross-5.94.0.tar.xz
7f5fe39fa4d9714aeffa75d381a8d63a  kholidays-5.94.0.tar.xz
62928a8400931c074e4f924899e0ee3b  purpose-5.94.0.tar.xz
cef3c9347f6feb52ccb5bdf3d32d3572  kcalendarcore-5.94.0.tar.xz
e871157fef871e5b65c728b7bbc52c47  kcontacts-5.94.0.tar.xz
774aab02052060e0935b53a80b6aee2c  kquickcharts-5.94.0.tar.xz
d5eb244dabef2a80fef3344410fe1d89  knotifyconfig-5.94.0.tar.xz
67d0ce7a0c7bc64c5711440817585fce  kdav-5.94.0.tar.xz
EOF

In the above list, notice that some files have been commented out with a hash (#) character. The extra-cmake-modules entry has been commented out because it was built earlier in the Introduction to KDE. The icon packages are covered separately at breeze-icons-5.94.0 and oxygen-icons5-5.94.0. The modemmanager-qt package may be built if its optional dependency has been installed. The kdewebkit may be built if the external package QtWebkit has been built. The kapidox package is a pure python package and cannot be built with the instructions below.

Installation of KDE Frameworks

[Note]

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.9.11p3 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root
[Caution]

Caution

If installing in /opt and there is an existing /opt/kf5 either as a regular directory or a symbolic link, it should be reinitialized (as root):

mv -v /opt/kf5 /opt/kf5.old                         &&
install -v -dm755           $KF5_PREFIX/{etc,share} &&
ln -sfv /etc/dbus-1         $KF5_PREFIX/etc         &&
ln -sfv /usr/share/dbus-1   $KF5_PREFIX/share       &&
ln -sfv /usr/share/polkit-1 $KF5_PREFIX/share

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

while read -r line; do

    # Get the file name, ignoring comments and blank lines
    if $(echo $line | grep -E -q '^ *$|^#' ); then continue; fi
    file=$(echo $line | cut -d" " -f2)

    pkg=$(echo $file|sed 's|^.*/||')          # Remove directory
    packagedir=$(echo $pkg|sed 's|\.tar.*||') # Package directory

    name=$(echo $pkg|sed 's|-5.*$||') # Isolate package name

    tar -xf $file
    pushd $packagedir

      mkdir build
      cd    build

      cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
            -DCMAKE_PREFIX_PATH=$QT5DIR        \
            -DCMAKE_BUILD_TYPE=Release         \
            -DBUILD_TESTING=OFF                \
            -Wno-dev ..
      make
      as_root make install
    popd

  as_root rm -rf $packagedir
  as_root /sbin/ldconfig

done < frameworks-5.94.0.md5

exit
[Note]

Note

Any modules that have been omitted can be installed later by using the same mkdir build; cd build; cmake; make; make install procedure as above.

Useless systemd units have been installed in $KF5_PREFIX/lib. Remove them now (as root):

rm -rf $KF5_PREFIX/lib/systemd

Sometimes the installation paths are hardcoded into installed files. If the installed directory is not /usr, rename the directory and create a symlink:

mv -v /opt/kf5 /opt/kf5-5.94.0
ln -sfvn kf5-5.94.0 /opt/kf5

Command Explanations

-DCMAKE_PREFIX_PATH=$QT5DIR: This switch is used to allow cmake to find the proper Qt libraries.

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of the compiler optimizations.

-DBUILD_TESTING=OFF: This switch is used to prevent building test programs and libraries that are of no use to an end user.

Contents

Installed Programs: balooctl, baloo_file, baloo_file_extractor, baloosearch, balooshow, checkXML5, depdiagram-generate, depdiagram-generate-all, depdiagram-prepare, desktoptojson, gentrigrams, kactivities-cli, kapidox_generate, kate-syntax-highlighter, kbuildsycoca5, kcookiejar5, kdebugdialog5, kded5, kdeinit5, kdeinit5_shutdown, kdeinit5_wrapper, kf5-config, kf5kross, kgendesignerplugin, kglobalaccel5, kiconfinder5, kjs5, kjscmd5, kjsconsole, knewstuff-dialog, kpackagelauncherqml, kpackagetool5, kquitapp5, kreadconfig5, kshell5, ktelnetservice5, ktrash5, kwalletd5, kwallet-query, kwrapper5, kwriteconfig5, meinproc5, parsetrigrams, plasmapkg2, preparetips5, protocoltojson, and solid-hardware5
Installed Libraries: libkdeinit5_klauncher.so, libKF5Activities.so, libKF5ActivitiesStats.so, libKF5Archive.so, libKF5Attica.so, libKF5AuthCore.so, libKF5Auth.so, libKF5Baloo.so, libKF5BluezQt.so, libKF5Bookmarks.so, libKF5CalendarCore.so, libKF5CalendarEvents.so, libKF5Codecs.so, libKF5Completion.so, libKF5ConfigCore.so, libKF5ConfigGui.so, libKF5ConfigWidgets.so, libKF5Contacts.so, libKF5CoreAddons.so, libKF5Crash.so, libKF5DAV.so, libKF5DBusAddons.so, libKF5Declarative.so, libKF5DNSSD.so, libKF5DocTools.so, libKF5Emoticons.so, libKF5FileMetaData.so, libKF5GlobalAccel.so, libKF5GuiAddons.so, libKF5Holidays.so, libKF5I18n.so, libKF5IconThemes.so, libKF5IdleTime.so, libKF5ItemModels.so, libKF5ItemViews.so, libKF5JobWidgets.so, libKF5JSApi.so, libKF5JsEmbed.so, libKF5JS.so, libKF5KCMUtils.so, libKF5KDELibs4Support.so, libKF5KHtml.so, libKF5KIOCore.so, libKF5KIOFileWidgets.so, libKF5KIOGui.so, libKF5KIONTLM.so, libKF5KIOWidgets.so, libKF5Kirigami2.so, libKF5KrossCore.so, libKF5KrossUi.so, libKF5MediaPlayer.so, libKF5NetworkManagerQt.so, libKF5NewStuffCore.so, libKF5NewStuff.so, libKF5Notifications.so, libKF5NotifyConfig.so, libKF5Package.so, libKF5Parts.so, libKF5PeopleBackend.so, libKF5People.so, libKF5PeopleWidgets.so, libKF5PlasmaQuick.so, libKF5Plasma.so, libKF5Plotting.so, libKF5Prison.so, libKF5Pty.so, libKF5Purpose.so, libKF5PurposeWidgets.so, libKF5QuickAddons.so, libKF5Runner.so, libKF5Service.so, libKF5Solid.so, libKF5SonnetCore.so, libKF5SonnetUi.so, libKF5Style.so, libKF5Su.so, libKF5SyntaxHighlighting.so, libKF5TextEditor.so, libKF5TextWidgets.so, libKF5ThreadWeaver.so, libKF5UnitConversion.so, libKF5Wallet.so, libKF5WaylandClient.so, libKF5WaylandServer.so, libKF5WidgetsAddons.so, libKF5WindowSystem.so, libKF5XmlGui.so, libKF5XmlRpcClient.so, and libkwalletbackend5.so
Installed Directories: /opt/kf5 (symlink to /opt/kf5-5.94.0) if installing in /opt

Short Descriptions

checkXML5

is a tool to check for syntax errors in KDE DocBook XML files

depdiagram-generate

is a tool to generate a dependency diagram

depdiagram-generate-all

is a tool to generate a dependency diagram for all frameworks at once

depdiagram-prepare

is a tool to prepare dot files

desktoptojson

is a tool to convert a .desktop file to a .json file

kbuildsycoca5

rebuilds the KService desktop file system configuration cache

kcookiejar5

is a command line interface to the HTTP cookie store used by KDE, a D-BUS service to store/retrieve/clean cookies

kded5

consolidates several small services in one process

kdeinit5

is a process launcher somewhat similar to the famous init used for booting UNIX

kf5-config

is a command line program used to retrieve information about KDE installation or user paths

kf5kross

executes kross scripts written in KDE Javascript, Python, Ruby, Java and Falcon

kgendesignerplugin

generates widget plugins for Qt(TM) Designer

kglobalaccel5

is a daemon use to register the key bindings and for getting notified when the action triggered

kjs5

is KDE ECMAScript/JavaScript engine

kjscmd5

is a tool for launching KJSEmbed scripts from the command line

kjsconsole

is a console for kjs5

kpackagelauncherqml

is a commandline tool for launching kpackage QML application

kpackagetool5

is a command line kpackage tool

kreadconfig5

is a command line tool to retrieve values from KDE configuration files

kshell5

start applications via kdeinit

ktelnetservice5

is a telnet service

ktrash5

is a helper program to handle the KDE trash can

kwalletd5

is the wallet manager daemon

kwriteconfig5

is a command line tool to write values in KDE configuration files

meinproc5

converts DocBook files to HTML

plasmapkg2

is a tool to install, list, remove Plasma packages

preparetips5

is a script to extract the text from a tips file

solid-hardware5

is a command line tool to investigate available devices