]> git.saurik.com Git - wxWidgets.git/blobdiff - configure.in
Moved the cleanup code to an EVT_WINDOW_DESTROY handler.
[wxWidgets.git] / configure.in
index 417c406f68bed02ff644b498e36883235170e357..d4fae38dc0b441e3b4f2bd93a6ef7b3448065c78 100644 (file)
@@ -96,9 +96,6 @@ dnl _REENTRANT" and it's easier to just define this symbol for these platforms
 dnl than checking it during run-time
 NEEDS_D_REENTRANT_FOR_R_FUNCS=0
 
 dnl than checking it during run-time
 NEEDS_D_REENTRANT_FOR_R_FUNCS=0
 
-dnl the additional define needed for MT programs
-CPP_MT_FLAG=-D_REENTRANT
-
 dnl the list of all available toolkits
 dnl
 dnl update NUM_TOOLKITS calculation below when adding a new toolkit here!
 dnl the list of all available toolkits
 dnl
 dnl update NUM_TOOLKITS calculation below when adding a new toolkit here!
@@ -183,7 +180,6 @@ case "${host}" in
   *-*-freebsd*)
     USE_BSD=1
     USE_FREEBSD=1
   *-*-freebsd*)
     USE_BSD=1
     USE_FREEBSD=1
-    CPP_MT_FLAG=-D_THREAD_SAFE
     AC_DEFINE(__FREEBSD__)
     AC_DEFINE(__BSD__)
     DEFAULT_DEFAULT_wxUSE_GTK=1
     AC_DEFINE(__FREEBSD__)
     AC_DEFINE(__BSD__)
     DEFAULT_DEFAULT_wxUSE_GTK=1
@@ -268,7 +264,6 @@ case "${host}" in
     dnl PowerPC Darwin based distributions (including Mac OS X)
     USE_BSD=1
     USE_DARWIN=1
     dnl PowerPC Darwin based distributions (including Mac OS X)
     USE_BSD=1
     USE_DARWIN=1
-    CPP_MT_FLAG=
     SO_SUFFIX=dylib
     AC_DEFINE(__BSD__)
     AC_DEFINE(__DARWIN__)
     SO_SUFFIX=dylib
     AC_DEFINE(__BSD__)
     AC_DEFINE(__DARWIN__)
@@ -1175,10 +1170,13 @@ dnl   defines CC with the compiler to use
 dnl   defines GCC with yes if using gcc
 dnl   defines GCC empty if not using gcc
 dnl   defines CFLAGS
 dnl   defines GCC with yes if using gcc
 dnl   defines GCC empty if not using gcc
 dnl   defines CFLAGS
+dnl
+dnl this magic incantation is needed to prevent AC_PROG_CC from setting the
+dnl default CFLAGS (something like "-g -O2") - we don't need this as add
+dnl -g and -O flags ourselves below
+CFLAGS=${CFLAGS:=}
 AC_PROG_CC
 
 AC_PROG_CC
 
-CFLAGS=`echo "$CFLAGS" | sed 's/-g//g'`
-
 dnl is -traditional needed for correct compilations
 dnl   adds -traditional for gcc if needed
 AC_PROG_GCC_TRADITIONAL
 dnl is -traditional needed for correct compilations
 dnl   adds -traditional for gcc if needed
 AC_PROG_GCC_TRADITIONAL
@@ -1191,10 +1189,11 @@ dnl   defines CXX with the compiler to use
 dnl   defines GXX with yes if using gxx
 dnl   defines GXX empty if not using gxx
 dnl   defines CXXFLAGS
 dnl   defines GXX with yes if using gxx
 dnl   defines GXX empty if not using gxx
 dnl   defines CXXFLAGS
+dnl
+dnl see CFLAGS line above
+CXXFLAGS=${CXXFLAGS:=}
 AC_PROG_CXX
 
 AC_PROG_CXX
 
-CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-g//g'`
-
 AC_LANG_RESTORE
 
 dnl ranlib command
 AC_LANG_RESTORE
 
 dnl ranlib command
@@ -2432,6 +2431,9 @@ if test "$wxUSE_SHARED" = "yes"; then
         dnl http://fink.sourceforge.net/doc/porting/porting.html
         CFLAGS="$CFLAGS -fno-common -DDYLIB_INIT"
         CXXFLAGS="$CXXFLAGS -fno-common -DDYLIB_INIT"
         dnl http://fink.sourceforge.net/doc/porting/porting.html
         CFLAGS="$CFLAGS -fno-common -DDYLIB_INIT"
         CXXFLAGS="$CXXFLAGS -fno-common -DDYLIB_INIT"
+        dnl Executables must necessarily fully bind the wxWindows library at
+        dnl program launch otherwise lazy binding breaks RTTI class info
+        LDFLAGS="$LDFLAGS -Wl,-bind_at_load"
         SHARED_LD="$CXX -dynamiclib -init _wxWindowsDylibInit -o"
         PIC_FLAG="-dynamic -fPIC"
         SONAME_FLAGS="-compatibility_version ${WX_RELEASE} -current_version ${WX_VERSION}"
         SHARED_LD="$CXX -dynamiclib -init _wxWindowsDylibInit -o"
         PIC_FLAG="-dynamic -fPIC"
         SONAME_FLAGS="-compatibility_version ${WX_RELEASE} -current_version ${WX_VERSION}"
@@ -3125,17 +3127,19 @@ dnl thread support for Unix (always available under Win32)
 dnl ---------------------------------------------------------------------------
 
 dnl under MSW we always have thread support
 dnl ---------------------------------------------------------------------------
 
 dnl under MSW we always have thread support
+CPP_MT_FLAG=
 if test "$TOOLKIT" != "MSW"; then
 
     dnl the code below:
 if test "$TOOLKIT" != "MSW"; then
 
     dnl the code below:
-    dnl   defines THREADS_OBJ which contains the object files to build
-    dnl   defines THREADS_LINK which contains the thread library to link with
-    dnl   defines wxUSE_THREADS=1 if thread support is activated
+    dnl
+    dnl   defines THREADS_LINK and THREADS_CFLAGS which are the options
+    dnl   necessary to build the MT programs for the linker and compiler
+    dnl   respectively
+    dnl
+    dnl   sets wxUSE_THREADS=1 if thread support is activated
 
     THREADS_LINK=
 
     THREADS_LINK=
-    THREADS_OBJ=
-    CODE_GEN_FLAGS=
-    CODE_GEN_FLAGS_CXX=
+    THREADS_CFLAGS=
 
     if test "$wxUSE_THREADS" = "yes" ; then
         if test "$wxUSE_WINE" = 1 ; then
 
     if test "$wxUSE_THREADS" = "yes" ; then
         if test "$wxUSE_WINE" = 1 ; then
@@ -3149,67 +3153,136 @@ if test "$TOOLKIT" != "MSW"; then
 
     if test "$wxUSE_THREADS" = "yes" ; then
         dnl find if POSIX threads are available
 
     if test "$wxUSE_THREADS" = "yes" ; then
         dnl find if POSIX threads are available
+        dnl
+        dnl the tests here are based on ACX_PTHREAD macro from autoconf macro
+        dnl archive from http://ac-archive.sourceforge.net/
+        dnl
+        dnl thanks to Steven G. Johnson <stevenj@alum.mit.edu> and Alejandro
+        dnl Forero Cuervo <bachue@bachue.com> for the original code
+
+        dnl TODO: cache the result
+
+        dnl define the list of the thread options to try in the loop below
+        dnl with the convention that anything starting with '-' is a cpp flag
+        dnl while anything else is a library (i.e. there is an implicit "-l")
+        THREAD_OPTS="-pthread"
+        case "${host}" in
+          *-*-solaris2* | *-*-sunos4* )
+                if test "x$GCC" = "xyes"; then
+                    dnl Solaris/gcc combination use this one for some reason
+                    THREAD_OPTS="-pthreads $THREAD_OPTS"
+                else
+                    THREAD_OPTS="-mt $THREAD_OPTS"
+                fi
+                ;;
+          *-*-freebsd*)
+                dnl look, in order, for the kernel threads, then Linux threads
+                dnl and finally the userland threads
+                THREAD_OPTS="-kthread lthread $THREAD_OPTS c_r"
+                ;;
+          *-*-darwin*)
+                dnl Darwin / Mac OS X just uses -lpthread tested below
+                THREAD_OPTS=""
+                ;;
+          *-*-aix*)
+                dnl AIX calls the library libpthreads - thanks IBM!
+                THREAD_OPTS="pthreads"
+                ;;
+        esac
 
 
-        dnl AIX calls the library libpthreads - thanks IBM!
-        if test "$USE_AIX" = 1; then
-            THREADS_LIB=pthreads
-        else
-            THREADS_LIB=pthread
-        fi
+        dnl simply linking with libpthread should make the test below work but
+        dnl it's far from certain that the threaded programs compiled without
+        dnl any special switches actually work, so try it after all the others
+        THREAD_OPTS="$THREAD_OPTS pthread none"
+
+        dnl now test for all possibilities
+        THREADS_OK=no
+        for flag in $THREAD_OPTS; do
+            case $flag in
+                none)
+                    AC_MSG_CHECKING([whether pthreads work without any flags])
+                    ;;
 
 
-        dnl standard lib name is pthread
-        dnl We no longer test for pthread-0.7 as it breaks compilation on some
-        dnl glibc2 systems, especially for static linkage.
-        AC_CHECK_LIB($THREADS_LIB, pthread_create, [
-                THREADS_OBJ="threadpsx.lo"
-                THREADS_LINK=$THREADS_LIB
-            ], [
-                dnl thread functions are in libc_r under FreeBSD
-                AC_CHECK_LIB(c_r, pthread_create, [
-                    THREADS_OBJ="threadpsx.lo"
-                    THREADS_LINK="c_r"
-                ], [
-                    dnl VZ: SGI threads are not supported currently
-                    AC_CHECK_HEADER(sys/prctl.h, [
-                        THREADS_OBJ="threadsgi.lo"
-                    ])
-                ])
-            ])
+                -*)
+                    AC_MSG_CHECKING([whether pthreads work with $flag])
+                    THREADS_CFLAGS="$flag"
+                    ;;
 
 
-        if test -z "$THREADS_OBJ" ; then
-            wxUSE_THREADS=no
-            AC_MSG_WARN([No thread support on this system... disabled])
-        fi
+                *)
+                    AC_MSG_CHECKING([for the pthreads library -l$flag])
+                    THREADS_LINK="-l$flag"
+                    ;;
+              esac
+
+              save_LIBS="$LIBS"
+              save_CFLAGS="$CFLAGS"
+              LIBS="$THREADS_LINK $LIBS"
+              CFLAGS="$THREADS_CFLAGS $CFLAGS"
+
+              AC_TRY_LINK([#include <pthread.h>],
+                          [pthread_create(0,0,0,0);],
+                          THREADS_OK=yes)
+
+              LIBS="$save_LIBS"
+              CFLAGS="$save_CFLAGS"
+
+              AC_MSG_RESULT($THREADS_OK)
+              if test "x$THREADS_OK" = "xyes"; then
+                      break;
+              fi
+
+              THREADS_LINK=""
+              THREADS_CFLAGS=""
+      done
+
+      if test "x$THREADS_OK" != "xyes"; then
+          wxUSE_THREADS=no
+          AC_MSG_WARN([No thread support on this system... disabled])
+      else
+          dnl yes, these special compiler flags should be used with the
+          dnl linker as well
+          LIBS="$THREADS_LINK $THREADS_CFLAGS $LIBS"
+
+          AC_MSG_CHECKING([if more special flags are required for pthreads])
+          flag=no
+          case "${host}" in
+            *-aix* | *-freebsd*)
+                flag="-D_THREAD_SAFE"
+                ;;
+            *solaris* | alpha*-osf*)
+                flag="-D_REENTRANT"
+                ;;
+          esac
+          AC_MSG_RESULT(${flag})
+          if test "x$flag" != xno; then
+              THREADS_CFLAGS="$THREADS_CFLAGS $flag"
+          fi
+
+          if test "x$THREADS_CFLAGS" != "x"; then
+            dnl don't add these options to CPPFLAGS as cpp might not know them
+            CFLAGS="$CFLAGS $THREADS_CFLAGS"
+            CXXFLAGS="$CXXFLAGS $THREADS_CFLAGS"
+          fi
+      fi
     fi
 
     dnl do other tests only if we are using threads
     if test "$wxUSE_THREADS" = "yes" ; then
       AC_CHECK_FUNCS(thr_setconcurrency)
 
     fi
 
     dnl do other tests only if we are using threads
     if test "$wxUSE_THREADS" = "yes" ; then
       AC_CHECK_FUNCS(thr_setconcurrency)
 
-      dnl define autoconf macro to check for given function in both pthread and
-      dnl posix4 libraries
-      dnl usage: AC_FUNC_THREAD(FUNCTION_NAME)
-      dnl VZ: TODO
-      dnl AC_DEFUN(AC_FUNC_THREAD,
-      dnl [
-      dnl     AC_CHECK_LIB($THREADS_LINK, $1,
-      dnl            AC_DEFINE(HAVE_`'translit($1, `A-Z', 'a-z'),
-      dnl            [AC_CHECK_LIB([posix4], $1,
-      dnl                [AC_DEFINE(HAVE_`'translit($1, `A-Z', 'a-z'))
-      dnl                 POSIX4_LINK=" -lposix4"
-      dnl             ])
-      dnl            ])
-      dnl ])
-
       AC_CHECK_HEADERS(sched.h)
       AC_CHECK_HEADERS(sched.h)
-
-      AC_CHECK_LIB($THREADS_LINK, sched_yield,
-                   AC_DEFINE(HAVE_SCHED_YIELD),
-                   [AC_CHECK_LIB([posix4], sched_yield,
-                       [AC_DEFINE(HAVE_SCHED_YIELD) POSIX4_LINK=" -lposix4"],
-                       AC_MSG_WARN(wxThread::Yield will not work properly)
-                    )]
-                   )
+      if test "$ac_cv_header_sched_h" = "yes"; then
+          AC_CHECK_FUNC(sched_yield,
+            AC_DEFINE(HAVE_SCHED_YIELD),
+            [
+                AC_CHECK_LIB(posix4,
+                    sched_yield,
+                    [AC_DEFINE(HAVE_SCHED_YIELD) POSIX4_LINK=" -lposix4"],
+                    AC_MSG_WARN(wxThread::Yield will not work properly)
+                )
+            ]
+          )
+      fi
 
       dnl to be able to set the thread priority, we need to have all of the
       dnl following functions:
 
       dnl to be able to set the thread priority, we need to have all of the
       dnl following functions:
@@ -3218,9 +3291,9 @@ if test "$TOOLKIT" != "MSW"; then
       dnl      (this one can be in either libpthread or libposix4 (under Solaris))
       dnl   3. pthread_attr_getschedparam and pthread_attr_setschedparam
       HAVE_PRIOR_FUNCS=0
       dnl      (this one can be in either libpthread or libposix4 (under Solaris))
       dnl   3. pthread_attr_getschedparam and pthread_attr_setschedparam
       HAVE_PRIOR_FUNCS=0
-      AC_CHECK_LIB($THREADS_LINK, pthread_attr_getschedpolicy,
-                     AC_CHECK_LIB($THREADS_LINK, pthread_attr_setschedparam,
-                       AC_CHECK_LIB($THREADS_LINK, sched_get_priority_max,
+      AC_CHECK_FUNC(pthread_attr_getschedpolicy,
+                     AC_CHECK_FUNC(pthread_attr_setschedparam,
+                       AC_CHECK_FUNC(sched_get_priority_max,
                            HAVE_PRIOR_FUNCS=1,
                            AC_CHECK_LIB([posix4], sched_get_priority_max,
                              [
                            HAVE_PRIOR_FUNCS=1,
                            AC_CHECK_LIB([posix4], sched_get_priority_max,
                              [
@@ -3238,9 +3311,9 @@ if test "$TOOLKIT" != "MSW"; then
         AC_MSG_WARN(Setting thread priority will not work)
       fi
 
         AC_MSG_WARN(Setting thread priority will not work)
       fi
 
-      AC_CHECK_LIB($THREADS_LINK, pthread_cancel,
-                   AC_DEFINE(HAVE_PTHREAD_CANCEL),
-                   AC_MSG_WARN([wxThread::Kill() will not work properly]))
+      AC_CHECK_FUNC(pthread_cancel,
+                    AC_DEFINE(HAVE_PTHREAD_CANCEL),
+                    AC_MSG_WARN([wxThread::Kill() will not work properly]))
 
       AC_CACHE_CHECK([for pthread_cleanup_push/pop], wx_cv_func_pthread_cleanup_push,
       [
 
       AC_CACHE_CHECK([for pthread_cleanup_push/pop], wx_cv_func_pthread_cleanup_push,
       [
@@ -3314,16 +3387,6 @@ if test "$TOOLKIT" != "MSW"; then
           AC_MSG_WARN([wxMutex won't be recursive on this platform])
         fi
       fi
           AC_MSG_WARN([wxMutex won't be recursive on this platform])
         fi
       fi
-
-      THREADS_LINK=" -l$THREADS_LINK"
-
-      dnl building MT programs under Solaris with the native compiler requires -mt
-      dnl switch
-      if test "$USE_SOLARIS" = "yes" -a "$GCC" != "yes"; then
-          CPPFLAGS="$CFLAGS -mt"
-          CXXFLAGS="$CXXFLAGS -mt"
-          LDFLAGS="$LDFLAGS -mt"
-      fi
     fi
 
 dnl from if !MSW
     fi
 
 dnl from if !MSW
@@ -3332,9 +3395,6 @@ fi
 if test "$wxUSE_THREADS" = "yes"; then
   AC_DEFINE(wxUSE_THREADS)
 
 if test "$wxUSE_THREADS" = "yes"; then
   AC_DEFINE(wxUSE_THREADS)
 
-  dnl we must define _REENTRANT or something along these lines for MT code
-  TOOLCHAIN_DEFS="$TOOLCHAIN_DEFS $CPP_MT_FLAG"
-
   SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS thread"
 else
   dnl on some systems, _REENTRANT should be defined if we want to use any _r()
   SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS thread"
 else
   dnl on some systems, _REENTRANT should be defined if we want to use any _r()
@@ -3400,6 +3460,8 @@ if test "$wxUSE_PROFILE" = "yes" ; then
     PROFILE=" -pg"
 fi
 
     PROFILE=" -pg"
 fi
 
+CODE_GEN_FLAGS=
+CODE_GEN_FLAGS_CXX=
 if test "$GCC" = "yes" ; then
     if test "$wxUSE_NO_RTTI" = "yes" ; then
         CODE_GEN_FLAGS_CXX="$CODE_GEN_FLAGS_CXX -fno-rtti"
 if test "$GCC" = "yes" ; then
     if test "$wxUSE_NO_RTTI" = "yes" ; then
         CODE_GEN_FLAGS_CXX="$CODE_GEN_FLAGS_CXX -fno-rtti"
@@ -3418,9 +3480,6 @@ if test "$GCC" = "yes" ; then
     fi
 fi
 
     fi
 fi
 
-
-CXXFLAGS=`echo "${CXXFLAGS}" | sed "s/\-O.//g" `
-CFLAGS=`echo "${CFLAGS}" | sed "s/\-O.//g" `
 if test "$wxUSE_OPTIMISE" = "no" ; then
     OPTIMISE=
 else
 if test "$wxUSE_OPTIMISE" = "no" ; then
     OPTIMISE=
 else
@@ -4682,7 +4741,7 @@ dnl FIXME: should this be covered by the conditional above
 dnl given the -lm comment there?  Or should that comment (and
 dnl this one) be removed..   [ 7 Nov 2001 ]
 
 dnl given the -lm comment there?  Or should that comment (and
 dnl this one) be removed..   [ 7 Nov 2001 ]
 
-LIBS="$ZLIB_LINK $POSIX4_LINK $INET_LINK $WCHAR_LINK $THREADS_LINK $DL_LINK -lm $LIBS"
+LIBS="$ZLIB_LINK $POSIX4_LINK $INET_LINK $WCHAR_LINK $DL_LINK -lm $LIBS"
 
 if test "$wxUSE_GUI" = "yes"; then
 
 
 if test "$wxUSE_GUI" = "yes"; then
 
@@ -4732,10 +4791,12 @@ fi
 
 EXTRA_CFLAGS="$WXDEBUG $WXODBCFLAG $PROFILE $OPTIMISE $INCLUDES"
 
 
 EXTRA_CFLAGS="$WXDEBUG $WXODBCFLAG $PROFILE $OPTIMISE $INCLUDES"
 
+dnl remove the extra white space from the cc/c++/ld options
 CFLAGS=`echo $CFLAGS $EXTRA_CFLAGS $CXXWARNINGS | sed 's/ \\+/ /g'`
 CXXFLAGS=`echo $CXXFLAGS $EXTRA_CFLAGS $CXXWARNINGS | sed 's/ \+/ /g'`
 CFLAGS=`echo $CFLAGS $EXTRA_CFLAGS $CXXWARNINGS | sed 's/ \\+/ /g'`
 CXXFLAGS=`echo $CXXFLAGS $EXTRA_CFLAGS $CXXWARNINGS | sed 's/ \+/ /g'`
+LIBS=`echo $LIBS | sed 's/ \+/ /g'`
 
 
-LDFLAGS="$LDFLAGS$PROFILE"
+LDFLAGS="$LDFLAGS $PROFILE"
 
 dnl for convenience, sort the samples in alphabetical order
 dnl
 
 dnl for convenience, sort the samples in alphabetical order
 dnl