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