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