Bug#1152880: librsvg FTCBFS: multiple reasons

Helmut Grohne helmut at subdivi.de
Mon Nov 2 15:38:31 GMT 2026


Source: librsvg
Version: 2.63.3+dfsg-1
Tags: patch
User: debian-cross at lists.debian.org
Usertags: cross-satisfiability ftcbfs
Control: affects 1126007 + src:librsvg

librsvg fails to cross build from source for a fair number of reasons.

The first issue to run into is the locales dependency. The package is
Arch: all and not Multi-Arch: foreign. Rather than figuring out how to
make it work, I observe that it is only used inside dh_auto_test, so
annotating the dependency <!nocheck> is feasible. At that point, it
becomes irrelevant to cross building.

With that change in place, librsvg's dependencies become theoretically
satisfiable. Unfortunately, apt sees a difference to practice. The rustc
and cargo dependencies are interpreted has host architecture
dependencies, so they would get us tools that cannot be run. Since they
are multi-target tools, we need their native version. While the rustc
dependency normally includes libstd-rust-dev, it gets us the wrong
libstd-rust-dev once rustc is annotated :native, so libstd-rust-dev must
be added to Build-Depends explicitly.

At this point, Build-Depends can be installed. Unfortunately, meson
refuses to configure. It objects to enabling the introspection and vala
features as we cannot run host binaries. Indeed, there is no known way
to run the g-ir-scanner without actually running host binaries, but on
Debian the tool hides this fact and transparently uses qemu when needed,
so meson doesn't actually get to run host binaries. For vala, the story
is different. It actually doesn't require running host binaries. I'm not
sure whether removing the "meson.can_run_host_binaries()" calls is
acceptable upstream, but it certainly is not generally correct.

With that change, meson manages to configure librsvg. Unfortunately, it
does not pass a host triplet to cargo, so the Rust components are built
for the build architecture. librsvg's meson.build expect that you pass
the relevant triplet via -Dtriplet= and to be precise, a Rust triplet
rather than a GNU triplet is expected here.
/usr/share/rustc/architecture.mk can compute the relevant value.

Then, the build proceeds quite far until meson launches the wrong
vapigen. This is not a bug in librsvg but in meson itself and it is
reported as #1126007.

Please consider applying the attached patch.

Helmut
-------------- next part --------------
diff -Nru librsvg-2.63.3+dfsg/debian/changelog librsvg-2.63.3+dfsg/debian/changelog
--- librsvg-2.63.3+dfsg/debian/changelog	2026-10-19 17:37:26.000000000 +0200
+++ librsvg-2.63.3+dfsg/debian/changelog	2026-11-01 13:35:36.000000000 +0100
@@ -1,3 +1,14 @@
+librsvg (2.63.3+dfsg-1.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Improve cross building: (Closes: #-1)
+    + Turn locales dependency optional via <!nocheck>.
+    + Use a native Rust toolchain.
+    + Pass the triplet option to meson.
+    + cross.patch: Reduce introspection and vala requirements.
+
+ -- Helmut Grohne <helmut at subdivi.de>  Sun, 01 Nov 2026 13:35:36 +0100
+
 librsvg (2.63.3+dfsg-1) unstable; urgency=medium
 
   * New upstream release
diff -Nru librsvg-2.63.3+dfsg/debian/control librsvg-2.63.3+dfsg/debian/control
--- librsvg-2.63.3+dfsg/debian/control	2026-10-19 17:37:26.000000000 +0200
+++ librsvg-2.63.3+dfsg/debian/control	2026-11-01 13:35:36.000000000 +0100
@@ -10,8 +10,8 @@
 Build-Depends:
  debhelper-compat (= 14),
  dh-sequence-gir,
- cargo,
- cargo-c (>= 0.10.10),
+ cargo:native,
+ cargo-c:native (>= 0.10.10),
  gir1.2-cairo-1.0-dev <!nogir>,
  gir1.2-gdkpixbuf-2.0-dev <!nogir>,
  gir1.2-gio-2.0-dev <!nogir>,
@@ -24,11 +24,12 @@
  libglib2.0-dev,
  libharfbuzz-dev,
  libpango1.0-dev (>= 1.58.2),
+ libstd-rust-dev,
  libxml2-dev,
- locales,
+ locales <!nocheck>,
  meson (>= 1.3.0),
  python3-docutils,
- rustc (>= 1.85.1),
+ rustc:native (>= 1.85.1),
  valac,
 Build-Depends-Indep:
  gi-docgen <!nodoc>,
diff -Nru librsvg-2.63.3+dfsg/debian/patches/cross.patch librsvg-2.63.3+dfsg/debian/patches/cross.patch
--- librsvg-2.63.3+dfsg/debian/patches/cross.patch	1970-01-01 01:00:00.000000000 +0100
+++ librsvg-2.63.3+dfsg/debian/patches/cross.patch	2026-11-01 13:35:36.000000000 +0100
@@ -0,0 +1,14 @@
+--- librsvg-2.63.3+dfsg.orig/meson.build
++++ librsvg-2.63.3+dfsg/meson.build
+@@ -158,9 +158,9 @@
+ if host_system == 'windows'
+   build_gir = get_option('introspection').require(get_option('default_library') != 'static' and meson.can_run_host_binaries() and gi_dep.found())
+ else
+-  build_gir = get_option('introspection').require(meson.can_run_host_binaries() and gi_dep.found())
++  build_gir = get_option('introspection').require(gi_dep.found())
+ endif
+-build_vala = get_option('vala').require(meson.can_run_host_binaries() and vapigen_dep.found())
++build_vala = get_option('vala').require(vapigen_dep.found())
+ 
+ build_rsvg_convert = get_option('rsvg-convert')
+ 
diff -Nru librsvg-2.63.3+dfsg/debian/patches/series librsvg-2.63.3+dfsg/debian/patches/series
--- librsvg-2.63.3+dfsg/debian/patches/series	2026-10-19 17:37:26.000000000 +0200
+++ librsvg-2.63.3+dfsg/debian/patches/series	2026-11-01 13:35:36.000000000 +0100
@@ -4,3 +4,4 @@
 workarounds/skip-broken-reftests.diff
 workarounds/Skip-invalid_viewbox-test-on-32-bit-x86.patch
 workarounds/tests-Skip-known-failing-tests-on-i386.patch
+cross.patch
diff -Nru librsvg-2.63.3+dfsg/debian/rules librsvg-2.63.3+dfsg/debian/rules
--- librsvg-2.63.3+dfsg/debian/rules	2026-10-19 17:37:26.000000000 +0200
+++ librsvg-2.63.3+dfsg/debian/rules	2026-11-01 13:35:36.000000000 +0100
@@ -7,6 +7,8 @@
 export CARGO_VENDOR_DIR = $(CURDIR)/debian/missing-sources
 NULL =
 
+include /usr/share/rustc/architecture.mk
+
 # Increase reftest tolerance a bit to account for different harfbuzz,
 # pango, etc.
 export RSVG_TEST_TOLERANCE=20
@@ -27,6 +29,7 @@
 	dh_auto_configure -- \
 		-Davif=$(if $(shell dpkg-vendor --derives-from Ubuntu && echo y),disabled,enabled) \
 		-Dpixbuf-loader=enabled \
+		-Dtriplet=$(DEB_HOST_RUST_TYPE) \
 		$(NULL)
 
 execute_after_dh_auto_build:


More information about the pkg-gnome-maintainers mailing list