New module 'exp2l'.
[gnulib.git] / m4 / math_h.m4
1 # math_h.m4 serial 91
2 dnl Copyright (C) 2007-2012 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     [acosf acosl asinf asinl atanf atanl
43      cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf
44      expf expl exp2 exp2f exp2l expm1 expm1f expm1l
45      fabsf fabsl floorf floorl fma fmaf fmal
46      fmod fmodf fmodl frexpf frexpl hypotf hypotl
47      ldexpf ldexpl logb logf logl log10f log10l modf modff modfl powf
48      remainder remainderf remainderl
49      rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl
50      tanf tanl tanhf trunc truncf truncl])
51 ])
52
53 AC_DEFUN([gl_MATH_MODULE_INDICATOR],
54 [
55   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
56   AC_REQUIRE([gl_MATH_H_DEFAULTS])
57   gl_MODULE_INDICATOR_SET_VARIABLE([$1])
58   dnl Define it also as a C macro, for the benefit of the unit tests.
59   gl_MODULE_INDICATOR_FOR_TESTS([$1])
60 ])
61
62 AC_DEFUN([gl_MATH_H_DEFAULTS],
63 [
64   GNULIB_ACOSF=0;      AC_SUBST([GNULIB_ACOSF])
65   GNULIB_ACOSL=0;      AC_SUBST([GNULIB_ACOSL])
66   GNULIB_ASINF=0;      AC_SUBST([GNULIB_ASINF])
67   GNULIB_ASINL=0;      AC_SUBST([GNULIB_ASINL])
68   GNULIB_ATANF=0;      AC_SUBST([GNULIB_ATANF])
69   GNULIB_ATANL=0;      AC_SUBST([GNULIB_ATANL])
70   GNULIB_ATAN2F=0;     AC_SUBST([GNULIB_ATAN2F])
71   GNULIB_CBRT=0;       AC_SUBST([GNULIB_CBRT])
72   GNULIB_CBRTF=0;      AC_SUBST([GNULIB_CBRTF])
73   GNULIB_CBRTL=0;      AC_SUBST([GNULIB_CBRTL])
74   GNULIB_CEIL=0;       AC_SUBST([GNULIB_CEIL])
75   GNULIB_CEILF=0;      AC_SUBST([GNULIB_CEILF])
76   GNULIB_CEILL=0;      AC_SUBST([GNULIB_CEILL])
77   GNULIB_COPYSIGN=0;   AC_SUBST([GNULIB_COPYSIGN])
78   GNULIB_COPYSIGNF=0;  AC_SUBST([GNULIB_COPYSIGNF])
79   GNULIB_COPYSIGNL=0;  AC_SUBST([GNULIB_COPYSIGNL])
80   GNULIB_COSF=0;       AC_SUBST([GNULIB_COSF])
81   GNULIB_COSL=0;       AC_SUBST([GNULIB_COSL])
82   GNULIB_COSHF=0;      AC_SUBST([GNULIB_COSHF])
83   GNULIB_EXPF=0;       AC_SUBST([GNULIB_EXPF])
84   GNULIB_EXPL=0;       AC_SUBST([GNULIB_EXPL])
85   GNULIB_EXP2=0;       AC_SUBST([GNULIB_EXP2])
86   GNULIB_EXP2F=0;      AC_SUBST([GNULIB_EXP2F])
87   GNULIB_EXP2L=0;      AC_SUBST([GNULIB_EXP2L])
88   GNULIB_EXPM1=0;      AC_SUBST([GNULIB_EXPM1])
89   GNULIB_EXPM1F=0;     AC_SUBST([GNULIB_EXPM1F])
90   GNULIB_EXPM1L=0;     AC_SUBST([GNULIB_EXPM1L])
91   GNULIB_FABSF=0;      AC_SUBST([GNULIB_FABSF])
92   GNULIB_FABSL=0;      AC_SUBST([GNULIB_FABSL])
93   GNULIB_FLOOR=0;      AC_SUBST([GNULIB_FLOOR])
94   GNULIB_FLOORF=0;     AC_SUBST([GNULIB_FLOORF])
95   GNULIB_FLOORL=0;     AC_SUBST([GNULIB_FLOORL])
96   GNULIB_FMA=0;        AC_SUBST([GNULIB_FMA])
97   GNULIB_FMAF=0;       AC_SUBST([GNULIB_FMAF])
98   GNULIB_FMAL=0;       AC_SUBST([GNULIB_FMAL])
99   GNULIB_FMOD=0;       AC_SUBST([GNULIB_FMOD])
100   GNULIB_FMODF=0;      AC_SUBST([GNULIB_FMODF])
101   GNULIB_FMODL=0;      AC_SUBST([GNULIB_FMODL])
102   GNULIB_FREXPF=0;     AC_SUBST([GNULIB_FREXPF])
103   GNULIB_FREXP=0;      AC_SUBST([GNULIB_FREXP])
104   GNULIB_FREXPL=0;     AC_SUBST([GNULIB_FREXPL])
105   GNULIB_HYPOT=0;      AC_SUBST([GNULIB_HYPOT])
106   GNULIB_HYPOTF=0;     AC_SUBST([GNULIB_HYPOTF])
107   GNULIB_HYPOTL=0;     AC_SUBST([GNULIB_HYPOTL])
108   GNULIB_ISFINITE=0;   AC_SUBST([GNULIB_ISFINITE])
109   GNULIB_ISINF=0;      AC_SUBST([GNULIB_ISINF])
110   GNULIB_ISNAN=0;      AC_SUBST([GNULIB_ISNAN])
111   GNULIB_ISNANF=0;     AC_SUBST([GNULIB_ISNANF])
112   GNULIB_ISNAND=0;     AC_SUBST([GNULIB_ISNAND])
113   GNULIB_ISNANL=0;     AC_SUBST([GNULIB_ISNANL])
114   GNULIB_LDEXPF=0;     AC_SUBST([GNULIB_LDEXPF])
115   GNULIB_LDEXPL=0;     AC_SUBST([GNULIB_LDEXPL])
116   GNULIB_LOGB=0;       AC_SUBST([GNULIB_LOGB])
117   GNULIB_LOGF=0;       AC_SUBST([GNULIB_LOGF])
118   GNULIB_LOGL=0;       AC_SUBST([GNULIB_LOGL])
119   GNULIB_LOG10F=0;     AC_SUBST([GNULIB_LOG10F])
120   GNULIB_LOG10L=0;     AC_SUBST([GNULIB_LOG10L])
121   GNULIB_MODF=0;       AC_SUBST([GNULIB_MODF])
122   GNULIB_MODFF=0;      AC_SUBST([GNULIB_MODFF])
123   GNULIB_MODFL=0;      AC_SUBST([GNULIB_MODFL])
124   GNULIB_POWF=0;       AC_SUBST([GNULIB_POWF])
125   GNULIB_REMAINDER=0;  AC_SUBST([GNULIB_REMAINDER])
126   GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF])
127   GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL])
128   GNULIB_RINT=0;       AC_SUBST([GNULIB_RINT])
129   GNULIB_RINTF=0;      AC_SUBST([GNULIB_RINTF])
130   GNULIB_RINTL=0;      AC_SUBST([GNULIB_RINTL])
131   GNULIB_ROUND=0;      AC_SUBST([GNULIB_ROUND])
132   GNULIB_ROUNDF=0;     AC_SUBST([GNULIB_ROUNDF])
133   GNULIB_ROUNDL=0;     AC_SUBST([GNULIB_ROUNDL])
134   GNULIB_SIGNBIT=0;    AC_SUBST([GNULIB_SIGNBIT])
135   GNULIB_SINF=0;       AC_SUBST([GNULIB_SINF])
136   GNULIB_SINL=0;       AC_SUBST([GNULIB_SINL])
137   GNULIB_SINHF=0;      AC_SUBST([GNULIB_SINHF])
138   GNULIB_SQRTF=0;      AC_SUBST([GNULIB_SQRTF])
139   GNULIB_SQRTL=0;      AC_SUBST([GNULIB_SQRTL])
140   GNULIB_TANF=0;       AC_SUBST([GNULIB_TANF])
141   GNULIB_TANL=0;       AC_SUBST([GNULIB_TANL])
142   GNULIB_TANHF=0;      AC_SUBST([GNULIB_TANHF])
143   GNULIB_TRUNC=0;      AC_SUBST([GNULIB_TRUNC])
144   GNULIB_TRUNCF=0;     AC_SUBST([GNULIB_TRUNCF])
145   GNULIB_TRUNCL=0;     AC_SUBST([GNULIB_TRUNCL])
146   dnl Assume proper GNU behavior unless another module says otherwise.
147   HAVE_ACOSF=1;                AC_SUBST([HAVE_ACOSF])
148   HAVE_ACOSL=1;                AC_SUBST([HAVE_ACOSL])
149   HAVE_ASINF=1;                AC_SUBST([HAVE_ASINF])
150   HAVE_ASINL=1;                AC_SUBST([HAVE_ASINL])
151   HAVE_ATANF=1;                AC_SUBST([HAVE_ATANF])
152   HAVE_ATANL=1;                AC_SUBST([HAVE_ATANL])
153   HAVE_ATAN2F=1;               AC_SUBST([HAVE_ATAN2F])
154   HAVE_CBRT=1;                 AC_SUBST([HAVE_CBRT])
155   HAVE_CBRTF=1;                AC_SUBST([HAVE_CBRTF])
156   HAVE_CBRTL=1;                AC_SUBST([HAVE_CBRTL])
157   HAVE_COPYSIGN=1;             AC_SUBST([HAVE_COPYSIGN])
158   HAVE_COPYSIGNL=1;            AC_SUBST([HAVE_COPYSIGNL])
159   HAVE_COSF=1;                 AC_SUBST([HAVE_COSF])
160   HAVE_COSL=1;                 AC_SUBST([HAVE_COSL])
161   HAVE_COSHF=1;                AC_SUBST([HAVE_COSHF])
162   HAVE_EXPF=1;                 AC_SUBST([HAVE_EXPF])
163   HAVE_EXPL=1;                 AC_SUBST([HAVE_EXPL])
164   HAVE_EXPM1=1;                AC_SUBST([HAVE_EXPM1])
165   HAVE_EXPM1F=1;               AC_SUBST([HAVE_EXPM1F])
166   HAVE_FABSF=1;                AC_SUBST([HAVE_FABSF])
167   HAVE_FABSL=1;                AC_SUBST([HAVE_FABSL])
168   HAVE_FMA=1;                  AC_SUBST([HAVE_FMA])
169   HAVE_FMAF=1;                 AC_SUBST([HAVE_FMAF])
170   HAVE_FMAL=1;                 AC_SUBST([HAVE_FMAL])
171   HAVE_FMODF=1;                AC_SUBST([HAVE_FMODF])
172   HAVE_FMODL=1;                AC_SUBST([HAVE_FMODL])
173   HAVE_FREXPF=1;               AC_SUBST([HAVE_FREXPF])
174   HAVE_HYPOTF=1;               AC_SUBST([HAVE_HYPOTF])
175   HAVE_HYPOTL=1;               AC_SUBST([HAVE_HYPOTL])
176   HAVE_ISNANF=1;               AC_SUBST([HAVE_ISNANF])
177   HAVE_ISNAND=1;               AC_SUBST([HAVE_ISNAND])
178   HAVE_ISNANL=1;               AC_SUBST([HAVE_ISNANL])
179   HAVE_LDEXPF=1;               AC_SUBST([HAVE_LDEXPF])
180   HAVE_LOGF=1;                 AC_SUBST([HAVE_LOGF])
181   HAVE_LOGL=1;                 AC_SUBST([HAVE_LOGL])
182   HAVE_LOG10F=1;               AC_SUBST([HAVE_LOG10F])
183   HAVE_LOG10L=1;               AC_SUBST([HAVE_LOG10L])
184   HAVE_MODFF=1;                AC_SUBST([HAVE_MODFF])
185   HAVE_MODFL=1;                AC_SUBST([HAVE_MODFL])
186   HAVE_POWF=1;                 AC_SUBST([HAVE_POWF])
187   HAVE_REMAINDER=1;            AC_SUBST([HAVE_REMAINDER])
188   HAVE_REMAINDERF=1;           AC_SUBST([HAVE_REMAINDERF])
189   HAVE_RINT=1;                 AC_SUBST([HAVE_RINT])
190   HAVE_RINTL=1;                AC_SUBST([HAVE_RINTL])
191   HAVE_SINF=1;                 AC_SUBST([HAVE_SINF])
192   HAVE_SINL=1;                 AC_SUBST([HAVE_SINL])
193   HAVE_SINHF=1;                AC_SUBST([HAVE_SINHF])
194   HAVE_SQRTF=1;                AC_SUBST([HAVE_SQRTF])
195   HAVE_SQRTL=1;                AC_SUBST([HAVE_SQRTL])
196   HAVE_TANF=1;                 AC_SUBST([HAVE_TANF])
197   HAVE_TANL=1;                 AC_SUBST([HAVE_TANL])
198   HAVE_TANHF=1;                AC_SUBST([HAVE_TANHF])
199   HAVE_DECL_ACOSL=1;           AC_SUBST([HAVE_DECL_ACOSL])
200   HAVE_DECL_ASINL=1;           AC_SUBST([HAVE_DECL_ASINL])
201   HAVE_DECL_ATANL=1;           AC_SUBST([HAVE_DECL_ATANL])
202   HAVE_DECL_CBRTF=1;           AC_SUBST([HAVE_DECL_CBRTF])
203   HAVE_DECL_CBRTL=1;           AC_SUBST([HAVE_DECL_CBRTL])
204   HAVE_DECL_CEILF=1;           AC_SUBST([HAVE_DECL_CEILF])
205   HAVE_DECL_CEILL=1;           AC_SUBST([HAVE_DECL_CEILL])
206   HAVE_DECL_COPYSIGNF=1;       AC_SUBST([HAVE_DECL_COPYSIGNF])
207   HAVE_DECL_COSL=1;            AC_SUBST([HAVE_DECL_COSL])
208   HAVE_DECL_EXPL=1;            AC_SUBST([HAVE_DECL_EXPL])
209   HAVE_DECL_EXP2=1;            AC_SUBST([HAVE_DECL_EXP2])
210   HAVE_DECL_EXP2F=1;           AC_SUBST([HAVE_DECL_EXP2F])
211   HAVE_DECL_EXP2L=1;           AC_SUBST([HAVE_DECL_EXP2L])
212   HAVE_DECL_EXPM1L=1;          AC_SUBST([HAVE_DECL_EXPM1L])
213   HAVE_DECL_FLOORF=1;          AC_SUBST([HAVE_DECL_FLOORF])
214   HAVE_DECL_FLOORL=1;          AC_SUBST([HAVE_DECL_FLOORL])
215   HAVE_DECL_FREXPL=1;          AC_SUBST([HAVE_DECL_FREXPL])
216   HAVE_DECL_LDEXPL=1;          AC_SUBST([HAVE_DECL_LDEXPL])
217   HAVE_DECL_LOGB=1;            AC_SUBST([HAVE_DECL_LOGB])
218   HAVE_DECL_LOGL=1;            AC_SUBST([HAVE_DECL_LOGL])
219   HAVE_DECL_LOG10L=1;          AC_SUBST([HAVE_DECL_LOG10L])
220   HAVE_DECL_REMAINDER=1;       AC_SUBST([HAVE_DECL_REMAINDER])
221   HAVE_DECL_REMAINDERL=1;      AC_SUBST([HAVE_DECL_REMAINDERL])
222   HAVE_DECL_RINTF=1;           AC_SUBST([HAVE_DECL_RINTF])
223   HAVE_DECL_ROUND=1;           AC_SUBST([HAVE_DECL_ROUND])
224   HAVE_DECL_ROUNDF=1;          AC_SUBST([HAVE_DECL_ROUNDF])
225   HAVE_DECL_ROUNDL=1;          AC_SUBST([HAVE_DECL_ROUNDL])
226   HAVE_DECL_SINL=1;            AC_SUBST([HAVE_DECL_SINL])
227   HAVE_DECL_SQRTL=1;           AC_SUBST([HAVE_DECL_SQRTL])
228   HAVE_DECL_TANL=1;            AC_SUBST([HAVE_DECL_TANL])
229   HAVE_DECL_TRUNC=1;           AC_SUBST([HAVE_DECL_TRUNC])
230   HAVE_DECL_TRUNCF=1;          AC_SUBST([HAVE_DECL_TRUNCF])
231   HAVE_DECL_TRUNCL=1;          AC_SUBST([HAVE_DECL_TRUNCL])
232   REPLACE_CBRTF=0;             AC_SUBST([REPLACE_CBRTF])
233   REPLACE_CBRTL=0;             AC_SUBST([REPLACE_CBRTL])
234   REPLACE_CEIL=0;              AC_SUBST([REPLACE_CEIL])
235   REPLACE_CEILF=0;             AC_SUBST([REPLACE_CEILF])
236   REPLACE_CEILL=0;             AC_SUBST([REPLACE_CEILL])
237   REPLACE_EXPM1=0;             AC_SUBST([REPLACE_EXPM1])
238   REPLACE_EXPM1F=0;            AC_SUBST([REPLACE_EXPM1F])
239   REPLACE_EXP2=0;              AC_SUBST([REPLACE_EXP2])
240   REPLACE_FABSL=0;             AC_SUBST([REPLACE_FABSL])
241   REPLACE_FLOOR=0;             AC_SUBST([REPLACE_FLOOR])
242   REPLACE_FLOORF=0;            AC_SUBST([REPLACE_FLOORF])
243   REPLACE_FLOORL=0;            AC_SUBST([REPLACE_FLOORL])
244   REPLACE_FMA=0;               AC_SUBST([REPLACE_FMA])
245   REPLACE_FMAF=0;              AC_SUBST([REPLACE_FMAF])
246   REPLACE_FMAL=0;              AC_SUBST([REPLACE_FMAL])
247   REPLACE_FMOD=0;              AC_SUBST([REPLACE_FMOD])
248   REPLACE_FMODF=0;             AC_SUBST([REPLACE_FMODF])
249   REPLACE_FMODL=0;             AC_SUBST([REPLACE_FMODL])
250   REPLACE_FREXPF=0;            AC_SUBST([REPLACE_FREXPF])
251   REPLACE_FREXP=0;             AC_SUBST([REPLACE_FREXP])
252   REPLACE_FREXPL=0;            AC_SUBST([REPLACE_FREXPL])
253   REPLACE_HUGE_VAL=0;          AC_SUBST([REPLACE_HUGE_VAL])
254   REPLACE_HYPOT=0;             AC_SUBST([REPLACE_HYPOT])
255   REPLACE_HYPOTF=0;            AC_SUBST([REPLACE_HYPOTF])
256   REPLACE_HYPOTL=0;            AC_SUBST([REPLACE_HYPOTL])
257   REPLACE_ISFINITE=0;          AC_SUBST([REPLACE_ISFINITE])
258   REPLACE_ISINF=0;             AC_SUBST([REPLACE_ISINF])
259   REPLACE_ISNAN=0;             AC_SUBST([REPLACE_ISNAN])
260   REPLACE_LDEXPL=0;            AC_SUBST([REPLACE_LDEXPL])
261   REPLACE_MODF=0;              AC_SUBST([REPLACE_MODF])
262   REPLACE_MODFF=0;             AC_SUBST([REPLACE_MODFF])
263   REPLACE_MODFL=0;             AC_SUBST([REPLACE_MODFL])
264   REPLACE_NAN=0;               AC_SUBST([REPLACE_NAN])
265   REPLACE_REMAINDER=0;         AC_SUBST([REPLACE_REMAINDER])
266   REPLACE_REMAINDERF=0;        AC_SUBST([REPLACE_REMAINDERF])
267   REPLACE_REMAINDERL=0;        AC_SUBST([REPLACE_REMAINDERL])
268   REPLACE_ROUND=0;             AC_SUBST([REPLACE_ROUND])
269   REPLACE_ROUNDF=0;            AC_SUBST([REPLACE_ROUNDF])
270   REPLACE_ROUNDL=0;            AC_SUBST([REPLACE_ROUNDL])
271   REPLACE_SIGNBIT=0;           AC_SUBST([REPLACE_SIGNBIT])
272   REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
273   REPLACE_TRUNC=0;             AC_SUBST([REPLACE_TRUNC])
274   REPLACE_TRUNCF=0;            AC_SUBST([REPLACE_TRUNCF])
275   REPLACE_TRUNCL=0;            AC_SUBST([REPLACE_TRUNCL])
276 ])
277
278 # gl_LONG_DOUBLE_VS_DOUBLE
279 # determines whether 'long double' and 'double' have the same representation.
280 # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
281 # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
282 # The currently known platforms where this is the case are:
283 # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
284 AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
285 [
286   AC_CACHE_CHECK([whether long double and double are the same],
287     [gl_cv_long_double_equals_double],
288     [AC_COMPILE_IFELSE(
289        [AC_LANG_PROGRAM([[#include <float.h>]],
290           [[typedef int check[sizeof (long double) == sizeof (double)
291                               && LDBL_MANT_DIG == DBL_MANT_DIG
292                               && LDBL_MAX_EXP == DBL_MAX_EXP
293                               && LDBL_MIN_EXP == DBL_MIN_EXP
294                               ? 1 : -1];
295           ]])],
296        [gl_cv_long_double_equals_double=yes],
297        [gl_cv_long_double_equals_double=no])
298     ])
299   if test $gl_cv_long_double_equals_double = yes; then
300     AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
301       [Define to 1 if 'long double' and 'double' have the same representation.])
302     HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
303   else
304     HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
305   fi
306   AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])
307 ])