4-Minute Read

I spent two days building KDE from source, so you can do it faster

or: How I Learned to Stop Worrying and Love Ubuntu

kdesrc-build

From KDE documentations:

kdesrc-build is a script to help the KDE community install KDE software from its Git and Subversion source repositories, and continue to update that software afterwards.

If you are a developer, your distribution may not have the latest dependencies. Even though you can theoretically build them from source, it is difficult to find out every dependencies and keep them up to date. kdesrc-build can manage the dependencies for you, build the dependencies and install them somewhere so that they don’t conflict with system libraries.

Build plasma-workspace on Kubuntu

I use ArchLinux, but I recently started working on plasma-workspace. One feature of my MR is only available on Ubuntu. To test the code, I need to build plasma-workspace on Ubuntu. Naturally, I chose Kubuntu. Some will argue that KDE Neon Developer edition is a better choice because it ships latest Plasma. But I live in China, where there is no Internet. If I use Kubuntu, I can use Ubuntu mirror, there is no mirror for KDE Neon.

So I start my Kubuntu VM and install kdesrc-build. I thought that kdesrc-build plasma-workspace should do everything for me. But man, was I wrong.

Third Party dependency hell

Remember I said “kdesrc-build manages dependencies for you”? Only part of that is true, kdesrc-build manages dependencies for you, but only for KDE dependencies. For Third Party dependencies, it can’t figure them out. On Ubuntu it may be called libnl-3-dev, while on Arch it is called libnl. Everytime kdesrc-build fails, I have to look at the error log and try to figure out which package is missing, install it manaully and resume the build. To make matters worse, I’m building plasma-workspace. Which contains half the configuration modules, plasmoids, and other miscellaneous stuff. That means I had to build pretty much the entire KDE libraries. In fact, I had to build 93 dependencies to get to plasma-workspace. Imagine checking the error log for every dependency, using apt search DEP_NAME, apt-file find MISSING_FILE_NAME and apt-rdepends --build-depends --print-state --follow=DEPENDS PROJECT_NAME | grep Not to install the third-party packages. Only to find out that kdesrc-build fails on the next dependency build. The fact that I live in China makes things worse, because the connection to KDE invent is very slow here, sometimes dropping to 30kb/s for no reason. I had to use my server to git clone the repository, and download it back through proxy, then copy it to the virtual machine. Especially for https://invent.kde.org/plasma/breeze, 670MB+ repository. It took me an hour to transfer it to the VM.

When I have to build third party dependencies from source

The really traumatic experience was when I discovered that the third-party dependencies required for plasma-workspace’s dependencies are so new that Ubuntu 21.10 doesn’t include them. To find out, I had to ask apt for the package version and compare it to the requirements in CMakeList.txt. Then I ask the duckduckgo where I could find the source code, and then built it myself. Fortunately, I only had to build two third-party packages from source.

When I find dependency requirement bug

Another nightmare is a bug in the dependency requirements. kio-extras requires k7zip.h header file from KArchive. But KArchive enables k7zip.h only if liblzma is present at build time. So liblzma is an optional dependency for KArchive, but k7zip.h is a hard dependency of kio-extras. I didn’t have liblzma when I built KArchive, so I got the “k7zip.h not found” error when I built kio-extras. It took me an hour to figure out what was wrong.

Save your time by install these first

To avoid wasting so much time building plasma-workspace, you should install these packages before building from source, I have arrange them in the order I found them:

Install these first

  • build-essentials
  • meson
  • ninja-build
  • liblzma-dev

ki18n

  • clang-format
  • qtbase5-private-dev

kwidgetsaddons

  • qttools5-dev

polkit-qt1

  • libpolkit-gobject-1-dev
  • libpolkit-agent-1-dev

kguiaddons

  • qtwayland5-dev-tools
  • libwayland-dev
  • libqt5x11extras5-dev

kwindowsystem

  • libxcb-keysyms1-dev
  • libxcb-res0-dev
  • libxfixes-dev
  • libxcb-icccm4-dev
  • libxcb-xfixes0-dev

kiconthemes

  • libqt5svg5-dev

kwallet

  • libgcrypt20-dev

kirigami

  • qtquickcontrols2-5-dev

kactivities

  • libboost-dev

kidletime

  • libxcb-sync-dev

kross

  • qtscript5-dev

kwayland

  • wayland-protocols

kfilemetadata

  • libattr1-dev

plasma-framework

  • libopengl-dev

khtml

  • libjpeg-dev
  • libgif-dev

kscreenlocker

  • libxcb-xtest0-dev
  • libpam0g-dev

kwayland-server

kwin

  • libdrm-dev
  • libgbm-dev
  • libxcb-composite-dev
  • libxcb-cursor-dev
  • libxcb-damage0-dev
  • libxcb-glx0-dev
  • libxcb-image0-dev
  • libxcb-randr0-dev
  • libxcb-shm0-dev
  • libepoxy-dev
  • libinput-dev, from source. Which requires libgtk3-dev and check to build. Build from main branch
  • libxcb-util-dev

libksysguard

  • libnl-3-dev
  • libnl-route-3-dev
  • libsensors-dev

kio-extras

  • remember to install liblzma-dev before building karchive

Conclusion

It is a really bad idea to build plasma-workspace on Ubuntu from source, and I think Ubuntu should really merge back the dev packages. How big can development headers be! That would save me a lot of headaches.

Recent Posts

Categories

About

A young developer who loves Linux.