From: Rodger Combs Date: Fri, 9 Sep 2016 23:12:34 +0000 (-0500) Subject: configure: add linker export script support on Darwin X-Git-Tag: n3.2~255 X-Git-Url: http://git.videolan.org/?p=ffmpeg.git;a=commitdiff_plain;h=63fbeebf6ecb40b21db84d42f9f18867b3f89dca;hp=be1d32492e58cbba6d69d3ce67545536b15e051d configure: add linker export script support on Darwin This isn't a "version script" in the usual sense, since it doesn't set symbol versions directly. Instead, the version for the whole .dylib is set in the linker flags, and we generate a list of symbol patterns to export. This allows us to keep our local symbols (e.g. ff_*) local on the platform. The Darwin linker's exported_symbols_list format is a bit different than the one used by the GNU linker. It doesn't handle local symbols at all, since when a list is provided, all unlisted symbols are local by default; thus, we remove local sections. It doesn't handle per-version sections, so we remove the headers and brackets. It expects symbols to be prefixed with an underscore. It errors if a listed symbol with no wildcards is not present in the output, so we append an asterisk to any symbol that doesn't already end in one. --- diff --git a/configure b/configure index 2b141fbf92..ee7e8520ab 100755 --- a/configure +++ b/configure @@ -4705,6 +4705,8 @@ case $target_os in { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; } check_header dispatch/dispatch.h && add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore' + version_script='-exported_symbols_list' + VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"' ;; msys*) die "Native MSYS builds are discouraged, please use the MINGW environment."