dnl Version: $Id$
dnl ---------------------------------------------------------------------------
+
dnl ===========================================================================
-dnl macros to detect specialty compiler options
+dnl Objective-C(++) related macros
dnl ===========================================================================
+m4_define([AC_WX_LANG_OBJECTIVEC],
+[AC_LANG(C)
+ac_ext=m
+])
-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
-
+m4_define([AC_WX_LANG_OBJECTIVECPLUSPLUS],
+[AC_LANG(C++)
+ac_ext=mm
+])
dnl ===========================================================================
dnl macros to find the a file in the list of include/lib paths
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"
AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])
fi
])
+
+dnl http://autoconf-archive.cryp.to/ac_cxx_dynamic_cast.html
+AC_DEFUN([AC_CXX_DYNAMIC_CAST],
+[AC_CACHE_CHECK(whether the compiler supports dynamic_cast<>,
+ac_cv_cxx_dynamic_cast,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include <typeinfo>
+class Base { public : Base () {} virtual void f () = 0;};
+class Derived : public Base { public : Derived () {} virtual void f () {} };],[
+Derived d; Base& b=d; return dynamic_cast<Derived*>(&b) ? 0 : 1;],
+ ac_cv_cxx_dynamic_cast=yes, ac_cv_cxx_dynamic_cast=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_dynamic_cast" = yes; then
+ AC_DEFINE(HAVE_DYNAMIC_CAST,,[define if the compiler supports dynamic_cast<>])
+fi
+])
+