| Message ID | 20251212133900.344838-1-hongxu.jia@windriver.com |
|---|---|
| State | New |
| Headers | show |
| Series | [v2] gstreamer1.0: install Gst-1.0.gir to ${libdir} for multilib | expand |
Thanks, this looks fine. Alex On Fri, 12 Dec 2025 at 14:39, hongxu via lists.openembedded.org <hongxu.jia=windriver.com@lists.openembedded.org> wrote: > > 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 <hongxu.jia@windriver.com> > --- > ...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 <hongxu.jia@eng.windriver.com> > +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 <hongxu.jia@eng.windriver.com> > +--- > + 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" > > -- > 2.34.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#227590): https://lists.openembedded.org/g/openembedded-core/message/227590 > Mute This Topic: https://lists.openembedded.org/mt/116745751/1686489 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
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 <hongxu.jia@eng.windriver.com> +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 <hongxu.jia@eng.windriver.com> +--- + 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"
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 <hongxu.jia@windriver.com> --- ...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