2007-06-15 Marcus Brinkmann <marcus@g10code.de>
[gnupg.git] / m4 / intdiv0.m4
blobb8d78176a6844669d85b1f364cfbccb1c6f5eb69
1 # intdiv0.m4 serial 1 (gettext-0.11.3)
2 dnl Copyright (C) 2002 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
7 dnl From Bruno Haible.
9 AC_DEFUN([gt_INTDIV0],
11   AC_REQUIRE([AC_PROG_CC])dnl
12   AC_REQUIRE([AC_CANONICAL_HOST])dnl
14   AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
15     gt_cv_int_divbyzero_sigfpe,
16     [
17       AC_TRY_RUN([
18 #include <stdlib.h>
19 #include <signal.h>
21 static void
22 #ifdef __cplusplus
23 sigfpe_handler (int sig)
24 #else
25 sigfpe_handler (sig) int sig;
26 #endif
28   /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
29   exit (sig != SIGFPE);
32 int x = 1;
33 int y = 0;
34 int z;
35 int nan;
37 int main ()
39   signal (SIGFPE, sigfpe_handler);
40 /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
41 #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
42   signal (SIGTRAP, sigfpe_handler);
43 #endif
44 /* Linux/SPARC yields signal SIGILL.  */
45 #if defined (__sparc__) && defined (__linux__)
46   signal (SIGILL, sigfpe_handler);
47 #endif
49   z = x / y;
50   nan = y / y;
51   exit (1);
53 ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
54         [
55           # Guess based on the CPU.
56           case "$host_cpu" in
57             alpha* | i[34567]86 | m68k | s390*)
58               gt_cv_int_divbyzero_sigfpe="guessing yes";;
59             *)
60               gt_cv_int_divbyzero_sigfpe="guessing no";;
61           esac
62         ])
63     ])
64   case "$gt_cv_int_divbyzero_sigfpe" in
65     *yes) value=1;;
66     *) value=0;;
67   esac
68   AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
69     [Define if integer division by zero raises signal SIGFPE.])