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
Activity
added MRStatus::NotCompliant label
changed milestone to %4.0
added Component::Build system label
- Resolved by Alexandre Janniaux
added 1 commit
- b2460a9f - Makefile.am: enforce pkglib dependency order for install
- Resolved by Alexandre Janniaux
Thread
added 1 commit
- b136f15b - Makefile.am: enforce pkglib dependency order for install
added MRStatus::Acceptable label and removed MRStatus::NotCompliant label
Long outstanding automake bug: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 (on the top of the list here https://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=automake)
added MRStatus::Accepted label and removed MRStatus::Acceptable label
MR Acceptance result
This MergeRequest has been Accepted! Congratulations.MR acceptance checks details:
-
MR should be considered mergeable by Gitlab -
Last pipeline should be successful -
MergeRequest should have at least one external review and/or vote -
All threads should be resolved, and score >= 0 -
MergeRequest should have no activity (threads/votes) for (24h/24h)
-
added 752 commits
-
b136f15b...2f06e983 - 751 commits from branch
videolan:master
- 056d7349 - Makefile.am: enforce pkglib dependency order for install
-
b136f15b...2f06e983 - 751 commits from branch
enabled an automatic merge when all merge checks for 056d7349 pass
Upgrading the snapshot from a155e87a to 056d7349 caused a package build failure for me. The directories
audio_output
andvideo_output
are not populated anymore. Forwarding to 432b0e89 and reverting 056d7349 fixes package build for me. Unless someone can reproduce that locally, I will provide the the resultingMakefile.in
and/orMakefile
.It seems
https://code.videolan.org/videolan/vlc/-/jobs/2019689/raw
has amake install
foraudio_mixer
, but not foraudio_output
. Does the CI verify if modules end up in an expected location, like it is usually done in a package build without wildcards? My package does use wildcards for individual modules, but it does expect a number of directories, such as%dir %_libdir/%name/plugins/audio_output
.Does !6496 (merged) fix it for you ?