Skip to content

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 built before building the plugins.

Fixes #28374 (closed)

Merge request reports

Loading