X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d1150ea70ffa66b3e4bd0dfade91d8bc393b0e05..fe2e64f8f063857784e61ff32a80386f1a978638:/acinclude.m4 diff --git a/acinclude.m4 b/acinclude.m4 index 3adc66c377..1a43281a71 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -8,77 +8,20 @@ dnl dnl Version: $Id$ dnl --------------------------------------------------------------------------- + dnl =========================================================================== -dnl macros to detect specialty compiler options +dnl Objective-C(++) related macros dnl =========================================================================== - -dnl Figure out if we need to pass -ext o to compiler (MetroWerks) -AC_DEFUN([AC_WX_METROWERKS_EXTO], -[AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], wx_cv_[]_AC_LANG_ABBREV[]_exto, -dnl First create an empty conf test -[AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) -dnl Now remove .o and .c.o or .cc.o -rm -f conftest.$ac_objext conftest.$ac_ext.o -dnl Now compile the test -AS_IF([AC_TRY_EVAL(ac_compile)], -dnl If the test succeeded look for conftest.c.o or conftest.cc.o -[for ac_file in `(ls conftest.* 2>/dev/null)`; do - case $ac_file in - conftest.$ac_ext.o) - wx_cv_[]_AC_LANG_ABBREV[]_exto="-ext o" - ;; - *) - ;; - esac -done], -[AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile]) -]) dnl AS_IF - -rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext -]) dnl AC_CACHE_CHECK - -if test "x$wx_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then - if test "[]_AC_LANG_ABBREV[]" = "c"; then - CFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS" - fi - if test "[]_AC_LANG_ABBREV[]" = "cxx"; then - CXXFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS" - fi -fi -]) dnl AC_DEFUN - - -dnl Based on autoconf _AC_LANG_COMPILER_GNU -AC_DEFUN([_AC_WX_LANG_COMPILER_XLC], -[AC_CACHE_CHECK([whether we are using the IBM xlC _AC_LANG compiler], - [wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc], - [AC_TRY_COMPILE([],[#ifndef __xlC__ - choke me -#endif -], - [wx_compiler_xlc=yes], - [wx_compiler_xlc=no]) - wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc=$wx_compiler_xlc - ]) +m4_define([AC_WX_LANG_OBJECTIVEC], +[AC_LANG(C) +ac_ext=m ]) -dnl Loosely based on autoconf AC_PROG_CC -AC_DEFUN([AC_WX_PROG_XLCC], -[AC_LANG_PUSH(C) -_AC_WX_LANG_COMPILER_XLC -XLCC=`test $wx_compiler_xlc = yes && echo yes` -AC_LANG_POP(C) +m4_define([AC_WX_LANG_OBJECTIVECPLUSPLUS], +[AC_LANG(C++) +ac_ext=mm ]) -dnl Loosely based on autoconf AC_PROG_CXX -AC_DEFUN([AC_WX_PROG_XLCXX], -[AC_LANG_PUSH(C++) -_AC_WX_LANG_COMPILER_XLC -XLCXX=`test $wx_compiler_xlc = yes && echo yes` -AC_LANG_POP(C++) -]) - - dnl =========================================================================== dnl macros to find the a file in the list of include/lib paths dnl =========================================================================== @@ -494,7 +437,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"