1 # SYNOPSIS 2 # 3 # AX_CHECK_CATCHABLE_ABRT 4 # 5 # DESCRIPTION 6 # 7 # Check whether SIGABRT can be caught using signal handlers. 8 9 #serial 1 10 11 AC_DEFUN([AX_CHECK_CATCHABLE_ABRT], [dnl 12 AC_PREREQ(2.64) 13 AS_VAR_PUSHDEF([CACHEVAR], [ax_cv_check_[]_AC_LANG_ABBREV[]CATCHABLE_ABRT])dnl 14 AC_CACHE_CHECK([whether SIGABRT can be caught when using the _AC_LANG compiler], CACHEVAR, [ 15 AC_RUN_IFELSE([ 16 AC_LANG_PROGRAM([[ 17 #include <signal.h> 18 #include <stdlib.h> 19 20 #ifndef SIGABRT 21 # error SIGABRT is not defined 22 #endif 23 24 static void sigabrt_handler_3(int _) 25 { 26 exit(0); 27 } 28 29 static void sigabrt_handler_2(int _) 30 { 31 signal(SIGABRT, sigabrt_handler_3); 32 abort(); 33 exit(1); 34 } 35 36 static void sigabrt_handler_1(int _) 37 { 38 signal(SIGABRT, sigabrt_handler_2); 39 abort(); 40 exit(1); 41 } 42 ]], [[ 43 signal(SIGABRT, sigabrt_handler_1); 44 abort(); 45 exit(1); 46 ]])], 47 [AS_VAR_SET(CACHEVAR, [yes])], 48 [AS_VAR_SET(CACHEVAR, [no])], 49 [AS_VAR_SET(CACHEVAR, [unknown])] 50 ) 51 ]) 52 AS_VAR_IF(CACHEVAR, yes, 53 [AC_DEFINE([HAVE_CATCHABLE_ABRT], [1], [Define if SIGABRT can be caught using signal handlers])], 54 [AC_MSG_WARN([On this platform, SIGABRT cannot be caught using signal handlers.])] 55 ) 56 AS_VAR_POPDEF([CACHEVAR])dnl 57 ]) 58