|
|
(50 intermediate revisions by 9 users not shown) |
Line 1: |
Line 1: |
| On this page, you can learn how to use KDE's <code>kdesrc-build</code> tool to build various types of KDE software once you have a [[Get_Involved/development/Set_up_a_development_environment|development environment set up]].
| | Moved to https://develop.kde.org/docs/getting-started/building/kdesrc-build-compile/ |
| | |
| It can take an hour or more to compile a KDE application, Framework, or Plasma itself for the first time. The reason for this is that <code>kdesrc-build</code> is compiling all of the KDE Frameworks 5 modules plus any other KDE module that is a dependency of the module that you tell <code>kdesrc-build</code> to build.
| |
| | |
| <code>kdesrc-build</code> by default has the option "--include-dependencies" enabled so it will ignore all KDE packages that were installed using the distribution's package manager and will instead build all needed KDE modules from source.
| |
| | |
| The next time you want to compile that or any other piece of KDE software, it will be much faster since most of the dependencies will have already been compiled. If you don't want to build all dependencies (e.g., because you are using a rolling release distro that provides recent versions of software), edit the same configuration file and simply set <code>include-dependencies</code> to '''false''' or add the <code>--no-include-dependencies</code> option when running <code>kdesrc-build</code>.
| |
| | |
| == Frameworks ==
| |
| '''[[Frameworks|KDE Frameworks]]''' are libraries of tools and features that can be used by any application or Plasma itself. New versions of KDE Frameworks are [[Schedules/Frameworks|released once a month]]. A list of all of the frameworks can be found here: https://api.kde.org/frameworks.
| |
| | |
| After you [[Guidelines and HOWTOs/Build from source/Install_the_dependencies#For_all_of_the_KDE_Frameworks_5|install all of the dependencies needed in order to build all of the KDE Frameworks]], the first thing that you should do using <code>kdesrc-build</code> is to build all of the KDE Frameworks:
| |
| | |
| {{Input|1=<nowiki>
| |
| kdesrc-build frameworks --ignore-modules kdewebkit
| |
| </nowiki>}}
| |
| | |
| == Applications ==
| |
| | |
| [https://apps.kde.org/ KDE Applications] like [https://apps.kde.org/kcalc Calculator (KCalc)], [https://apps.kde.org/dolphin/ Dolphin], [https://apps.kde.org/okular/ Okular], [https://apps.kde.org/konsole/ Konsole] and [https://apps.kde.org/gwenview/ Gwenview] are standalone apps that can be run on multiple platforms, such as Plasma, GNOME, even macOS and Windows! New versions of KDE Applications are [[Schedules#Current_Releases_by_KDE|released three times a year]]. Note that the Discover app store (git repo name: <code>plasma-discover</code>) and System Settings app (git repo name: <code>systemsettings</code>) are distributed alongside Plasma, but they build like apps using the below instructions. A list of all KDE applications can be found here: https://apps.kde.org/.
| |
| | |
| The general steps required to build and run an application are described in the following using KCalc as an example:
| |
| | |
| {{Input|1=<nowiki>
| |
| kdesrc-build kcalc
| |
| </nowiki>}}
| |
| | |
| This command clones the KDE git repository https://invent.kde.org/utilities/kcalc in the directory <code>~/kde/src/kcalc</code>, builds all of KCalc's KDE dependencies, and then builds KCalc itself, into the directory <code>~/kde/build/kcalc</code>. If the build is successful, the result is installed into <code>~/kde/usr</code>. As a result, '''there is no need to manually install anything;''' <code>kdesrc-build</code> installed it for you!
| |
| | |
| To run it, use the <code>kdesrc-run</code> command, which launches the built-from-source version instead of the one installed by your system's package manager.
| |
| {{Input|1=<nowiki>
| |
| kdesrc-run kcalc
| |
| </nowiki>}}
| |
| | |
| Did it run? If so, then '''congratulations, you just compiled your own version of KCalc from source code!'''
| |
| | |
| == Plasma ==
| |
| '''[[Plasma|KDE Plasma]]''' is the environment in which you can run apps. Plasma is responsible for providing a desktop with wallpaper, app launchers, and widgets; displaying notifications; managing wired and wireless networks; and similar operating-system level tasks. New versions of Plasma are [[Schedules/Plasma 5|released three times a year]]. Plasma has multiple ''shells'': [https://kde.org/plasma-desktop Plasma Desktop] for desktop, laptop, and 2-in-1 computers, [https://www.plasma-mobile.org/ Plasma Mobile] for mobile phones, [https://plasma-bigscreen.org/ Plasma Bigscreen] for televisions, and so on. They all share certain common components, such as a window manager, networking stack, basic graphical components, and so on. Here is how to build them:
| |
| {{Input|1=<nowiki>
| |
| kdesrc-build plasma-workspace plasma-framework plasma-integration bluedevil powerdevil plasma-nm plasma-pa plasma-thunderbolt plasma-vault plasma-firewall plasma-workspace-wallpapers kdeplasma-addons krunner milou kwin kscreen sddm-kcm plymouth-kcm breeze discover print-manager plasma-sdk kdeconnect-kde plasma-browser-integration xdg-desktop-portal-kde kde-gtk-config kgamma5 breeze-gtk drkonqi phonon flatpak-kcm kactivitymanagerd --include-dependencies
| |
| </nowiki>}}
| |
| | |
| === Plasma Desktop ===
| |
| To build the Plasma Desktop environment and its related apps, also build the following:
| |
| {{Input|1=<nowiki>
| |
| kdesrc-build plasma-desktop systemsettings plasma-disks plasma-systemmonitor ksystemstats kinfocenter kmenuedit --include-dependencies
| |
| </nowiki>}}
| |
| | |
| To get translations in your self-built Plasma, you must build <tt>plasma-workspace</tt> with <code>-DKDE_L10N_SYNC_TRANSLATIONS=true</code>. The easiest way to do this is go into the build directory (<code>~/kde/build/plasma-workspace</code> by default), run <code>ccmake .</code>, turn on that setting, and then rebuild the project.
| |
| | |
| Now it's time to make your built-from-source Plasma session accessible from the SDDM login screen, and also copy the built-from-source DBus files into a location where they are visible to them system bus. To do this, run the following command:
| |
| {{Input|1=<nowiki>
| |
| ~/kde/build/plasma-workspace/login-sessions/install-sessions.sh
| |
| </nowiki>}}
| |
| | |
| {{Note|SELinux can interfere with the new DBus services working correctly, and the path of least resistance may be to simply turn off enforcement if you are using a distro that ships with it on by default (for example, Fedora). To do this, set the value of <code>SELINUX</code> to <code>permissive</code> in the file <code>/etc/selinux</code>.}}
| |
| | |
| After this, you can log out and select your new plasma session in SDDM's session chooser menu (which is located in the bottom-left corner of the screen if you're using the Breeze SDDM theme).
| |
| | |
| Alternatively, you can run the new version of plasma on top of your existing system for quick testing like so:
| |
| {{Input|1=<nowiki>
| |
| source ~/kde/build/plasma-desktop/prefix.sh
| |
| ~/kde/usr/bin/plasmashell --replace
| |
| </nowiki>}}
| |
| | |
| === Plasma Mobile ===
| |
| To build the Plasma Mobile environment, also build the following:
| |
| {{Input|1=<nowiki>
| |
| kdesrc-build plasma-nano plasma-mobile plasma-settings --include-dependencies
| |
| </nowiki>}}
| |
| | |
| You can run your custom-built Plasma Mobile in an emulated phone session using a phone-sized window within your existing desktop. Note that you probably want that this emulated phone session does not use the settings of your current user. E.g. you want in the emulated phone session to use Angelfish, not Mozilla Firefox as your web browser. Instructions:
| |
| | |
| {{Input|1=<nowiki>
| |
| export XDG_RUNTIME_DIR=/tmp/
| |
| export QT_QPA_PLATFORM=wayland
| |
| export QT_QPA_PLATFORMTHEME=KDE
| |
| export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
| |
| export XDG_CURRENT_DESKTOP=KDE
| |
| export KSCREEN_BACKEND=QScreen
| |
| export KDE_FULL_SESSION=1
| |
| export KDE_SESSION_VERSION=5
| |
| export QT_QUICK_CONTROLS_MOBILE=1
| |
| export PLASMA_PLATFORM=phone:handheld
| |
| export $(dbus-launch)
| |
| dbus-run-session kwin_wayland --width 360 --height 720 --xwayland "plasmashell -p org.kde.plasma.phoneshell"
| |
| </nowiki>}}
| |
| | |
| Alternative instructions for starting an emulated phone session.
| |
| | |
| {{Input|1=<nowiki>
| |
| export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
| |
| export QT_QUICK_CONTROLS_MOBILE=1
| |
| export PLASMA_PLATFORM=phone:handheld
| |
| | |
| QT_QPA_PLATFORM=wayland dbus-run-session kwin_wayland --xwayland "plasmashell -p org.kde.plasma.phoneshell" --width 360 --height 720
| |
| </nowiki>}}
| |
| | |
| Plasma Mobile can also be run on a mobile device itself. For more information, see the [[Plasma/Mobile/DevGuide#Mobile_device_running_plasma_mobile|DevGuide]].
| |
| | |
| == How to solve build problems ==
| |
| Did one or more modules fail to build (displayed in red font) using <code>kdesrc-build</code>? Then here's what to do:
| |
| | |
| # Try building the failing module again from scratch using <code>kdesrc-build [failing module] --refresh-build</code>
| |
| # Make sure that you have all the dependencies for the failing module. Go back to the [[#Download non-KDE dependencies]] section and re-install the non-KDE dependencies. If that doesn't fix the problem, open the log file for the failing module which <code>kdesrc-build</code> will print the path at the end of its output. Scroll to the bottom of the log file and read the output to see what missing dependency it is complaining about. Then find and install the corresponding package using the package manager of your distribution. If several look relevant, install them all just to be safe. When you have the necessary dependencies, you can save time and resume from the failing module by adding <code>--resume-from [the name of the module that failed]</code> to your <code>kdesrc-build</code> command.
| |
| # Check the [https://build.kde.org/view/Failing/ list of currently broken modules] on the KDE build server. If it's broken there, then it's not your fault. :)
| |
| # Ask for help in the the [https://webchat.kde.org/#/room/#kde-devel:kde.org #kde-devel] channel on [[Matrix]] or Libera Chat [[Internet Relay Chat | IRC]]. See [[Get Involved/development#Communicate with the team]]
| |
| # Looking into the error log is also helpful. For example, the build stopped at kwallet. You will need to go into <code>kde/src/log/latest/kwallet/error.log</code> and find what packages are missing.
| |
| # If you know what files are missing, but you don't know what packages provide them, you can ask your package manager. See https://wiki.archlinux.org/index.php/Pacman/Rosetta (see "Query the package which provides FILE").
| |
| # The problem might be in <code>~/kde/usr</code>. E.g. a file in <code>~/kde/usr/include</code> which was renamed or moved. You can help yourself by seeing if you can reproduce this issue in a clean new Virtual Machine (VM). If you cannot reproduce the issue in your VM, then a possible solution is to start with a new and clean kdesrc-build installation. I.e. run something like <code>mv ~/.config/kdesrc-buildrc ~/.config/kdesrc-buildrc~bak ; mv ~/kde ~/kde~bak</code>. Then install kdesrc-build from scratch using this wiki page.
| |
| | |
| == Iterating on a single project ==
| |
| When you're working on a project and you want to rebuild it to test your changes, you can save a lot of time by only rebuilding that project, rather than the entire stack. For example if you are working on <code>plasma-desktop</code>, you can rebuild only that project rather than everything by running <code>kdesrc-build --no-src --no-include-dependencies plasma-desktop</code>.
| |
| | |
| == How to run an application after making changes to one of its dependencies ==
| |
| Build the application that you want to build. E.g. to return to KCalc:
| |
| {{Input|1=<nowiki>
| |
| kdesrc-build kcalc
| |
| </nowiki>}}
| |
| | |
| This command builds not only KCalc, but all of the KDE git repositories on which it depends, such as the KDE Frameworks 5 library KConfig.
| |
| | |
| Now let's say you want to make a change to KConfig that should change a behavior in KCalc. In this case, you don't want kdesrc-build to discard your changes to KConfig. So first build KConfig separately, on its own, without doing a source code update:
| |
| {{Input|1=<nowiki>
| |
| kdesrc-build kconfig --no-src --no-include-dependencies --refresh-build --debug
| |
| </nowiki>}}
| |
| | |
| This will build just KConfig and install the needed build products into <code>~/kde/usr</code>. Now we want to run KCalc in such a way that it makes use of those changed files. Do it like so:
| |
| | |
| {{Input|1=<nowiki>
| |
| kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug
| |
| kdesrc-run kcalc
| |
| </nowiki>}}
| |
| | |
| == Next Steps ==
| |
| Now you can compile anything in KDE from its source code! Time to think about [[Get_Involved/development#Choose what_to_work_on|what to do with this superpower]]...
| |