X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6dcfc2898ed5cd603b8c1f1868a1b4d9d8e68700..a04a377acfd21796b402820327c44abe34faaf1e:/aclocal.m4 diff --git a/aclocal.m4 b/aclocal.m4 index 6fb5548951..dad125c8c5 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -450,7 +450,44 @@ AC_DEFUN([WX_VERSIONED_SYMBOLS], else wx_cv_version_script=no fi + + dnl There's a problem in some old linkers with --version-script that + dnl can cause linking to fail when you have objects with vtables in + dnl libs 3 deep. This is known to happen in netbsd and openbsd with + dnl ld 2.11.2. + dnl + dnl To test for this we need to make some shared libs and + dnl unfortunately we can't be sure of the right way to do that. If the + dnl first two compiles don't succeed then it looks like the test isn't + dnl working and the result is ignored, but if OTOH the first two + dnl succeed but the third does not then the bug has been detected and + dnl the --version-script flag is dropped. + if test $wx_cv_version_script = yes + then + echo "struct B { virtual ~B() { } }; \ + struct D : public B { }; \ + void F() { D d; }" > conftest.cpp + + if AC_TRY_COMMAND([ + $CXX -shared -fPIC -o conftest1.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp + -Wl,--version-script,conftest.sym >/dev/null 2>/dev/null]) && + AC_TRY_COMMAND([ + $CXX -shared -fPIC -o conftest2.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp + -Wl,--version-script,conftest.sym conftest1.output >/dev/null 2>/dev/null]) + then + if AC_TRY_COMMAND([ + $CXX -shared -fPIC -o conftest3.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp + -Wl,--version-script,conftest.sym conftest2.output conftest1.output >/dev/null 2>/dev/null]) + then + wx_cv_version_script=yes + else + wx_cv_version_script=no + fi + fi + fi + rm -f conftest.output conftest.stderr conftest.sym conftest.cpp + rm -f conftest1.output conftest2.output conftest3.output ]) if test $wx_cv_version_script = yes ; then LDFLAGS_VERSIONING="-Wl,--version-script,$1" @@ -1860,7 +1897,8 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD], *-*-sunos4* | \ *-*-osf* | \ *-*-dgux5* | \ - *-*-sysv5* ) + *-*-sysv5* | \ + *-pc-msdosdjgpp ) dnl defaults are ok ;; @@ -2761,7 +2799,7 @@ while test ${D}# -gt 0; do shift ;; - -l*|-L*|-flat_namespace|-headerpad_max_install_names) + -l*|-L*|-Wl,*|-flat_namespace|-headerpad_max_install_names) # collect these options args="${D}{args} ${D}1" ;;