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 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_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])
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],
268 AC_CACHE_CHECK([whether long double and double are the same],
269 [gl_cv_long_double_equals_double],
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
278 [gl_cv_long_double_equals_double=yes],
279 [gl_cv_long_double_equals_double=no])
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
286 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
288 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])