2 dnl Copyright (C) 2007-2011 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 ceilf ceill copysign copysignf copysignl cosf cosl coshf
44 expf expl fabsf floorf floorl fmodf frexpf frexpl
45 ldexpf ldexpl logb logf logl log10f modff powf
46 rint round roundf roundl sinf sinl sinhf sqrtf sqrtl
47 tanf tanl tanhf trunc truncf truncl])
50 AC_DEFUN([gl_MATH_MODULE_INDICATOR],
52 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
53 AC_REQUIRE([gl_MATH_H_DEFAULTS])
54 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
55 dnl Define it also as a C macro, for the benefit of the unit tests.
56 gl_MODULE_INDICATOR_FOR_TESTS([$1])
59 AC_DEFUN([gl_MATH_H_DEFAULTS],
61 GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF])
62 GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL])
63 GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF])
64 GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL])
65 GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF])
66 GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL])
67 GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F])
68 GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL])
69 GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF])
70 GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL])
71 GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN])
72 GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF])
73 GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL])
74 GNULIB_COSF=0; AC_SUBST([GNULIB_COSF])
75 GNULIB_COSL=0; AC_SUBST([GNULIB_COSL])
76 GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF])
77 GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF])
78 GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL])
79 GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF])
80 GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR])
81 GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF])
82 GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL])
83 GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF])
84 GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF])
85 GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP])
86 GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL])
87 GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE])
88 GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF])
89 GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN])
90 GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF])
91 GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND])
92 GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL])
93 GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF])
94 GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL])
95 GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB])
96 GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF])
97 GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL])
98 GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F])
99 GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF])
100 GNULIB_POWF=0; AC_SUBST([GNULIB_POWF])
101 GNULIB_RINT=0; AC_SUBST([GNULIB_RINT])
102 GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND])
103 GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF])
104 GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL])
105 GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT])
106 GNULIB_SINF=0; AC_SUBST([GNULIB_SINF])
107 GNULIB_SINL=0; AC_SUBST([GNULIB_SINL])
108 GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF])
109 GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF])
110 GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL])
111 GNULIB_TANF=0; AC_SUBST([GNULIB_TANF])
112 GNULIB_TANL=0; AC_SUBST([GNULIB_TANL])
113 GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF])
114 GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC])
115 GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF])
116 GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL])
117 dnl Assume proper GNU behavior unless another module says otherwise.
118 HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
119 HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
120 HAVE_ASINF=1; AC_SUBST([HAVE_ASINF])
121 HAVE_ASINL=1; AC_SUBST([HAVE_ASINL])
122 HAVE_ATANF=1; AC_SUBST([HAVE_ATANF])
123 HAVE_ATANL=1; AC_SUBST([HAVE_ATANL])
124 HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F])
125 HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN])
126 HAVE_COPYSIGNF=1; AC_SUBST([HAVE_COPYSIGNF])
127 HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL])
128 HAVE_COSF=1; AC_SUBST([HAVE_COSF])
129 HAVE_COSL=1; AC_SUBST([HAVE_COSL])
130 HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
131 HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
132 HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
133 HAVE_FABSF=1; AC_SUBST([HAVE_FABSF])
134 HAVE_FMODF=1; AC_SUBST([HAVE_FMODF])
135 HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF])
136 HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF])
137 HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND])
138 HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL])
139 HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF])
140 HAVE_LOGF=1; AC_SUBST([HAVE_LOGF])
141 HAVE_LOGL=1; AC_SUBST([HAVE_LOGL])
142 HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F])
143 HAVE_MODFF=1; AC_SUBST([HAVE_MODFF])
144 HAVE_POWF=1; AC_SUBST([HAVE_POWF])
145 HAVE_RINT=1; AC_SUBST([HAVE_RINT])
146 HAVE_SINF=1; AC_SUBST([HAVE_SINF])
147 HAVE_SINL=1; AC_SUBST([HAVE_SINL])
148 HAVE_SINHF=1; AC_SUBST([HAVE_SINHF])
149 HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF])
150 HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL])
151 HAVE_TANF=1; AC_SUBST([HAVE_TANF])
152 HAVE_TANL=1; AC_SUBST([HAVE_TANL])
153 HAVE_TANHF=1; AC_SUBST([HAVE_TANHF])
154 HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL])
155 HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL])
156 HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL])
157 HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF])
158 HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL])
159 HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL])
160 HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL])
161 HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF])
162 HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL])
163 HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL])
164 HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL])
165 HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB])
166 HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL])
167 HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND])
168 HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF])
169 HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL])
170 HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL])
171 HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL])
172 HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL])
173 HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC])
174 HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF])
175 HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL])
176 REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
177 REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
178 REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
179 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
180 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
181 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
182 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
183 REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
184 REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
185 REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
186 REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
187 REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
188 REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
189 REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
190 REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
191 REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
192 REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
193 REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
194 REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
195 REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
196 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
197 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
198 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
201 # gl_LONG_DOUBLE_VS_DOUBLE
202 # determines whether 'long double' and 'double' have the same representation.
203 # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
204 # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
205 # The currently known platforms where this is the case are:
206 # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
207 AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
209 AC_CACHE_CHECK([whether long double and double are the same],
210 [gl_cv_long_double_equals_double],
212 [AC_LANG_PROGRAM([[#include <float.h>]],
213 [[typedef int check[sizeof (long double) == sizeof (double)
214 && LDBL_MANT_DIG == DBL_MANT_DIG
215 && LDBL_MAX_EXP == DBL_MAX_EXP
216 && LDBL_MIN_EXP == DBL_MIN_EXP
219 [gl_cv_long_double_equals_double=yes],
220 [gl_cv_long_double_equals_double=no])
222 if test $gl_cv_long_double_equals_double = yes; then
223 AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
224 [Define to 1 if 'long double' and 'double' have the same representation.])
225 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
227 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
229 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])