dnldnl This file contains macros for testing linkage.dnldnldnl Check to see if the (math function) argument passed isdnl declared when using the c++ compilerdnl ASSUMES argument is a math function with ONE parameterdnldnl GLIBCXX_CHECK_MATH_DECL_1AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [AC_MSG_CHECKING([for $1 declaration])if test x${glibcxx_cv_func_$1_use+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <math.h>#ifdef HAVE_IEEEFP_H#include <ieeefp.h>#endif],[ $1(0);],[glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])AC_LANG_RESTORE])fiAC_MSG_RESULT($glibcxx_cv_func_$1_use)])dnldnl Define autoheader template for using the underscore functionsdnl For each parameter, create a macro where if func doesn't exist,dnl but _func does, then it will "#define func _func".dnldnl GLIBCXX_MAYBE_UNDERSCORED_FUNCSAC_DEFUN([GLIBCXX_MAYBE_UNDERSCORED_FUNCS],[AC_FOREACH([glibcxx_ufunc], [$1],[AH_VERBATIM(_[]glibcxx_ufunc,[#if defined (]AS_TR_CPP(HAVE__[]glibcxx_ufunc)[) && ! defined (]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[)# define ]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[ 1# define ]glibcxx_ufunc[ _]glibcxx_ufunc[#endif])])])dnldnl Check to see if the (math function) argument passed isdnl 1) declared when using the c++ compilerdnl 2) has "C" linkagednl 3) if not, see if 1) and 2) for argument prepended with '_'dnldnl Define HAVE_CARGF etc if "cargf" is declared and linksdnldnl argument 1 is name of function to checkdnldnl ASSUMES argument is a math function with ONE parameterdnldnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1], [GLIBCXX_CHECK_MATH_DECL_1($1)if test x$glibcxx_cv_func_$1_use = x"yes"; thenAC_CHECK_FUNCS($1)elseGLIBCXX_CHECK_MATH_DECL_1(_$1)if test x$glibcxx_cv_func__$1_use = x"yes"; thenAC_CHECK_FUNCS(_$1)fifiGLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)])dnldnl Like GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch ofdnl of functions at once. It's an all-or-nothing check -- eitherdnl HAVE_XYZ is defined for each of the functions, or for none of them.dnl Doing it this way saves significant configure time.AC_DEFUN([GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1], [define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnlAC_MSG_CHECKING([for $1 functions])AC_CACHE_VAL(glibcxx_cv_func_$2_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <math.h>],patsubst(funclist,[\w+],[\& (0);]),[glibcxx_cv_func_$2_use=yes],[glibcxx_cv_func_$2_use=no])AC_LANG_RESTORE])AC_MSG_RESULT($glibcxx_cv_func_$2_use)if test x$glibcxx_cv_func_$2_use = x"yes"; thenAC_CHECK_FUNCS(funclist)elseAC_MSG_CHECKING([for _$1 functions])AC_CACHE_VAL(glibcxx_cv_func__$2_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <math.h>],patsubst(funclist,[\w+],[_\& (0);]),[glibcxx_cv_func__$2_use=yes],[glibcxx_cv_func__$2_use=no])AC_LANG_RESTORE])AC_MSG_RESULT($glibcxx_cv_func__$2_use)if test x$glibcxx_cv_func__$2_use = x"yes"; thenAC_CHECK_FUNCS(patsubst(funclist,[\w+],[_\&]))fifiGLIBCXX_MAYBE_UNDERSCORED_FUNCS(funclist)undefine([funclist])])dnldnl Check to see if the (math function) argument passed isdnl declared when using the c++ compilerdnl ASSUMES argument is a math function with TWO parametersdnldnl GLIBCXX_CHECK_MATH_DECL_2AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_2], [AC_MSG_CHECKING([for $1 declaration])if test x${glibcxx_cv_func_$1_use+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <math.h>],[ $1(0, 0);],[glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])AC_LANG_RESTORE])fiAC_MSG_RESULT($glibcxx_cv_func_$1_use)])dnldnl Check to see if the (math function) argument passed isdnl 1) declared when using the c++ compilerdnl 2) has "C" linkagednldnl Define HAVE_CARGF etc if "cargf" is declared and linksdnldnl argument 1 is name of function to checkdnldnl ASSUMES argument is a math function with TWO parametersdnldnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2], [GLIBCXX_CHECK_MATH_DECL_2($1)if test x$glibcxx_cv_func_$1_use = x"yes"; thenAC_CHECK_FUNCS($1)elseGLIBCXX_CHECK_MATH_DECL_2(_$1)if test x$glibcxx_cv_func__$1_use = x"yes"; thenAC_CHECK_FUNCS(_$1)fifiGLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)])dnldnl Check to see if the (math function) argument passed isdnl declared when using the c++ compilerdnl ASSUMES argument is a math function with THREE parametersdnldnl GLIBCXX_CHECK_MATH_DECL_3AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_3], [AC_MSG_CHECKING([for $1 declaration])if test x${glibcxx_cv_func_$1_use+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <math.h>],[ $1(0, 0, 0);],[glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])AC_LANG_RESTORE])fiAC_MSG_RESULT($glibcxx_cv_func_$1_use)])dnldnl Check to see if the (math function) argument passed isdnl 1) declared when using the c++ compilerdnl 2) has "C" linkagednldnl Define HAVE_CARGF etc if "cargf" is declared and linksdnldnl argument 1 is name of function to checkdnldnl ASSUMES argument is a math function with THREE parametersdnldnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3], [GLIBCXX_CHECK_MATH_DECL_3($1)if test x$glibcxx_cv_func_$1_use = x"yes"; thenAC_CHECK_FUNCS($1)elseGLIBCXX_CHECK_MATH_DECL_3(_$1)if test x$glibcxx_cv_func__$1_use = x"yes"; thenAC_CHECK_FUNCS(_$1)fifiGLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)])dnldnl Check to see if the (stdlib function) argument passed isdnl 1) declared when using the c++ compilerdnl 2) has "C" linkagednldnl argument 1 is name of function to checkdnldnl ASSUMES argument is a stdlib function without parametersdnldnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0], [AC_MSG_CHECKING([for $1 declaration])if test x${glibcxx_cv_func_$1_use+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <stdlib.h>],[ $1();],[glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])AC_LANG_RESTORE])fiAC_MSG_RESULT($glibcxx_cv_func_$1_use)if test x$glibcxx_cv_func_$1_use = x"yes"; thenAC_CHECK_FUNCS($1)fi])dnldnl Check to see if the (stdlib function) argument passed isdnl 1) declared when using the c++ compilerdnl 2) has "C" linkagednldnl argument 1 is name of function to checkdnldnl ASSUMES argument is a stdlib function with TWO parametersdnldnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [AC_MSG_CHECKING([for $1 declaration])if test x${glibcxx_cv_func_$1_use+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <stdlib.h>],[ $1(0, 0);],[glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])AC_LANG_RESTORE])fiAC_MSG_RESULT($glibcxx_cv_func_$1_use)if test x$glibcxx_cv_func_$1_use = x"yes"; thenAC_CHECK_FUNCS($1)fiGLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)])dnldnl Check to see if the (stdlib function) argument passed isdnl 1) declared when using the c++ compilerdnl 2) has "C" linkagednldnl argument 1 is name of function to checkdnldnl ASSUMES argument is a stdlib function with THREE parametersdnldnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [AC_MSG_CHECKING([for $1 declaration])if test x${glibcxx_cv_func_$1_use+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <stdlib.h>],[ $1(0, 0, 0);],[glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])AC_LANG_RESTORE])fiAC_MSG_RESULT($glibcxx_cv_func_$1_use)if test x$glibcxx_cv_func_$1_use = x"yes"; thenAC_CHECK_FUNCS($1)fi])dnldnl Because the builtins are picky picky picky about the arguments they take,dnl do an explict linkage tests here.dnl Check to see if the (math function) argument passed isdnl 1) declared when using the c++ compilerdnl 2) has "C" linkagednldnl Define HAVE_CARGF etc if "cargf" is declared and linksdnldnl argument 1 is name of function to checkdnldnl ASSUMES argument is a math function with ONE parameterdnldnl GLIBCXX_CHECK_BUILTIN_MATH_DECL_LINKAGE_1AC_DEFUN([GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1], [AC_MSG_CHECKING([for $1 declaration])if test x${glibcxx_cv_func_$1_use+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_use, [AC_LANG_SAVEAC_LANG_CPLUSPLUSAC_TRY_COMPILE([#include <math.h>],[ $1(0);],[glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])AC_LANG_RESTORE])fiAC_MSG_RESULT($glibcxx_cv_func_$1_use)if test x$glibcxx_cv_func_$1_use = x"yes"; thenAC_MSG_CHECKING([for $1 linkage])if test x${glibcxx_cv_func_$1_link+set} != xset; thenAC_CACHE_VAL(glibcxx_cv_func_$1_link, [AC_TRY_LINK([#include <math.h>],[ $1(0);],[glibcxx_cv_func_$1_link=yes], [glibcxx_cv_func_$1_link=no])])fiAC_MSG_RESULT($glibcxx_cv_func_$1_link)define([NAME], [translit([$1],[abcdefghijklmnopqrstuvwxyz],[ABCDEFGHIJKLMNOPQRSTUVWXYZ])])if test x$glibcxx_cv_func_$1_link = x"yes"; thenAC_DEFINE([HAVE_]NAME, 1, [Define if the compiler/host combination has $1.])fiundefine([NAME])fi])dnldnl Check to see what builtin math functions are supporteddnldnl check for __builtin_absdnl check for __builtin_fabsfdnl check for __builtin_fabsdnl check for __builtin_fabldnl check for __builtin_labsdnl check for __builtin_sqrtfdnl check for __builtin_sqrtldnl check for __builtin_sqrtdnl check for __builtin_sinfdnl check for __builtin_sindnl check for __builtin_sinldnl check for __builtin_cosfdnl check for __builtin_cosdnl check for __builtin_cosldnldnl GLIBCXX_CHECK_BUILTIN_MATH_SUPPORTAC_DEFUN([GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT], [dnl Test for builtin math functions.dnl These are made in gcc/c-common.cGLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrt)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)GLIBCXX_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)])dnldnl Check to see what the underlying c library is likednl These checks need to do two things:dnl 1) make sure the name is declared when using the c++ compilerdnl 2) make sure the name has "C" linkagednl This might seem like overkill but experience has shown that it's not...dnldnl Define HAVE_STRTOLD if "strtold" is declared and linksdnl Define HAVE_STRTOF if "strtof" is declared and linksdnldnl GLIBCXX_CHECK_STDLIB_SUPPORTAC_DEFUN([GLIBCXX_CHECK_STDLIB_SUPPORT], [ac_test_CXXFLAGS="${CXXFLAGS+set}"ac_save_CXXFLAGS="$CXXFLAGS"CXXFLAGS='-fno-builtin -D_GNU_SOURCE'GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)CXXFLAGS="$ac_save_CXXFLAGS"])dnldnl Check to see what the underlying c library or math library is like.dnl These checks need to do two things:dnl 1) make sure the name is declared when using the c++ compilerdnl 2) make sure the name has "C" linkagednl This might seem like overkill but experience has shown that it's not...dnldnl Define HAVE_CARGF etc if "cargf" is found.dnldnl GLIBCXX_CHECK_MATH_SUPPORTAC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [ac_test_CXXFLAGS="${CXXFLAGS+set}"ac_save_CXXFLAGS="$CXXFLAGS"CXXFLAGS='-fno-builtin -D_GNU_SOURCE'dnl Check libmAC_CHECK_LIB(m, sin, libm="-lm")ac_save_LIBS="$LIBS"LIBS="$LIBS $libm"dnl Check to see if certain C math functions exist.GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finite)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)dnl Check to see if basic C math functions have float versions.GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,float_trig,acosf asinf atanf \cosf sinf tanf \coshf sinhf tanhf)GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,float_round,ceilf floorf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modff)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)dnl Check to see if basic C math functions have long double versions.GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,long_double_trig,acosl asinl atanl \cosl sinl tanl \coshl sinhl tanhl)GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,long_double_round,ceill floorl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)LIBS="$ac_save_LIBS"CXXFLAGS="$ac_save_CXXFLAGS"])dnldnl Check to see if there is native support for complexdnldnl Don't compile bits in math/* if native support exits.dnldnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found.dnldnl GLIBCXX_CHECK_COMPLEX_MATH_SUPPORTAC_DEFUN([GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT], [dnl Check for complex versions of math functions of platform. This willdnl always pass if libm is available, and fail if it isn't. If it isdnl available, we assume we'll need it later, so add it to LIBS.AC_CHECK_LIB(m, main)AC_REPLACE_MATHFUNCS(copysignf)dnl For __signbit to signbit conversions.dnl Not sure why this is done, as these will be macros mostly.dnl Should probably coordinate this with std_cmath.h.AC_CHECK_FUNCS([__signbit], , [LIBMATHOBJS="$LIBMATHOBJS signbit.lo"])AC_CHECK_FUNCS([__signbitf], , [LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"])dnl Compile the long double complex functions only if the functiondnl provides the non-complex long double functions that are needed.dnl Currently this includes copysignl, which should bednl cached from the GLIBCXX_CHECK_MATH_SUPPORT macro, above.if test x$ac_cv_func_copysignl = x"yes"; thenAC_CHECK_FUNCS([__signbitl], , [LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"])fi# Used in libmath/Makefile.am.if test -n "$LIBMATHOBJS"; thenneed_libmath=yesfiAC_SUBST(LIBMATHOBJS)])# Check for functions in math library.# Ulrich Drepper <drepper@cygnus.com>, 1998.## This file can be copied and used freely without restrictions. It can# be used in projects which are not available under the GNU Public License# but which still want to provide support for the GNU gettext functionality.# Please note that the actual code is *not* freely available.## serial 1#dnl AC_REPLACE_MATHFUNCS(FUNCTION...)AC_DEFUN([AC_REPLACE_MATHFUNCS],[AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])])