Source: plasma-discover
Severity: important
Tags: patch

Due to changes in the secure boot summarized in 
https://wiki.debian.org/SecureBoot/CAChanges)
there needs to be an upgrade to a newer fwupd version in bookworm to allow 
updating the trust
chain.

This work is tracked by release team in the bookworm-pu bug:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139252

Unfortunately; upgrading to the newer fwupd version requires an ABI bump which 
means some minor
patches for the ABI change and rebuilding against the newer libfwupd.

I've validated this works properly, and I would like permission to send up a 
NMU coordinating
with the updated fwupd.  The proposed debdiff is attached to the release team 
bug.
diff -Nru plasma-discover-5.27.5/debian/changelog 
plasma-discover-5.27.5/debian/changelog
--- plasma-discover-5.27.5/debian/changelog     2023-05-27 11:23:42.000000000 
-0500
+++ plasma-discover-5.27.5/debian/changelog     2026-06-27 13:29:28.000000000 
-0500
@@ -1,3 +1,11 @@
+plasma-discover (5.27.5-2+deb12u1) bookworm; urgency=medium
+
+  * Backport patch for fwupd 2.0 compat
+  * d/control:
+    - b-d on newer libfwupd
+
+ -- Mario Limonciello <[email protected]>  Sat, 27 Jun 2026 13:29:28 -0500
+
 plasma-discover (5.27.5-2) unstable; urgency=medium
 
   * Release to unstable.
diff -Nru plasma-discover-5.27.5/debian/control 
plasma-discover-5.27.5/debian/control
--- plasma-discover-5.27.5/debian/control       2023-05-14 17:24:52.000000000 
-0500
+++ plasma-discover-5.27.5/debian/control       2026-06-27 13:29:28.000000000 
-0500
@@ -16,7 +16,7 @@
                libcurl4-gnutls-dev,
                libdebconf-kde-dev (>= 1.0.0),
                libflatpak-dev (>= 0.11.8~) [linux-any],
-               libfwupd-dev (>= 1.5.0~) [linux-any],
+               libfwupd-dev (>= 2.0.20) [linux-any],
                libkf5archive-dev (>= 5.102.0~),
                libkf5attica-dev (>= 5.23~),
                libkf5config-dev (>= 5.102.0~),
diff -Nru plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes 
plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes
--- plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes 
1969-12-31 18:00:00.000000000 -0600
+++ plasma-discover-5.27.5/debian/patches/fwupd-2.0-compatibility-fixes 
2026-06-27 13:29:28.000000000 -0500
@@ -0,0 +1,137 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <[email protected]>
+Date: Sat, 27 Jun 2026 19:03 -0500
+Subject: [PATCH] Fix compilation against fwupd 2.0 API
+
+
+---
+Fix fwupd 2.0 API compatibility
+--- a/libdiscover/backends/FwupdBackend/FwupdBackend.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdBackend.cpp
+@@ -198,7 +198,8 @@
+         return nullptr;
+     }
+ 
+-    const QUrl update_uri(QString::fromUtf8(fwupd_release_get_uri(release)));
++    GPtrArray *locations = fwupd_release_get_locations(release);
++    const QUrl update_uri(locations && locations->len > 0 ? 
QString::fromUtf8((const gchar *)g_ptr_array_index(locations, 0)) : QString());
+     if (!update_uri.isValid()) {
+         qWarning() << "Fwupd Error: No Update URI available for" << 
app->name() << "[" << app->id() << "]";
+         return nullptr;
+@@ -323,13 +324,13 @@
+ {
+     for (uint i = 0; remotes && i < remotes->len; i++) {
+         FwupdRemote *remote = (FwupdRemote *)g_ptr_array_index(remotes, i);
+-        if (!fwupd_remote_get_enabled(remote))
++        if (!fwupd_remote_has_flag(remote, FWUPD_REMOTE_FLAG_ENABLED))
+             continue;
+ 
+         if (fwupd_remote_get_kind(remote) == FWUPD_REMOTE_KIND_LOCAL)
+             continue;
+ 
+-        fwupd_client_refresh_remote_async(client, remote, m_cancellable, 
fwupd_client_refresh_remote_cb, this);
++        fwupd_client_refresh_remote_async(client, remote, 
FWUPD_CLIENT_DOWNLOAD_FLAG_NONE, m_cancellable, fwupd_client_refresh_remote_cb, 
this);
+     }
+ }
+ 
+--- a/libdiscover/backends/FwupdBackend/FwupdResource.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdResource.cpp
+@@ -161,13 +161,15 @@
+     m_description = 
QString::fromUtf8((fwupd_release_get_description(release)));
+     m_homepage = QUrl(QString::fromUtf8(fwupd_release_get_homepage(release)));
+     m_license = QString::fromUtf8(fwupd_release_get_license(release));
+-    m_updateURI = QString::fromUtf8(fwupd_release_get_uri(release));
++    GPtrArray *locations = fwupd_release_get_locations(release);
++    if (locations != nullptr && locations->len > 0) {
++        m_updateURI = QString::fromUtf8((const gchar 
*)g_ptr_array_index(locations, 0));
++    }
+ }
+ 
+ void FwupdResource::setDeviceDetails(FwupdDevice *dev)
+ {
+     m_isLiveUpdatable = fwupd_device_has_flag(dev, 
FWUPD_DEVICE_FLAG_UPDATABLE);
+-    m_isOnlyOffline = fwupd_device_has_flag(dev, 
FWUPD_DEVICE_FLAG_ONLY_OFFLINE);
+     m_needsReboot = fwupd_device_has_flag(dev, 
FWUPD_DEVICE_FLAG_NEEDS_REBOOT);
+ 
+     if (fwupd_device_get_name(dev)) {
+@@ -182,7 +184,6 @@
+     m_vendor = QString::fromUtf8(fwupd_device_get_vendor(dev));
+     m_releaseDate = 
QDateTime::fromSecsSinceEpoch(fwupd_device_get_created(dev)).date();
+     m_availableVersion = QString::fromUtf8(fwupd_device_get_version(dev));
+-    m_description = QString::fromUtf8((fwupd_device_get_description(dev)));
+ 
+     if (fwupd_device_get_icons(dev)->len >= 1)
+         m_iconName = QString::fromUtf8((const gchar 
*)g_ptr_array_index(fwupd_device_get_icons(dev), 0)); // Check whether given 
icon exists or not!
+--- a/libdiscover/backends/FwupdBackend/FwupdResource.h
++++ b/libdiscover/backends/FwupdBackend/FwupdResource.h
+@@ -102,11 +102,6 @@
+         return m_isDeviceLocked;
+     }
+ 
+-    bool isOnlyOffline() const
+-    {
+-        return m_isOnlyOffline;
+-    }
+-
+     bool isLiveUpdatable() const
+     {
+         return m_isLiveUpdatable;
+@@ -146,7 +141,6 @@
+ 
+     QString m_updateURI;
+     bool m_isDeviceLocked = false; // True if device is locked!
+-    bool m_isOnlyOffline = false; // True if only offline updates
+     bool m_isLiveUpdatable = false; // True if device is live updatable
+     bool m_needsReboot = false; // True if device needs Reboot
+     QString m_origin;
+--- a/libdiscover/backends/FwupdBackend/FwupdSourcesBackend.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdSourcesBackend.cpp
+@@ -34,7 +34,7 @@
+         case Qt::CheckStateRole: {
+             if (value == Qt::Checked) {
+                 m_backend->m_currentItem = item;
+-                if (fwupd_remote_get_approval_required(remote)) {
++                if (fwupd_remote_has_flag(remote, 
FWUPD_REMOTE_FLAG_APPROVAL_REQUIRED)) {
+                     QString eulaText = i18n("The remote %1 require that you 
accept their license:\n %2",
+                                             
QString::fromUtf8(fwupd_remote_get_title(remote)),
+                                             
QString::fromUtf8(fwupd_remote_get_agreement(remote)));
+@@ -88,7 +88,7 @@
+         it->setData(id, AbstractSourcesBackend::IdRole);
+         
it->setData(QVariant(QString::fromUtf8(fwupd_remote_get_title(remote))), 
Qt::ToolTipRole);
+         it->setCheckable(true);
+-        it->setCheckState(fwupd_remote_get_enabled(remote) ? Qt::Checked : 
Qt::Unchecked);
++        it->setCheckState(fwupd_remote_has_flag(remote, 
FWUPD_REMOTE_FLAG_ENABLED) ? Qt::Checked : Qt::Unchecked);
+         m_sources->appendRow(it);
+     }
+ }
+@@ -121,7 +121,7 @@
+ {
+     FwupdRemote *remote =
+         fwupd_client_get_remote_by_id(backend->client, 
m_currentItem->data(AbstractSourcesBackend::IdRole).toString().toUtf8().constData(),
 nullptr, nullptr);
+-    m_currentItem->setCheckState(fwupd_remote_get_enabled(remote) ? 
Qt::Checked : Qt::Unchecked);
++    m_currentItem->setCheckState(fwupd_remote_has_flag(remote, 
FWUPD_REMOTE_FLAG_ENABLED) ? Qt::Checked : Qt::Unchecked);
+ 
+     m_currentItem = nullptr;
+ }
+--- a/libdiscover/backends/FwupdBackend/FwupdTransaction.cpp
++++ b/libdiscover/backends/FwupdBackend/FwupdTransaction.cpp
+@@ -82,10 +82,6 @@
+     FwupdInstallFlags install_flags = FWUPD_INSTALL_FLAG_NONE;
+     g_autoptr(GError) error = nullptr;
+ 
+-    /* only offline supported */
+-    if (m_app->isOnlyOffline())
+-        install_flags = static_cast<FwupdInstallFlags>(install_flags | 
FWUPD_INSTALL_FLAG_OFFLINE);
+-
+     if (!fwupd_client_install(m_backend->client, 
m_app->deviceId().toUtf8().constData(), file.toUtf8().constData(), 
install_flags, nullptr, &error)) {
+         m_backend->handleError(error);
+         setStatus(DoneWithErrorStatus);
+@@ -110,7 +106,7 @@
+ 
+ void FwupdTransaction::finishTransaction()
+ {
+-    AbstractResource::State newState;
++    AbstractResource::State newState = AbstractResource::None;
+     switch (role()) {
+     case InstallRole:
+     case ChangeAddonsRole:
diff -Nru plasma-discover-5.27.5/debian/patches/series 
plasma-discover-5.27.5/debian/patches/series
--- plasma-discover-5.27.5/debian/patches/series        1969-12-31 
18:00:00.000000000 -0600
+++ plasma-discover-5.27.5/debian/patches/series        2026-06-27 
13:29:28.000000000 -0500
@@ -0,0 +1 @@
+fwupd-2.0-compatibility-fixes

Reply via email to