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