Get Involved/development/More: Difference between revisions
(The Linux OSes that are better supported by kdesrc-build have fixed the issue "wayland-protocols is too old") |
|||
(9 intermediate revisions by 2 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]]. | ||
kde-builder has replaced the previous KDE build framework named kdesrc-build. | |||
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 | 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 | As an alternative, you can run kde-builder in a Linux container (docker, podman, toolbx, distrobox). | ||
=== Option 1. The KDE PIM Docker image === | === Option 1. The KDE PIM Docker image === | ||
Line 25: | Line 17: | ||
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. | 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 [[Get_Involved/development#Operating_system|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 [[Get_Involved/development/More#Qt_6_installed_using_the_Qt_online_installer|installing Qt6 using the Qt online installer]] or by [[Get_Involved/development/More#Build_Qt_using_kde-builder|building Qt6 using kde-builder]]. | |||
=== Alpine Linux === | |||
<pre> | |||
apk add git perl doas-sudo-shim | |||
</pre> | |||
git | |||
=== FreeBSD === | === FreeBSD === | ||
Line 137: | Line 47: | ||
</pre> | </pre> | ||
Then set up | 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=8MqBnb3Y9JU | ||
=== OpenBSD >= 7.5 === | === OpenBSD >= 7.5 === | ||
Line 147: | Line 57: | ||
cp /etc/examples/doas.conf /etc/doas.conf | cp /etc/examples/doas.conf /etc/doas.conf | ||
exit | exit | ||
# | # kde-builder needs sudo. | ||
mkdir -p ~/.local/bin ; ln -s /usr/bin/doas ~/.local/bin/sudo | mkdir -p ~/.local/bin ; ln -s /usr/bin/doas ~/.local/bin/sudo | ||
echo "export PATH=~/.local/bin:\$PATH" >> ~/.bashrc | echo "export PATH=~/.local/bin:\$PATH" >> ~/.bashrc | ||
Line 168: | Line 78: | ||
</pre> | </pre> | ||
After you install | After you install kde-builder: | ||
<pre> | <pre> | ||
# Edit the kdesrc-buildrc file e.g.: | # Edit the kdesrc-buildrc file e.g.: | ||
Line 193: | Line 103: | ||
== Project Documentation == | == Project Documentation == | ||
* | * https://kde-builder.kde.org | ||
* https://invent.kde.org/sdk/kde-builder | |||
* | |||
== kf6-qt6 vs. kf5-qt5 == | == kf6-qt6 vs. kf5-qt5 == | ||
Many KDE git repositories can build correctly and run correctly using " | 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 " | 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". | * 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. | * And another long lived git branch for qt5-kf5, where the deprecated symbols still exist. | ||
What is "kf6-qt6"? You just set up | 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 kdesrc-buildrc 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 " | What is "kf5-qt5"? Follow the chapter "kde-builder Qt5". The resulting kde-builder installation will be of type kf5-qt5. In kdesrc-buildrc 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. | ||
== Build Qt using | == Build Qt using kde-builder == | ||
=== Qt6 === | === Qt6 === | ||
If you cannot build the KDE frameworks using {{ic| | If you cannot build the KDE frameworks using {{ic|kde-builder}} and the Qt provided by your Linux distribution is outdated, you might want to build the Qt framework using {{ic|kde-builder}}. | ||
In your configuration file use the {{ic|qt-install-dir}} option (in the ''global'' section) with non-empty value, for example: | In your configuration file use the {{ic|qt-install-dir}} option (in the ''global'' section) with non-empty value, for example: | ||
Line 226: | Line 133: | ||
}} | }} | ||
It is recommended that if you build Qt6 using | It is recommended that if you build Qt6 using kde-builder, you also build qtwebengine. Edit the file {{ic|~/.local/state/sysadmin-repo-metadata/module-definitions/qt6.ksb}}. Follow the instructions found in the file: if you want qtwebengine, add it to use-modules after "qtwebchannel" and comment out the line "ignore-modules qtwebengine". | ||
<pre> | <pre> | ||
kde-builder qtbase --refresh-build --debug | |||
</pre> | </pre> | ||
Press Ctrl+C after the CMake configure summary for qtbase. Make sure that you have the needed dependencies. Should find libb2-dev, libproxy-dev, libmd4c-dev, libmd4c-html0-dev, libxcb-xinput-dev, libatspi2.0-dev, libsqlite3-dev, unixodbc-dev, libmysqlclient-dev, postgresql-client, libecpg-dev, libpq-dev. Optional dependencies libsctp-dev, libts-dev. | Press Ctrl+C after the CMake configure summary for qtbase. Make sure that you have the needed dependencies. Should find libb2-dev, libproxy-dev, libmd4c-dev, libmd4c-html0-dev, libxcb-xinput-dev, libatspi2.0-dev, libsqlite3-dev, unixodbc-dev, libmysqlclient-dev, postgresql-client, libecpg-dev, libpq-dev. Optional dependencies libsctp-dev, libts-dev. | ||
<pre> | <pre> | ||
kde-builder qtwebengine | |||
</pre> | </pre> | ||
This will build the Qt6 modules from qtbase up to qtwebengine. qtwebengine will probably be built incorrectly because some needed dependencies are missing. | This will build the Qt6 modules from qtbase up to qtwebengine. qtwebengine will probably be built incorrectly because some needed dependencies are missing. | ||
<pre> | <pre> | ||
kde-builder qtwebengine --refresh-build --debug | |||
</pre> | </pre> | ||
Press Ctrl+C after the CMake configure summary for qtwebengine. Make sure that you have the needed dependencies. Should find node.js >= 14, libdbus-1-dev, libxcomposite-dev, libxshmfence-dev, libxdamage-dev, libharfbuzz-dev, libvpx-dev, libpci-dev, libevent-dev, libre2-dev, libsnappy-dev, libcups2-dev, libxkbfile-dev. | Press Ctrl+C after the CMake configure summary for qtwebengine. Make sure that you have the needed dependencies. Should find node.js >= 14, libdbus-1-dev, libxcomposite-dev, libxshmfence-dev, libxdamage-dev, libharfbuzz-dev, libvpx-dev, libpci-dev, libevent-dev, libre2-dev, libsnappy-dev, libcups2-dev, libxkbfile-dev. | ||
Then build Qt6: {{bc| | Then build Qt6: {{bc|kde-builder qt6-set}} | ||
To compile Qt6 with Qt X11 Extras (which is a necessary library to compile [https://api.kde.org/frameworks/kwindowsystem/html/ KWindowSystem]), you should enable XCB feature during compilation | To compile Qt6 with Qt X11 Extras (which is a necessary library to compile [https://api.kde.org/frameworks/kwindowsystem/html/ KWindowSystem]), you should enable XCB feature during compilation | ||
{{bc|1= | {{bc|1=kde-builder qt6-set --cmake-options="-DQT_FEATURE_xcb=ON"}} | ||
=== Qt5 === | === Qt5 === | ||
Line 268: | Line 175: | ||
In the KDE Plasma app launcher (start menu) you now have the application "Qt Maintenance Tool". | In the KDE Plasma app launcher (start menu) you now have the application "Qt Maintenance Tool". | ||
Set up | Set up kde-builder from scratch as usual. | ||
Edit the file kdesrc-buildrc to look like: | Edit the file kdesrc-buildrc to look like: | ||
Line 281: | Line 188: | ||
</pre> | </pre> | ||
== Two independent | == Two independent kde-builder configurations: kf6-qt6 and kf5-qt5 == | ||
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}}, | 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}}, | ||
Line 304: | Line 211: | ||
You can build and develop KDE projects using a Linux OS installed on an [[Get_Involved/development/ARM|ARM]] architecture CPU. | You can build and develop KDE projects using a Linux OS installed on an [[Get_Involved/development/ARM|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. | This happens on Debian/Ubuntu/Kubuntu. Because there is no Linux distribution binary package for https://github.com/shlomif/black-hole-solitaire. |
Latest revision as of 16:41, 28 October 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).
Option 1. The KDE PIM Docker image
You can install Docker and the 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.
Option 2. 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=8MqBnb3Y9JU
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.
What to do if CMake configure fails because a build dependency is missing
See https://community.kde.org/Get_Involved/development/Install_the_dependencies .
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 kdesrc-buildrc 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 kdesrc-buildrc 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.
Build Qt using kde-builder
Qt6
If you cannot build the KDE frameworks using kde-builder
and the Qt provided by your Linux distribution is outdated, you might want to build the Qt framework using kde-builder
.
In your configuration file use the qt-install-dir
option (in the global section) with non-empty value, for example:
global qt-install-dir ~/kde/usr branch-group kf6-qt6 end global
It is recommended that if you build Qt6 using kde-builder, you also build qtwebengine. Edit the file ~/.local/state/sysadmin-repo-metadata/module-definitions/qt6.ksb
. Follow the instructions found in the file: if you want qtwebengine, add it to use-modules after "qtwebchannel" and comment out the line "ignore-modules qtwebengine".
kde-builder qtbase --refresh-build --debug
Press Ctrl+C after the CMake configure summary for qtbase. Make sure that you have the needed dependencies. Should find libb2-dev, libproxy-dev, libmd4c-dev, libmd4c-html0-dev, libxcb-xinput-dev, libatspi2.0-dev, libsqlite3-dev, unixodbc-dev, libmysqlclient-dev, postgresql-client, libecpg-dev, libpq-dev. Optional dependencies libsctp-dev, libts-dev.
kde-builder qtwebengine
This will build the Qt6 modules from qtbase up to qtwebengine. qtwebengine will probably be built incorrectly because some needed dependencies are missing.
kde-builder qtwebengine --refresh-build --debug
Press Ctrl+C after the CMake configure summary for qtwebengine. Make sure that you have the needed dependencies. Should find node.js >= 14, libdbus-1-dev, libxcomposite-dev, libxshmfence-dev, libxdamage-dev, libharfbuzz-dev, libvpx-dev, libpci-dev, libevent-dev, libre2-dev, libsnappy-dev, libcups2-dev, libxkbfile-dev.
Then build Qt6:
kde-builder qt6-set
To compile Qt6 with Qt X11 Extras (which is a necessary library to compile KWindowSystem), you should enable XCB feature during compilation
kde-builder qt6-set --cmake-options="-DQT_FEATURE_xcb=ON"
Qt5
If you want the same for Qt5, change branch-group
option and use qt5-set
instead of qt6-set
.
Qt 6 installed using the Qt online installer
A screen recording version is available https://www.youtube.com/watch?v=3BIbYN2vIZw
The homepage of the Qt Framework is https://www.qt.io . Go to this web page, create an online account. https://www.qt.io/download-open-source > "Download the Qt Online Installer" > Linux > "Qt Online Installer for Linux (64-bit)" > download a file named e.g. qt-unified-linux-x64-4.6.1-online.run into the directory e.g. "~/Downloads".
ls -la ~/Downloads # The downloaded file needs to have the "executable" chmod bit set. chmod u+x ~/Downloads/qt-unified-linux-x64-4.6.1-online.run ~/Downloads/qt-unified-linux-x64-4.6.1-online.run
A graphical user interface (GUI) installer wizard starts. Login using your Qt online account. Next > check the checkbox "I have read and agree to the terms and conditions of using OpenSource Qt", check the checkbox "I'm an individual and do not use Qt for any company" > Next > Next > enable "Help us improve" > Next > Custom installation, notice that the install directory is "~/Qt" > Next. Install the latest version of Qt6 and the latest version of the Qt Creator integrated development environment (IDE). There are some Qt6 components that are not used by KDE and can be left out when installing Qt6 e.g. Qt Design Studio, WebAssembly, Android, Sources, Qt Quick 3D, Qt 3D, Qt Quick 3D Physics, "Qt Debug Information Files". Next > enable "I have read and agree" > Next > Install.
In the KDE Plasma app launcher (start menu) you now have the application "Qt Maintenance Tool".
Set up kde-builder from scratch as usual.
Edit the file kdesrc-buildrc to look like:
global ... qt-install-dir ~/Qt/6.7.0/gcc_64 # Where to install Qt6 if kdesrc-build supplies it libname lib ... end global
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 and x86
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
libdisplay-info is not available
If your Linux OS does not have a package for libdisplay-info.
Append at the end of the file kdesrc-buildrc
:
module libdisplay-info repository https://gitlab.freedesktop.org/emersion/libdisplay-info.git end module