]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix wrong configure test for abi::__forced_unwind in previous commit.
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 20 Sep 2012 23:12:28 +0000 (23:12 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 20 Sep 2012 23:12:28 +0000 (23:12 +0000)
The previous commit was accidental and contained an initial version of the
patch which didn't test for NPTL abi::__forced_unwind correctly and just
tested whether cxxabi.h header was available.

Tighten the check to work on the other systems and check for __forced_unwind
existence itself.

Also check for cxxabi.h before testing for __cxa_demangle as there is no need
to try to compile another test program if we already know that this entire
header is unavailable anyhow.

See #14626.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

configure
configure.in
setup.h.in
src/unix/threadpsx.cpp

index 82e9bfec5a13c4619c45289ce24ba032d42bc3d1..fe703cb26f3c78c82146440d9f100015b9ab3fca 100755 (executable)
--- a/configure
+++ b/configure
@@ -30474,27 +30474,28 @@ $as_echo "$wx_cv_func_backtrace" >&6; }
 $as_echo "$as_me: WARNING: backtrace() is not available, wxStackWalker will not be available" >&2;}
         wxUSE_STACKWALKER=no
     else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cxa_demangle() in <cxxabi.h>" >&5
+        if test "$ac_cv_header_cxxabi_h" = "yes"; then
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cxa_demangle() in <cxxabi.h>" >&5
 $as_echo_n "checking for __cxa_demangle() in <cxxabi.h>... " >&6; }
 if ${wx_cv_func_cxa_demangle+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-                ac_ext=cpp
+                    ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
-                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <cxxabi.h>
 int
 main ()
 {
 
-                        int rc;
-                        __cxxabiv1::__cxa_demangle("foo", 0, 0, &rc);
+                            int rc;
+                            __cxxabiv1::__cxa_demangle("foo", 0, 0, &rc);
 
   ;
   return 0;
@@ -30508,7 +30509,7 @@ else
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-                ac_ext=c
+                    ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -30519,6 +30520,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $wx_cv_func_cxa_demangle" >&5
 $as_echo "$wx_cv_func_cxa_demangle" >&6; }
+        else
+            wx_cv_func_cxa_demangle=no
+        fi
 
         if test "$wx_cv_func_cxa_demangle" = "yes"; then
             $as_echo "#define HAVE_CXA_DEMANGLE 1" >>confdefs.h
@@ -32385,6 +32389,59 @@ $as_echo "yes, it works" >&6; }
 
           fi
         fi
+
+        if test "$ac_cv_header_cxxabi_h" = "yes"; then
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for abi::__forced_unwind() in <cxxabi.h>" >&5
+$as_echo_n "checking for abi::__forced_unwind() in <cxxabi.h>... " >&6; }
+if ${wx_cv_type_abi_forced_unwind+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                    ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <cxxabi.h>
+int
+main ()
+{
+
+                            void foo(abi::__forced_unwind&);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  wx_cv_type_abi_forced_unwind=yes
+else
+  wx_cv_type_abi_forced_unwind=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+                    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $wx_cv_type_abi_forced_unwind" >&5
+$as_echo "$wx_cv_type_abi_forced_unwind" >&6; }
+        else
+            wx_cv_type_abi_forced_unwind=no
+        fi
+
+        if test "$wx_cv_type_abi_forced_unwind" = "yes"; then
+            $as_echo "#define HAVE_ABI_FORCEDUNWIND 1" >>confdefs.h
+
+        fi
     fi
 
 else
index c2e00d2cce198a0ff52a2d38aff2da610bd13162..c40f89616acbdd969511553c6f241aad0ad5b400 100644 (file)
@@ -4387,20 +4387,24 @@ if test "$wxUSE_STACKWALKER" = "yes" -a "$wxUSE_UNIX" = "yes"; then
         AC_MSG_WARN([backtrace() is not available, wxStackWalker will not be available])
         wxUSE_STACKWALKER=no
     else
-        AC_CACHE_CHECK([for __cxa_demangle() in <cxxabi.h>], wx_cv_func_cxa_demangle,
-            [
-                AC_LANG_PUSH(C++)
-                AC_TRY_LINK([#include <cxxabi.h>],
-                    [
-                        int rc;
-                        __cxxabiv1::__cxa_demangle("foo", 0, 0, &rc);
-                    ],
-                    wx_cv_func_cxa_demangle=yes,
-                    wx_cv_func_cxa_demangle=no
-                )
-                AC_LANG_POP()
-            ]
-        )
+        if test "$ac_cv_header_cxxabi_h" = "yes"; then
+            AC_CACHE_CHECK([for __cxa_demangle() in <cxxabi.h>], wx_cv_func_cxa_demangle,
+                [
+                    AC_LANG_PUSH(C++)
+                    AC_TRY_LINK([#include <cxxabi.h>],
+                        [
+                            int rc;
+                            __cxxabiv1::__cxa_demangle("foo", 0, 0, &rc);
+                        ],
+                        wx_cv_func_cxa_demangle=yes,
+                        wx_cv_func_cxa_demangle=no
+                    )
+                    AC_LANG_POP()
+                ]
+            )
+        else
+            wx_cv_func_cxa_demangle=no
+        fi
 
         if test "$wx_cv_func_cxa_demangle" = "yes"; then
             AC_DEFINE(HAVE_CXA_DEMANGLE)
@@ -5095,6 +5099,29 @@ if test "$TOOLKIT" != "MSW" -a "$USE_OS2" != 1; then
             AC_DEFINE(HAVE___THREAD_KEYWORD)
           fi
         fi
+
+        if test "$ac_cv_header_cxxabi_h" = "yes"; then
+            AC_CACHE_CHECK([for abi::__forced_unwind() in <cxxabi.h>],
+                wx_cv_type_abi_forced_unwind,
+                [
+                    AC_LANG_PUSH(C++)
+                    AC_TRY_COMPILE([#include <cxxabi.h>],
+                        [
+                            void foo(abi::__forced_unwind&);
+                        ],
+                        wx_cv_type_abi_forced_unwind=yes,
+                        wx_cv_type_abi_forced_unwind=no
+                    )
+                    AC_LANG_POP()
+                ]
+            )
+        else
+            wx_cv_type_abi_forced_unwind=no
+        fi
+
+        if test "$wx_cv_type_abi_forced_unwind" = "yes"; then
+            AC_DEFINE(HAVE_ABI_FORCEDUNWIND)
+        fi
     fi
 
 dnl from if !MSW
index 5f93e50dbfdbed2ce349ebd785b4729664b42403..4f6412de9e40a803e3c1d97765da41c41693ff4d 100644 (file)
 /* Define if you have the <sys/select.h> header file.  */
 #undef HAVE_SYS_SELECT_H
 
-/* Define if you have <cxxabi.h> header file. */
-#undef HAVE_CXXABI_H
+/* Define if you have abi::__forced_unwind in your <cxxabi.h>. */
+#undef HAVE_ABI_FORCEDUNWIND
 
 /* Define if fdopen is available.  */
 #undef HAVE_FDOPEN
index 1bd59365237fb632701342768d921ae593010f54..de36955cda32ac2ce70ba3bb2b1fc2d0b36e5031 100644 (file)
@@ -54,7 +54,7 @@
     #include <thread.h>
 #endif
 
-#ifdef HAVE_CXXABI_H
+#ifdef HAVE_ABI_FORCEDUNWIND
     #include <cxxabi.h>
 #endif
 
@@ -861,7 +861,7 @@ void *wxThreadInternal::PthreadStart(wxThread *thread)
                        wxT("Thread %p Entry() returned %lu."),
                        THR_ID(pthread), wxPtrToUInt(pthread->m_exitcode));
         }
-#ifdef HAVE_CXXABI_H
+#ifdef HAVE_ABI_FORCEDUNWIND
         // When using common C++ ABI under Linux we must always rethrow this
         // special exception used to unwind the stack when the thread was
         // cancelled, otherwise the thread library would simply terminate the
@@ -872,7 +872,7 @@ void *wxThreadInternal::PthreadStart(wxThread *thread)
             pthread->SetState(STATE_EXITED);
             throw;
         }
-#endif // HAVE_CXXABI_H
+#endif // HAVE_ABI_FORCEDUNWIND
         wxCATCH_ALL( wxTheApp->OnUnhandledException(); )
 
         {