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_CBRTF=0; AC_SUBST([REPLACE_CBRTF])
220 REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
221 REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
222 REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
223 REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL])
224 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
225 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
226 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
227 REPLACE_FMA=0; AC_SUBST([REPLACE_FMA])
228 REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF])
229 REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL])
230 REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD])
231 REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF])
232 REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL])
233 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
234 REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
235 REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
236 REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
237 REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT])
238 REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF])
239 REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL])
240 REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
241 REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
242 REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
243 REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
244 REPLACE_MODF=0; AC_SUBST([REPLACE_MODF])
245 REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF])
246 REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL])
247 REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
248 REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER])
249 REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF])
250 REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL])
251 REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
252 REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
253 REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
254 REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
255 REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
256 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
257 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
258 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
261 # gl_LONG_DOUBLE_VS_DOUBLE
262 # determines whether 'long double' and 'double' have the same representation.
263 # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
264 # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
265 # The currently known platforms where this is the case are:
266 # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
267 AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
269 AC_CACHE_CHECK([whether long double and double are the same],
270 [gl_cv_long_double_equals_double],
272 [AC_LANG_PROGRAM([[#include <float.h>]],
273 [[typedef int check[sizeof (long double) == sizeof (double)
274 && LDBL_MANT_DIG == DBL_MANT_DIG
275 && LDBL_MAX_EXP == DBL_MAX_EXP
276 && LDBL_MIN_EXP == DBL_MIN_EXP
279 [gl_cv_long_double_equals_double=yes],
280 [gl_cv_long_double_equals_double=no])
282 if test $gl_cv_long_double_equals_double = yes; then
283 AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
284 [Define to 1 if 'long double' and 'double' have the same representation.])
285 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
287 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
289 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])