2 dnl This file contains stuff.
6 dnl Check to see if the (math function) argument passed is
7 dnl declared when using the c++ compiler
8 dnl ASSUMES argument is a math function with ONE parameter
10 dnl GLIBCXX_CHECK_MATH_DECL_1
11 AC_DEFUN(GLIBCXX_CHECK_MATH_DECL_1, [
12 AC_MSG_CHECKING([for $1 declaration])
13 if test x${glibcxx_cv_func_$1_use+set} != xset; then
14 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
17 AC_TRY_COMPILE([#include <math.h>
23 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
27 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
31 dnl Check to see if the (math function) argument passed is
32 dnl 1) declared when using the c++ compiler
33 dnl 2) has "C" linkage
34 dnl 3) if not, see if 1) and 2) for argument prepended with '_'
36 dnl Define HAVE_CARGF etc if "cargf" is declared and links
38 dnl argument 1 is name of function to check
40 dnl ASSUMES argument is a math function with ONE parameter
42 dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1
43 AC_DEFUN(GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, [
44 GLIBCXX_CHECK_MATH_DECL_1($1)
45 if test x$glibcxx_cv_func_$1_use = x"yes"; then
48 GLIBCXX_CHECK_MATH_DECL_1(_$1)
49 if test x$glibcxx_cv_func__$1_use = x"yes"; then
57 dnl Like GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
58 dnl of functions at once. It's an all-or-nothing check -- either
59 dnl HAVE_XYZ is defined for each of the functions, or for none of them.
60 dnl Doing it this way saves significant configure time.
61 AC_DEFUN(GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1, [
62 AC_MSG_CHECKING([for $1 functions])
63 AC_CACHE_VAL(glibcxx_cv_func_$2_use, [
66 AC_TRY_COMPILE([#include <math.h>],
67 [ `for x in $3; do echo "$x (0);"; done` ],
68 [glibcxx_cv_func_$2_use=yes],
69 [glibcxx_cv_func_$2_use=no])
71 AC_MSG_RESULT($glibcxx_cv_func_$2_use)
72 if test x$glibcxx_cv_func_$2_use = x"yes"; then
78 dnl Check to see if the (math function) argument passed is
79 dnl declared when using the c++ compiler
80 dnl ASSUMES argument is a math function with TWO parameters
82 dnl GLIBCXX_CHECK_MATH_DECL_2
83 AC_DEFUN(GLIBCXX_CHECK_MATH_DECL_2, [
84 AC_MSG_CHECKING([for $1 declaration])
85 if test x${glibcxx_cv_func_$1_use+set} != xset; then
86 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
89 AC_TRY_COMPILE([#include <math.h>],
91 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
95 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
99 dnl Check to see if the (math function) argument passed is
100 dnl 1) declared when using the c++ compiler
101 dnl 2) has "C" linkage
103 dnl Define HAVE_CARGF etc if "cargf" is declared and links
105 dnl argument 1 is name of function to check
107 dnl ASSUMES argument is a math function with TWO parameters
109 dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2
110 AC_DEFUN(GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2, [
111 GLIBCXX_CHECK_MATH_DECL_2($1)
112 if test x$glibcxx_cv_func_$1_use = x"yes"; then
115 GLIBCXX_CHECK_MATH_DECL_2(_$1)
116 if test x$glibcxx_cv_func__$1_use = x"yes"; then
124 dnl Check to see if the (math function) argument passed is
125 dnl declared when using the c++ compiler
126 dnl ASSUMES argument is a math function with THREE parameters
128 dnl GLIBCXX_CHECK_MATH_DECL_3
129 AC_DEFUN(GLIBCXX_CHECK_MATH_DECL_3, [
130 AC_MSG_CHECKING([for $1 declaration])
131 if test x${glibcxx_cv_func_$1_use+set} != xset; then
132 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
135 AC_TRY_COMPILE([#include <math.h>],
137 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
141 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
145 dnl Check to see if the (math function) argument passed is
146 dnl 1) declared when using the c++ compiler
147 dnl 2) has "C" linkage
149 dnl Define HAVE_CARGF etc if "cargf" is declared and links
151 dnl argument 1 is name of function to check
153 dnl ASSUMES argument is a math function with THREE parameters
155 dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3
156 AC_DEFUN(GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3, [
157 GLIBCXX_CHECK_MATH_DECL_3($1)
158 if test x$glibcxx_cv_func_$1_use = x"yes"; then
161 GLIBCXX_CHECK_MATH_DECL_3(_$1)
162 if test x$glibcxx_cv_func__$1_use = x"yes"; then
170 dnl Check to see if the (stdlib function) argument passed is
171 dnl 1) declared when using the c++ compiler
172 dnl 2) has "C" linkage
174 dnl argument 1 is name of function to check
176 dnl ASSUMES argument is a math function with TWO parameters
178 dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2
179 AC_DEFUN(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2, [
180 AC_MSG_CHECKING([for $1 declaration])
181 if test x${glibcxx_cv_func_$1_use+set} != xset; then
182 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
185 AC_TRY_COMPILE([#include <stdlib.h>],
187 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
191 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
192 if test x$glibcxx_cv_func_$1_use = x"yes"; then
199 dnl Check to see if the (stdlib function) argument passed is
200 dnl 1) declared when using the c++ compiler
201 dnl 2) has "C" linkage
203 dnl argument 1 is name of function to check
205 dnl ASSUMES argument is a function with THREE parameters
207 dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3
208 AC_DEFUN(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3, [
209 AC_MSG_CHECKING([for $1 declaration])
210 if test x${glibcxx_cv_func_$1_use+set} != xset; then
211 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
214 AC_TRY_COMPILE([#include <stdlib.h>],
216 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
220 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
221 if test x$glibcxx_cv_func_$1_use = x"yes"; then
227 dnl Because the builtins are picky picky picky about the arguments they take,
228 dnl do an explict linkage tests here.
229 dnl Check to see if the (math function) argument passed is
230 dnl 1) declared when using the c++ compiler
231 dnl 2) has "C" linkage
233 dnl Define HAVE_CARGF etc if "cargf" is declared and links
235 dnl argument 1 is name of function to check
237 dnl ASSUMES argument is a math function with ONE parameter
239 dnl GLIBCXX_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
240 AC_DEFUN(GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
241 AC_MSG_CHECKING([for $1 declaration])
242 if test x${glibcxx_cv_func_$1_use+set} != xset; then
243 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
246 AC_TRY_COMPILE([#include <math.h>],
248 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
252 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
253 if test x$glibcxx_cv_func_$1_use = x"yes"; then
254 AC_MSG_CHECKING([for $1 linkage])
255 if test x${glibcxx_cv_func_$1_link+set} != xset; then
256 AC_CACHE_VAL(glibcxx_cv_func_$1_link, [
257 AC_TRY_LINK([#include <math.h>],
259 [glibcxx_cv_func_$1_link=yes], [glibcxx_cv_func_$1_link=no])
262 AC_MSG_RESULT($glibcxx_cv_func_$1_link)
263 if test x$glibcxx_cv_func_$1_link = x"yes"; then
264 ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
265 AC_DEFINE_UNQUOTED(${ac_tr_func})
272 dnl Check to see what builtin math functions are supported
274 dnl check for __builtin_abs
275 dnl check for __builtin_fabsf
276 dnl check for __builtin_fabs
277 dnl check for __builtin_fabl
278 dnl check for __builtin_labs
279 dnl check for __builtin_sqrtf
280 dnl check for __builtin_sqrtl
281 dnl check for __builtin_sqrt
282 dnl check for __builtin_sinf
283 dnl check for __builtin_sin
284 dnl check for __builtin_sinl
285 dnl check for __builtin_cosf
286 dnl check for __builtin_cos
287 dnl check for __builtin_cosl
289 dnl GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
290 AC_DEFUN(GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT, [
291 dnl Test for builtin math functions.
292 dnl These are made in gcc/c-common.c
293 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
294 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
295 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
296 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
297 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
299 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
300 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrt)
301 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
303 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
304 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
305 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
307 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
308 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
309 GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
311 dnl There is, without a doubt, a more elegant way to have these
312 dnl names exported so that they won't be stripped out of acconfig.h by
313 dnl autoheader. I leave this as an exercise to somebody less frustrated
314 dnl than I.... please email the libstdc++ list if you can figure out a
315 dnl more elegant approach (see autoconf/acgen.m4 and specifically
316 dnl AC_CHECK_FUNC for things to steal.)
318 if test x$dummyvar = x"yes"; then
319 AC_DEFINE(HAVE___BUILTIN_ABS)
320 AC_DEFINE(HAVE___BUILTIN_LABS)
321 AC_DEFINE(HAVE___BUILTIN_COS)
322 AC_DEFINE(HAVE___BUILTIN_COSF)
323 AC_DEFINE(HAVE___BUILTIN_COSL)
324 AC_DEFINE(HAVE___BUILTIN_FABS)
325 AC_DEFINE(HAVE___BUILTIN_FABSF)
326 AC_DEFINE(HAVE___BUILTIN_FABSL)
327 AC_DEFINE(HAVE___BUILTIN_SIN)
328 AC_DEFINE(HAVE___BUILTIN_SINF)
329 AC_DEFINE(HAVE___BUILTIN_SINL)
330 AC_DEFINE(HAVE___BUILTIN_SQRT)
331 AC_DEFINE(HAVE___BUILTIN_SQRTF)
332 AC_DEFINE(HAVE___BUILTIN_SQRTL)
337 dnl Check to see what the underlying c library is like
338 dnl These checks need to do two things:
339 dnl 1) make sure the name is declared when using the c++ compiler
340 dnl 2) make sure the name has "C" linkage
341 dnl This might seem like overkill but experience has shown that it's not...
343 dnl Define HAVE_STRTOLD if "strtold" is declared and links
344 dnl Define HAVE_STRTOF if "strtof" is declared and links
345 dnl Define HAVE_DRAND48 if "drand48" is declared and links
347 dnl GLIBCXX_CHECK_STDLIB_SUPPORT
348 AC_DEFUN(GLIBCXX_CHECK_STDLIB_SUPPORT, [
349 ac_test_CXXFLAGS="${CXXFLAGS+set}"
350 ac_save_CXXFLAGS="$CXXFLAGS"
351 CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
353 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
354 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
355 AC_CHECK_FUNCS(drand48)
357 CXXFLAGS="$ac_save_CXXFLAGS"
361 dnl Check to see what the underlying c library or math library is like.
362 dnl These checks need to do two things:
363 dnl 1) make sure the name is declared when using the c++ compiler
364 dnl 2) make sure the name has "C" linkage
365 dnl This might seem like overkill but experience has shown that it's not...
367 dnl Define HAVE_CARGF etc if "cargf" is found.
369 dnl GLIBCXX_CHECK_MATH_SUPPORT
370 AC_DEFUN(GLIBCXX_CHECK_MATH_SUPPORT, [
371 ac_test_CXXFLAGS="${CXXFLAGS+set}"
372 ac_save_CXXFLAGS="$CXXFLAGS"
373 CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
376 AC_CHECK_LIB(m, sin, libm="-lm")
380 dnl Check to see if certain C math functions exist.
381 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
382 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
383 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
384 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
385 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
386 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
387 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
388 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
390 dnl Check to see if basic C math functions have float versions.
391 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
396 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
399 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
400 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
401 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
402 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
403 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
404 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
405 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
406 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
407 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
408 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
409 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
410 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
411 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
412 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
413 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
414 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
416 dnl Check to see if basic C math functions have long double versions.
417 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
422 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
425 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
426 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
427 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
428 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
429 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
430 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
431 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
432 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
433 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
434 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
435 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
436 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
437 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
438 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
439 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
440 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
441 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
443 dnl Some runtimes have these functions with a preceding underscore. Please
444 dnl keep this sync'd with the one above. And if you add any new symbol,
445 dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
446 dnl Check to see if certain C math functions exist.
448 dnl Check to see if basic C math functions have float versions.
449 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(_float trig,
451 _acosf _asinf _atanf \
453 _coshf _sinhf _tanhf)
454 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(_float round,
458 dnl Check to see if basic C math functions have long double versions.
459 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double trig,
461 _acosl _asinl _atanl \
463 _coshl _sinhl _tanhl)
464 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double round,
469 CXXFLAGS="$ac_save_CXXFLAGS"
474 dnl Check to see if there is native support for complex
476 dnl Don't compile bits in math/* if native support exits.
478 dnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found.
480 dnl GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
481 AC_DEFUN(GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT, [
482 dnl Check for complex versions of math functions of platform. This will
483 dnl always pass if libm is available, and fail if it isn't. If it is
484 dnl available, we assume we'll need it later, so add it to LIBS.
485 AC_CHECK_LIB(m, main)
486 AC_REPLACE_MATHFUNCS(nan copysignf)
488 dnl For __signbit to signbit conversions.
489 AC_CHECK_FUNCS([__signbit], , [LIBMATHOBJS="$LIBMATHOBJS signbit.lo"])
490 AC_CHECK_FUNCS([__signbitf], , [LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"])
492 dnl Compile the long double complex functions only if the function
493 dnl provides the non-complex long double functions that are needed.
494 dnl Currently this includes copysignl, which should be
495 dnl cached from the GLIBCXX_CHECK_MATH_SUPPORT macro, above.
496 if test x$ac_cv_func_copysignl = x"yes"; then
497 AC_CHECK_FUNCS([__signbitl], , [LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"])
500 # XXX Review this. Nothing uses it.
501 if test -n "$LIBMATHOBJS"; then
504 AC_SUBST(LIBMATHOBJS)
508 # Check for functions in math library.
509 # Ulrich Drepper <drepper@cygnus.com>, 1998.
511 # This file can be copied and used freely without restrictions. It can
512 # be used in projects which are not available under the GNU Public License
513 # but which still want to provide support for the GNU gettext functionality.
514 # Please note that the actual code is *not* freely available.
518 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
519 AC_DEFUN(AC_REPLACE_MATHFUNCS,
520 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])])