OSS DEV NOTES

This note records some experiences of my open source software development.

Environment Setup (Docker Container)

Use the openSUSE tumbleweed as the development environment, because it has newest development packages.

distrobox (docker)

You might get error during installing the additional packages when using old distrobox version, make sure to use the latest distrobox: https://github.com/89luca89/distrobox/tree/main

# create a env you can install latest dev packages
(host) $ distrobox create --name box --image opensuse/tumbleweed

# enter the distrobox env (need to setup the passwd for the env)
(host) $ distrobox enter box

# now we are in the distrobox env
(box) $ # do something to check the dev env

Networking

To disconnect networking for the container, add options --unshare-netns --additional-flags "--network=bridge" when creating the development environment.

So that we can connect/disconnect the network with docker network connect/disconnect bridge kde

Backup

(host) $ docker commit box box2

(host) $ distrobox create --name box2 --image box
(host) $ distrobox enter box2

openSUSE in docker (manually config the container)

TODO: refer the dockerfiles used by KDE official CI/CD

Limitations of Container Env

For KDE development, the offcial points out the limitations and indicates some packages might need to be installed, check https://develop.kde.org/docs/getting-started/building/containers-distrobox/#limitations-of-using-containers

KDE/Dolphin

Dependency

ref: https://develop.kde.org/docs/getting-started/building/help-dependencies/#opensuse

(box) $ sudo zypper refresh

# install dev tools needed by dolphin
(box) $ sudo zypper --plus-content repo-source source-install --build-deps-only dolphin
# some additional packages needed
(box) $ sudo zypper install qt6-test-devel qt6-wayland

Build

ref: https://develop.kde.org/docs/getting-started/building/cmake-build/#summary

(box) $ cmake -B build/ --install-prefix ~/.local
(box) $ cmake --build build/ -j 4 # might eat much RAM!!!
(box) $ cmake --install build/

KDE/qvk

# install build dependencies
(box) $ sudo zypper in kf6-kcoreaddons-devel kf6-ki18n-devel qt6-gui-devel qt6-gui-private-devel qt6-virtualkeyboard-devel qt6-waylandclient-devel qt6-waylandclient-private-devel libwayland-client0 wayland-protocols-devel

# install runtime dependencies
(box) $ sudo zypper in qt6-virtualkeyboard-imports

openSUSE/Zypper

ref: https://en.opensuse.org/openSUSE:Zypper_development

Dependencies

(box) $ sudo zypper in libzypp-devel augeas-devel cmake gcc-c++ pkg-config boost-devel gettext-devel ruby3.4-rubygem-asciidoctor readline-devel

Build

(box) $ cmake -B build  #-DZYPP_PREFIX=/usr
(box) $ cmake --build build/ -j 4

Try -DZYPP_PREFIX=/usr if you have installed the libzypp packages but still got error like this:

CMake Error at CMakeLists.txt:26 (INCLUDE):
  INCLUDE could not find requested file:

    ZyppCommon
...

The ZYPP_PREFIX is used to find the path of the file ZyppCommon.cmake (e.g., /usr/lib64/cmake/Zypp/ZyppCommon.cmake). Check the CMakeLists.txt and search IF (DEFINED ZYPP_PREFIX) in it to see why you need this.

Debugging