summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev-cpp/gstreamermm/files/gstreamermm-1.10.0-no-volatile.patch17
-rw-r--r--dev-cpp/gstreamermm/gstreamermm-1.10.0.ebuild4
2 files changed, 21 insertions, 0 deletions
diff --git a/dev-cpp/gstreamermm/files/gstreamermm-1.10.0-no-volatile.patch b/dev-cpp/gstreamermm/files/gstreamermm-1.10.0-no-volatile.patch
new file mode 100644
index 000000000000..ede9f910ae14
--- /dev/null
+++ b/dev-cpp/gstreamermm/files/gstreamermm-1.10.0-no-volatile.patch
@@ -0,0 +1,17 @@
+https://bugs.gentoo.org/786444
+
+g_once_init_enter(void*) should NOT be passed a volatile argument:
+https://developer.gnome.org/glib/stable/glib-Threads.html#g-once-init-enter
+"While location has a volatile qualifier, this is a historical
+artifact and the pointer passed to it should not be volatile."
+--- gstreamermm-1.10.0/gstreamer/gstreamermm/register.h.orig 2017-10-20 12:26:46.000000000 +0300
++++ gstreamermm-1.10.0/gstreamer/gstreamermm/register.h 2021-05-25 17:52:13.031337753 +0300
+@@ -110,7 +110,7 @@
+ /* The typedef for GType may be gulong or gsize, depending on the
+ * system and whether the compiler is c++ or not. The g_once_init_*
+ * functions always take a gsize * though ... */
+- static volatile gsize gonce_data = 0;
++ static gsize gonce_data = 0;
+ if (g_once_init_enter (&gonce_data)) {
+ GTypeInfo info;
+
diff --git a/dev-cpp/gstreamermm/gstreamermm-1.10.0.ebuild b/dev-cpp/gstreamermm/gstreamermm-1.10.0.ebuild
index 6fdef7109be2..fced073bba0a 100644
--- a/dev-cpp/gstreamermm/gstreamermm-1.10.0.ebuild
+++ b/dev-cpp/gstreamermm/gstreamermm-1.10.0.ebuild
@@ -40,6 +40,10 @@ DEPEND="${RDEPEND}
# Installs reference docs into /usr/share/doc/gstreamermm-1.0/
# but that's okay, because the rest of dev-cpp/*mm stuff does the same
+PATCHES=(
+ "${FILESDIR}"/${P}-no-volatile.patch
+)
+
src_prepare() {
if ! use examples; then
# don't waste time building examples