Makefile.am: enforce pkglib dependency order for install
- Dec 08, 2024
-
-
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
056d7349
-