While installing 32 bit gstreamer package and 64 bit gstreamer package to
one rootfs, package management (dnf) reported a conflict failure
|Error: Transaction test error:
| file /usr/share/gir-1.0/Gst-1.0.gir conflicts between attempted installs of
gstreamer1.0-dev-1.26.7-r0.wr2500.corei7_64 and
lib32-gstreamer1.0-dev-1.26.7-r0.wr2500.corei7_32
Due to upstream commit [1], the size of padding differs between 32 bit
arch and 64 bit arch
...
|typedef struct {
| /* < private > */
| gpointer pointer;
|#if GLIB_SIZEOF_VOID_P == 8
| guint8 padding[8];
|#elif GLIB_SIZEOF_VOID_P == 4
| guint8 padding[12];
|#else
| #error "Only 32 bit and 64 bit pointers supported currently"
|#endif
|} GstIdStr;
...
It made the generated Gst-1.0.gir be different for 32 bit and 64 bit packages,
Install Gst-1.0.gir to ${libdir} which splits 32 bit and 64 bit libraries
Submit a patch to upstream to add meson option (gir_dir_prefix) to override
default
gir install location (datadir). When multilib is enabled, install .gir files to
${libdir} other than ${datadir}
[1]
https://gitlab.freedesktop.org/-/commit/0ee18781f9b210129da23a85236266bf84bafa83#f9880c83c8bdc4d61ac7d51a4a212f602cad5d86_0_39
Signed-off-by: Hongxu Jia <[email protected]>
---
...ir_prefix-option-to-override-gir-def.patch | 149 ++++++++++++++++++
.../gstreamer/gstreamer1.0_1.26.7.bb | 3 +
2 files changed, 152 insertions(+)
create mode 100644
meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-meson-Add-gir_dir_prefix-option-to-override-gir-def.patch
diff --git
a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-meson-Add-gir_dir_prefix-option-to-override-gir-def.patch
b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-meson-Add-gir_dir_prefix-option-to-override-gir-def.patch
new file mode 100644
index 0000000000..506e33c61f
--- /dev/null
+++
b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-meson-Add-gir_dir_prefix-option-to-override-gir-def.patch
@@ -0,0 +1,149 @@
+From 6fb2149fc5c7b1805c138a52990305a4f53170fa Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <[email protected]>
+Date: Thu, 11 Dec 2025 18:38:24 -0800
+Subject: [PATCH] meson: Add gir_dir_prefix option to override gir default
+ location
+
+Originally, the .gir files would always get installed into the default
+location (datadir).
+
+This commit adds meson option (gir_dir_prefix) to override it as intermediate
+prefix for gir installation under ${prefix}, such as
+
+ $ meson setup -Dgir_dir_prefix=lib64
+
+The .gir files are installed to /usr/lib64/gir-1.0
+
+ Installing gst/Gst-1.0.gir to /usr/lib64/gir-1.0
+
+Upstream-Status: Submitted
[https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10363]
+
+Signed-off-by: Hongxu Jia <[email protected]>
+---
+ gst/meson.build | 1 +
+ libs/gst/base/meson.build | 1 +
+ libs/gst/check/meson.build | 1 +
+ libs/gst/controller/meson.build | 1 +
+ libs/gst/net/meson.build | 1 +
+ meson.build | 23 ++++++++++++++++++++++-
+ meson_options.txt | 3 +++
+ 7 files changed, 30 insertions(+), 1 deletion(-)
+
+diff --git a/gst/meson.build b/gst/meson.build
+index c69a6dc..ebe673d 100644
+--- a/gst/meson.build
++++ b/gst/meson.build
+@@ -322,6 +322,7 @@ if build_gir
+ 'export_packages' : pkg_name,
+ 'includes' : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0' ],
+ 'install' : true,
++ 'install_dir_gir': gst_girdir,
+ 'extra_args' : gst_gir_extra_args,
+ }
+ library_def += {'gir': [gir]}
+diff --git a/libs/gst/base/meson.build b/libs/gst/base/meson.build
+index b7aca73..2fb0590 100644
+--- a/libs/gst/base/meson.build
++++ b/libs/gst/base/meson.build
+@@ -89,6 +89,7 @@ if build_gir
+ 'include_directories' : [configinc, libsinc, privinc],
+ 'includes' : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0', 'Gst-1.0'],
+ 'install' : true,
++ 'install_dir_gir': gst_girdir,
+ 'extra_args' : gst_gir_extra_args,
+ }
+
+diff --git a/libs/gst/check/meson.build b/libs/gst/check/meson.build
+index 679a15d..e934526 100644
+--- a/libs/gst/check/meson.build
++++ b/libs/gst/check/meson.build
+@@ -86,6 +86,7 @@ if build_gir
+ 'include_directories' : [configinc, libsinc, privinc],
+ 'includes' : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0', 'Gst-1.0'],
+ 'install' : true,
++ 'install_dir_gir': gst_girdir,
+ 'extra_args' : gst_gir_extra_args,
+ }
+ library_def += {'gir': [gir]}
+diff --git a/libs/gst/controller/meson.build b/libs/gst/controller/meson.build
+index 9d38af8..411b951 100644
+--- a/libs/gst/controller/meson.build
++++ b/libs/gst/controller/meson.build
+@@ -81,6 +81,7 @@ if build_gir
+ 'include_directories' : [configinc, libsinc, privinc],
+ 'includes' : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0', 'Gst-1.0'],
+ 'install' : true,
++ 'install_dir_gir': gst_girdir,
+ 'extra_args' : gst_gir_extra_args,
+ }
+ library_def += {'gir': [gir]}
+diff --git a/libs/gst/net/meson.build b/libs/gst/net/meson.build
+index 60ed92c..b81139e 100644
+--- a/libs/gst/net/meson.build
++++ b/libs/gst/net/meson.build
+@@ -67,6 +67,7 @@ if build_gir
+ 'include_directories' : [configinc, libsinc],
+ 'includes' : ['GLib-2.0', 'GObject-2.0', 'GModule-2.0', 'Gio-2.0',
'Gst-1.0'],
+ 'install' : true,
++ 'install_dir_gir': gst_girdir,
+ 'extra_args' : gst_gir_extra_args,
+ }
+ library_def += {'gir': [gir]}
+diff --git a/meson.build b/meson.build
+index e2127f6..7ecfc2d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -629,6 +629,27 @@ if static_build
+ gst_c_args += ['-DGST_STATIC_COMPILATION']
+ endif
+
++gir_dir_prefix = get_option('gir_dir_prefix')
++if gir_dir_prefix == '' or gir_dir_prefix == get_option('datadir')
++ gir_dir_prefix = get_option('datadir')
++ gir_dir_pc_prefix = '${datadir}'
++else
++ gir_dir_pc_prefix = '${prefix}' / gir_dir_prefix
++endif
++
++# This is effectively the GIR XML format major version
++gir_suffix = 'gir-1.0'
++
++gst_girdir = prefix / gir_dir_prefix / gir_suffix
++
++
++if build_gir
++ gst_c_args += [
++ '-DGIR_SUFFIX="@0@"'.format(gir_suffix),
++ '-DGIR_DIR="@0@"'.format(gst_girdir),
++ ]
++endif
++
+ # Used in gst/parse/meson.build and below
+ python3 = import('python').find_installation()
+
+@@ -680,7 +701,7 @@ pkgconfig_variables = [
+ 'exec_prefix=${prefix}',
+ 'toolsdir=${exec_prefix}/bin',
+ 'pluginsdir=${libdir}/gstreamer-1.0',
+- 'girdir=${datadir}/gir-1.0',
++ 'girdir=' + gir_dir_pc_prefix / gir_suffix,
+ 'typelibdir=${libdir}/girepository-1.0',
+ 'pluginscannerdir=${libexecdir}/gstreamer-1.0'
+ ]
+diff --git a/meson_options.txt b/meson_options.txt
+index 78af552..97c03c6 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -32,6 +32,9 @@ option('examples', type : 'feature', value : 'auto', yield :
true)
+ option('tests', type : 'feature', value : 'auto', yield : true)
+ option('benchmarks', type : 'feature', value : 'auto', yield : true)
+ option('tools', type : 'feature', value : 'auto', yield : true)
++option('gir_dir_prefix',
++ type: 'string',
++ description: 'Intermediate prefix for gir installation under
${prefix}')
+ option('introspection', type : 'feature', value : 'auto', yield : true,
description : 'Generate gobject-introspection bindings')
+ option('nls', type : 'feature', value : 'auto', yield: true, description :
'Enable native language support (translations)')
+ option('extra-checks', type : 'feature', value : 'enabled', yield : true,
description : 'Enable extra runtime checks')
+--
+2.34.1
+
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.7.bb
b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.7.bb
index 444165a869..88b1af0796 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.7.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.7.bb
@@ -21,6 +21,7 @@ SRC_URI =
"https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.x
file://0002-tests-add-support-for-install-the-tests.patch \
file://0003-tests-use-a-dictionaries-for-environment.patch \
file://0004-tests-add-helper-script-to-run-the-installed_tests.patch \
+
file://0001-meson-Add-gir_dir_prefix-option-to-override-gir-def.patch \
"
SRC_URI[sha256sum] =
"18a5e214114dc501407697dd458514bba62cadd5414c60f793cf70141a4d0bb3"
@@ -56,6 +57,8 @@ EXTRA_OEMESON += " \
${@gettext_oemeson(d)} \
"
+EXTRA_OEMESON:append:class-target = " ${@'-Dgir_dir_prefix=${baselib}' if d.getVar('MULTILIBS') else ''}"
+
GIR_MESON_ENABLE_FLAG = "enabled"
GIR_MESON_DISABLE_FLAG = "disabled"