You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
3.5 KiB

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 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
1 year ago
noinst_LTLIBRARIES =
check_LTLIBRARIES =
pkglib_LTLIBRARIES =
noinst_HEADERS =
check_PROGRAMS =
pkglibexec_PROGRAMS =
EXTRA_DIST =
CLEANFILES =
SUBDIRS =
TESTS =
dist_noinst_SCRIPTS = module.rc.in
EXTRA_LTLIBRARIES =
if HAVE_RUST
LIBTOOL_CARGO_EXE = $(abs_srcdir)/libtool_cargo.sh
CARGO_BUILD_ARGS = --target=@RUST_TARGET@ --release \
--crate-type=staticlib
RUSTFLAGS = -C panic=abort -C opt-level=z
if !HAVE_DYNAMIC_PLUGINS
RUSTFLAGS += --cfg vlc_static_plugins
endif
LIBTOOL_CARGO = \
TARGET_CC=$(CC) TARGET_AR=$(AR) \
TARGET_CFLAGS="$(CFLAGS)" \
RUSTTARGET="@RUST_TARGET@" \
RUSTFLAGS="${RUSTFLAGS}" \
CARGO_TARGET_DIR="target-rust" \
LIBTOOL="$(LIBTOOL)" \
$(LIBTOOL_CARGO_EXE) $(CARGO) $(CARGO_BUILD_STD) rustc $(CARGO_BUILD_ARGS)
CARGO_PLUGINS_INV = ${LTLIBRARIES:%rs_plugin.la=%rs_plugin}
CARGO_PLUGINS_CUT = ${CARGO_PLUGINS_INV:%.la=}
CARGO_PLUGINS = ${CARGO_PLUGINS_CUT:%=%.la}
CARGO_DEPS = ${CARGO_PLUGINS:%_plugin.la=${top_builddir}/modules/.libs/%.d}
-include $(CARGO_DEPS)
# Clean the targets generated by cargo.
mostlyclean-local: mostlyclean-local-rust
.PHONY: mostlyclean-local-rust
# We don't use CLEANFILES here so that mostlyclean-local-rust
# works correctly when called directly. Otherwise, dependencies
# are leading to target being referenced but they cannot be built.
mostlyclean-local-rust:
rm -rf $(CARGO_DEPS) ${CARGO_PLUGINS:%_plugin.la=%.la}
$(CARGO) clean \
--manifest-path "${srcdir}/Cargo.toml" \
--target "@RUST_TARGET@" \
--target-dir "target-rust"
endif
include common.am
include access/Makefile.am
include access/http/Makefile.am
include access/rtp/Makefile.am
include access/rtp/test/Makefile.am
include audio_filter/Makefile.am
include audio_mixer/Makefile.am
include audio_output/Makefile.am
include codec/Makefile.am
include control/Makefile.am
include demux/Makefile.am
include gui/Makefile.am
include hw/nvdec/Makefile.am
include hw/d3d9/Makefile.am
include hw/d3d11/Makefile.am
include hw/vaapi/Makefile.am
include hw/vdpau/Makefile.am
include hw/mmal/Makefile.am
include isa/aarch64/Makefile.am
include isa/arm/Makefile.am
include isa/riscv/Makefile.am
include keystore/Makefile.am
include logger/Makefile.am
include lua/Makefile.am
include meta_engine/Makefile.am
include misc/Makefile.am
include notify/Makefile.am
include packetizer/Makefile.am
include services_discovery/Makefile.am
include spu/Makefile.am
include stream_filter/Makefile.am
include stream_extractor/Makefile.am
include text_renderer/Makefile.am
include video_chroma/Makefile.am
include video_filter/Makefile.am
include video_splitter/Makefile.am
include video_output/Makefile.am
include visualization/Makefile.am
if ENABLE_SOUT
include access_output/Makefile.am
include mux/Makefile.am
include stream_out/Makefile.am
endif
if HAVE_WIN32
BUILT_SOURCES += module.rc.lo
CLEANFILES += module.rc
#noinst_DATA = module.rc.lo
module.rc: module.rc.in $(top_builddir)/config.status
$(AM_V_GEN) cd "$(top_builddir)" && $(SHELL) ./config.status --file="modules/$@"
module.rc.lo: module.rc
$(AM_V_GEN) $(LIBTOOL) --tag=RC --mode=compile $(WINDRES) \
--include-dir $(top_srcdir)/share \
--include-dir $(top_srcdir)/extras/package/win32 \
-i $< -o $@
endif
# Wayland
SUFFIXES += -client-protocol.h -protocol.c .xml
.xml-client-protocol.h:
$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < "$^" > "$@.tmp"
$(AM_V_at)mv -f -- "$@.tmp" "$@"
.xml-protocol.c:
$(AM_V_GEN)$(WAYLAND_SCANNER) private-code < "$^" > "$@.tmp"
$(AM_V_at)mv -f -- "$@.tmp" "$@"
# Generate vlc_modules_list (local plugins + SUBDIRS)
include modulelist.mk
SUBDIRS += .