I've had issues with 32-bit GStreamer on an x64 system for a while, and I've just gotten around to properly digging in to it. 32-bit GStreamer just fails to load most of its plugins sometimes.
The short version is, GStreamer binaries like gst-inspect-1.0 run /usr/libexec/gst-plugin-scanner to do the work of attempting to load plugins, and on a Slackware multilib system gst-plugin-scanner is a 64-bit binary.
So if you update 32-bit GStreamer (or just delete the ~/.cache/gstreamer-1.0/registry.i686.bin plugin cache) and then run /usr/bin/32/gst-inspect-1.0, it runs the 64-bit /usr/libexec/gst-plugin-scanner which fails to load all of the 32-bit libraries and blacklists them.
You can work around the issue by deleting the cache and running "/usr/bin/32/gst-inspect-1.0 --gst-disable-registry-fork" or by removing gst-plugin-scanner entirely to prevent the use of gst-plugin-scanner and create a good cache. This works, but you have to remember to do it every time you update GStreamer.
As for *fixing* the issue, we can add a suffix to --libexecdir in the gstreamer.SlackBuild and add an exception to convertpkg-compat32. That puts the troublesome files in /usr/libexec/{64,32}/gstreamer-1.0/ and prevents 64-bit and 32-bit versions from finding each other's files.
I'm not sure if there's a *better* solution, like asking GStreamer to change something on their end and not put binaries in libexec, but this is what I've got.
Code:
--- gstreamer.SlackBuild.ori 2021-03-17 04:21:16.000000000 +1100
+++ gstreamer.SlackBuild 2023-02-11 18:34:05.689290800 +1100
@@ -51,18 +51,23 @@
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
+ LIBEXECSUFFIX="32"
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
+ LIBEXECSUFFIX="32"
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
+ LIBEXECSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
+ LIBEXECSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
+ LIBEXECSUFFIX=""
fi
TMP=${TMP:-/tmp}
@@ -90,7 +95,7 @@
meson setup \
--prefix=/usr \
--libdir=lib${LIBDIRSUFFIX} \
- --libexecdir=/usr/libexec \
+ --libexecdir=/usr/libexec/${LIBEXECSUFFIX} \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--includedir=/usr/include \
Code:
--- /usr/sbin/convertpkg-compat32.ori 2023-02-11 18:39:17.903099682 +1100
+++ /usr/sbin/convertpkg-compat32 2023-02-11 18:41:53.484107208 +1100
@@ -191,6 +191,7 @@
case "$PKGNAM" in
"mesa") cp -a --parents usr/share/vulkan/icd.d KEEP/ ;;
"libunwind") cp -a --parents usr/include/libunwind-x86.h KEEP/ ;;
+ "gstreamer") cp -a --parents usr/libexec/32/ KEEP/ ;;
esac
# Remove stuff we only want from the 64-bit package: