Control: reopen -1
Control: found -1 2.1.7-3

fwupd (2.1.7-3) unstable; urgency=medium
.
  * debian: move .gir files from libfwupd-dev to gir1.2-fwupd-2.0
    (Closes: #1143623)

This is not the right solution to the bug reported as #1143623. gir1.2-fwupd-2.0 is Multi-Arch: same, just like libfwupd-dev, so it's an equally serious bug to be unable to co-install different architectures of gir1.2-fwupd-2.0 (for example the :amd64 and :i386 or :s390x versions of that package).

Moving the GIR XML to gir1.2-fwupd-2.0 also made gir1.2-fwupd-2.0 considerably larger, and gave it extra dependencies that are appropriate for a -dev package but not for a runtime library package:

    Depends: gir1.2-gio-2.0, gir1.2-gio-2.0-dev, gir1.2-gobject-2.0, 
gir1.2-gobject-2.0-dev, libfwupd3 (>= 2.1.7)
                             ^^^^^^^^^^^^^^^^^^                      
^^^^^^^^^^^^^^^^^^^^^^

The right solution to #1143623 would be one of these three:

1. (Probably the best short term fix)
   Put the .gir files back in libfwupd-dev, but change the Debian packaging
   so that they're installed to
   /usr/lib/${DEB_HOST_MULTIARCH}/gir-1.0 instead of /usr/share/gir-1.0,
   similar to
   https://salsa.debian.org/gstreamer-team/gstreamer1.0/-/merge_requests/25
   in gstreamer1.0. This way, each architecture will load its own
   architecture-specific version of the GIR XML. This is a
   Debian-specific change: upstream libfwupd would still have to install
   into /usr/share/gir-1.0 by default.

2. (Requires NEW queue)
   Separate the .gir files into a new gir1.2-fwupd-2.0-dev binary
   package. Either install them into
   /usr/lib/${DEB_HOST_MULTIARCH}/gir-1.0, or as a workaround, don't make
   the new binary package Multi-Arch: same.

3. (Longer term) Fix whatever upstream issue is causing the header files
   to be mis-parsed by GObject-Introspection, so that Fwupd-2.0.gir is
   the same on every architecture. Looking at the diff between amd64 and
   i386, it seems like the various enums are not being introspected
   correctly, with constants showing up as having value -1 on amd64
   but 0 on i386, where their real value is G_MAXUINT64:

   --- gir1.2-fwupd-2.0_2.1.7-3_amd64/usr/share/gir-1.0/Fwupd-2.0.gir   
2026-08-09 23:35:51.000000000 +0100
   +++ gir1.2-fwupd-2.0_2.1.7-3_i386/usr/share/gir-1.0/Fwupd-2.0.gir    
2026-08-09 23:35:51.000000000 +0100
   @@ -14168,7 +14168,7 @@
                 line="270">The device doesn't require verification of the newly 
installed version.</doc>
          </member>
          <member name="unknown"
   -              value="-1"
   +              value="0"
                  c:identifier="FWUPD_DEVICE_FLAG_UNKNOWN">
            <doc xml:space="preserve"
                 filename="libfwupd/fwupd-device-struct.h"

   It looks like libfwupd is doing things that are not compatible with
   the assumption made by GLib's GType system: it's setting the UNKNOWN
   value for various enums to G_MAXUINT64, but the GFlagsValue data
   structure represents members of a set of flags as guint (an alias for
   unsigned int, 32 bits on all Debian platforms), so this is simply not
   representable in the GType system. If you want these sets of flags to
   be representable by the GType system and usable by GObject-Introspection
   languages, then they will need to be limited to 32 bits wide (which would
   be an ABI break).

Sorry to be bringing bad news,
    smcv

Reply via email to