Skip to content
Snippets Groups Projects

Makefile.am: enforce pkglib dependency order for install

Merged Alexandre Janniaux requested to merge alexandre-janniaux/vlc:vdpau-relinking/1 into master
  1. Dec 08, 2024
    • Alexandre Janniaux's avatar
      Makefile.am: enforce pkglib dependency order for install · 056d7349
      Alexandre Janniaux authored and Felix Paul Kühne's avatar Felix Paul Kühne committed
      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
Loading