Building KDE Frameworks 6.29.0 (KF6)

KDE Frameworks is a collection of libraries based on top of Qt6 and QML derived from the previous KDE libraries. They can be used independent of the KDE Display Environment (Plasma 6).

[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

KF6 Dependencies

Required

Extra-CMake-Modules-6.29.0, breeze-icons-6.29.0, docbook-xml-4.5, docbook-xsl-nons-1.79.2, libcanberra-0.30, libdmtx-0.7.8, libgcrypt-1.12.3, libical-4.0.5, libsecret-0.21.7, libxslt-1.1.45, lmdb-1.0.1, oxygen-icons-6.29.0, qca-2.3.12, libqrencode-4.1.1, plasma-wayland-protocols-1.21.0, PyYAML-6.0.3, shared-mime-info-2.5.1, URI-5.36, and Wget-1.25.0 (required to download the packages)

Recommended

Optional

BlueZ-5.87 (needed to build Bluez-Qt)

Runtime dependency for FrameworkIntegration

Noto fonts

Additional recommended dependencies for kapidox

Additional image formats support in KImageFormats

Imath-3.2.3, libavif-1.4.2, libheif-1.23.3, libjxl-0.12.0, libraw-0.22.2, OpenEXR

Optional dependencies for Solid

UDisks-2.11.2, UPower-1.91.3 and media-player-info (runtime)

Optional dependency for KWallet

gpgmepp-2.2.0

Optional dependencies for kcoreaddons

Shiboken6 and PySide6

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/6.29/
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-6.29.0.md5 << "EOF"
04136d69a5f340514fad6352629adb28  attica-6.29.0.tar.xz
#b3795f9b843a58746ca5461713c088d8  extra-cmake-modules-6.29.0.tar.xz
c1888280d30447724d491e688e03cf45  kapidox-6.29.0.tar.xz
e897f5323b32c6bdd477369a61972b2e  karchive-6.29.0.tar.xz
03a439a6c3d78eebd5484cf69c5c41a3  kcodecs-6.29.0.tar.xz
194b8c40c5c7e143b44ee2f8dadae775  kconfig-6.29.0.tar.xz
9513021c1335227ec38b7cc7b92152f2  kcoreaddons-6.29.0.tar.xz
a566661bbfde2500f39c3bfe6fd700e2  kdbusaddons-6.29.0.tar.xz
47784b5619d1864be4d19621b9da67a2  kdnssd-6.29.0.tar.xz
9f1d2a5324752fc1e376f1a44d82e59f  kguiaddons-6.29.0.tar.xz
e15d397fe3e5d6a17f16c04d0a013e04  ki18n-6.29.0.tar.xz
212c502ef7cf38f31ec3aea352a7e401  kidletime-6.29.0.tar.xz
791f33fe494e4295e411b3ecd5920015  kimageformats-6.29.0.tar.xz
eda9e59655995a0e037a3bc42eb1a9e8  kitemmodels-6.29.0.tar.xz
82038eec5c422b3b138507ab8964ad9e  kitemviews-6.29.0.tar.xz
356da5eb2050defa1aed5c206eb834c0  kplotting-6.29.0.tar.xz
ced1d43c0ca814defbca2a91ed700fcc  kwidgetsaddons-6.29.0.tar.xz
d996373ba3aeda5299c92d9b9f05244a  kwindowsystem-6.29.0.tar.xz
0348f0661a6c347f02a7416acdfa5aec  networkmanager-qt-6.29.0.tar.xz
7098fdaa4c55a369813a70a2c952a7cc  solid-6.29.0.tar.xz
1d4ad3f264af279d92a0d7228726bda3  sonnet-6.29.0.tar.xz
3e14a2b5cb689cc9583f4d9838e2c1e2  threadweaver-6.29.0.tar.xz
ff94c0e5bbdaf953d4615106557e6074  kauth-6.29.0.tar.xz
5ea24f2fb7026f0d63cdba7afb8acac4  kcompletion-6.29.0.tar.xz
eb5be13f4db87848f962f45beadb8911  kcrash-6.29.0.tar.xz
af09e18cebf69e98630e4d06440b5707  kdoctools-6.29.0.tar.xz
64f0223b5b3d8d0c87d5951787a844cf  kpty-6.29.0.tar.xz
1dbc1a568c3991bfd9c8780659c61558  kunitconversion-6.29.0.tar.xz
f316ed426e1df0616143a9f4bc43554a  kcolorscheme-6.29.0.tar.xz
21d71db72c242423c2758c84e8d2ebfd  kconfigwidgets-6.29.0.tar.xz
52d2f3b7108240e1a745a6dd2058eb72  kservice-6.29.0.tar.xz
4d90ee680058f485acf896fa222f0f6b  kglobalaccel-6.29.0.tar.xz
ba00e16aba965de53ed0493d45aba61c  kpackage-6.29.0.tar.xz
b90309874fe6bc26298c4114401bb9ca  kdesu-6.29.0.tar.xz
38c9b27fadd91131092df1ac17484a4b  kiconthemes-6.29.0.tar.xz
95a52444c959d82e83d8506756b1498d  knotifications-6.29.0.tar.xz
d6434be49817654e9d878fa3f8862539  kjobwidgets-6.29.0.tar.xz
32155a4d6ca2ffbb79980b51d034d480  ktextwidgets-6.29.0.tar.xz
43aec19a04194118ade54d584691fe3c  kxmlgui-6.29.0.tar.xz
ab9726b47279b62fba2b02d1be1e7f8e  kbookmarks-6.29.0.tar.xz
87babe498d81765fe042f334e5af63fe  kwallet-6.29.0.tar.xz
2a8f180ed2a5ce15f0652c71a0250bbd  kded-6.29.0.tar.xz
f8c4b4fa54a4e4ab590b7eb2303bf383  kio-6.29.0.tar.xz
eb444e38b4fd327c22d34486f21b42b6  kdeclarative-6.29.0.tar.xz
e3ea9add856c983ae55a5e88675f5cd9  kirigami-6.29.0.tar.xz
47eb021fa35e71e4f73bff439748f0cc  kcmutils-6.29.0.tar.xz
b3d793178f7c51b5b5cec6ef5c47c186  syndication-6.29.0.tar.xz
807986b129cdab88939191fc8c3f11d9  knewstuff-6.29.0.tar.xz
233ebeb1da81ad27819f61aa6adb3b3b  frameworkintegration-6.29.0.tar.xz
10caf984c5962c1f28a733a5e6e88bc5  kparts-6.29.0.tar.xz
1b572fc268b2a120734889176449b654  syntax-highlighting-6.29.0.tar.xz
3fdffb930818a22986a83089face1c48  ktexteditor-6.29.0.tar.xz
3bbc95743bf4670bdd23d3c092483bf9  modemmanager-qt-6.29.0.tar.xz
0adc3ad17ebdf1aae35c4c8af2c94fc1  kcontacts-6.29.0.tar.xz
065da273e8f478c3745f52faed468034  kpeople-6.29.0.tar.xz
c0ee97a3f6b78782eb378ca05a89a653  bluez-qt-6.29.0.tar.xz
77f3350bffaa76b4a73b10912c5ac183  kfilemetadata-6.29.0.tar.xz
5b6c49bc217f4450dfee982188621f90  baloo-6.29.0.tar.xz
#04a8c3e8651fdf4dead94221a3451f93  breeze-icons-6.29.0.tar.xz
#cd2fc88992a0da5b7b9bd16288e2f36f  oxygen-icons-6.29.0.tar.xz
1ac31cccd071ea20a3a01fbc5c328ffc  krunner-6.29.0.tar.xz
24db2c46e60ef7354a915f36c4b10d9e  prison-6.29.0.tar.xz
4ab0da283adbfdb5e1ae48bf03d63871  qqc2-desktop-style-6.29.0.tar.xz
74e7b660e4f6993cd95e9fd961e34d0b  kholidays-6.29.0.tar.xz
c69b4b08b3ef3bffe0feceece70ed5e3  purpose-6.29.0.tar.xz
de97d121b2f24c03e9bce05edb7a6294  kcalendarcore-6.29.0.tar.xz
b7c39a611d24d8083014dfbb69c41d99  kquickcharts-6.29.0.tar.xz
e59ca085f17cde7cc6c3ff0cbc180073  knotifyconfig-6.29.0.tar.xz
73c667bd31a69d3f5b24dac9f5b9f9cc  kdav-6.29.0.tar.xz
5fcdedf1670d11de1ef3ed3ee0195802  kstatusnotifieritem-6.29.0.tar.xz
8ae0ac197fffbc36dc1fba0634d3b0c9  ksvg-6.29.0.tar.xz
f382cd12656952d85178985ae92be71b  ktexttemplate-6.29.0.tar.xz
182e7df4d6a35c2e0dd0cf9f50d99b85  kuserfeedback-6.29.0.tar.xz
8163ee41e712b70f72a52f6547975e35  kmime-6.29.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.

  • This icon packages are covered separately at breeze-icons-6.29.0 and oxygen-icons-6.29.0. They are separate to allow users that need these icons but do not need the full set of KF6 packages (e.g. LXQt-Post-Install) to more easily install them. However they are a required dependency for several kf6 packages.

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.17p2 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/kf6 either as a regular directory or a symbolic link, it should be reinitialized (as root):

mv -v /opt/kf6 /opt/kf6.old                         &&
install -v -dm755           $KF6_PREFIX/{etc,share} &&
ln -sfv /etc/dbus-1         $KF6_PREFIX/etc         &&
ln -sfv /usr/share/dbus-1   $KF6_PREFIX/share       &&
ln -sfv /usr/share/polkit-1 $KF6_PREFIX/share       &&
install -v -dm755           $KF6_PREFIX/lib         &&
ln -sfv /usr/lib/systemd    $KF6_PREFIX/lib

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|-6.*$||') # 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-user kapidox
          popd
          rm -rf $packagedir
          continue
          ;;
      esac

      mkdir build
      cd    build

      cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
            -D CMAKE_INSTALL_LIBEXECDIR=libexec \
            -D CMAKE_PREFIX_PATH=$QT6DIR        \
            -D CMAKE_SKIP_INSTALL_RPATH=ON      \
            -D CMAKE_BUILD_TYPE=Release         \
            -D BUILD_TESTING=OFF                \
            -D BUILD_PYTHON_BINDINGS=OFF        \
            -W no-author ..
      make
      as_root make install
    popd

  as_root rm -rf $packagedir
  as_root /sbin/ldconfig

done < frameworks-6.29.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/kf6 /opt/kf6-6.29.0
ln -sfvn kf6-6.29.0 /opt/kf6

Command Explanations

-D CMAKE_PREFIX_PATH=$QT6DIR: This switch is used to allow cmake to find the proper Qt libraries.

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

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

-D BUILD_PYTHON_BINDINGS=OFF: This switch is used to prevent building Python modules that require external optional dependencies.

Contents

Installed Programs: balooctl6, baloosearch6, balooshow6, checkXML6, kbuildsycoca6, kcmshell6, kded6, kde-geo-uri-handler, kiconfinder6, knewstuff-dialog6, kpackagetool6, kquitapp6, kreadconfig6, ksecretd, ksyntaxhighlighter6, ktelnetservice6, ktexteditor-script-tester6, ktrash6, kwalletd6, kwallet-query, kwriteconfig6, meinproc6, parsetrigrams6, and solid-hardware6
Installed Libraries: libkdeinit6_klauncher.so, libKF6Archive.so, libKF6Attica.so, libKF6AuthCore.so, libKF6Baloo.so, libKF6BluezQt.so, libKF6Bookmarks.so, libKF6BookmarksWidgets.so, libKF6CalendarCore.so, libKF6CalendarEvents.so, libKF6Codecs.so, libKF6ColorScheme.so, libKF6Completion.so, libKF6ConfigCore.so, libKF6ConfigGui.so, libKF6ConfigQml.so, libKF6ConfigWidgets.so, libKF6Contacts.so, libKF6CoreAddons.so, libKF6Crash.so, libKF6DAV.so, libKF6DBusAddons.so, libKF6DNSSD.so, libKF6DocTools.so, libKF6FileMetaData.so, libKF6GlobalAccel.so, libKF6GuiAddons.so, libKF6Holidays.so, libKF6I18n.so, libKF6I18nLocaleData.so, libKF6I18nQml.so, libKF6IconThemes.so, libKF6IconWidgets.so, libKF6IdleTime.so, libKF6ItemModels.so, libKF6ItemViews.so, libKF6JobWidgets.so, libKF6KCMUtils.so, libKF6KCMUtilsCore.so, libKF6KCMUtilsQuick.so, libKF6KIOCore.so, libKF6KIOFileWidgets.so, libKF6KIOGui.so, libKF6KIOWidgets.so, libKF6ModemManagerQt.so, libKF6NetworkManagerQt.so, libKF6NewStuffCore.so, libKF6NewStuffWidgets.so, libKF6Notifications.so, libKF6NotifyConfig.so, libKF6Package.so, libKF6Parts.so, libKF6PeopleBackend.so, libKF6People.so, libKF6PeopleWidgets.so, libKF6Plotting.so, libKF6PrisonScanner.so, libKF6Prison.so, libKF6Pty.so, libKF6Purpose.so, libKF6PurposeWidgets.so, libKF6Runner.so, libKF6Service.so, libKF6Solid.so, libKF6SonnetCore.so, libKF6SonnetUi.so, libKF6StatusNotifierItem.so, libKF6Style.so, libKF6Su.so, libKF6Svg.so, libKF6Syndication.so, libKF6SyntaxHighlighting.so, libKF6TextEditor.so, libKF6TextTemplate.so, libKF6TextWidgets.so, libKF6ThreadWeaver.so, libKF6UnitConversion.so, libKF6UserFeedbackCore.so, libKF6UserFeedbackWidgets.so, libKF6Wallet.so, libKF6WidgetsAddons.so, libKF6WindowSystem.so, libKF6XmlGui.so, libKirigamiDelegates.so, libKirigamiDialogs.so, libKirigamiLayoutsPrivate.so, libKirigamiLayouts.so, libKirigamiPlatform.so, libKirigamiPolyfill.so, libKirigamiPrimitives.so, libKirigamiPrivate.so, libKirigami.so, libKirigamiLayouts.so, libkuriikwsfiltereng_private.so, libQuickCharts.so, and libQuickChartsControls.so
Installed Directories: /opt/kf6 (symlink to /opt/kf6-6.29.0) if installing in /opt

Short Descriptions

checkXML6

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

kbuildsycoca6

rebuilds the KService desktop file system configuration cache

kcmshell6

starts a single System Settings module, which can be useful when debugging problems with the System Settings application

kded6

consolidates several small services into a single process

kde-geo-uri-handler

processes URIs that contain geolocation information

kiconfinder6

locates an icon based on it's name

knewstuff-dialog6

displays a KNSRC file (which uses the KNewStuff framework) to the user

kpackagetool6

is a command line tool for managing KDE packages

kquitapp6

is a command line tool to safely force a D-Bus enabled application to exit

kreadconfig6

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

ksecretd

starts the KDE Wallet service, which is used to manage a user's saved passwords and certificates

ksyntaxhighlighter6

is a command line syntax highlighter that uses the syntax definitions from KSyntaxHighlighting

ktelnetservice6

is used by Konsole to handle Telnet and SSH schemes

ktexteditor-script-tester6

is a command line tool to validate and test Kate command scripts

ktrash6

is a helper program to handle the KDE trash can

kwalletd6

is a compatibility service for KWallet, wrapping around libsecret and ksecretd

kwallet-query

is a command line tool to query KWallet and ksecretd and list the entries in the user's wallet, as well as read or set a password

kwriteconfig6

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

meinproc6

converts DocBook files to HTML

parsetrigrams6

is a command line tool to parse trigrams

solid-hardware6

is a command line tool to investigate available devices on a system