New module 'ldexpf'.
[gnulib.git] / m4 / math_h.m4
1 # math_h.m4 serial 31
2 dnl Copyright (C) 2007-2011 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.
6
7 AC_DEFUN([gl_MATH_H],
8 [
9   AC_REQUIRE([gl_MATH_H_DEFAULTS])
10   gl_CHECK_NEXT_HEADERS([math.h])
11   AC_REQUIRE([AC_C_INLINE])
12
13   AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works],
14     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
15       [[/* Solaris 10 has a broken definition of NAN.  Other platforms
16         fail to provide NAN, or provide it only in C99 mode; this
17         test only needs to fail when NAN is provided but wrong.  */
18          float f = 1.0f;
19 #ifdef NAN
20          f = NAN;
21 #endif
22          return f == 0;]])],
23       [gl_cv_header_math_nan_works=yes],
24       [gl_cv_header_math_nan_works=no])])
25   if test $gl_cv_header_math_nan_works = no; then
26     REPLACE_NAN=1
27   fi
28   AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works],
29     [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
30       [[/* Solaris 10 has a broken definition of HUGE_VAL.  */
31          double d = HUGE_VAL;
32          return d == 0;]])],
33       [gl_cv_header_math_huge_val_works=yes],
34       [gl_cv_header_math_huge_val_works=no])])
35   if test $gl_cv_header_math_huge_val_works = no; then
36     REPLACE_HUGE_VAL=1
37   fi
38
39   dnl Check for declarations of anything we want to poison if the
40   dnl corresponding gnulib module is not in use.
41   gl_WARN_ON_USE_PREPARE([[#include <math.h>]],
42     [acosl asinl atanl ceilf ceill cosl expl fabsf floorf floorl fmodf
43      frexpf frexpl
44      ldexpf ldexpl logb logl modff round roundf roundl sinl sqrtl
45      tanl trunc truncf truncl])
46 ])
47
48 AC_DEFUN([gl_MATH_MODULE_INDICATOR],
49 [
50   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
51   AC_REQUIRE([gl_MATH_H_DEFAULTS])
52   gl_MODULE_INDICATOR_SET_VARIABLE([$1])
53   dnl Define it also as a C macro, for the benefit of the unit tests.
54   gl_MODULE_INDICATOR_FOR_TESTS([$1])
55 ])
56
57 AC_DEFUN([gl_MATH_H_DEFAULTS],
58 [
59   GNULIB_ACOSL=0;    AC_SUBST([GNULIB_ACOSL])
60   GNULIB_ASINL=0;    AC_SUBST([GNULIB_ASINL])
61   GNULIB_ATANL=0;    AC_SUBST([GNULIB_ATANL])
62   GNULIB_CEIL=0;     AC_SUBST([GNULIB_CEIL])
63   GNULIB_CEILF=0;    AC_SUBST([GNULIB_CEILF])
64   GNULIB_CEILL=0;    AC_SUBST([GNULIB_CEILL])
65   GNULIB_COSL=0;     AC_SUBST([GNULIB_COSL])
66   GNULIB_EXPL=0;     AC_SUBST([GNULIB_EXPL])
67   GNULIB_FABSF=0;    AC_SUBST([GNULIB_FABSF])
68   GNULIB_FLOOR=0;    AC_SUBST([GNULIB_FLOOR])
69   GNULIB_FLOORF=0;   AC_SUBST([GNULIB_FLOORF])
70   GNULIB_FLOORL=0;   AC_SUBST([GNULIB_FLOORL])
71   GNULIB_FMODF=0;    AC_SUBST([GNULIB_FMODF])
72   GNULIB_FREXPF=0;   AC_SUBST([GNULIB_FREXPF])
73   GNULIB_FREXP=0;    AC_SUBST([GNULIB_FREXP])
74   GNULIB_FREXPL=0;   AC_SUBST([GNULIB_FREXPL])
75   GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE])
76   GNULIB_ISINF=0;    AC_SUBST([GNULIB_ISINF])
77   GNULIB_ISNAN=0;    AC_SUBST([GNULIB_ISNAN])
78   GNULIB_ISNANF=0;   AC_SUBST([GNULIB_ISNANF])
79   GNULIB_ISNAND=0;   AC_SUBST([GNULIB_ISNAND])
80   GNULIB_ISNANL=0;   AC_SUBST([GNULIB_ISNANL])
81   GNULIB_LDEXPF=0;   AC_SUBST([GNULIB_LDEXPF])
82   GNULIB_LDEXPL=0;   AC_SUBST([GNULIB_LDEXPL])
83   GNULIB_LOGB=0;     AC_SUBST([GNULIB_LOGB])
84   GNULIB_LOGL=0;     AC_SUBST([GNULIB_LOGL])
85   GNULIB_MODFF=0;    AC_SUBST([GNULIB_MODFF])
86   GNULIB_ROUND=0;    AC_SUBST([GNULIB_ROUND])
87   GNULIB_ROUNDF=0;   AC_SUBST([GNULIB_ROUNDF])
88   GNULIB_ROUNDL=0;   AC_SUBST([GNULIB_ROUNDL])
89   GNULIB_SIGNBIT=0;  AC_SUBST([GNULIB_SIGNBIT])
90   GNULIB_SINL=0;     AC_SUBST([GNULIB_SINL])
91   GNULIB_SQRTL=0;    AC_SUBST([GNULIB_SQRTL])
92   GNULIB_TANL=0;     AC_SUBST([GNULIB_TANL])
93   GNULIB_TRUNC=0;    AC_SUBST([GNULIB_TRUNC])
94   GNULIB_TRUNCF=0;   AC_SUBST([GNULIB_TRUNCF])
95   GNULIB_TRUNCL=0;   AC_SUBST([GNULIB_TRUNCL])
96   dnl Assume proper GNU behavior unless another module says otherwise.
97   HAVE_ACOSL=1;                AC_SUBST([HAVE_ACOSL])
98   HAVE_ASINL=1;                AC_SUBST([HAVE_ASINL])
99   HAVE_ATANL=1;                AC_SUBST([HAVE_ATANL])
100   HAVE_COSL=1;                 AC_SUBST([HAVE_COSL])
101   HAVE_EXPL=1;                 AC_SUBST([HAVE_EXPL])
102   HAVE_FABSF=1;                AC_SUBST([HAVE_FABSF])
103   HAVE_FMODF=1;                AC_SUBST([HAVE_FMODF])
104   HAVE_FREXPF=1;               AC_SUBST([HAVE_FREXPF])
105   HAVE_ISNANF=1;               AC_SUBST([HAVE_ISNANF])
106   HAVE_ISNAND=1;               AC_SUBST([HAVE_ISNAND])
107   HAVE_ISNANL=1;               AC_SUBST([HAVE_ISNANL])
108   HAVE_LDEXPF=1;               AC_SUBST([HAVE_LDEXPF])
109   HAVE_LOGL=1;                 AC_SUBST([HAVE_LOGL])
110   HAVE_MODFF=1;                AC_SUBST([HAVE_MODFF])
111   HAVE_SINL=1;                 AC_SUBST([HAVE_SINL])
112   HAVE_SQRTL=1;                AC_SUBST([HAVE_SQRTL])
113   HAVE_TANL=1;                 AC_SUBST([HAVE_TANL])
114   HAVE_DECL_ACOSL=1;           AC_SUBST([HAVE_DECL_ACOSL])
115   HAVE_DECL_ASINL=1;           AC_SUBST([HAVE_DECL_ASINL])
116   HAVE_DECL_ATANL=1;           AC_SUBST([HAVE_DECL_ATANL])
117   HAVE_DECL_CEILF=1;           AC_SUBST([HAVE_DECL_CEILF])
118   HAVE_DECL_CEILL=1;           AC_SUBST([HAVE_DECL_CEILL])
119   HAVE_DECL_COSL=1;            AC_SUBST([HAVE_DECL_COSL])
120   HAVE_DECL_EXPL=1;            AC_SUBST([HAVE_DECL_EXPL])
121   HAVE_DECL_FLOORF=1;          AC_SUBST([HAVE_DECL_FLOORF])
122   HAVE_DECL_FLOORL=1;          AC_SUBST([HAVE_DECL_FLOORL])
123   HAVE_DECL_FREXPL=1;          AC_SUBST([HAVE_DECL_FREXPL])
124   HAVE_DECL_LDEXPL=1;          AC_SUBST([HAVE_DECL_LDEXPL])
125   HAVE_DECL_LOGB=1;            AC_SUBST([HAVE_DECL_LOGB])
126   HAVE_DECL_LOGL=1;            AC_SUBST([HAVE_DECL_LOGL])
127   HAVE_DECL_ROUND=1;           AC_SUBST([HAVE_DECL_ROUND])
128   HAVE_DECL_ROUNDF=1;          AC_SUBST([HAVE_DECL_ROUNDF])
129   HAVE_DECL_ROUNDL=1;          AC_SUBST([HAVE_DECL_ROUNDL])
130   HAVE_DECL_SINL=1;            AC_SUBST([HAVE_DECL_SINL])
131   HAVE_DECL_SQRTL=1;           AC_SUBST([HAVE_DECL_SQRTL])
132   HAVE_DECL_TANL=1;            AC_SUBST([HAVE_DECL_TANL])
133   HAVE_DECL_TRUNC=1;           AC_SUBST([HAVE_DECL_TRUNC])
134   HAVE_DECL_TRUNCF=1;          AC_SUBST([HAVE_DECL_TRUNCF])
135   HAVE_DECL_TRUNCL=1;          AC_SUBST([HAVE_DECL_TRUNCL])
136   REPLACE_CEIL=0;              AC_SUBST([REPLACE_CEIL])
137   REPLACE_CEILF=0;             AC_SUBST([REPLACE_CEILF])
138   REPLACE_CEILL=0;             AC_SUBST([REPLACE_CEILL])
139   REPLACE_FLOOR=0;             AC_SUBST([REPLACE_FLOOR])
140   REPLACE_FLOORF=0;            AC_SUBST([REPLACE_FLOORF])
141   REPLACE_FLOORL=0;            AC_SUBST([REPLACE_FLOORL])
142   REPLACE_FREXPF=0;            AC_SUBST([REPLACE_FREXPF])
143   REPLACE_FREXP=0;             AC_SUBST([REPLACE_FREXP])
144   REPLACE_FREXPL=0;            AC_SUBST([REPLACE_FREXPL])
145   REPLACE_HUGE_VAL=0;          AC_SUBST([REPLACE_HUGE_VAL])
146   REPLACE_ISFINITE=0;          AC_SUBST([REPLACE_ISFINITE])
147   REPLACE_ISINF=0;             AC_SUBST([REPLACE_ISINF])
148   REPLACE_ISNAN=0;             AC_SUBST([REPLACE_ISNAN])
149   REPLACE_LDEXPL=0;            AC_SUBST([REPLACE_LDEXPL])
150   REPLACE_NAN=0;               AC_SUBST([REPLACE_NAN])
151   REPLACE_ROUND=0;             AC_SUBST([REPLACE_ROUND])
152   REPLACE_ROUNDF=0;            AC_SUBST([REPLACE_ROUNDF])
153   REPLACE_ROUNDL=0;            AC_SUBST([REPLACE_ROUNDL])
154   REPLACE_SIGNBIT=0;           AC_SUBST([REPLACE_SIGNBIT])
155   REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
156   REPLACE_TRUNC=0;             AC_SUBST([REPLACE_TRUNC])
157   REPLACE_TRUNCF=0;            AC_SUBST([REPLACE_TRUNCF])
158   REPLACE_TRUNCL=0;            AC_SUBST([REPLACE_TRUNCL])
159 ])