From 86f04dd9a2c58f159b050b6043b919da2d120e6f Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Tue, 26 Sep 2023 20:54:05 +0200 Subject: [PATCH] audio/pulseaudio: fix build with lld 17 Building audio/pulseaudio with lld 17 results in the following link errors: cc -o src/pulse/libpulse.so.0.24.2 src/pulse/libpulse.so.0.24.2.p/channelmap.c.o src/pulse/libpulse.so.0.24.2.p/context.c.o src/pulse/libpulse.so.0.24.2.p/direction.c.o src/pulse/libpulse.so.0.24.2.p/error.c.o src/pulse/libpulse.so.0.24.2.p/ext-device-manager.c.o src/pulse/libpulse.so.0.24.2.p/ext-device-restore.c.o src/pulse/libpulse.so.0.24.2.p/ext-stream-restore.c.o src/pulse/libpulse.so.0.24.2.p/format.c.o src/pulse/libpulse.so.0.24.2.p/introspect.c.o src/pulse/libpulse.so.0.24.2.p/mainloop-api.c.o src/pulse/libpulse.so.0.24.2.p/mainloop-signal.c.o src/pulse/libpulse.so.0.24.2.p/mainloop.c.o src/pulse/libpulse.so.0.24.2.p/operation.c.o src/pulse/libpulse.so.0.24.2.p/proplist.c.o src/pulse/libpulse.so.0.24.2.p/rtclock.c.o src/pulse/libpulse.so.0.24.2.p/sample.c.o src/pulse/libpulse.so.0.24.2.p/scache.c.o src/pulse/libpulse.so.0.24.2.p/stream.c.o src/pulse/libpulse.so.0.24.2.p/subscribe.c.o src/pulse/libpulse.so.0.24.2.p/thread-mainloop.c.o src/pulse/libpulse.so.0.24.2.p/timeval.c.o src/pulse/libpulse.so.0.24.2.p/utf8.c.o src/pulse/libpulse.so.0.24.2.p/util.c.o src/pulse/libpulse.so.0.24.2.p/volume.c.o src/pulse/libpulse.so.0.24.2.p/xmalloc.c.o -L/usr/local/lib -Wl,--as-needed -Wl,--allow-shlib-undefined -Wl,-O1 -shared -fPIC -Wl,--start-group -Wl,-soname,libpulse.so.0 -fstack-protector-strong -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -DLIBICONV_PLUG -isystem /usr/local/include '-Wl,-rpath,$ORIGIN/..:/usr/local/lib' -Wl,-rpath-link,/wrkdirs/share/dim/ports/audio/pulseaudio/work/pulseaudio-16.1/_build/src -Wl,-rpath-link,/usr/local/lib src/libpulsecommon-16.1.so -Wl,-z,nodelete -Wl,-version-script=/wrkdirs/share/dim/ports/audio/pulseaudio/work/pulseaudio-16.1/src/pulse/map-file -lm -pthread /usr/local/lib/libdbus-1.so -ldl -lintl -Wl,--end-group ld: error: version script assignment of 'PULSE_0' to symbol 'pa_glib_mainloop_free' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_glib_mainloop_get_api' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_glib_mainloop_new' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_simple_drain' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_simple_flush' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_simple_free' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_simple_get_latency' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_simple_new' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_simple_read' failed: symbol not defined ld: error: version script assignment of 'PULSE_0' to symbol 'pa_simple_write' failed: symbol not defined cc: error: linker command failed with exit code 1 (use -v to see invocation) This is because lld 17 defaults to errors when undefined symbols are referenced in linker version scripts. Since pulseaudio uses the same linker version script for both the regular libpulse.so, and the other variants, libpulse-mainloop-glib.so and libpulse-simple.so, some of the symbols are expected to be undefined, so suppress the errors by adding -Wl,--undefined-version to LDFLAGS. PR: 274111 Approved by: blanket (for desktop and kde) MFH: 2023Q4 --- audio/pulseaudio/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/audio/pulseaudio/Makefile b/audio/pulseaudio/Makefile index d1a5078aeaa3a..f4060e63407e8 100644 --- a/audio/pulseaudio/Makefile +++ b/audio/pulseaudio/Makefile @@ -29,6 +29,11 @@ USES= compiler:c11 cpe gettext-tools gmake gnome iconv localbase:ldflags \ USE_GNOME= glib20 USE_LDCONFIG= yes +# Some symbols in the linker version script map-file are only defined when +# building the mainloop-glib shared library. Suppress errors with lld >= 17 due +# to these undefined symbols. +LDFLAGS+= -Wl,--undefined-version + SHEBANG_FILES= shell-completion/bash/pactl \ src/utils/pa-info \ src/utils/qpaeq