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