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 LFS or dependencies have been updated since the most recent stable versions of the books.

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.84.0, extra-cmake-modules-5.113.0, docbook-xml-4.5, docbook-xsl-nons-1.79.2, giflib-5.2.1, libepoxy-1.5.10, libgcrypt-1.10.3, libical-3.0.17, libjpeg-turbo-3.0.1, libpng-1.6.40, libxslt-1.1.39, lmdb-0.9.31, qca-2.3.8, qrencode-4.1.1, phonon-4.12.0, plasma-wayland-protocols-1.12.0, shared-mime-info-2.4, URI-5.21, and Wget-1.21.4 (required to download the packages)

Recommended

Optional

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

Runtime dependency for FrameworkIntegration

Noto fonts

Additional recommended dependencies for kapidox

Additional image formats support in KImageFormats

JasPer-4.1.2, libavif-1.0.3, libraw-0.21.2, libheif, libjxl, and OpenEXR

Optional dependencies for KIO

MIT Kerberos V5-1.21.2

Optional dependencies for Solid

UDisks-2.10.1, UPower-1.90.2 and media-player-info (runtime)

Optional dependency for KWallet

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

Optional dependency for kdewebkit

QtWebkit

Optional dictionary backends for Sonnet

Hspell and Hunspell

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.113/
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.113.0.md5 << "EOF"
787c2d668ea547c2516aee5f0bfc8726  attica-5.113.0.tar.xz
#f037747c7a56fbbb64adb14d1f46fe5f  extra-cmake-modules-5.113.0.tar.xz
82f34f7bc8d44d2bcf35fa3f94a38836  kapidox-5.113.0.tar.xz
7874e4ef6e9043a1fbe253e76b3b14fe  karchive-5.113.0.tar.xz
89e1b0d3b26f23140142a8b6a3108475  kcodecs-5.113.0.tar.xz
d9d231a843e344bfb69361eeff1df5dd  kconfig-5.113.0.tar.xz
0967a05b9595e7fc37d9adc720e28881  kcoreaddons-5.113.0.tar.xz
ea44849cafb7c183e5301a794f7efb98  kdbusaddons-5.113.0.tar.xz
f1c3314fab259c3af769e78c146fc90b  kdnssd-5.113.0.tar.xz
00f8015c6ffbbef09aa8977f6cf41e13  kguiaddons-5.113.0.tar.xz
369ddd0283921f1ed5a78f0bc1ebfc82  ki18n-5.113.0.tar.xz
30fbf16607d783a9e871344962eb6c90  kidletime-5.113.0.tar.xz
dbe1d12387f95adc49d931102be44fb0  kimageformats-5.113.0.tar.xz
c5e89f4c8dea0b9ef5d01f16968e046e  kitemmodels-5.113.0.tar.xz
d4bfe43c3516ffee86bb75aac9747d78  kitemviews-5.113.0.tar.xz
1668a8040e66b8d5df8f6576d8543e52  kplotting-5.113.0.tar.xz
e660b75205043559de3623e0d4314dfc  kwidgetsaddons-5.113.0.tar.xz
b9ec086925b43ae1563c353246a17929  kwindowsystem-5.113.0.tar.xz
bcad0b16cdc4ed3a525f489212d04f54  networkmanager-qt-5.113.0.tar.xz
9d4b38e3adae1c0da9f207786aacf497  solid-5.113.0.tar.xz
80f6fbb2005c4d1bd82407642bdd156d  sonnet-5.113.0.tar.xz
3b712a2ca08ff91f0dffe857fd83474f  threadweaver-5.113.0.tar.xz
9d39de86fb9c75faea71886267aa0c98  kauth-5.113.0.tar.xz
36a941b4dac38b548df513962593c6af  kcompletion-5.113.0.tar.xz
afe932f17e32d63659b2901157c3bc73  kcrash-5.113.0.tar.xz
1066c0b7878f5c920928954570e39730  kdoctools-5.113.0.tar.xz
6affbafd36a70bc51d9822347056ac2d  kpty-5.113.0.tar.xz
49a1eee21895689b102fabd57d3dd92f  kunitconversion-5.113.0.tar.xz
e9418b112c6e12fa743aea190bc1f0df  kconfigwidgets-5.113.0.tar.xz
38284f2e7a5e29643c2c7478f06de679  kservice-5.113.0.tar.xz
7397ea0349bf92b9a98a5a75a95e7860  kglobalaccel-5.113.0.tar.xz
90ccbb695797b041e94c39cb98139065  kpackage-5.113.0.tar.xz
9766a78f6ebb2dd760246cee72622de1  kdesu-5.113.0.tar.xz
fcff19090cf18c03cc492768da8b62b4  kemoticons-5.113.0.tar.xz
a48bfd069ba800de25ba3907b0e4a2e1  kiconthemes-5.113.0.tar.xz
b51ee5c2bc66a45eb68ae681fd2a52b7  kjobwidgets-5.113.0.tar.xz
aaec1ed5e8c1133decd4876c486f7958  knotifications-5.113.0.tar.xz
5533f0ed825339ce66f400c1058a207a  ktextwidgets-5.113.0.tar.xz
af3d95e975fcb00f865da003c823bfd9  kxmlgui-5.113.0.tar.xz
401472496f0539c6804c5758950704fc  kbookmarks-5.113.0.tar.xz
72c93e9c087f03cecf75bf76113da7b0  kwallet-5.113.0.tar.xz
2bd168429da6337811b33e44175c92b2  kded-5.113.0.tar.xz
31f9bb082e740c90e8d2623f94117020  kio-5.113.0.tar.xz
b7ab07daa1c8e7b441c92c9dabc74c77  kdeclarative-5.113.0.tar.xz
1df48c8564ec78f1f4782612a342accb  kcmutils-5.113.0.tar.xz
a836b9e3c64b86d2dd5fb45fa9bbb400  kirigami2-5.113.0.tar.xz
20589ba771d2df8ad3ddaf7f0341a2d9  syndication-5.113.0.tar.xz
24baca956b368ce051129a3d9ddb8d65  knewstuff-5.113.0.tar.xz
f1c28e9fb51199710d7dfdd904572ba0  frameworkintegration-5.113.0.tar.xz
6c5bc8798c3c9dcca909998ae8ea376a  kinit-5.113.0.tar.xz
461169baeb06dee7bc558a978889ae05  kparts-5.113.0.tar.xz
844c0457872c020e0e41dfa78348db86  kactivities-5.113.0.tar.xz
#5063fba9a973754a1d74d25be3c1c879  kdewebkit-5.113.0.tar.xz
614ebb98192f9052f19edbd7976f0291  syntax-highlighting-5.113.0.tar.xz
042424fe37a12bf433c1db6853f5de39  ktexteditor-5.113.0.tar.xz
38e28b1563ca2bed2484c84c58f4d6a3  kdesignerplugin-5.113.0.tar.xz
924b688b1a9626506db888f7121c5ace  kwayland-5.113.0.tar.xz
d58abf4f8fe539995124dfec1f33d981  plasma-framework-5.113.0.tar.xz
11f566407f2d9dece0acc2ab839cd062  modemmanager-qt-5.113.0.tar.xz
0647a87e569c7650d2dc6608e7f57ed0  kpeople-5.113.0.tar.xz
ca639bea4c95c28b2477960d8b7919e3  kxmlrpcclient-5.113.0.tar.xz
f72cd083ecbc9f18cb5698922240f1f2  bluez-qt-5.113.0.tar.xz
709952cf04d6927d87f99aed9fc3d2b6  kfilemetadata-5.113.0.tar.xz
468982a87967b7459a094c62f4b53b16  baloo-5.113.0.tar.xz
#130f406ffe1fe4d6778bb26b7688f5c3  breeze-icons-5.113.0.tar.xz
#841ef4fa01803fe07ff4a96c72ac472d  oxygen-icons-5.113.0.tar.xz
f5ac81cfcbf79c5f7a583be8c92db53d  kactivities-stats-5.113.0.tar.xz
f32d7b8bfa1874b6ddb13c939a4c0190  krunner-5.113.0.tar.xz
4400d4a8b143b983d117ee76b5c49590  prison-5.113.0.tar.xz
62a77f1676426a864433f20dab62c7bb  qqc2-desktop-style-5.113.0.tar.xz
9ed05a72f505238e7ddf605c8f4744ee  kjs-5.113.0.tar.xz
acc3916872c964677778152f0812970c  kdelibs4support-5.113.0.tar.xz
0fb63bcab20b9e7e030cec139988e716  khtml-5.113.0.tar.xz
05fc8de448545b648f721cbab1f1e270  kjsembed-5.113.0.tar.xz
240fc62077d2d7605e057a3a3e883317  kmediaplayer-5.113.0.tar.xz
b36746fe0fcb6760e4c6863c0aadee84  kross-5.113.0.tar.xz
1766fd510ce7c816760dd6b5e51fe9d0  kholidays-5.113.0.tar.xz
976e174b887f5e68ecf374053607cee4  purpose-5.113.0.tar.xz
a0e98fee032e1b462a4b0a302b10f15b  kcalendarcore-5.113.0.tar.xz
66bdceec34192e96a7a7dbc66fa01e6b  kcontacts-5.113.0.tar.xz
f347438bdea3e5b0d66c3cf098890a69  kquickcharts-5.113.0.tar.xz
650db9939b0c0b43929999b58ca588fc  knotifyconfig-5.113.0.tar.xz
b0d2454a0a729b2ec98a085ad7e454d5  kdav-5.113.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.113.0 and oxygen-icons-5.113.0. The kdewebkit package may be built if the external package QtWebkit has been built.

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.15p5 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

      # kapidox is a python module
      case $name in
        kapidox)
          pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
          as_root pip3 install --no-index --find-links=dist --no-cache-dir --no-user kapidox
          popd
          rm -rf $packagedir
          continue
          ;;
      esac

      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.113.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.113.0
ln -sfvn kf5-5.113.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.113.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