Jump to content

Get Involved/development/More: Difference between revisions

From KDE Community Wiki
Nmariusp (talk | contribs)
Develop in a Linux container: KDE PIM docker uses a too old docker image from 2022
 
(196 intermediate revisions by 18 users not shown)
Line 1: Line 1:
This page is the continuation with more advanced topics of the page [[Get_Involved/development]].
This page is the continuation with more advanced topics of the page [[Get_Involved/development]].


This paged is not meant for people that are starting to program for KDE.
kde-builder has replaced the previous KDE build framework named kdesrc-build.


== Develop in a Linux container ==
== Develop in a Linux container ==


When you start programming for KDE, it is recommended that you [[Get_Involved/development|use kdesrc-build in your main operating system or in a virtual machine]] running on a rolling-release Linux distribution (Arch, openSUSE Tumbleweed, KDE neon) or running on e.g. the latest version of Fedora KDE Spin or Kubuntu.
When you start programming for KDE, it is recommended that you [[Get_Involved/development|use kde-builder in your main operating system or in a virtual machine]] running on a [[Get_Involved/development#Operating_system|Linux operating system that is better supported by kde-builder]].


As an alternative, you can run kdesrc-build in a Linux container (docker, podman, toolbx, distrobox).
As an alternative, you can run kde-builder in a Linux container (docker, podman, toolbx, distrobox).


=== Option 1. The KDE PIM Docker image ===
=== distrobox ===


You can install Docker and the [[KDE PIM/Docker|KDE PIM Docker image]]. It provides a development environment that is isolated from your day-to-day system. It is based on KDE Neon Unstable.
It is possible to start developing KDE software using container images that are able to see inside your home folder. This can be done using distrobox and podman.


=== Option 2. distrobox ===
This solution is particularly useful for users on immutable distributions like Fedora Kinoite, openSUSE Kalpa or Valve's SteamOS 3


Or, you can just create a long lived (pet not cattle) container using distrobox and podman (or docker). See https://www.youtube.com/watch?v=9JEALbcmcCg https://github.com/89luca89/distrobox
To learn how to build KDE software with distrobox, see: https://develop.kde.org/docs/getting-started/building/containers-distrobox/
 
Start with the official Docker hub container image of one of the Linux distributions that is better suited for kdesrc-build. Then setup kdesrc-build in the container. distrobox makes it such that you can run GUI apps in the container. Also, your user's home directory (~) is the same in the host operating system and in the container. Warning: the container will write to your home directory and may conflict with your host operating system.


== Other operating systems ==
== Other operating systems ==


=== FreeBSD ===
=== Kubuntu >= 24.10 ===


Install the latest release of FreeBSD with KDE Plasma Desktop on your hardware computer or in a virtual machine. Then set up kdesrc-build using the same procedure as when installing kdesrc-build on a Linux operating system. FreeBSD is currently supported by kdesrc-build. See https://www.youtube.com/watch?v=v2wq0eTnUuc https://www.youtube.com/watch?v=MT-AN4J-hn8
The default configuration of kde-builder requires Qt version 6.7. Kubuntu 24.10 has Qt version 6.6. It is recommended that you use a [[Get_Involved/development#Operating_system|Linux OS that is better supported by kde-builder]].


=== Microsoft Windows ===
If you are a more seasoned developer you might be able to use Kubuntu for kde-builder by [https://develop.kde.org/docs/getting-started/building/kde-builder-setup/#qt6-online installing Qt6 using the Qt online installer] or by [https://develop.kde.org/docs/getting-started/building/kde-builder-setup/#qt6-build building Qt6 using kde-builder].


You can build and develop KDE projects using the [[Get_Involved/development/Windows|Microsoft Windows]] operating system.
=== Alpine Linux ===


=== Apple macOS ===
<pre>
apk add git perl doas-sudo-shim
</pre>


You can build and develop KDE projects using the [[Get_Involved/development/Mac|Apple macOS]] operating system.
=== FreeBSD ===


== What to do if CMake configure fails because a build dependency is missing ==
Install the latest release of FreeBSD with KDE Plasma Desktop on your hardware computer or in a virtual machine.


If you run kdesrc-build in order to build a KDE git repository. And if building fails with a CMake error. Then, that is most often caused by the fact that you do not have installed some binary packages from your Linux OS.
Your user should be member of the "wheel" user group (e.g. this can be configured in the FreeBSD installer, when creating your user you can select additional user groups for your user). Your user should be able to use sudo:


See below for some ideas about how to find out what Linux packages you need to install.
<pre>
pkg install sudo
visudo
# Uncomment the line: %wheel ALL=(ALL:ALL) ALL
</pre>


=== Debian/Kubuntu/KDE neon ===
Then set up kde-builder using the same procedure as when installing kde-builder on a Linux operating system. FreeBSD is currently supported by kde-builder. See https://www.youtube.com/watch?v=AhDHUg81M_I and https://www.youtube.com/watch?v=HRiKzaw8cAw .


E.g. I am on Kubuntu 22.10, <code>kdesrc-build frameworks</code> fails, module <code>kcoreaddons</code> has CMake (configure) error <code>Could NOT find Qt6LinguistTools (missing: Qt6LinguistTools_DIR)</code>.
=== OpenBSD >= 7.5 ===


Option 1:
Install OpenBSD version greater than or equal to 7.5. In the installer keep the defaults, the user created by the installer is named "administrator" in this example.
<pre>
# Enable doas
su -
cp /etc/examples/doas.conf /etc/doas.conf
exit
# kde-builder needs sudo.
mkdir -p ~/.local/bin ; ln -s /usr/bin/doas ~/.local/bin/sudo
echo "export PATH=~/.local/bin:\$PATH" >> ~/.bashrc


Search on the internet for <code>ubuntu packages Qt6LinguistTools</code> it returns https://packages.ubuntu.com/kinetic/amd64/qt6-tools-dev Expand "amd64 [list of files]": <code>/usr/lib/x86_64-linux-gnu/cmake/Qt6LinguistTools/Qt6LinguistToolsConfig.cmake</code>
# Test doas.
doas su
# kde-builder needs bash.
pkg_add bash
chsh -s /usr/local/bin/bash
exit


{{Input|1=<nowiki>
# As user administrator
sudo apt install qt6-tools-dev
chsh -s /usr/local/bin/bash
</nowiki>}}


Option 2:
# As per https://rsadowski.de/posts/2024-01-09-openbsd-kde/ , https://openports.pl/path/meta/kde,-plasma
{{Input|1=<nowiki>
doas su
sudo apt install apt-file
pkg_add kde-plasma kate
sudo apt-file update
apt-file find Qt6LinguistToolsConfig.cmake
# qt6-tools-dev: /usr/lib/x86_64-linux-gnu/cmake/Qt6LinguistTools/Qt6LinguistToolsConfig.cmake
sudo apt install qt6-tools-dev
</nowiki>}}


If the error is:
# I recommend that you use tigervnc. https://nmariusp.github.io/install-os.html#openbsd--75
{{Input|1=<nowiki>
</pre>
The imported target "Qt6::qtwaylandscanner" references the file
    "/usr/lib/qt6/libexec/qtwaylandscanner"
but this file does not exist.
</nowiki>}}
 
Then:
{{Input|1=<nowiki>
apt-file find /usr/lib/qt6/libexec/qtwaylandscanner
# qt6-wayland-dev-tools: /usr/lib/qt6/libexec/qtwaylandscanner
sudo apt install qt6-wayland-dev-tools
</nowiki>}}
 
Option 3:
{{Input|1=<nowiki>
apt search linguist | grep qt6
# linguist-qt6/kinetic 6.3.1-2 amd64
sudo apt install linguist-qt6
</nowiki>}}
 
=== Fedora ===
 
<code>sudo dnf provides "NameOrPathOfFileThatIsMissing"</code>


See https://invent.kde.org/redstrate/cmake-package-installer/-/blob/master/src/main.rs
After you install kde-builder:
 
== Advanced kdesrc-build ==
 
After you have edited a git repository and you want to build it, <code>--no-src</code> will make sure that <code>kdesrc-build</code> does not overwrite your changes with the latest source code from the official git repository (remote "origin" / https://invent/kde.org).
 
<code>--no-include-dependencies</code> only builds the git repository that you give as parameter to <code>kdesrc-build</code>.
 
<code>--debug</code> shows verbose output.
 
<code>--refresh-build</code> forces a rebuild (not an incremental build) and a full reinstall.
 
E.g. you have edited kcalc. You run:
<pre>
<pre>
kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug |& tee ~/a.txt
# Edit the kdesrc-buildrc file e.g.:
</pre>
cmake-options -DCMAKE_BUILD_TYPE=RelWithDebInfo -DKF_IGNORE_PLATFORM_CHECK=ON


For details, see:
# Also set environment variable:
<pre>
export CMAKE_PREFIX_PATH=/usr/local/lib/qt6/cmake
kdesrc-build --help
# Or
export CMAKE_PREFIX_PATH=/usr/local/lib/qt5/cmake
</pre>
</pre>


Note: the resources below might not be up to date.
=== Microsoft Windows ===


See the [https://docs.kde.org/trunk5/en/kdesrc-build/kdesrc-build/ kdesrc-build manual], [https://invent.kde.org/sdk/kdesrc-build/-/blob/master/README.md Readme #1], [https://invent.kde.org/sdk/kdesrc-build/-/blob/master/doc/README.md Readme #2], [https://invent.kde.org/sdk/kdesrc-build/-/blob/master/doc/source-reference/index.adoc Document #3] for more kdesrc-build information and options.
You can build and develop KDE projects using the [[Get_Involved/development/Windows|Microsoft Windows]] operating system.


== Build Qt using kdesrc-build ==
=== Apple macOS ===


Set up kdesrc-build from scratch as usual.
You can build and develop KDE projects using the [[Get_Involved/development/Mac|Apple macOS]] operating system.
 
Open the configuration file <code>~/.config/kdesrc-buildrc</code> and confirm that <code>qtdir</code> and the lines <code>include...qt5-build-include</code> and <code>include...custom-qt5-libs-build-include</code> are not commented out (i.e. there should not be a <code>#</code> in front of the lines). E.g. (replace "username" with your Linux user's name):
 
{{Input|1=<nowiki>
qtdir ~/kde/usr # Where to make install Qt5
include /home/username/kde/src/kdesrc-build/qt5-build-include
include /home/username/kde/src/kdesrc-build/custom-qt5-libs-build-include
</nowiki>}}
 
Run in a terminal:
 
{{Input|1=<nowiki>
kdesrc-build Qt5
kdesrc-build frameworks
</nowiki>}}
 
== kdesrc-build, Qt6 and KDE Frameworks 6 ==
 
Set up kdesrc-build clean from scratch following the same procedure as when using "Qt5 and KDE Frameworks 5". Before building anything using kdesrc-build, do:
 
{{Input|1=<nowiki>
sed -i 's/kf5-common/kf6-common/' ~/.config/kdesrc-buildrc
sed -i 's/kf5-qt5/kf6-qt6/' ~/.config/kdesrc-buildrc
</nowiki>}}
 
The file <code>~/.config/kdesrc-buildrc</code> should contain the not commented out lines:


{{Input|1=<nowiki>
== Project Documentation ==
include /home/username/kde/src/kdesrc-build/kf6-common-options-build-include
...
include /home/username/kde/src/kdesrc-build/kf6-qt6-build-include
</nowiki>}}


In the file <code>~/.config/kdesrc-buildrc</code>, in the "global" section, the line "cmake-options" should contain "-DBUILD_WITH_QT6=ON".
* https://kde-builder.kde.org
* https://invent.kde.org/sdk/kde-builder


Then build KDE Frameworks 6:
== kf6-qt6 vs. kf5-qt5 ==


{{Input|1=<nowiki>
Many KDE git repositories can build correctly and run correctly using "kde-builder kf6-qt6".
kdesrc-build frameworks
</nowiki>}}


Note: <code>kdesrc-build --initial-setup</code> does not install the packages needed for building with kdesrc-build "Qt6 and KDE Frameworks 6". The instructions on [[Guidelines and HOWTOs/Build from source/Install the dependencies|how to install the dependencies]] are for "Qt5 and KDE Frameworks 5" only, they do not work for "Qt6 and KDE Frameworks 6". Therefore many kdesrc-build modules will fail to build because of missing dependencies (CMake errors).
The KDE git repositories that can build correctly and run correctly using "kde-builder kf6-qt6" have two long lived git branches:


=== Ubuntu ===
* A long lived git branch that does not contain the deprecated symbols from kf5-qt5, named e.g. "master".
* And another long lived git branch for qt5-kf5, where the deprecated symbols still exist.


{{Input|1=<nowiki>
What is "kf6-qt6"? You just set up kde-builder following the procedure. The resulting kde-builder installation will be of type kf6-qt6. In kde-builder.yaml in the "global:" section you will have "branch-group: kf6-qt6". The git repositories that have only one long lived git branch e.g. named "master" will use that. The git repositories that have a second long lived git branch, will use the git branch where the deprecated symbols do not exist e.g. named "master".
sudo apt install qt6-tools-dev qt6-declarative-dev libqt6core5compat6-dev qt6-wayland-dev qt6-wayland-dev-tools qt6-base-private-dev libqt6svg6-dev libqt6opengl6-dev libqt6shadertools6-dev
</nowiki>}}


== Build Qt6 using kdesrc-build ==
What is "kf5-qt5"? Follow the chapter "kde-builder Qt5". The resulting kde-builder installation will be of type kf5-qt5. In kde-builder.yaml in the "global:" section you will have "branch-group: kf5-qt5". The git repositories that have only one long lived git branch e.g. named "master" will use that. The git repositories that have a second long lived git branch where the deprecated symbols still exist e.g. named "kf5" will use that.


A screen recording version is available https://www.youtube.com/watch?v=TDzX0376QyA
== Two independent kde-builder configurations: kf6-qt6 and kf5-qt5 ==


Note: If you cannot build the KDE frameworks using kdesrc-build and using the Qt6 provided by your OS (Linux distribution). Because the Qt6 is not complete. You might want to build Qt6 using kdesrc-build.
You can switch between configurations with {{ic|--rc-file}} command line option. Generate another config, make the changes for the {{ic|source-dir}}, {{ic|build-dir}}, {{ic|install-dir}},
and other changes you want. Make sure you use different value for {{ic|persistent-data-file}} option, to not mix things up.


Note: Building Qt6 using kdesrc-build is an advanced topic.
As an alternative, you can utilize custom variable to make switch from a single config:
 
Set up kdesrc-build clean from scratch following the same procedure as when using "Qt5 and KDE Frameworks 5".
 
{{Input|1=<nowiki>
Edit two files:
 
cat ~/.config/kdesrc-buildrc
# This file controls options to apply when configuring/building modules, and
# controls which modules are built in the first place.
# List of all options: https://docs.kde.org/trunk5/en/kdesrc-build/kdesrc-build/conf-options-table.html


{{bc-hl|shell|
global
global
     branch-group kf6-qt6
     _ver 5  # <-- Change this to switch
 
     source-dir ~/kde${_ver}/src
    # Finds and includes *KDE*-based dependencies into the build.  This makes
     build-dir ~/kde${_ver}/build
    # it easier to ensure that you have all the modules needed, but the
     install-dir ~/kde${_ver}/usr
    # dependencies are not very fine-grained so this can result in quite a few
     persistent-data-file ~/kde${_ver}/persistent-options.json
    # modules being installed that you didn't need.
    include-dependencies true
 
    # Install directory for KDE software
    kdedir ~/kde/usr
 
    # Directory for downloaded source code
     source-dir ~/kde/src
 
    # Directory to build KDE into before installing
    # relative to source-dir by default
     build-dir ~/kde/build
 
     qtdir  ~/kde/usr # Where to install Qt5 if kdesrc-build supplies it
 
    cmake-options -DCMAKE_BUILD_TYPE=Debug -DBUILD_WITH_QT6=ON
 
    # kdesrc-build sets 2 options which is used in options like make-options or set-env
    # to help manage the number of compile jobs that happen during a build:
    #
    # 1. num-cores, which is just the number of detected CPU cores, and can be passed
     #    to tools like make (needed for parallel build) or ninja (completely optional).
    #
    # 2. num-cores-low-mem, which is set to largest value that appears safe for
    #    particularly heavyweight modules based on total memory, intended for
    #    modules like qtwebengine
    num-cores 16
    num-cores-low-mem 12
 
    # kdesrc-build can install a sample .xsession file for "Custom"
    # (or "XSession") logins,
    install-session-driver false
 
    # or add a environment variable-setting script to
    # ~/.config/kde-env-master.sh
    install-environment-driver true
 
    # Stop the build process on the first failure
    stop-on-failure true
 
    # Use a flat folder layout under ~/kde/src and ~/kde/build
    # rather than nested directories
    directory-layout flat
 
    # Build with LSP support for everything that supports it
    compile-commands-linking true
    compile-commands-export true
 
    git-repository-base qt6-copy https://invent.kde.org/qt/qt/
end global
end global


# With base options set, the remainder of the file is used to define modules to build, in the
include ~/.local/share/kdesrc-build/data/build-include/kf${_ver}-qt${_ver}.ksb
# desired order, and set any module-specific options.
}}
#
# Modules may be grouped into sets, and this is the normal practice.
#
# You can include other files inline using the "include" command. We do this here
# to include files which are updated with kdesrc-build.


# Common options that should be set for some KDE modules no matter how
== Other CPU architectures than x86_64/amd64 ==
# kdesrc-build finds them. Do not comment these out unless you know
# what you are doing.
include /home/username/kde/src/kdesrc-build/kf6-common-options-build-include


# Qt and some Qt-using middleware libraries. Uncomment if your distribution's Qt
You can build and develop KDE projects using a Linux OS installed on an [[Get_Involved/development/ARM|ARM]] architecture CPU.
# tools are too old but be warned that Qt take a long time to build!
include /home/username/kde/src/kdesrc-build/qt6-build-include
include /home/username/kde/src/kdesrc-build/custom-qt6-libs-build-include


# KF5 and Plasma :)
== kde-builder issues ==
#include /home/username/kde/src/kdesrc-build/kf6-qt6-build-include


# To change options for modules that have already been defined, use an
=== "kde-builder kpat" fails because of black-hole-solitaire ===
# 'options' block. See kf6-common-options-build-include for an example


cat ~/kde/src/kdesrc-build/qt6-build-include
This happens on Debian/Ubuntu/Kubuntu. Because there is no Linux distribution binary package for https://github.com/shlomif/black-hole-solitaire.
# Downloads and installs Qt6 from the KDE mirror, using Qt6's CMake support
# exclusively. Consider this an unofficial build that won't be supported by Qt
# upstream since we don't go through the init-repository script.
# It is probably better to install from your local distribution devel packages
# if possible!
module-set qt6-set
    override-build-system qt6 # technically optional for now


    repository qt6-copy # as defined in kdesrc-buildrc-kf6-sample
Solution: append at the end of kdesrc-buildrc file:
    branch    6.4
<pre>
 
options kpat
    # Controls where Qt6 is installed
     cmake-options -DWITH_BH_SOLVER=OFF
    prefix ${qtdir}
 
    # These have been manually placed in dependency order based on the
    # .gitmodules file in https://code.qt.io/cgit/qt/qt5.git/tree/.gitmodules
    # in "essential" or "addons" categories with some additions
    # qtdoc should be last to give it best opportunity to make needed docs
    use-modules qtbase qttools qtshadertools qtdeclarative qtsvg  \
        qtimageformats qtmultimedia qtwayland                    \
        qtwebsockets qtwebchannel qtwebengine qtwebview qtsensors            \
        qtnetworkauth qt5compat qtdoc qtpositioning
 
    # if you want qtwebengine, add it to use-modules after "qtwebchannel" and
    # comment this out. Note qtwebengine has significant and different build
    # requirements of its own.
    #ignore-modules qtwebengine
 
    # Archiving API requires zstd support which may not be present in your CMake
    cmake-options -DQT_BUILD_TESTS=FALSE -DCMAKE_BUILD_TYPE=RelWithDebInfo \
                  -DQT_AVOID_CMAKE_ARCHIVING_API=TRUE
 
     cmake-generator Ninja # comment out if you want the default CMake generator
end module-set
 
options qtwebengine
    # qtwebengine build system is weird, involving make as the top-level driver
    # and then calling ninja for the bulk of the build.  qtwebengine is a bulky
    # module and having ninja use all cores at once may run out of memory if
    # not careful, so we use make to pass less aggressive Ninja flags.
    # num-cores-low-mem needs to be defined in your kdesrc-buildrc.
    make-options NINJAFLAGS=-j${num-cores-low-mem}
end options
end options
 
</pre>
# vim: set ft=kdesrc-buildrc:
 
</nowiki>}}
 
== Portable installation of kdesrc-build ==
 
If you are interested in or need separate builds of KDE software, like when building with Qt5 or Qt6, you can create a self-contained, portable installation of kdesrc-build in its own folder. This way, you can manage your kdesrc-build configuration files each in their own environment without mixing configurations or having to rebuild the universe every time you want to test a different one.
 
{{Input|1=<nowiki>
# kdesrc-build prefers the configuration file (kdesrc-buildrc) from the current directory.
mv ~/.config/kdesrc-buildrc ~/.config/kdesrc-buildrc~bak ; mv ~/kde ~/kde~bak
# Set up kdesrc-build as usual.
mv ~/.config/kdesrc-buildrc ~/kde
cd ~/kde
ln -s src/kdesrc-build/kdesrc-build .
ln -s src/kdesrc-build/kdesrc-run .
# Edit the file paths in the file ~/kde/kdesrc-buildrc
cd ~/kde
./kdesrc-build frameworks
mv ~/kde ~/kde.5 # Or to any other directory.
# Edit the file paths in the file ~/kde.5/kdesrc-buildrc
cd ~/kde.5
./kdesrc-build frameworks --refresh-build # Because binary files contain file full paths starting with "~/kde".
</nowiki>}}
 
== What is the command line of the processes started by kdesrc-build ==
 
E.g. what are the command lines that are run by kdesrc-build in order to run the CMake configure step for the kconfig KDE git repository?
 
{{Input|1=<nowiki>
kdesrc-build kconfig --no-src --no-include-dependencies --debug --refresh-build |& tee ~/a.txt
kate ~/a.txt &
</nowiki>}}
 
Returns:
 
{{Input|1=<nowiki>
Building kconfig (build system KDE CMake) from frameworks (1/1)
Queueing PKG_CONFIG_PATH to be set to /home/username/kde/usr/lib/pkgconfig
Queueing LD_LIBRARY_PATH to be set to /home/username/kde/usr/lib
Queueing PATH to be set to /home/username/kde/usr/bin:/home/username/kde/src/kdesrc-build:/home/username/.local/bin:/home/username/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Not prepending /home/username/kde/usr/lib/pkgconfig to PKG_CONFIG_PATH as it appears to already be defined in PKG_CONFIG_PATH.
Queueing PKG_CONFIG_PATH to be set to /home/username/kde/usr/lib/pkgconfig
Not prepending /home/username/kde/usr/lib to LD_LIBRARY_PATH as it appears to already be defined in LD_LIBRARY_PATH.
Queueing LD_LIBRARY_PATH to be set to /home/username/kde/usr/lib
Not prepending /home/username/kde/usr/bin to PATH as it appears to already be defined in PATH.
Queueing PATH to be set to /home/username/kde/usr/bin:/home/username/kde/src/kdesrc-build:/home/username/.local/bin:/home/username/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Queueing CMAKE_PREFIX_PATH to be set to /home/username/kde/usr
Queueing CMAKE_MODULE_PATH to be set to /home/username/kde/usr/lib64/cmake:/home/username/kde/usr/lib/cmake
Queueing XDG_DATA_DIRS to be set to /home/username/kde/usr/share:/usr/share/plasma:/home/username/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop
Source update complete for kconfig: Skipped
cd /home/username/kde/build
 
Preparing build system for kconfig.
Removing files in build directory for kconfig
Old build system cleaned, starting new build system.
cd /home/username/kde/build/kconfig
 
Running cmake targeting Unix Makefiles...
run_logged_p(): Module kconfig, Command: {'cmake', '-B', '.', '-S', '/home/username/kde/src/kconfig', '-G', 'Unix Makefiles', '-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON', '-DCMAKE_BUILD_TYPE=Debug', '-DQT_MAJOR_VERSION=6', '-DBUILD_WITH_QT6=ON', '-DBUILD_TESTING=TRUE', '-DBUILD_WITH_QT6=ON', '-DEXCLUDE_DEPRECATED_BEFORE_AND_AT=5.99.0', '-DCMAKE_CXX_FLAGS:STRING=-pipe', '-DCMAKE_INSTALL_PREFIX=/home/username/kde/usr'} from /home/username/kde/build/kconfig
cd /home/username/kde/build/kconfig
 
log_command(): Module kconfig, Command: cmake -B . -S /home/username/kde/src/kconfig -G Unix Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DQT_MAJOR_VERSION=6 -DBUILD_WITH_QT6=ON -DBUILD_TESTING=TRUE -DBUILD_WITH_QT6=ON -DEXCLUDE_DEPRECATED_BEFORE_AND_AT=5.99.0 -DCMAKE_CXX_FLAGS:STRING=-pipe -DCMAKE_INSTALL_PREFIX=/home/username/kde/usr
run_logged_p(): kconfig cmake complete: 0
</nowiki>}}
 
Therefore, kdesrc-build has run the following commands:
 
{{Input|1=<nowiki>
# Preparing build system for kconfig. Removing files in build directory for kconfig. Old build system cleaned, starting new build system.
rm -rf /home/username/kde/build/kconfig
mkdir -p /home/username/kde/build/kconfig
 
# Queueing X to be set to ...
PKG_CONFIG_PATH=/home/username/kde/usr/lib/pkgconfig
LD_LIBRARY_PATH=/home/username/kde/usr/lib
PATH=/home/username/kde/usr/bin:/home/username/kde/src/kdesrc-build:/home/username/.local/bin:/home/username/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
CMAKE_PREFIX_PATH=/home/username/kde/usr
CMAKE_MODULE_PATH=/home/username/kde/usr/lib64/cmake:/home/username/kde/usr/lib/cmake
XDG_DATA_DIRS=/home/username/kde/usr/share:/usr/share/plasma:/home/username/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop
 
cd /home/username/kde/build/kconfig
 
cmake -B . -S /home/username/kde/src/kconfig -G Unix\ Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DQT_MAJOR_VERSION=6 -DBUILD_WITH_QT6=ON -DBUILD_TESTING=TRUE -DBUILD_WITH_QT6=ON -DEXCLUDE_DEPRECATED_BEFORE_AND_AT=5.99.0 -DCMAKE_CXX_FLAGS:STRING=-pipe -DCMAKE_INSTALL_PREFIX=/home/username/kde/usr
</nowiki>}}
 
== Other CPU architectures than x86_64/amd64 and x86 ==
 
You can build and develop KDE projects using a Linux OS installed on an  [[Get_Involved/development/ARM|ARM]] architecture CPU.

Latest revision as of 23:17, 22 December 2024

This page is the continuation with more advanced topics of the page Get_Involved/development.

kde-builder has replaced the previous KDE build framework named kdesrc-build.

Develop in a Linux container

When you start programming for KDE, it is recommended that you use kde-builder in your main operating system or in a virtual machine running on a Linux operating system that is better supported by kde-builder.

As an alternative, you can run kde-builder in a Linux container (docker, podman, toolbx, distrobox).

distrobox

It is possible to start developing KDE software using container images that are able to see inside your home folder. This can be done using distrobox and podman.

This solution is particularly useful for users on immutable distributions like Fedora Kinoite, openSUSE Kalpa or Valve's SteamOS 3

To learn how to build KDE software with distrobox, see: https://develop.kde.org/docs/getting-started/building/containers-distrobox/

Other operating systems

Kubuntu >= 24.10

The default configuration of kde-builder requires Qt version 6.7. Kubuntu 24.10 has Qt version 6.6. It is recommended that you use a Linux OS that is better supported by kde-builder.

If you are a more seasoned developer you might be able to use Kubuntu for kde-builder by installing Qt6 using the Qt online installer or by building Qt6 using kde-builder.

Alpine Linux

apk add git perl doas-sudo-shim

FreeBSD

Install the latest release of FreeBSD with KDE Plasma Desktop on your hardware computer or in a virtual machine.

Your user should be member of the "wheel" user group (e.g. this can be configured in the FreeBSD installer, when creating your user you can select additional user groups for your user). Your user should be able to use sudo:

pkg install sudo
visudo
# Uncomment the line: %wheel ALL=(ALL:ALL) ALL

Then set up kde-builder using the same procedure as when installing kde-builder on a Linux operating system. FreeBSD is currently supported by kde-builder. See https://www.youtube.com/watch?v=AhDHUg81M_I and https://www.youtube.com/watch?v=HRiKzaw8cAw .

OpenBSD >= 7.5

Install OpenBSD version greater than or equal to 7.5. In the installer keep the defaults, the user created by the installer is named "administrator" in this example.

# Enable doas
su -
cp /etc/examples/doas.conf /etc/doas.conf
exit
# kde-builder needs sudo.
mkdir -p ~/.local/bin ; ln -s /usr/bin/doas ~/.local/bin/sudo
echo "export PATH=~/.local/bin:\$PATH" >> ~/.bashrc

# Test doas.
doas su
# kde-builder needs bash.
pkg_add bash
chsh -s /usr/local/bin/bash
exit

# As user administrator
chsh -s /usr/local/bin/bash

# As per https://rsadowski.de/posts/2024-01-09-openbsd-kde/ , https://openports.pl/path/meta/kde,-plasma
doas su
pkg_add kde-plasma kate

# I recommend that you use tigervnc. https://nmariusp.github.io/install-os.html#openbsd--75

After you install kde-builder:

# Edit the kdesrc-buildrc file e.g.:
cmake-options -DCMAKE_BUILD_TYPE=RelWithDebInfo -DKF_IGNORE_PLATFORM_CHECK=ON

# Also set environment variable:
export CMAKE_PREFIX_PATH=/usr/local/lib/qt6/cmake
# Or
export CMAKE_PREFIX_PATH=/usr/local/lib/qt5/cmake

Microsoft Windows

You can build and develop KDE projects using the Microsoft Windows operating system.

Apple macOS

You can build and develop KDE projects using the Apple macOS operating system.

Project Documentation

kf6-qt6 vs. kf5-qt5

Many KDE git repositories can build correctly and run correctly using "kde-builder kf6-qt6".

The KDE git repositories that can build correctly and run correctly using "kde-builder kf6-qt6" have two long lived git branches:

  • A long lived git branch that does not contain the deprecated symbols from kf5-qt5, named e.g. "master".
  • And another long lived git branch for qt5-kf5, where the deprecated symbols still exist.

What is "kf6-qt6"? You just set up kde-builder following the procedure. The resulting kde-builder installation will be of type kf6-qt6. In kde-builder.yaml in the "global:" section you will have "branch-group: kf6-qt6". The git repositories that have only one long lived git branch e.g. named "master" will use that. The git repositories that have a second long lived git branch, will use the git branch where the deprecated symbols do not exist e.g. named "master".

What is "kf5-qt5"? Follow the chapter "kde-builder Qt5". The resulting kde-builder installation will be of type kf5-qt5. In kde-builder.yaml in the "global:" section you will have "branch-group: kf5-qt5". The git repositories that have only one long lived git branch e.g. named "master" will use that. The git repositories that have a second long lived git branch where the deprecated symbols still exist e.g. named "kf5" will use that.

Two independent kde-builder configurations: kf6-qt6 and kf5-qt5

You can switch between configurations with --rc-file command line option. Generate another config, make the changes for the source-dir, build-dir, install-dir, and other changes you want. Make sure you use different value for persistent-data-file option, to not mix things up.

As an alternative, you can utilize custom variable to make switch from a single config:

global
    _ver 5  # <-- Change this to switch
    source-dir ~/kde${_ver}/src
    build-dir ~/kde${_ver}/build
    install-dir ~/kde${_ver}/usr
    persistent-data-file ~/kde${_ver}/persistent-options.json
end global

include ~/.local/share/kdesrc-build/data/build-include/kf${_ver}-qt${_ver}.ksb

Other CPU architectures than x86_64/amd64

You can build and develop KDE projects using a Linux OS installed on an ARM architecture CPU.

kde-builder issues

"kde-builder kpat" fails because of black-hole-solitaire

This happens on Debian/Ubuntu/Kubuntu. Because there is no Linux distribution binary package for https://github.com/shlomif/black-hole-solitaire.

Solution: append at the end of kdesrc-buildrc file:

options kpat
    cmake-options -DWITH_BH_SOLVER=OFF
end options