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.
9 AC_REQUIRE([gl_MATH_H_DEFAULTS])
10 gl_CHECK_NEXT_HEADERS([math.h])
11 AC_REQUIRE([AC_C_INLINE])
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. */
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
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. */
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
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])
52 AC_DEFUN([gl_MATH_MODULE_INDICATOR],
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])
61 AC_DEFUN([gl_MATH_H_DEFAULTS],
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_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL])
155 HAVE_COSF=1; AC_SUBST([HAVE_COSF])
156 HAVE_COSL=1; AC_SUBST([HAVE_COSL])
157 HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
158 HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
159 HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
160 HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1])
161 HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F])
162 HAVE_EXPM1L=1; AC_SUBST([HAVE_EXPM1L])
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_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF])
207 HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL])
208 HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL])
209 HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL])
210 HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB])
211 HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL])
212 HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L])
213 HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER])
214 HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL])
215 HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF])
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_EXPM1=0; AC_SUBST([REPLACE_EXPM1])
231 REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F])
232 REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL])
233 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
234 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
235 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
236 REPLACE_FMA=0; AC_SUBST([REPLACE_FMA])
237 REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF])
238 REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL])
239 REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD])
240 REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF])
241 REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL])
242 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
243 REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
244 REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
245 REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
246 REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT])
247 REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF])
248 REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL])
249 REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
250 REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
251 REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
252 REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
253 REPLACE_MODF=0; AC_SUBST([REPLACE_MODF])
254 REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF])
255 REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL])
256 REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
257 REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER])
258 REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF])
259 REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL])
260 REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
261 REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
262 REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
263 REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
264 REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
265 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
266 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
267 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
270 # gl_LONG_DOUBLE_VS_DOUBLE
271 # determines whether 'long double' and 'double' have the same representation.
272 # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
273 # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
274 # The currently known platforms where this is the case are:
275 # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
276 AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
278 AC_CACHE_CHECK([whether long double and double are the same],
279 [gl_cv_long_double_equals_double],
281 [AC_LANG_PROGRAM([[#include <float.h>]],
282 [[typedef int check[sizeof (long double) == sizeof (double)
283 && LDBL_MANT_DIG == DBL_MANT_DIG
284 && LDBL_MAX_EXP == DBL_MAX_EXP
285 && LDBL_MIN_EXP == DBL_MIN_EXP
288 [gl_cv_long_double_equals_double=yes],
289 [gl_cv_long_double_equals_double=no])
291 if test $gl_cv_long_double_equals_double = yes; then
292 AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
293 [Define to 1 if 'long double' and 'double' have the same representation.])
294 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
296 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
298 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])