[vlc-commits] [Git][videolan/vlc][3.0.x] 2 commits: Makefile.am: enforce pkglib dependency order for install

Steve Lhomme (@robUx4) gitlab at videolan.org
Sun Jan 26 14:35:29 UTC 2025



Steve Lhomme pushed to branch 3.0.x at VideoLAN / VLC


Commits:
42b95ec9 by Alexandre Janniaux at 2025-01-26T14:18:01+00:00
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/libcompat.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

(cherry picked from commit 056d7349a559cb63b456505bb11c08a4910452aa) (rebased)
rebased:
- the code around is slightly different

- - - - -
9342d4c9 by Alexandre Janniaux at 2025-01-26T14:18:01+00:00
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.

(cherry picked from commit 0b9f3f836f1c678e6d101f62545a8edaba16dcd0) (rebased)
rebased:
- the code around is slightly different

- - - - -


4 changed files:

- modules/Makefile.am
- modules/audio_output/Makefile.am
- modules/hw/vdpau/Makefile.am
- modules/video_output/Makefile.am


Changes:

=====================================
modules/Makefile.am
=====================================
@@ -1,3 +1,4 @@
+
 noinst_LTLIBRARIES =
 check_LTLIBRARIES =
 pkglib_LTLIBRARIES =


=====================================
modules/audio_output/Makefile.am
=====================================
@@ -1,5 +1,9 @@
 aoutdir = $(pluginsdir)/audio_output
 aout_LTLIBRARIES =
+# Install the pkglib/pkglibexec first before relinking the modules.
+# This ensures libtool re-linking is not racy.
+installaoutLTLIBRARIES = install-aoutLTLIBRARIES
+$(installaoutLTLIBRARIES): install-pkglibLTLIBRARIES
 
 libopensles_android_plugin_la_SOURCES = audio_output/opensles_android.c
 libopensles_android_plugin_la_LIBADD = $(LIBDL) $(LIBM)


=====================================
modules/hw/vdpau/Makefile.am
=====================================
@@ -1,4 +1,9 @@
 vdpaudir = $(pluginsdir)/vdpau
+# Install the pkglib/pkglibexec first before relinking the modules.
+# This ensures libtool re-linking is not racy.
+installvpdauLTLIBRARIES = install-vdpauLTLIBRARIES
+$(installvpdauLTLIBRARIES): install-pkglibLTLIBRARIES
+
 
 libvlc_vdpau_la_SOURCES = hw/vdpau/vlc_vdpau.c hw/vdpau/vlc_vdpau.h hw/vdpau/instance.c
 libvlc_vdpau_la_CFLAGS = $(VDPAU_CFLAGS)


=====================================
modules/video_output/Makefile.am
=====================================
@@ -1,5 +1,9 @@
 voutdir = $(pluginsdir)/video_output
 vout_LTLIBRARIES =
+# Install the pkglib/pkglibexec first before relinking the modules.
+# This ensures libtool re-linking is not racy.
+installvoutLTLIBRARIES = install-voutLTLIBRARIES
+$(installvoutLTLIBRARIES): install-pkglibLTLIBRARIES
 
 EXTRA_DIST += video_output/README
 



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/63245fd383f51132a127e80f25b77c0531265d93...9342d4c96de520d4fc711fb432e85ff4cc58ccab

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/63245fd383f51132a127e80f25b77c0531265d93...9342d4c96de520d4fc711fb432e85ff4cc58ccab
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list