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

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

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.63.0, extra-cmake-modules-5.31.0, docbook-xml-4.5, docbook-xsl-1.79.1, giflib-5.1.4, libepoxy-1.4.0, libgcrypt-1.7.6, libjpeg-turbo-1.5.1, libpng-1.6.28, libxslt-1.1.29, lmdb-0.9.19, QtWebkit-5.8.0, phonon-4.9.1, shared-mime-info-1.8, URI-1.71, and Wget-1.19.1 (required to download the packages)

Recommended

Optional

BlueZ-5.43 (needed to build Bluez-Qt), ModemManager-1.6.4 (needed to build ModemManager-Qt)

Runtime dependency for FrameworkIntegration

Oxygen fonts and Noto fonts

Runtime dependencies for kapidox

Doxygen-1.8.13, Jinja2-2.9.5, and PyYAML-3.12

Additional image formats support in KImageFormats

JasPer-2.0.10 and OpenEXR

Optional dependencies for KIO

MIT Kerberos V5-1.15

Optional dependencies for Solid

UDisks-2.1.8, UPower-0.99.4 and media-player-info (runtime)

Optional dependency for KWallet

gpgmepp

Optional dictionary backends for Sonnet

Hspell and Hunspell

Required dependencies for Prison

Datamatrix and QRencode

User Notes: http://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=http://download.kde.org/stable/frameworks/5.31/
wget -r -nH --cut-dirs=3 -A '*.xz' -np $url

The options used here are:
  -r            recurse through child directories
  -nH           disable generation of host-prefixed directories
  --cut-dirs=3  remove three levels of directories when saving
  -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.31.0.md5 << "EOF"
2243e955a41b8a5036fb8d0e497342f5  attica-5.31.0.tar.xz
#74d7c29138168f9a62fe475705c0b351  extra-cmake-modules-5.31.0.tar.xz
b846e442fd48b8387f93aa37295e9f7c  kapidox-5.31.0.tar.xz
de591b1902b1721b74762d712f13a265  karchive-5.31.0.tar.xz
8e0c15990e84dfcfc5c85a88e2e0319b  kcodecs-5.31.0.tar.xz
f044848c2406fa1452b11780af2e1fea  kconfig-5.31.0.tar.xz
95935748baf5465f150f4e1a94af1923  kcoreaddons-5.31.0.tar.xz
c6c8f751eff1f03406f63bcfb1f4ffe0  kdbusaddons-5.31.0.tar.xz
5ee257c5ff53d5551b9df1b640cfabf6  kdnssd-5.31.0.tar.xz
ecb1a10910116e9fd3265f2f1908c6a1  kguiaddons-5.31.0.tar.xz
62457f60936bb8dc6649ed362e7ab80a  ki18n-5.31.0.tar.xz
c45511be577726afd5c7d88c7f13f274  kidletime-5.31.0.tar.xz
99cbfa14df2fb11930090122b461bc6a  kimageformats-5.31.0.tar.xz
91916337e5a8edf9fca9de3bdd1ad8fa  kitemmodels-5.31.0.tar.xz
71251518337febe21cd0af8e7db66fae  kitemviews-5.31.0.tar.xz
e36ccf164785957e07d03cddef152136  kplotting-5.31.0.tar.xz
3ff1ee177df63262636954cb7e0460dc  kwidgetsaddons-5.31.0.tar.xz
cd402e03c023354e9ee37b7d0d5de621  kwindowsystem-5.31.0.tar.xz
8c4d807e867f11f5a55604fa59cce85d  networkmanager-qt-5.31.0.tar.xz
2946f8c7780e2f3de5384717a8a34cdc  solid-5.31.0.tar.xz
11cef5b5016def5298b64e2ce561a8b5  sonnet-5.31.0.tar.xz
f1dbc18f38a9582cd1d4f94bc9f0f132  threadweaver-5.31.0.tar.xz
ec49b90d1566a37e91b9710557e102f2  kauth-5.31.0.tar.xz
81234f797d4da26106a91bdcc34440df  kcompletion-5.31.0.tar.xz
a0cffc08aa51c61d48d9e25778a61e62  kcrash-5.31.0.tar.xz
fc1b4de766d04ac3abc87050588d083d  kdoctools-5.31.0.tar.xz
8f5efa781672c67f01195ee3dc823c6b  kpty-5.31.0.tar.xz
0f7be81fe9c68044f20d6c297a624558  kunitconversion-5.31.0.tar.xz
4deb8a01f99cb16bbcf80f1e11d90824  kconfigwidgets-5.31.0.tar.xz
b46d2550b689fc818064f69cb1db29a7  kservice-5.31.0.tar.xz
d56e35255d2697cc3a89a1a99d1821fe  kglobalaccel-5.31.0.tar.xz
9d66b0fe531892180006f0deb77aa4b2  kpackage-5.31.0.tar.xz
9a593607c47472dd6ce0d546b2f2a736  kdesu-5.31.0.tar.xz
4c8d3ab1e358efd89acd7ab95025dd37  kemoticons-5.31.0.tar.xz
fa2e0994412b83dbb0e54aa277f4bff3  kiconthemes-5.31.0.tar.xz
cc2f41fd5b8ba6ad795a7835a68d4e8c  kjobwidgets-5.31.0.tar.xz
b8483a6872720152acfb22dae0db417e  knotifications-5.31.0.tar.xz
a3240501f842655be3b354d98da95939  ktextwidgets-5.31.0.tar.xz
de28f21c121dc24f31d35ab622304e7e  kxmlgui-5.31.0.tar.xz
8c1d5970b25f877567494486638d6082  kbookmarks-5.31.0.tar.xz
3372c17e1a0020616fea29ec9097e0cc  kwallet-5.31.0.tar.xz
62f31e7a9cd0b875fce5b552ec9be3c7  kio-5.31.0.tar.xz
8b76f1704314258a944eb57a466d338d  kdeclarative-5.31.0.tar.xz
eccc7474f7442b656d26211050f3b2c3  kcmutils-5.31.0.tar.xz
2df293c8e3cedd3a7b71af69045dc5a0  knewstuff-5.31.0.tar.xz
128fa26a3e7928ae74db95ee774fcf48  frameworkintegration-5.31.0.tar.xz
8cf1b185c3d5b74a168995f8e0747931  kinit-5.31.0.tar.xz
a8fdfb88286f73485734ad2feecb7e16  knotifyconfig-5.31.0.tar.xz
21849d002c27964c0d264aa9b5a7c67d  kparts-5.31.0.tar.xz
31f9bd0f380f60b0ab2e9b8f56b1662a  kactivities-5.31.0.tar.xz
569c52fc5424b1c58fc0476ffa02b58b  kded-5.31.0.tar.xz
d063b3b7827eaaa8e345ebaf6c1500f9  kdewebkit-5.31.0.tar.xz
302e06bd05b8632fe60702c82218d1eb  syntax-highlighting-5.31.0.tar.xz
315aae6b286757696513ecc7ca69e68e  ktexteditor-5.31.0.tar.xz
89a054526209180e02b87b30b8766f5f  kdesignerplugin-5.31.0.tar.xz
3ba021780eb40fadd3472630be680571  kwayland-5.31.0.tar.xz
cbef982888a30ca96b4c1f52d502551c  plasma-framework-5.31.0.tar.xz
#ac454faa59de5fb2c5f995acd71fd769  modemmanager-qt-5.31.0.tar.xz
6eaf7bd9165a7042221926064c01cce9  kpeople-5.31.0.tar.xz
c1cd0538b4f7e56653a4d6d4f2c994a2  kxmlrpcclient-5.31.0.tar.xz
2e2dfc3e49d878044c4848d147918d1b  bluez-qt-5.31.0.tar.xz
b0553bbd667d7d209735d2123f33af46  kfilemetadata-5.31.0.tar.xz
831874cc5f6bf3aab76ca196d30995b3  baloo-5.31.0.tar.xz
#f16a9b1a901700ecd0790e3d80ae32d4  breeze-icons-5.31.0.tar.xz
#385ddb6e36639dfffb0bf30b75b049e0  oxygen-icons5-5.31.0.tar.xz
cd4290e76d0c07a3612b82257119a4df  kactivities-stats-5.31.0.tar.xz
6105cf1f51b69cd9232aa662f8d2511a  krunner-5.31.0.tar.xz
#95cb43eb20e081db51709b0ab6bcfa96  prison-5.31.0.tar.xz
71ec95ef3c79e2a86de4872bb97daa0e  portingAids/kjs-5.31.0.tar.xz
aa244aa083a03be78a976a8a8cd6ed8c  portingAids/kdelibs4support-5.31.0.tar.xz
21a3859d1358a330fbdb83f3c184dd71  portingAids/khtml-5.31.0.tar.xz
49f65f405b4e3d49adf81247efce963f  portingAids/kjsembed-5.31.0.tar.xz
f287ac1073cae07f51178ad78f30cf4b  portingAids/kmediaplayer-5.31.0.tar.xz
743b48d58b23d386e4417081a4d456cb  portingAids/kross-5.31.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.31.0 and oxygen-icons5-5.31.0. The modemmanager-qt package may be built if its optional dependency has been installed. The prison package (bar code reader) may be built if the required external libraries are installed.

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.8.19p2 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

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

    tar -xf $file
    pushd $packagedir

      mkdir build
      cd    build

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


  as_root rm -rf $packagedir
  as_root /sbin/ldconfig

done < frameworks-5.31.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.

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.31.0
ln -sfvn kf5-5.31.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.

-DLIB_INSTALL_DIR=lib: This switch is used to get libraries to install to $KF5_PREFIX/lib instead of $KF5_PREFIX/lib64 on a 64 bit system.

-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: There are 53 programs installed in /opt/kf5/bin.
Installed Libraries: There are too many kf5 libraries (79) to list separately.
Installed Directories: /opt/kf5 (symlink to /opt/kf5-5.31.0)

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.

kactivitymanagerd

is the KDE Plasma Workspace Activity Manager.

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.

kgenapidox

is a tool to generate API documentation in the KDE style.

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.

kmailservice5

is a mail service.

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.

Last updated on 2017-02-20 12:59:39 -0800