dnl Version: $Id$
dnl ---------------------------------------------------------------------------
+dnl ===========================================================================
+dnl macros to detect specialty compiler options
+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
+ ])
+])
+
+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)
+])
+
+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 ===========================================================================
AC_DEFUN([WX_PATH_FIND_INCLUDES],
[
ac_find_includes=
-for ac_dir in $1;
+for ac_dir in $1 /usr/include;
do
if test -f "$ac_dir/$2"; then
ac_find_includes=$ac_dir
AC_DEFUN([WX_PATH_FIND_LIBRARIES],
[
ac_find_libraries=
-for ac_dir in $1;
+for ac_dir in $1 /usr/lib;
do
for ac_extension in a so sl dylib; do
if test -f "$ac_dir/lib$2.$ac_extension"; then
dnl ---------------------------------------------------------------------------
AC_DEFUN([WX_INCLUDE_PATH_EXIST],
[
- ac_path_to_include=$1
- echo "$2" | grep "\-I$1" > /dev/null
- result=$?
- if test $result = 0; then
+ dnl never add -I/usr/include to the CPPFLAGS
+ if test "x$1" = "x/usr/include"; then
ac_path_to_include=""
else
- ac_path_to_include=" -I$1"
+ echo "$2" | grep "\-I$1" > /dev/null
+ result=$?
+ if test $result = 0; then
+ ac_path_to_include=""
+ else
+ ac_path_to_include=" -I$1"
+ fi
fi
])
dnl or only the old <iostream.h> one - it may be generally assumed that if
dnl <iostream> exists, the other "new" headers (without .h) exist too.
dnl
-dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false-or-cross-compiling)
+dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false)
dnl ---------------------------------------------------------------------------
AC_DEFUN([WX_CPP_NEW_HEADERS],
[
- if test "$cross_compiling" = "yes"; then
- ifelse([$2], , :, [$2])
- else
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
fi
AC_LANG_RESTORE
- fi
])
dnl ---------------------------------------------------------------------------
fi
])
+dnl ---------------------------------------------------------------------------
+dnl WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit
+dnl keyword and defines HAVE_EXPLICIT if this is the case
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([WX_CPP_EXPLICIT],
+[
+ AC_CACHE_CHECK([if C++ compiler supports the explicit keyword],
+ wx_cv_explicit,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ dnl do the test in 2 steps: first check that the compiler knows about the
+ dnl explicit keyword at all and then verify that it really honours it
+ AC_TRY_COMPILE(
+ [
+ class Foo { public: explicit Foo(int) {} };
+ ],
+ [
+ return 0;
+ ],
+ [
+ AC_TRY_COMPILE(
+ [
+ class Foo { public: explicit Foo(int) {} };
+ static void TakeFoo(const Foo& foo) { }
+ ],
+ [
+ TakeFoo(17);
+ return 0;
+ ],
+ wx_cv_explicit=no,
+ wx_cv_explicit=yes
+ )
+ ],
+ wx_cv_explicit=no
+ )
+
+ AC_LANG_RESTORE
+ ])
+
+ if test "$wx_cv_explicit" = "yes"; then
+ AC_DEFINE(HAVE_EXPLICIT)
+ fi
+])
+
dnl ---------------------------------------------------------------------------
dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling
dnl ---------------------------------------------------------------------------
])
dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH
-dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name)
+dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name, enablestring)
+dnl
+dnl enablestring is a hack and allows to show "checking for --disable-foo"
+dnl message when running configure instead of the default "checking for
+dnl --enable-foo" one whih is useful for the options enabled by default
AC_DEFUN([WX_ARG_ENABLE],
[
- AC_MSG_CHECKING([for --enable-$1])
+ enablestring=$4
+ AC_MSG_CHECKING([for --${enablestring:-enable}-$1])
no_cache=0
AC_ARG_ENABLE($1, [$2],
[
])
+dnl ===========================================================================
+dnl Linker features test
+dnl ===========================================================================
+
+dnl ---------------------------------------------------------------------------
+dnl WX_VERSIONED_SYMBOLS checks whether the linker can create versioned
+dnl symbols. If it can, sets LDFLAGS_VERSIONING to $CXX flags needed to use
+dnl version script file named versionfile
+dnl
+dnl call WX_VERSIONED_SYMBOLS(versionfile)
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([WX_VERSIONED_SYMBOLS],
+[
+ found_versioning=no
+
+ dnl FIXME - doesn't work, Solaris linker doesn't accept wildcards
+ dnl in the script.
+ dnl dnl Check for known non-gcc cases:
+ dnl case "${host}" in
+ dnl *-*-solaris2* )
+ dnl if test "x$GCC" != "xyes" ; then
+ dnl LDFLAGS_VERSIONING="-M $1"
+ dnl found_versioning=yes
+ dnl fi
+ dnl ;;
+ dnl esac
+
+ dnl Generic check for GCC or GCC-like behaviour (Intel C++, GCC):
+ if test $found_versioning = no ; then
+ AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script,
+ [
+ echo "VER_1 { *; };" >conftest.sym
+ echo "int main() { return 0; }" >conftest.cpp
+
+ if AC_TRY_COMMAND([
+ $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
+ -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then
+ if test -s conftest.stderr ; then
+ wx_cv_version_script=no
+ else
+ wx_cv_version_script=yes
+ fi
+ else
+ wx_cv_version_script=no
+ fi
+ rm -f conftest.output conftest.stderr conftest.sym conftest.cpp
+ ])
+ if test $wx_cv_version_script = yes ; then
+ LDFLAGS_VERSIONING="-Wl,--version-script,$1"
+ fi
+ fi
+])
+
dnl ===========================================================================
dnl "3rd party" macros included here because they are not widely available
AC_MSG_RESULT($wx_largefile)
fi
])
+
+
+dnl Available from the GNU Autoconf Macro Archive at:
+dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_const_cast.html
+dnl
+AC_DEFUN([AC_CXX_CONST_CAST],
+[AC_CACHE_CHECK(whether the compiler supports const_cast<>,
+ac_cv_cxx_const_cast,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE(,[int x = 0;const int& y = x;int& z = const_cast<int&>(y);return z;],
+ ac_cv_cxx_const_cast=yes, ac_cv_cxx_const_cast=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_const_cast" = yes; then
+ AC_DEFINE(HAVE_CONST_CAST,,[define if the compiler supports const_cast<>])
+fi
+])
+
+dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_reinterpret_cast.html
+AC_DEFUN([AC_CXX_REINTERPRET_CAST],
+[AC_CACHE_CHECK(whether the compiler supports reinterpret_cast<>,
+ac_cv_cxx_reinterpret_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 () {} };
+class Unrelated { public : Unrelated () {} };
+int g (Unrelated&) { return 0; }],[
+Derived d;Base& b=d;Unrelated& e=reinterpret_cast<Unrelated&>(b);return g(e);],
+ ac_cv_cxx_reinterpret_cast=yes, ac_cv_cxx_reinterpret_cast=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_reinterpret_cast" = yes; then
+ AC_DEFINE(HAVE_REINTERPRET_CAST,,
+ [define if the compiler supports reinterpret_cast<>])
+fi
+])
+
+dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html
+AC_DEFUN([AC_CXX_STATIC_CAST],
+[AC_CACHE_CHECK(whether the compiler supports static_cast<>,
+ac_cv_cxx_static_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 () {} };
+int g (Derived&) { return 0; }],[
+Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);],
+ ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_static_cast" = yes; then
+ AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])
+fi
+])