1# isnand.m4 serial 11
2dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7dnl Check how to get or define isnand().
8
9AC_DEFUN([gl_FUNC_ISNAND],
10[
11  AC_REQUIRE([gl_MATH_H_DEFAULTS])
12  ISNAND_LIBM=
13  gl_HAVE_ISNAND_NO_LIBM
14  if test $gl_cv_func_isnand_no_libm = no; then
15    gl_HAVE_ISNAND_IN_LIBM
16    if test $gl_cv_func_isnand_in_libm = yes; then
17      ISNAND_LIBM=-lm
18    fi
19  fi
20  dnl The variable gl_func_isnand set here is used by isnan.m4.
21  if test $gl_cv_func_isnand_no_libm = yes \
22     || test $gl_cv_func_isnand_in_libm = yes; then
23    gl_func_isnand=yes
24  else
25    gl_func_isnand=no
26    HAVE_ISNAND=0
27  fi
28  AC_SUBST([ISNAND_LIBM])
29])
30
31dnl Check how to get or define isnand() without linking with libm.
32
33AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM],
34[
35  gl_HAVE_ISNAND_NO_LIBM
36  gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm
37  if test $gl_cv_func_isnand_no_libm = yes; then
38    AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1],
39      [Define if the isnan(double) function is available in libc.])
40  fi
41])
42
43dnl Prerequisites of replacement isnand definition. It does not need -lm.
44AC_DEFUN([gl_PREREQ_ISNAND],
45[
46  AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
47])
48
49dnl Test whether isnand() can be used with libm.
50
51AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM],
52[
53  AC_CACHE_CHECK([whether isnan(double) can be used with libm],
54    [gl_cv_func_isnand_in_libm],
55    [
56      save_LIBS="$LIBS"
57      LIBS="$LIBS -lm"
58      AC_LINK_IFELSE(
59        [AC_LANG_PROGRAM(
60           [[#include <math.h>
61             #if __GNUC__ >= 4
62             # undef isnand
63             # define isnand(x) __builtin_isnan ((double)(x))
64             #elif defined isnan
65             # undef isnand
66             # define isnand(x) isnan ((double)(x))
67             #endif
68             double x;]],
69           [[return isnand (x);]])],
70        [gl_cv_func_isnand_in_libm=yes],
71        [gl_cv_func_isnand_in_libm=no])
72      LIBS="$save_LIBS"
73    ])
74])
75
76AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM],
77[
78  AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm],
79    [gl_cv_func_isnand_no_libm],
80    [
81      AC_LINK_IFELSE(
82        [AC_LANG_PROGRAM(
83           [[#include <math.h>
84             #if __GNUC__ >= 4
85             # undef isnand
86             # define isnand(x) __builtin_isnan ((double)(x))
87             #else
88             # undef isnand
89             # define isnand(x) isnan ((double)(x))
90             #endif
91             double x;]],
92           [[return isnand (x);]])],
93        [gl_cv_func_isnand_no_libm=yes],
94        [gl_cv_func_isnand_no_libm=no])
95    ])
96])
97