Skip to content

Commit 0d4f819

Browse files
committed
Always use -Wl,-Bsymbolic flag even in static build
Even bestsource always use -Wl,-Bsymbolic. See: https://github.com/vapoursynth/bestsource/blob/1c19c9838c725e3c92987a32456e9d9defbfcc95/meson.build#L68 The file m4/m4_ax_check_link_flag.m4 is a copy of https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html Fix #458
1 parent 6601f8c commit 0d4f819

2 files changed

Lines changed: 58 additions & 41 deletions

File tree

configure.ac

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -102,53 +102,17 @@ AC_SUBST([FFMPEG_LIBS])
102102
CPPFLAGS="$CPPFLAGS -D__STDC_CONSTANT_MACROS"
103103
CFLAGS="$_CFLAGS $FFMPEG_CFLAGS"
104104

105-
AC_DEFUN([TEST_FFMPEG],
106-
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
107-
#include <libavformat/avformat.h>
108-
#include <libswscale/swscale.h>
109-
]],[[
110-
avformat_network_init();
111-
swscale_version();
112-
]])], [eval $1=yes], [eval $1=no])
113-
])
114-
115-
AC_MSG_CHECKING([whether FFmpeg works])
116-
LIBS="$_LIBS $FFMPEG_LIBS"
117-
TEST_FFMPEG([FFMPEG_WORKS])
118-
AC_MSG_RESULT([$FFMPEG_WORKS])
119-
if test "$FFMPEG_WORKS" = no; then
120-
AC_MSG_FAILURE([cannot link with FFmpeg])
121-
fi
122-
105+
dnl The -Wl,-Bsymbolic flag is not strictly required in all cases, but enabling it by default is safer.
106+
dnl For example, if a shared library X links against ffms2 built as a static library, which in turn links to FFmpeg statically, this flag is necessary.
107+
dnl There is no reliable way to determine automatically when it is needed.
108+
dnl For more details, see FFmpeg's documentation on advanced linking: https://ffmpeg.org/platform.html#Advanced-linking-configuration
123109
src_core_libffms2_la_LDFLAGS=""
124-
AC_MSG_CHECKING([whether -Wl,-Bsymbolic is needed])
125-
if test "$enable_shared" = yes; then
126-
_LDFLAGS="$LDFLAGS"
127-
LDFLAGS="$LDFLAGS -shared $lt_prog_compiler_pic"
128-
TEST_FFMPEG([no_bsymbolic])
129-
if test "$no_bsymbolic" = "no"; then
130-
LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
131-
TEST_FFMPEG([bsymbolic])
132-
if test "$bsymbolic" = "yes"; then
133-
src_core_libffms2_la_LDFLAGS="$src_core_libffms2_la_LDFLAGS -Wl,-Bsymbolic"
134-
else
135-
AC_MSG_RESULT($bsymbolic)
136-
AC_MSG_FAILURE([cannot build ffms2 as a shared library])
137-
fi
138-
else
139-
bsymbolic=no
140-
fi
141-
LDFLAGS="$_LDFLAGS"
142-
src_core_libffms2_la_LDFLAGS="$src_core_libffms2_la_LDFLAGS -version-info $VERSION_INFO"
143-
else
144-
bsymbolic=no
145-
fi
110+
AX_CHECK_LINK_FLAG([-Wl,-Bsymbolic], [src_core_libffms2_la_LDFLAGS="$src_core_libffms2_la_LDFLAGS -Wl,-Bsymbolic -version-info $VERSION_INFO"])
146111
AC_SUBST([src_core_libffms2_la_LDFLAGS])
147112

148113
CFLAGS="$_CFLAGS"
149114
CPPFLAGS="$_CPPFLAGS"
150115
LIBS="$_LIBS"
151-
AC_MSG_RESULT($bsymbolic)
152116

153117
if echo "$host" | $GREP "mingw" >/dev/null 2>&1; then
154118
LTUNDEF="-no-undefined"

m4/m4_ax_check_link_flag.m4

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# ===========================================================================
2+
# https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
3+
# ===========================================================================
4+
#
5+
# SYNOPSIS
6+
#
7+
# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
8+
#
9+
# DESCRIPTION
10+
#
11+
# Check whether the given FLAG works with the linker or gives an error.
12+
# (Warnings, however, are ignored)
13+
#
14+
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
15+
# success/failure.
16+
#
17+
# If EXTRA-FLAGS is defined, it is added to the linker's default flags
18+
# when the check is done. The check is thus made with the flags: "LDFLAGS
19+
# EXTRA-FLAGS FLAG". This can for example be used to force the linker to
20+
# issue an error when a bad flag is given.
21+
#
22+
# INPUT gives an alternative input source to AC_LINK_IFELSE.
23+
#
24+
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
25+
# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
26+
#
27+
# LICENSE
28+
#
29+
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
30+
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
31+
#
32+
# Copying and distribution of this file, with or without modification, are
33+
# permitted in any medium without royalty provided the copyright notice
34+
# and this notice are preserved. This file is offered as-is, without any
35+
# warranty.
36+
37+
#serial 6
38+
39+
AC_DEFUN([AX_CHECK_LINK_FLAG],
40+
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
41+
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
42+
AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
43+
ax_check_save_flags=$LDFLAGS
44+
LDFLAGS="$LDFLAGS $4 $1"
45+
AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
46+
[AS_VAR_SET(CACHEVAR,[yes])],
47+
[AS_VAR_SET(CACHEVAR,[no])])
48+
LDFLAGS=$ax_check_save_flags])
49+
AS_VAR_IF(CACHEVAR,yes,
50+
[m4_default([$2], :)],
51+
[m4_default([$3], :)])
52+
AS_VAR_POPDEF([CACHEVAR])dnl
53+
])dnl AX_CHECK_LINK_FLAGS

0 commit comments

Comments
 (0)