Commit | Line | Data |
---|---|---|
49114fd4 LC |
1 | # isnand.m4 serial 8 |
2 | dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. | |
2e65b52f LC |
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. | |
6 | ||
7 | dnl Check how to get or define isnand(). | |
8 | ||
9 | AC_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 | gl_BUILD_ISNAND | |
28 | fi | |
29 | AC_SUBST([ISNAND_LIBM]) | |
30 | ]) | |
31 | ||
32 | dnl Check how to get or define isnand() without linking with libm. | |
33 | ||
34 | AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], | |
35 | [ | |
36 | gl_HAVE_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 | else | |
41 | gl_BUILD_ISNAND | |
42 | fi | |
43 | ]) | |
44 | ||
45 | dnl Pull in replacement isnand definition. It does not need -lm. | |
46 | AC_DEFUN([gl_BUILD_ISNAND], | |
47 | [ | |
48 | AC_LIBOBJ([isnand]) | |
49 | gl_DOUBLE_EXPONENT_LOCATION | |
50 | ]) | |
51 | ||
52 | dnl Test whether isnand() can be used with libm. | |
53 | ||
54 | AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], | |
55 | [ | |
56 | AC_CACHE_CHECK([whether isnan(double) can be used with libm], | |
57 | [gl_cv_func_isnand_in_libm], | |
58 | [ | |
59 | save_LIBS="$LIBS" | |
60 | LIBS="$LIBS -lm" | |
61 | AC_LINK_IFELSE( | |
62 | [AC_LANG_PROGRAM( | |
63 | [[#include <math.h> | |
64 | #if __GNUC__ >= 4 | |
65 | # undef isnand | |
49114fd4 | 66 | # define isnand(x) __builtin_isnan ((double)(x)) |
2e65b52f LC |
67 | #elif defined isnan |
68 | # undef isnand | |
69 | # define isnand(x) isnan ((double)(x)) | |
70 | #endif | |
71 | double x;]], | |
72 | [[return isnand (x);]])], | |
73 | [gl_cv_func_isnand_in_libm=yes], | |
74 | [gl_cv_func_isnand_in_libm=no]) | |
75 | LIBS="$save_LIBS" | |
76 | ]) | |
77 | ]) | |
78 | ||
79 | AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], | |
80 | [ | |
81 | AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], | |
82 | [gl_cv_func_isnand_no_libm], | |
83 | [ | |
84 | AC_LINK_IFELSE( | |
85 | [AC_LANG_PROGRAM( | |
86 | [[#include <math.h> | |
87 | #if __GNUC__ >= 4 | |
88 | # undef isnand | |
89 | # define isnand(x) __builtin_isnan ((double)(x)) | |
90 | #else | |
91 | # undef isnand | |
92 | # define isnand(x) isnan ((double)(x)) | |
93 | #endif | |
94 | double x;]], | |
95 | [[return isnand (x);]])], | |
96 | [gl_cv_func_isnand_no_libm=yes], | |
97 | [gl_cv_func_isnand_no_libm=no]) | |
98 | ]) | |
99 | ]) |