ax_check_catchable_abrt.m4 1.3 KB

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