Subject: [bug#57608] Upstreaming KDE Plasma and rest of packages

From: phodina <[email-masked]>
Date: Tue, 04 Oct 2022 06:52:02 +0000

Hi Marek and Ludo',

> Good morning / evening.
> 
> Today my small Thinkpad finally finished building the new release of Plasma. In the system configuration, I declared `(service plasma-desktop-service-type)`, as my desire is just to see the KDE desktop. My testing methodology is to edit my Guix configuration on a testing branch and sequentially perform `guix pull`, `guix home reconfigure` and `guix system reconfigure`.
> 

Thanks for testing the build Marek!

Well building KDE takes definitely long time. Even more building the development version.
 
> In order to perform this test I set `https://github.com/phodina/guix.git` as the Git remote and pulled the `patch/plasma` branch. I made no customizations to the repository.
> 
> The commit used is `d9ca04ca425915a7b991f3bcfa72b5b0e6f48e45`.
> 
> This time, I encountered several different issues during the rebuilds:
> 1. (irrelevant to KDE) build of gnome-keyring fails on the `check` phase, so I had to comment `(service gnome-desktop-service-type)` out of my system configuration;

Haven't seen this one but there were some other gnome things (and others like gstreamer) that failed. Therefore I also disabled the `gnome-desktop-service-type`.

> 2. `kaccounts-integration` appears to be defined in two files;

Thanks in the new version (patchset - I've rebased the branch, you'll have to "downgrade" guix on the next pull) it's already removed and the locations for package definitions are revised.

> 3. the overall state of the Plasma Desktop regressed from a broken, but visible panel ( https://github.com/phodina/guix/issues/6 ) to no panel - at least the initial animation completes and the cursor moves;

The issue is caused by Guix "bug" in package `extra-cmake-modules`.

The problem is that the function `ecm_find_qmlmodule` looks for Qt6 modules - well attempts by launching `Qt6::qmlplugindump`.

I've tried to specify the TARGET and QT_MAJOR to Qt::5 and also removing the Qt6 branch in `extra-cmake-modules/modules/ECMFindQmlModule.cmake.in`.

Here's the excerpt of the build of `kwin`:
```
-- Could NOT find hwdata (missing: hwdata_FOUND hwdata_PNPIDS_FILE)
-- Found QtQuick-QMLModule: TRUE (found version "")
-- qmlplugindump failed for QtQuick.Controls.
-- Could NOT find QtQuick.Controls-QMLModule (missing: QtQuick.Controls-QMLModule_FOUND)
-- Found QtQuick.Layouts-QMLModule: TRUE (found version "")
-- Found QtQuick.Window-QMLModule: TRUE (found version "")
-- Found QtMultimedia-QMLModule: TRUE (found version "")
-- Found org.kde.kquickcontrolsaddons-QMLModule: TRUE (found version "")
-- qmlplugindump failed for org.kde.plasma.core.
-- Could NOT find org.kde.plasma.core-QMLModule (missing: org.kde.plasma.core-QMLModule_FOUND)
```

And when we check for qmlplugindump we get this:

```
/tmp/guix-build-kwin-5.25.5.drv-2/kwin-5.25.5$ grep -r qmlplugindump
Findorg.kde.plasma.components-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
Findorg.kde.plasma.components-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
Findorg.kde.plasma.components-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
Findorg.kde.plasma.components-QMLModule.cmake:    message(STATUS "qmlplugindump failed for org.kde.plasma.components.")
Findorg.kde.plasma.core-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
Findorg.kde.plasma.core-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
Findorg.kde.plasma.core-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
Findorg.kde.plasma.core-QMLModule.cmake:    message(STATUS "qmlplugindump failed for org.kde.plasma.core.")
Findorg.kde.kquickcontrolsaddons-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
Findorg.kde.kquickcontrolsaddons-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
Findorg.kde.kquickcontrolsaddons-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
Findorg.kde.kquickcontrolsaddons-QMLModule.cmake:    message(STATUS "qmlplugindump failed for org.kde.kquickcontrolsaddons.")
FindQtMultimedia-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
FindQtMultimedia-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
FindQtMultimedia-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
FindQtMultimedia-QMLModule.cmake:    message(STATUS "qmlplugindump failed for QtMultimedia.")
FindQtQuick.Window-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
FindQtQuick.Window-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
FindQtQuick.Window-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
FindQtQuick.Window-QMLModule.cmake:    message(STATUS "qmlplugindump failed for QtQuick.Window.")
FindQtQuick.Layouts-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
FindQtQuick.Layouts-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
FindQtQuick.Layouts-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
FindQtQuick.Layouts-QMLModule.cmake:    message(STATUS "qmlplugindump failed for QtQuick.Layouts.")
FindQtQuick.Controls-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
FindQtQuick.Controls-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
FindQtQuick.Controls-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
FindQtQuick.Controls-QMLModule.cmake:    message(STATUS "qmlplugindump failed for QtQuick.Controls.")
FindQtQuick-QMLModule.cmake:    find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir})
FindQtQuick-QMLModule.cmake:    get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION)
FindQtQuick-QMLModule.cmake:    message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.")
FindQtQuick-QMLModule.cmake:    message(STATUS "qmlplugindump failed for QtQuick.")
```

However, the `extra-cmake-modules` depends only on `qtbase-5` and just for tests. The incriminated program is part of different package:

``` 
find /gnu/store -iname qmlplugindump
/gnu/store/7dpp0vpli7f4j4idaj5iwcpra8hl3xfb-qtdeclarative-5.15.2/bin/qmlplugindump
```

So the solution is probably to add `qtdeclarative-5` to list of inputs. However the same problem might happen with Qt6 and maybe more extra modules.

Stay tuned for this one as I have to rebuild majority of the packages :-D

There is also bug about this in earlier verions of `extra-cmake-modules` but the code is deprecated if I apply the patch [1] and it does not solve the problem that Guix stores all in the `/gnu/store/`.

To add to my curiosity Nix does not appear to have this problem [2] but they use some `setup-hook.sh` [2] - needs more studying.
 
> 4. `(define-public plasma (package (version "5.25.4")))` in `kde-plasma.scm` sticks out from the rest of packages on version "5.25.5".

Thanks. It's also updated as well as the rest of the packages to the newest packages.

Regarding the fwdup-service - Ludo'. That patch was sent by mistake as I wanted to see the firmware version in KDE environment. But I'd rather leave it for separate patch as it applies to Gnome and cli tools as well.

I've also enabled more tests and rewritten Qt and other packages to use gexps. 

So the amount of patches is now about close to 160. But on the other hand it also now packages apps like Kalendar.

[1] https://gitweb.gentoo.org/repo/gentoo.git/diff/kde-frameworks/extra-cmake-modules/files/extra-cmake-modules-5.40.0-qmlplugindump-path.patch?id=13dec085bcd84e7c7c67ae53cd5152c08bc9213e
[2] https://github.com/NixOS/nixpkgs/blob/nixos-22.05/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/default.nix

----
Petr