diff mbox

[FFmpeg-devel] configure: add linker export script support on Darwin

Message ID 20160909231847.60881-1-rodger.combs@gmail.com
State Accepted
Commit 63fbeebf6ecb40b21db84d42f9f18867b3f89dca
Headers show

Commit Message

Rodger Combs Sept. 9, 2016, 11:18 p.m. UTC
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.
---
 configure | 2 ++
 1 file changed, 2 insertions(+)
diff mbox

Patch

diff --git a/configure b/configure
index b11ca7f..29eb35b 100755
--- a/configure
+++ b/configure
@@ -4704,6 +4704,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."