]> git.saurik.com Git - wxWidgets.git/blobdiff - acinclude.m4
correct access for virtuals
[wxWidgets.git] / acinclude.m4
index 3adc66c3772cba5d96453539970890e78f7851cf..4f4ecb9682151821e5cc7eb2ee7862134db23318 100644 (file)
@@ -8,77 +8,20 @@ dnl
 dnl Version: $Id$
 dnl ---------------------------------------------------------------------------
 
 dnl Version: $Id$
 dnl ---------------------------------------------------------------------------
 
+
 dnl ===========================================================================
 dnl ===========================================================================
-dnl macros to detect specialty compiler options
+dnl Objective-C(++) related macros
 dnl ===========================================================================
 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)
+m4_define([AC_WX_LANG_OBJECTIVEC],
+[AC_LANG(C)
+ac_ext=m
 ])
 
 ])
 
-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++)
+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
 dnl ===========================================================================
 dnl ===========================================================================
 dnl macros to find the a file in the list of include/lib paths
 dnl ===========================================================================
@@ -100,15 +43,15 @@ for ac_dir in $1 /usr/include;
 ])
 
 dnl ---------------------------------------------------------------------------
 ])
 
 dnl ---------------------------------------------------------------------------
-dnl call WX_PATH_FIND_LIBRARIES(search path, header name), sets ac_find_libraries
+dnl call WX_PATH_FIND_LIBRARIES(search path, lib name), sets ac_find_libraries
 dnl to the full name of the file that was found or leaves it empty if not found
 dnl ---------------------------------------------------------------------------
 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
 [
 dnl to the full name of the file that was found or leaves it empty if not found
 dnl ---------------------------------------------------------------------------
 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
 [
-ac_find_libraries=
-for ac_dir in $1 /usr/lib;
+  ac_find_libraries=
+  for ac_dir in $1;
   do
   do
-    for ac_extension in a so sl dylib; do
+    for ac_extension in a so sl dylib dll.a; do
       if test -f "$ac_dir/lib$2.$ac_extension"; then
         ac_find_libraries=$ac_dir
         break 2
       if test -f "$ac_dir/lib$2.$ac_extension"; then
         ac_find_libraries=$ac_dir
         break 2
@@ -117,6 +60,19 @@ for ac_dir in $1 /usr/lib;
   done
 ])
 
   done
 ])
 
+dnl ---------------------------------------------------------------------------
+dnl return list of standard library paths
+dnl ---------------------------------------------------------------------------
+dnl return all default locations:
+dnl   - /usr/lib: standard
+dnl   - /usr/lib32: n32 ABI on IRIX
+dnl   - /usr/lib64: n64 ABI on IRIX
+dnl   - /usr/lib/64: 64 bit ABI on Solaris and Linux x86-64
+dnl
+dnl NB: if any of directories in the list is not a subdir of /usr, code setting
+dnl     wx_cv_std_libpath needs to be updated
+AC_DEFUN([WX_STD_LIBPATH], [/usr/lib /usr/lib32 /usr/lib/64 /usr/lib64])
+
 dnl ---------------------------------------------------------------------------
 dnl Path to include, already defined
 dnl ---------------------------------------------------------------------------
 dnl ---------------------------------------------------------------------------
 dnl Path to include, already defined
 dnl ---------------------------------------------------------------------------
@@ -137,16 +93,25 @@ AC_DEFUN([WX_INCLUDE_PATH_EXIST],
 ])
 
 dnl ---------------------------------------------------------------------------
 ])
 
 dnl ---------------------------------------------------------------------------
-dnl Path to link, already defined
+dnl Usage: WX_LINK_PATH_EXIST(path, libpath)
+dnl
+dnl Set ac_path_to_link to nothing if path is already in libpath of to -Lpath
+dnl if it is not, so that libpath can be set to "$libpath$ac_path_to_link"
+dnl after calling this function
 dnl ---------------------------------------------------------------------------
 AC_DEFUN([WX_LINK_PATH_EXIST],
 [
 dnl ---------------------------------------------------------------------------
 AC_DEFUN([WX_LINK_PATH_EXIST],
 [
-  echo "$2" | grep "\-L$1" > /dev/null
-  result=$?
-  if test $result = 0; then
+  dnl never add -L/usr/libXXX explicitely to libpath
+  if test "$1" = "default location"; then
     ac_path_to_link=""
   else
     ac_path_to_link=""
   else
-    ac_path_to_link=" -L$1"
+    echo "$2" | grep "\-L$1" > /dev/null
+    result=$?
+    if test $result = 0; then
+      ac_path_to_link=""
+    else
+      ac_path_to_link=" -L$1"
+    fi
   fi
 ])
 
   fi
 ])
 
@@ -370,10 +335,11 @@ AC_DEFUN([WX_ARG_SYS_WITH],
         ])
 
 dnl this macro checks for a command line argument and caches the result
         ])
 
 dnl this macro checks for a command line argument and caches the result
-dnl usage: WX_ARG_WITH(option, helpmessage, variable-name)
+dnl usage: WX_ARG_WITH(option, helpmessage, variable-name, [withstring])
 AC_DEFUN([WX_ARG_WITH],
         [
 AC_DEFUN([WX_ARG_WITH],
         [
-          AC_MSG_CHECKING([for --with-$1])
+         withstring=$4
+          AC_MSG_CHECKING([for --${withstring:-with}-$1])
           no_cache=0
           AC_ARG_WITH($1, [$2],
                       [
           no_cache=0
           AC_ARG_WITH($1, [$2],
                       [
@@ -494,7 +460,44 @@ AC_DEFUN([WX_VERSIONED_SYMBOLS],
         else
           wx_cv_version_script=no
         fi
         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 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"
       ])
       if test $wx_cv_version_script = yes ; then
         LDFLAGS_VERSIONING="-Wl,--version-script,$1"