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