New module 'expm1l'.
[gnulib.git] / m4 / math_h.m4
1 # math_h.m4 serial 82
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 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_EXPM1=0;      AC_SUBST([GNULIB_EXPM1])
85   GNULIB_EXPM1F=0;     AC_SUBST([GNULIB_EXPM1F])
86   GNULIB_EXPM1L=0;     AC_SUBST([GNULIB_EXPM1L])
87   GNULIB_FABSF=0;      AC_SUBST([GNULIB_FABSF])
88   GNULIB_FABSL=0;      AC_SUBST([GNULIB_FABSL])
89   GNULIB_FLOOR=0;      AC_SUBST([GNULIB_FLOOR])
90   GNULIB_FLOORF=0;     AC_SUBST([GNULIB_FLOORF])
91   GNULIB_FLOORL=0;     AC_SUBST([GNULIB_FLOORL])
92   GNULIB_FMA=0;        AC_SUBST([GNULIB_FMA])
93   GNULIB_FMAF=0;       AC_SUBST([GNULIB_FMAF])
94   GNULIB_FMAL=0;       AC_SUBST([GNULIB_FMAL])
95   GNULIB_FMOD=0;       AC_SUBST([GNULIB_FMOD])
96   GNULIB_FMODF=0;      AC_SUBST([GNULIB_FMODF])
97   GNULIB_FMODL=0;      AC_SUBST([GNULIB_FMODL])
98   GNULIB_FREXPF=0;     AC_SUBST([GNULIB_FREXPF])
99   GNULIB_FREXP=0;      AC_SUBST([GNULIB_FREXP])
100   GNULIB_FREXPL=0;     AC_SUBST([GNULIB_FREXPL])
101   GNULIB_HYPOT=0;      AC_SUBST([GNULIB_HYPOT])
102   GNULIB_HYPOTF=0;     AC_SUBST([GNULIB_HYPOTF])
103   GNULIB_HYPOTL=0;     AC_SUBST([GNULIB_HYPOTL])
104   GNULIB_ISFINITE=0;   AC_SUBST([GNULIB_ISFINITE])
105   GNULIB_ISINF=0;      AC_SUBST([GNULIB_ISINF])
106   GNULIB_ISNAN=0;      AC_SUBST([GNULIB_ISNAN])
107   GNULIB_ISNANF=0;     AC_SUBST([GNULIB_ISNANF])
108   GNULIB_ISNAND=0;     AC_SUBST([GNULIB_ISNAND])
109   GNULIB_ISNANL=0;     AC_SUBST([GNULIB_ISNANL])
110   GNULIB_LDEXPF=0;     AC_SUBST([GNULIB_LDEXPF])
111   GNULIB_LDEXPL=0;     AC_SUBST([GNULIB_LDEXPL])
112   GNULIB_LOGB=0;       AC_SUBST([GNULIB_LOGB])
113   GNULIB_LOGF=0;       AC_SUBST([GNULIB_LOGF])
114   GNULIB_LOGL=0;       AC_SUBST([GNULIB_LOGL])
115   GNULIB_LOG10F=0;     AC_SUBST([GNULIB_LOG10F])
116   GNULIB_LOG10L=0;     AC_SUBST([GNULIB_LOG10L])
117   GNULIB_MODF=0;       AC_SUBST([GNULIB_MODF])
118   GNULIB_MODFF=0;      AC_SUBST([GNULIB_MODFF])
119   GNULIB_MODFL=0;      AC_SUBST([GNULIB_MODFL])
120   GNULIB_POWF=0;       AC_SUBST([GNULIB_POWF])
121   GNULIB_REMAINDER=0;  AC_SUBST([GNULIB_REMAINDER])
122   GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF])
123   GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL])
124   GNULIB_RINT=0;       AC_SUBST([GNULIB_RINT])
125   GNULIB_RINTF=0;      AC_SUBST([GNULIB_RINTF])
126   GNULIB_RINTL=0;      AC_SUBST([GNULIB_RINTL])
127   GNULIB_ROUND=0;      AC_SUBST([GNULIB_ROUND])
128   GNULIB_ROUNDF=0;     AC_SUBST([GNULIB_ROUNDF])
129   GNULIB_ROUNDL=0;     AC_SUBST([GNULIB_ROUNDL])
130   GNULIB_SIGNBIT=0;    AC_SUBST([GNULIB_SIGNBIT])
131   GNULIB_SINF=0;       AC_SUBST([GNULIB_SINF])
132   GNULIB_SINL=0;       AC_SUBST([GNULIB_SINL])
133   GNULIB_SINHF=0;      AC_SUBST([GNULIB_SINHF])
134   GNULIB_SQRTF=0;      AC_SUBST([GNULIB_SQRTF])
135   GNULIB_SQRTL=0;      AC_SUBST([GNULIB_SQRTL])
136   GNULIB_TANF=0;       AC_SUBST([GNULIB_TANF])
137   GNULIB_TANL=0;       AC_SUBST([GNULIB_TANL])
138   GNULIB_TANHF=0;      AC_SUBST([GNULIB_TANHF])
139   GNULIB_TRUNC=0;      AC_SUBST([GNULIB_TRUNC])
140   GNULIB_TRUNCF=0;     AC_SUBST([GNULIB_TRUNCF])
141   GNULIB_TRUNCL=0;     AC_SUBST([GNULIB_TRUNCL])
142   dnl Assume proper GNU behavior unless another module says otherwise.
143   HAVE_ACOSF=1;                AC_SUBST([HAVE_ACOSF])
144   HAVE_ACOSL=1;                AC_SUBST([HAVE_ACOSL])
145   HAVE_ASINF=1;                AC_SUBST([HAVE_ASINF])
146   HAVE_ASINL=1;                AC_SUBST([HAVE_ASINL])
147   HAVE_ATANF=1;                AC_SUBST([HAVE_ATANF])
148   HAVE_ATANL=1;                AC_SUBST([HAVE_ATANL])
149   HAVE_ATAN2F=1;               AC_SUBST([HAVE_ATAN2F])
150   HAVE_CBRT=1;                 AC_SUBST([HAVE_CBRT])
151   HAVE_CBRTF=1;                AC_SUBST([HAVE_CBRTF])
152   HAVE_CBRTL=1;                AC_SUBST([HAVE_CBRTL])
153   HAVE_COPYSIGN=1;             AC_SUBST([HAVE_COPYSIGN])
154   HAVE_COPYSIGNF=1;            AC_SUBST([HAVE_COPYSIGNF])
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_EXPM1L=1;               AC_SUBST([HAVE_EXPM1L])
164   HAVE_FABSF=1;                AC_SUBST([HAVE_FABSF])
165   HAVE_FABSL=1;                AC_SUBST([HAVE_FABSL])
166   HAVE_FMA=1;                  AC_SUBST([HAVE_FMA])
167   HAVE_FMAF=1;                 AC_SUBST([HAVE_FMAF])
168   HAVE_FMAL=1;                 AC_SUBST([HAVE_FMAL])
169   HAVE_FMODF=1;                AC_SUBST([HAVE_FMODF])
170   HAVE_FMODL=1;                AC_SUBST([HAVE_FMODL])
171   HAVE_FREXPF=1;               AC_SUBST([HAVE_FREXPF])
172   HAVE_HYPOTF=1;               AC_SUBST([HAVE_HYPOTF])
173   HAVE_HYPOTL=1;               AC_SUBST([HAVE_HYPOTL])
174   HAVE_ISNANF=1;               AC_SUBST([HAVE_ISNANF])
175   HAVE_ISNAND=1;               AC_SUBST([HAVE_ISNAND])
176   HAVE_ISNANL=1;               AC_SUBST([HAVE_ISNANL])
177   HAVE_LDEXPF=1;               AC_SUBST([HAVE_LDEXPF])
178   HAVE_LOGF=1;                 AC_SUBST([HAVE_LOGF])
179   HAVE_LOGL=1;                 AC_SUBST([HAVE_LOGL])
180   HAVE_LOG10F=1;               AC_SUBST([HAVE_LOG10F])
181   HAVE_LOG10L=1;               AC_SUBST([HAVE_LOG10L])
182   HAVE_MODFF=1;                AC_SUBST([HAVE_MODFF])
183   HAVE_MODFL=1;                AC_SUBST([HAVE_MODFL])
184   HAVE_POWF=1;                 AC_SUBST([HAVE_POWF])
185   HAVE_REMAINDER=1;            AC_SUBST([HAVE_REMAINDER])
186   HAVE_REMAINDERF=1;           AC_SUBST([HAVE_REMAINDERF])
187   HAVE_REMAINDERL=1;           AC_SUBST([HAVE_REMAINDERL])
188   HAVE_RINT=1;                 AC_SUBST([HAVE_RINT])
189   HAVE_RINTF=1;                AC_SUBST([HAVE_RINTF])
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_COSL=1;            AC_SUBST([HAVE_DECL_COSL])
207   HAVE_DECL_EXPL=1;            AC_SUBST([HAVE_DECL_EXPL])
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_ROUND=1;           AC_SUBST([HAVE_DECL_ROUND])
217   HAVE_DECL_ROUNDF=1;          AC_SUBST([HAVE_DECL_ROUNDF])
218   HAVE_DECL_ROUNDL=1;          AC_SUBST([HAVE_DECL_ROUNDL])
219   HAVE_DECL_SINL=1;            AC_SUBST([HAVE_DECL_SINL])
220   HAVE_DECL_SQRTL=1;           AC_SUBST([HAVE_DECL_SQRTL])
221   HAVE_DECL_TANL=1;            AC_SUBST([HAVE_DECL_TANL])
222   HAVE_DECL_TRUNC=1;           AC_SUBST([HAVE_DECL_TRUNC])
223   HAVE_DECL_TRUNCF=1;          AC_SUBST([HAVE_DECL_TRUNCF])
224   HAVE_DECL_TRUNCL=1;          AC_SUBST([HAVE_DECL_TRUNCL])
225   REPLACE_CBRTF=0;             AC_SUBST([REPLACE_CBRTF])
226   REPLACE_CBRTL=0;             AC_SUBST([REPLACE_CBRTL])
227   REPLACE_CEIL=0;              AC_SUBST([REPLACE_CEIL])
228   REPLACE_CEILF=0;             AC_SUBST([REPLACE_CEILF])
229   REPLACE_CEILL=0;             AC_SUBST([REPLACE_CEILL])
230   REPLACE_FABSL=0;             AC_SUBST([REPLACE_FABSL])
231   REPLACE_FLOOR=0;             AC_SUBST([REPLACE_FLOOR])
232   REPLACE_FLOORF=0;            AC_SUBST([REPLACE_FLOORF])
233   REPLACE_FLOORL=0;            AC_SUBST([REPLACE_FLOORL])
234   REPLACE_FMA=0;               AC_SUBST([REPLACE_FMA])
235   REPLACE_FMAF=0;              AC_SUBST([REPLACE_FMAF])
236   REPLACE_FMAL=0;              AC_SUBST([REPLACE_FMAL])
237   REPLACE_FMOD=0;              AC_SUBST([REPLACE_FMOD])
238   REPLACE_FMODF=0;             AC_SUBST([REPLACE_FMODF])
239   REPLACE_FMODL=0;             AC_SUBST([REPLACE_FMODL])
240   REPLACE_FREXPF=0;            AC_SUBST([REPLACE_FREXPF])
241   REPLACE_FREXP=0;             AC_SUBST([REPLACE_FREXP])
242   REPLACE_FREXPL=0;            AC_SUBST([REPLACE_FREXPL])
243   REPLACE_HUGE_VAL=0;          AC_SUBST([REPLACE_HUGE_VAL])
244   REPLACE_HYPOT=0;             AC_SUBST([REPLACE_HYPOT])
245   REPLACE_HYPOTF=0;            AC_SUBST([REPLACE_HYPOTF])
246   REPLACE_HYPOTL=0;            AC_SUBST([REPLACE_HYPOTL])
247   REPLACE_ISFINITE=0;          AC_SUBST([REPLACE_ISFINITE])
248   REPLACE_ISINF=0;             AC_SUBST([REPLACE_ISINF])
249   REPLACE_ISNAN=0;             AC_SUBST([REPLACE_ISNAN])
250   REPLACE_LDEXPL=0;            AC_SUBST([REPLACE_LDEXPL])
251   REPLACE_MODF=0;              AC_SUBST([REPLACE_MODF])
252   REPLACE_MODFF=0;             AC_SUBST([REPLACE_MODFF])
253   REPLACE_MODFL=0;             AC_SUBST([REPLACE_MODFL])
254   REPLACE_NAN=0;               AC_SUBST([REPLACE_NAN])
255   REPLACE_REMAINDER=0;         AC_SUBST([REPLACE_REMAINDER])
256   REPLACE_REMAINDERF=0;        AC_SUBST([REPLACE_REMAINDERF])
257   REPLACE_REMAINDERL=0;        AC_SUBST([REPLACE_REMAINDERL])
258   REPLACE_ROUND=0;             AC_SUBST([REPLACE_ROUND])
259   REPLACE_ROUNDF=0;            AC_SUBST([REPLACE_ROUNDF])
260   REPLACE_ROUNDL=0;            AC_SUBST([REPLACE_ROUNDL])
261   REPLACE_SIGNBIT=0;           AC_SUBST([REPLACE_SIGNBIT])
262   REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
263   REPLACE_TRUNC=0;             AC_SUBST([REPLACE_TRUNC])
264   REPLACE_TRUNCF=0;            AC_SUBST([REPLACE_TRUNCF])
265   REPLACE_TRUNCL=0;            AC_SUBST([REPLACE_TRUNCL])
266 ])
267
268 # gl_LONG_DOUBLE_VS_DOUBLE
269 # determines whether 'long double' and 'double' have the same representation.
270 # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
271 # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
272 # The currently known platforms where this is the case are:
273 # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
274 AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
275 [
276   AC_CACHE_CHECK([whether long double and double are the same],
277     [gl_cv_long_double_equals_double],
278     [AC_COMPILE_IFELSE(
279        [AC_LANG_PROGRAM([[#include <float.h>]],
280           [[typedef int check[sizeof (long double) == sizeof (double)
281                               && LDBL_MANT_DIG == DBL_MANT_DIG
282                               && LDBL_MAX_EXP == DBL_MAX_EXP
283                               && LDBL_MIN_EXP == DBL_MIN_EXP
284                               ? 1 : -1];
285           ]])],
286        [gl_cv_long_double_equals_double=yes],
287        [gl_cv_long_double_equals_double=no])
288     ])
289   if test $gl_cv_long_double_equals_double = yes; then
290     AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
291       [Define to 1 if 'long double' and 'double' have the same representation.])
292     HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
293   else
294     HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
295   fi
296   AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])
297 ])