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 unresolved thread

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
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • added 1 commit

    • b2460a9f - Makefile.am: enforce pkglib dependency order for install

    Compare with previous version

  • Alexandre Janniaux resolved all threads

    resolved all threads

  • TBH, I don't get how this solves the problem, as plugins should be treated as executables, not data.

  • added 1 commit

    • b136f15b - Makefile.am: enforce pkglib dependency order for install

    Compare with previous version

  • Alexandre Janniaux resolved all threads

    resolved all threads

  • Steve Lhomme approved this merge request

    approved this merge request

  • MR Acceptance result

    :tada: This MergeRequest has been Accepted! Congratulations.

    MR acceptance checks details:

    • :white_check_mark: MR should be considered mergeable by Gitlab
    • :white_check_mark: Last pipeline should be successful
    • :white_check_mark: MergeRequest should have at least one external review and/or vote
    • :white_check_mark: All threads should be resolved, and score >= 0
    • :white_check_mark: MergeRequest should have no activity (threads/votes) for (24h/24h)

    This message was automatically generated by homer-bot.

  • Felix Paul Kühne added 752 commits

    added 752 commits

    Compare with previous version

  • Felix Paul Kühne enabled an automatic merge when all merge checks for 056d7349 pass

    enabled an automatic merge when all merge checks for 056d7349 pass

  • Please register or sign in to reply
    Loading