commit:     c299fc3514a283058ff66ac580e1d7d26bd968db
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Jan  8 08:21:15 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Jan  8 08:21:22 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c299fc35

media-video/vlc: fix parallel make issue w/ USE=vdpau

Thanks to Tom for finding the fixes.

Closes: https://bugs.gentoo.org/946178
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-video/vlc/files/vlc-3.0.2.1-vdpau.patch | 174 ++++++++++++++++++++++++++
 media-video/vlc/vlc-3.0.21-r1.ebuild          |   3 +-
 media-video/vlc/vlc-3.0.21-r2.ebuild          |   3 +-
 3 files changed, 178 insertions(+), 2 deletions(-)

diff --git a/media-video/vlc/files/vlc-3.0.2.1-vdpau.patch 
b/media-video/vlc/files/vlc-3.0.2.1-vdpau.patch
new file mode 100644
index 000000000000..884c1fcd1eb2
--- /dev/null
+++ b/media-video/vlc/files/vlc-3.0.2.1-vdpau.patch
@@ -0,0 +1,174 @@
+https://bugs.gentoo.org/946178
+https://code.videolan.org/videolan/vlc/-/issues/28374
+https://code.videolan.org/videolan/vlc/-/merge_requests/6454
+https://code.videolan.org/videolan/vlc/-/merge_requests/6496
+
+From 056d7349a559cb63b456505bb11c08a4910452aa Mon Sep 17 00:00:00 2001
+From: Alexandre Janniaux <[email protected]>
+Date: Sun, 1 Dec 2024 06:25:29 +0100
+Subject: [PATCH] Makefile.am: enforce pkglib dependency order for install
+
+During installation, no dependencies existed between the targets being
+installed and the targets being relinked against the installed version,
+which made the following race condition:
+
+    ../doltlibtool   --mode=install /usr/bin/install -c   libvlc_pipewire.la 
libvlc_pulse.la libvlc_vdpau.la libvlc_xcb_events.la 
'/builds/videolan/vlc/vlc-4.0.0-dev/_inst/lib/vlc'
+    libtool: install: (cd 
/builds/videolan/vlc/vlc-4.0.0-dev/_build/sub/modules; /bin/bash 
"/builds/videolan/vlc/vlc-4.0.0-dev/_build/sub/modules/../libtool"  --silent 
--tag CC --mode=relink gcc -g -O2 -pthread -Wall -Wextra -Wsign-compare -Wundef 
-Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security 
-Wduplicated-branches -Wduplicated-cond -Wbad-function-cast -Wwrite-strings 
-Wmissing-prototypes -Werror-implicit-function-declaration -Winit-self 
-Wlogical-op -Wshadow=local -Wmultistatement-macros -pipe 
-Werror=missing-field-initializers -Werror=format 
-Werror=incompatible-pointer-types -Werror=restrict -Werror=int-conversion 
-Werror=implicit-int -Werror=return-mismatch 
-Werror=declaration-missing-parameter-type -fvisibility=hidden -fno-math-errno 
-funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans 
-fcx-limited-range -funroll-loops -fstack-protector-strong -avoid-version 
-module -export-symbols-regex "^vlc_entry" -shrext .so -no-undefined 
../compat/libcompa
 t.la ../src/libvlccore.la -Wl,-z,defs -o libvdpau_instance_plugin.la -rpath 
/builds/videolan/vlc/vlc-4.0.0-dev/_inst/lib/vlc/plugins/vdpau 
hw/vdpau/libvdpau_instance_plugin_la-device.lo libvlc_vdpau.la -lSM -lICE -lX11 
-lanl )
+    libtool: install: /usr/bin/install -c .libs/libvlc_vdpau.so.0.0.0 
/builds/videolan/vlc/vlc-4.0.0-dev/_inst/lib/vlc/libvlc_vdpau.so.0.0.0
+    /usr/bin/ld: cannot find -lvlc_vdpau: No such file or directory
+    libtool: install: (cd /builds/videolan/vlc/vlc-4.0.0-dev/_inst/lib/vlc && 
{ ln -s -f libvlc_vdpau.so.0.0.0 libvlc_vdpau.so.0 || { rm -f libvlc_vdpau.so.0 
&& ln -s libvlc_vdpau.so.0.0.0 libvlc_vdpau.so.0; }; })
+    collect2: error: ld returned 1 exit status
+    libtool: install: (cd /builds/videolan/vlc/vlc-4.0.0-dev/_inst/lib/vlc && 
{ ln -s -f libvlc_vdpau.so.0.0.0 libvlc_vdpau.so || { rm -f libvlc_vdpau.so && 
ln -s libvlc_vdpau.so.0.0.0 libvlc_vdpau.so; }; })
+    ----------------------------------------------------------------------
+    libtool:   error: error: relink 'libvdpau_instance_plugin.la' with the 
above command before installing it
+    libtool: install: /usr/bin/install -c .libs/libvlc_vdpau.lai 
/builds/videolan/vlc/vlc-4.0.0-dev/_inst/lib/vlc/libvlc_vdpau.la
+    make[6]: *** [Makefile:15527: install-vdpauLTLIBRARIES] Error 1
+
+Here, with the thread number, we have:
+ - (1) doltlibtool installing the pkglibs (install-exec-am).
+ - (2) in parallel, libtool relinking the vdpau instance plugin.
+ - (1) libtool starts to be called for "relinking" (which is only
+       installing there) with version 0.0.0.
+ - (2) libtool tried to run the linker but it failed because
+       libvlc_vdpau.so doesn't exist yet on the target prefix.
+ - (1) libtool .0.0.0 links to the major version shortcut .0 for
+       libvlc_vdpau.
+ - (1) libtool .0.0.0 links to the unversioned shortcut for
+       libvlc_vdpau.
+
+So the pkglibs were not installed before installing the plugins linking
+them and it was racy whether automake succeeded in installing vlc_vdpau
+before or not. This could apply to any pkglib being used from plugins.
+
+This patch ensure the pkglibs are installed before relinking the plugins
+for vpdau, same must be done for each other pkglib usage location.
+
+Note that install-vdpauLTLIBRARIES itself will install each target from
+vdpau_LTLIBRARIES serially in the order they are defined, so there would
+be no race inside the same LTLIBRARIES variables, but the different
+LTLIBRARIES variables are processed in parallel themselves.
+
+Fixes #28374
+---
+ modules/Makefile.am              | 1 +
+ modules/audio_output/Makefile.am | 3 +++
+ modules/hw/vdpau/Makefile.am     | 4 ++++
+ modules/video_output/Makefile.am | 3 +++
+ 4 files changed, 11 insertions(+)
+
+diff --git a/modules/Makefile.am b/modules/Makefile.am
+index d9940f95cbc8..3a41a6bbe456 100644
+--- a/modules/Makefile.am
++++ b/modules/Makefile.am
+@@ -1,3 +1,4 @@
++
+ noinst_LTLIBRARIES =
+ check_LTLIBRARIES =
+ pkglib_LTLIBRARIES =
+diff --git a/modules/audio_output/Makefile.am 
b/modules/audio_output/Makefile.am
+index 4c7957cdd153..8d48003e20b5 100644
+--- a/modules/audio_output/Makefile.am
++++ b/modules/audio_output/Makefile.am
+@@ -1,5 +1,8 @@
+ aoutdir = $(pluginsdir)/audio_output
+ aout_LTLIBRARIES =
++# Install the pkglib/pkglibexec first before relinking the modules.
++# This ensures libtool re-linking is not racy.
++install-aoutLTLIBRARIES: install-pkglibLTLIBRARIES
+ 
+ libvlc_android_audioformat_jni_la_SOURCES = \
+       audio_output/android/audioformat_jni.c \
+diff --git a/modules/hw/vdpau/Makefile.am b/modules/hw/vdpau/Makefile.am
+index ef3601209314..f195f712310b 100644
+--- a/modules/hw/vdpau/Makefile.am
++++ b/modules/hw/vdpau/Makefile.am
+@@ -1,4 +1,8 @@
+ vdpaudir = $(pluginsdir)/vdpau
++# Install the pkglib/pkglibexec first before relinking the modules.
++# This ensures libtool re-linking is not racy.
++install-vpdauLTLIBRARIES: install-pkglibLTLIBRARIES
++
+ 
+ libvlc_vdpau_la_SOURCES = hw/vdpau/vlc_vdpau.c hw/vdpau/vlc_vdpau.h
+ libvlc_vdpau_la_CFLAGS = $(VDPAU_CFLAGS)
+diff --git a/modules/video_output/Makefile.am 
b/modules/video_output/Makefile.am
+index ad959bc45ed5..bcbb892c4c93 100644
+--- a/modules/video_output/Makefile.am
++++ b/modules/video_output/Makefile.am
+@@ -1,5 +1,8 @@
+ voutdir = $(pluginsdir)/video_output
+ vout_LTLIBRARIES =
++# Install the pkglib/pkglibexec first before relinking the modules.
++# This ensures libtool re-linking is not racy.
++install-voutLTLIBRARIES: install-pkglibLTLIBRARIES
+ 
+ EXTRA_DIST += video_output/README
+ 
+-- 
+GitLab
+
+From 0b9f3f836f1c678e6d101f62545a8edaba16dcd0 Mon Sep 17 00:00:00 2001
+From: Alexandre Janniaux <[email protected]>
+Date: Sun, 8 Dec 2024 22:43:37 +0100
+Subject: [PATCH] Makefile.am: fix installation regression
+
+Automake doesn't generate automatic rules when a rule already exist in
+the file, except if it cannot detect it. Adding the
+`install-fooLTLIBRARIES: install-pkglibLTLIBRARIES` rule for audio
+outputs, video outputs and vdpau broke the installation.
+
+Adding `$(install-fooLTLIBRARIES): install-pkglibLTLIBRARIES` also makes
+automake unhappy because of the variable name looking suspiciously close
+to the target it generates, so a version without the dash is used for
+the variable name in the rule. With this, the install target is
+preserved but the dependency also exists in the output.
+---
+ modules/audio_output/Makefile.am | 3 ++-
+ modules/hw/vdpau/Makefile.am     | 3 ++-
+ modules/video_output/Makefile.am | 3 ++-
+ 3 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/modules/audio_output/Makefile.am 
b/modules/audio_output/Makefile.am
+index 8d48003e20b..c045a892c10 100644
+--- a/modules/audio_output/Makefile.am
++++ b/modules/audio_output/Makefile.am
+@@ -2,7 +2,8 @@ aoutdir = $(pluginsdir)/audio_output
+ aout_LTLIBRARIES =
+ # Install the pkglib/pkglibexec first before relinking the modules.
+ # This ensures libtool re-linking is not racy.
+-install-aoutLTLIBRARIES: install-pkglibLTLIBRARIES
++installaoutLTLIBRARIES = install-aoutLTLIBRARIES
++$(installaoutLTLIBRARIES): install-pkglibLTLIBRARIES
+ 
+ libvlc_android_audioformat_jni_la_SOURCES = \
+       audio_output/android/audioformat_jni.c \
+diff --git a/modules/hw/vdpau/Makefile.am b/modules/hw/vdpau/Makefile.am
+index f195f712310..1abdfa21a9b 100644
+--- a/modules/hw/vdpau/Makefile.am
++++ b/modules/hw/vdpau/Makefile.am
+@@ -1,7 +1,8 @@
+ vdpaudir = $(pluginsdir)/vdpau
+ # Install the pkglib/pkglibexec first before relinking the modules.
+ # This ensures libtool re-linking is not racy.
+-install-vpdauLTLIBRARIES: install-pkglibLTLIBRARIES
++installvpdauLTLIBRARIES = install-vdpauLTLIBRARIES
++$(installvpdauLTLIBRARIES): install-pkglibLTLIBRARIES
+ 
+ 
+ libvlc_vdpau_la_SOURCES = hw/vdpau/vlc_vdpau.c hw/vdpau/vlc_vdpau.h
+diff --git a/modules/video_output/Makefile.am 
b/modules/video_output/Makefile.am
+index bcbb892c4c9..844b0dd01c8 100644
+--- a/modules/video_output/Makefile.am
++++ b/modules/video_output/Makefile.am
+@@ -2,7 +2,8 @@ voutdir = $(pluginsdir)/video_output
+ vout_LTLIBRARIES =
+ # Install the pkglib/pkglibexec first before relinking the modules.
+ # This ensures libtool re-linking is not racy.
+-install-voutLTLIBRARIES: install-pkglibLTLIBRARIES
++installvoutLTLIBRARIES = install-voutLTLIBRARIES
++$(installvoutLTLIBRARIES): install-pkglibLTLIBRARIES
+ 
+ EXTRA_DIST += video_output/README
+ 
+-- 
+GitLab

diff --git a/media-video/vlc/vlc-3.0.21-r1.ebuild 
b/media-video/vlc/vlc-3.0.21-r1.ebuild
index 9ca438fed821..d34fc239251f 100644
--- a/media-video/vlc/vlc-3.0.21-r1.ebuild
+++ b/media-video/vlc/vlc-3.0.21-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2000-2024 Gentoo Authors
+# Copyright 2000-2025 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -234,6 +234,7 @@ PATCHES=(
        "${FILESDIR}"/${PN}-3.0.18-drop-minizip-dep.patch
        "${FILESDIR}"/${PN}-3.0.21-freerdp-2.patch # bug 919296, 590164
        "${FILESDIR}"/${PN}-3.0.21-vaapi-without-ffmpeg4.patch # bug 864721, 
thx Fedora
+       "${FILESDIR}"/${PN}-3.0.2.1-vdpau.patch # bug 946178
 )
 
 DOCS=( AUTHORS THANKS NEWS README doc/fortunes.txt )

diff --git a/media-video/vlc/vlc-3.0.21-r2.ebuild 
b/media-video/vlc/vlc-3.0.21-r2.ebuild
index c675966604da..cc8ff0f5e827 100644
--- a/media-video/vlc/vlc-3.0.21-r2.ebuild
+++ b/media-video/vlc/vlc-3.0.21-r2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2000-2024 Gentoo Authors
+# Copyright 2000-2025 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -219,6 +219,7 @@ PATCHES=(
        "${FILESDIR}"/${PN}-3.0.21-freerdp-2.patch # bug 919296, 590164
        "${WORKDIR}"/${P}-taglib2 # bug 938946, in 3.0.x branch
        "${FILESDIR}"/${PN}-3.0.21-vaapi-without-ffmpeg4.patch # bug 864721, 
thx Fedora
+       "${FILESDIR}"/${PN}-3.0.2.1-vdpau.patch # bug 946178
 )
 
 DOCS=( AUTHORS THANKS NEWS README doc/fortunes.txt )

Reply via email to