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