1*1debfc3dSmrgdnl 2*1debfc3dSmrgdnl This file contains macros for testing linkage. 3*1debfc3dSmrgdnl 4*1debfc3dSmrg 5*1debfc3dSmrgdnl 6*1debfc3dSmrgdnl Check to see if the (math function) argument passed is 7*1debfc3dSmrgdnl declared when using the c++ compiler 8*1debfc3dSmrgdnl ASSUMES argument is a math function with ONE parameter 9*1debfc3dSmrgdnl 10*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_1 11*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [ 12*1debfc3dSmrg AC_MSG_CHECKING([for $1 declaration]) 13*1debfc3dSmrg if test x${glibcxx_cv_func_$1_use+set} != xset; then 14*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ 15*1debfc3dSmrg AC_LANG_SAVE 16*1debfc3dSmrg AC_LANG_CPLUSPLUS 17*1debfc3dSmrg AC_TRY_COMPILE([#include <math.h> 18*1debfc3dSmrg #ifdef HAVE_IEEEFP_H 19*1debfc3dSmrg #include <ieeefp.h> 20*1debfc3dSmrg #endif 21*1debfc3dSmrg ], 22*1debfc3dSmrg [ $1(0);], 23*1debfc3dSmrg [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) 24*1debfc3dSmrg AC_LANG_RESTORE 25*1debfc3dSmrg ]) 26*1debfc3dSmrg fi 27*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$1_use) 28*1debfc3dSmrg]) 29*1debfc3dSmrg 30*1debfc3dSmrg 31*1debfc3dSmrgdnl 32*1debfc3dSmrgdnl Define autoheader template for using the underscore functions 33*1debfc3dSmrgdnl For each parameter, create a macro where if func doesn't exist, 34*1debfc3dSmrgdnl but _func does, then it will "#define func _func". 35*1debfc3dSmrgdnl 36*1debfc3dSmrgdnl GLIBCXX_MAYBE_UNDERSCORED_FUNCS 37*1debfc3dSmrgAC_DEFUN([GLIBCXX_MAYBE_UNDERSCORED_FUNCS], 38*1debfc3dSmrg[AC_FOREACH([glibcxx_ufunc], [$1], 39*1debfc3dSmrg [AH_VERBATIM(_[]glibcxx_ufunc, 40*1debfc3dSmrg[#if defined (]AS_TR_CPP(HAVE__[]glibcxx_ufunc)[) && ! defined (]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[) 41*1debfc3dSmrg# define ]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[ 1 42*1debfc3dSmrg# define ]glibcxx_ufunc[ _]glibcxx_ufunc[ 43*1debfc3dSmrg#endif])]) 44*1debfc3dSmrg]) 45*1debfc3dSmrg 46*1debfc3dSmrg 47*1debfc3dSmrgdnl 48*1debfc3dSmrgdnl Check to see if the (math function) argument passed is 49*1debfc3dSmrgdnl 1) declared when using the c++ compiler 50*1debfc3dSmrgdnl 2) has "C" linkage 51*1debfc3dSmrgdnl 3) if not, see if 1) and 2) for argument prepended with '_' 52*1debfc3dSmrgdnl 53*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is declared and links 54*1debfc3dSmrgdnl 55*1debfc3dSmrgdnl argument 1 is name of function to check 56*1debfc3dSmrgdnl 57*1debfc3dSmrgdnl ASSUMES argument is a math function with ONE parameter 58*1debfc3dSmrgdnl 59*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1 60*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1], [ 61*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_1($1) 62*1debfc3dSmrg if test x$glibcxx_cv_func_$1_use = x"yes"; then 63*1debfc3dSmrg AC_CHECK_FUNCS($1) 64*1debfc3dSmrg else 65*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_1(_$1) 66*1debfc3dSmrg if test x$glibcxx_cv_func__$1_use = x"yes"; then 67*1debfc3dSmrg AC_CHECK_FUNCS(_$1) 68*1debfc3dSmrg fi 69*1debfc3dSmrg fi 70*1debfc3dSmrg GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) 71*1debfc3dSmrg]) 72*1debfc3dSmrg 73*1debfc3dSmrg 74*1debfc3dSmrgdnl 75*1debfc3dSmrgdnl Like GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of 76*1debfc3dSmrgdnl of functions at once. It's an all-or-nothing check -- either 77*1debfc3dSmrgdnl HAVE_XYZ is defined for each of the functions, or for none of them. 78*1debfc3dSmrgdnl Doing it this way saves significant configure time. 79*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1], [ 80*1debfc3dSmrg define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnl 81*1debfc3dSmrg AC_MSG_CHECKING([for $1 functions]) 82*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$2_use, [ 83*1debfc3dSmrg AC_LANG_SAVE 84*1debfc3dSmrg AC_LANG_CPLUSPLUS 85*1debfc3dSmrg AC_TRY_COMPILE([#include <math.h>], 86*1debfc3dSmrg patsubst(funclist,[\w+],[\& (0);]), 87*1debfc3dSmrg [glibcxx_cv_func_$2_use=yes], 88*1debfc3dSmrg [glibcxx_cv_func_$2_use=no]) 89*1debfc3dSmrg AC_LANG_RESTORE]) 90*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$2_use) 91*1debfc3dSmrg if test x$glibcxx_cv_func_$2_use = x"yes"; then 92*1debfc3dSmrg AC_CHECK_FUNCS(funclist) 93*1debfc3dSmrg else 94*1debfc3dSmrg AC_MSG_CHECKING([for _$1 functions]) 95*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func__$2_use, [ 96*1debfc3dSmrg AC_LANG_SAVE 97*1debfc3dSmrg AC_LANG_CPLUSPLUS 98*1debfc3dSmrg AC_TRY_COMPILE([#include <math.h>], 99*1debfc3dSmrg patsubst(funclist,[\w+],[_\& (0);]), 100*1debfc3dSmrg [glibcxx_cv_func__$2_use=yes], 101*1debfc3dSmrg [glibcxx_cv_func__$2_use=no]) 102*1debfc3dSmrg AC_LANG_RESTORE]) 103*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func__$2_use) 104*1debfc3dSmrg if test x$glibcxx_cv_func__$2_use = x"yes"; then 105*1debfc3dSmrg AC_CHECK_FUNCS(patsubst(funclist,[\w+],[_\&])) 106*1debfc3dSmrg fi 107*1debfc3dSmrg fi 108*1debfc3dSmrg GLIBCXX_MAYBE_UNDERSCORED_FUNCS(funclist) 109*1debfc3dSmrg undefine([funclist]) 110*1debfc3dSmrg]) 111*1debfc3dSmrg 112*1debfc3dSmrgdnl 113*1debfc3dSmrgdnl Check to see if the (math function) argument passed is 114*1debfc3dSmrgdnl declared when using the c++ compiler 115*1debfc3dSmrgdnl ASSUMES argument is a math function with TWO parameters 116*1debfc3dSmrgdnl 117*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_2 118*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_2], [ 119*1debfc3dSmrg AC_MSG_CHECKING([for $1 declaration]) 120*1debfc3dSmrg if test x${glibcxx_cv_func_$1_use+set} != xset; then 121*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ 122*1debfc3dSmrg AC_LANG_SAVE 123*1debfc3dSmrg AC_LANG_CPLUSPLUS 124*1debfc3dSmrg AC_TRY_COMPILE([#include <math.h>], 125*1debfc3dSmrg [ $1(0, 0);], 126*1debfc3dSmrg [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) 127*1debfc3dSmrg AC_LANG_RESTORE 128*1debfc3dSmrg ]) 129*1debfc3dSmrg fi 130*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$1_use) 131*1debfc3dSmrg]) 132*1debfc3dSmrg 133*1debfc3dSmrgdnl 134*1debfc3dSmrgdnl Check to see if the (math function) argument passed is 135*1debfc3dSmrgdnl 1) declared when using the c++ compiler 136*1debfc3dSmrgdnl 2) has "C" linkage 137*1debfc3dSmrgdnl 138*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is declared and links 139*1debfc3dSmrgdnl 140*1debfc3dSmrgdnl argument 1 is name of function to check 141*1debfc3dSmrgdnl 142*1debfc3dSmrgdnl ASSUMES argument is a math function with TWO parameters 143*1debfc3dSmrgdnl 144*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2 145*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2], [ 146*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_2($1) 147*1debfc3dSmrg if test x$glibcxx_cv_func_$1_use = x"yes"; then 148*1debfc3dSmrg AC_CHECK_FUNCS($1) 149*1debfc3dSmrg else 150*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_2(_$1) 151*1debfc3dSmrg if test x$glibcxx_cv_func__$1_use = x"yes"; then 152*1debfc3dSmrg AC_CHECK_FUNCS(_$1) 153*1debfc3dSmrg fi 154*1debfc3dSmrg fi 155*1debfc3dSmrg GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) 156*1debfc3dSmrg]) 157*1debfc3dSmrg 158*1debfc3dSmrg 159*1debfc3dSmrgdnl 160*1debfc3dSmrgdnl Check to see if the (math function) argument passed is 161*1debfc3dSmrgdnl declared when using the c++ compiler 162*1debfc3dSmrgdnl ASSUMES argument is a math function with THREE parameters 163*1debfc3dSmrgdnl 164*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_3 165*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_3], [ 166*1debfc3dSmrg AC_MSG_CHECKING([for $1 declaration]) 167*1debfc3dSmrg if test x${glibcxx_cv_func_$1_use+set} != xset; then 168*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ 169*1debfc3dSmrg AC_LANG_SAVE 170*1debfc3dSmrg AC_LANG_CPLUSPLUS 171*1debfc3dSmrg AC_TRY_COMPILE([#include <math.h>], 172*1debfc3dSmrg [ $1(0, 0, 0);], 173*1debfc3dSmrg [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) 174*1debfc3dSmrg AC_LANG_RESTORE 175*1debfc3dSmrg ]) 176*1debfc3dSmrg fi 177*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$1_use) 178*1debfc3dSmrg]) 179*1debfc3dSmrg 180*1debfc3dSmrgdnl 181*1debfc3dSmrgdnl Check to see if the (math function) argument passed is 182*1debfc3dSmrgdnl 1) declared when using the c++ compiler 183*1debfc3dSmrgdnl 2) has "C" linkage 184*1debfc3dSmrgdnl 185*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is declared and links 186*1debfc3dSmrgdnl 187*1debfc3dSmrgdnl argument 1 is name of function to check 188*1debfc3dSmrgdnl 189*1debfc3dSmrgdnl ASSUMES argument is a math function with THREE parameters 190*1debfc3dSmrgdnl 191*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3 192*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3], [ 193*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_3($1) 194*1debfc3dSmrg if test x$glibcxx_cv_func_$1_use = x"yes"; then 195*1debfc3dSmrg AC_CHECK_FUNCS($1) 196*1debfc3dSmrg else 197*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_3(_$1) 198*1debfc3dSmrg if test x$glibcxx_cv_func__$1_use = x"yes"; then 199*1debfc3dSmrg AC_CHECK_FUNCS(_$1) 200*1debfc3dSmrg fi 201*1debfc3dSmrg fi 202*1debfc3dSmrg GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) 203*1debfc3dSmrg]) 204*1debfc3dSmrg 205*1debfc3dSmrg 206*1debfc3dSmrgdnl 207*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is 208*1debfc3dSmrgdnl 1) declared when using the c++ compiler 209*1debfc3dSmrgdnl 2) has "C" linkage 210*1debfc3dSmrgdnl 211*1debfc3dSmrgdnl argument 1 is name of function to check 212*1debfc3dSmrgdnl 213*1debfc3dSmrgdnl ASSUMES argument is a stdlib function without parameters 214*1debfc3dSmrgdnl 215*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0 216*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0], [ 217*1debfc3dSmrg AC_MSG_CHECKING([for $1 declaration]) 218*1debfc3dSmrg if test x${glibcxx_cv_func_$1_use+set} != xset; then 219*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ 220*1debfc3dSmrg AC_LANG_SAVE 221*1debfc3dSmrg AC_LANG_CPLUSPLUS 222*1debfc3dSmrg AC_TRY_COMPILE([#include <stdlib.h>], 223*1debfc3dSmrg [ $1();], 224*1debfc3dSmrg [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) 225*1debfc3dSmrg AC_LANG_RESTORE 226*1debfc3dSmrg ]) 227*1debfc3dSmrg fi 228*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$1_use) 229*1debfc3dSmrg if test x$glibcxx_cv_func_$1_use = x"yes"; then 230*1debfc3dSmrg AC_CHECK_FUNCS($1) 231*1debfc3dSmrg fi 232*1debfc3dSmrg]) 233*1debfc3dSmrg 234*1debfc3dSmrg 235*1debfc3dSmrgdnl 236*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is 237*1debfc3dSmrgdnl 1) declared when using the c++ compiler 238*1debfc3dSmrgdnl 2) has "C" linkage 239*1debfc3dSmrgdnl 240*1debfc3dSmrgdnl argument 1 is name of function to check 241*1debfc3dSmrgdnl 242*1debfc3dSmrgdnl ASSUMES argument is a stdlib function with ONE parameter 243*1debfc3dSmrgdnl 244*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1 245*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1], [ 246*1debfc3dSmrg AC_MSG_CHECKING([for $1 declaration]) 247*1debfc3dSmrg if test x${glibcxx_cv_func_$1_use+set} != xset; then 248*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ 249*1debfc3dSmrg AC_LANG_SAVE 250*1debfc3dSmrg AC_LANG_CPLUSPLUS 251*1debfc3dSmrg AC_TRY_COMPILE([#include <stdlib.h>], 252*1debfc3dSmrg [ $1(0);], 253*1debfc3dSmrg [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) 254*1debfc3dSmrg AC_LANG_RESTORE 255*1debfc3dSmrg ]) 256*1debfc3dSmrg fi 257*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$1_use) 258*1debfc3dSmrg if test x$glibcxx_cv_func_$1_use = x"yes"; then 259*1debfc3dSmrg AC_CHECK_FUNCS($1) 260*1debfc3dSmrg fi 261*1debfc3dSmrg]) 262*1debfc3dSmrg 263*1debfc3dSmrg 264*1debfc3dSmrgdnl 265*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is 266*1debfc3dSmrgdnl 1) declared when using the c++ compiler 267*1debfc3dSmrgdnl 2) has "C" linkage 268*1debfc3dSmrgdnl 269*1debfc3dSmrgdnl argument 1 is name of function to check 270*1debfc3dSmrgdnl 271*1debfc3dSmrgdnl ASSUMES argument is a stdlib function with TWO parameters 272*1debfc3dSmrgdnl 273*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2 274*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [ 275*1debfc3dSmrg AC_MSG_CHECKING([for $1 declaration]) 276*1debfc3dSmrg if test x${glibcxx_cv_func_$1_use+set} != xset; then 277*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ 278*1debfc3dSmrg AC_LANG_SAVE 279*1debfc3dSmrg AC_LANG_CPLUSPLUS 280*1debfc3dSmrg AC_TRY_COMPILE([#include <stdlib.h>], 281*1debfc3dSmrg [ $1(0, 0);], 282*1debfc3dSmrg [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) 283*1debfc3dSmrg AC_LANG_RESTORE 284*1debfc3dSmrg ]) 285*1debfc3dSmrg fi 286*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$1_use) 287*1debfc3dSmrg if test x$glibcxx_cv_func_$1_use = x"yes"; then 288*1debfc3dSmrg AC_CHECK_FUNCS($1) 289*1debfc3dSmrg fi 290*1debfc3dSmrg GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) 291*1debfc3dSmrg]) 292*1debfc3dSmrg 293*1debfc3dSmrg 294*1debfc3dSmrgdnl 295*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is 296*1debfc3dSmrgdnl 1) declared when using the c++ compiler 297*1debfc3dSmrgdnl 2) has "C" linkage 298*1debfc3dSmrgdnl 299*1debfc3dSmrgdnl argument 1 is name of function to check 300*1debfc3dSmrgdnl 301*1debfc3dSmrgdnl ASSUMES argument is a stdlib function with THREE parameters 302*1debfc3dSmrgdnl 303*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3 304*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [ 305*1debfc3dSmrg AC_MSG_CHECKING([for $1 declaration]) 306*1debfc3dSmrg if test x${glibcxx_cv_func_$1_use+set} != xset; then 307*1debfc3dSmrg AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ 308*1debfc3dSmrg AC_LANG_SAVE 309*1debfc3dSmrg AC_LANG_CPLUSPLUS 310*1debfc3dSmrg AC_TRY_COMPILE([#include <stdlib.h>], 311*1debfc3dSmrg [ $1(0, 0, 0);], 312*1debfc3dSmrg [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) 313*1debfc3dSmrg AC_LANG_RESTORE 314*1debfc3dSmrg ]) 315*1debfc3dSmrg fi 316*1debfc3dSmrg AC_MSG_RESULT($glibcxx_cv_func_$1_use) 317*1debfc3dSmrg if test x$glibcxx_cv_func_$1_use = x"yes"; then 318*1debfc3dSmrg AC_CHECK_FUNCS($1) 319*1debfc3dSmrg fi 320*1debfc3dSmrg]) 321*1debfc3dSmrg 322*1debfc3dSmrgdnl 323*1debfc3dSmrgdnl Check to see what the underlying c library is like 324*1debfc3dSmrgdnl These checks need to do two things: 325*1debfc3dSmrgdnl 1) make sure the name is declared when using the c++ compiler 326*1debfc3dSmrgdnl 2) make sure the name has "C" linkage 327*1debfc3dSmrgdnl This might seem like overkill but experience has shown that it's not... 328*1debfc3dSmrgdnl 329*1debfc3dSmrgdnl Define HAVE_STRTOLD if "strtold" is declared and links 330*1debfc3dSmrgdnl Define HAVE_STRTOF if "strtof" is declared and links 331*1debfc3dSmrgdnl 332*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_SUPPORT 333*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_SUPPORT], [ 334*1debfc3dSmrg ac_test_CXXFLAGS="${CXXFLAGS+set}" 335*1debfc3dSmrg ac_save_CXXFLAGS="$CXXFLAGS" 336*1debfc3dSmrg CXXFLAGS='-fno-builtin -D_GNU_SOURCE' 337*1debfc3dSmrg 338*1debfc3dSmrg GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(at_quick_exit) 339*1debfc3dSmrg GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(quick_exit) 340*1debfc3dSmrg GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold) 341*1debfc3dSmrg GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof) 342*1debfc3dSmrg 343*1debfc3dSmrg CXXFLAGS="$ac_save_CXXFLAGS" 344*1debfc3dSmrg]) 345*1debfc3dSmrg 346*1debfc3dSmrgdnl 347*1debfc3dSmrgdnl Check to see what the underlying c library or math library is like. 348*1debfc3dSmrgdnl These checks need to do two things: 349*1debfc3dSmrgdnl 1) make sure the name is declared when using the c++ compiler 350*1debfc3dSmrgdnl 2) make sure the name has "C" linkage 351*1debfc3dSmrgdnl This might seem like overkill but experience has shown that it's not... 352*1debfc3dSmrgdnl 353*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is found. 354*1debfc3dSmrgdnl 355*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_SUPPORT 356*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [ 357*1debfc3dSmrg ac_test_CXXFLAGS="${CXXFLAGS+set}" 358*1debfc3dSmrg ac_save_CXXFLAGS="$CXXFLAGS" 359*1debfc3dSmrg CXXFLAGS='-fno-builtin -D_GNU_SOURCE' 360*1debfc3dSmrg 361*1debfc3dSmrg dnl Check libm 362*1debfc3dSmrg AC_CHECK_LIB(m, sin, libm="-lm") 363*1debfc3dSmrg ac_save_LIBS="$LIBS" 364*1debfc3dSmrg LIBS="$LIBS $libm" 365*1debfc3dSmrg 366*1debfc3dSmrg dnl Check to see if certain C math functions exist. 367*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinf) 368*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnan) 369*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finite) 370*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincos) 371*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass) 372*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass) 373*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypot) 374*1debfc3dSmrg 375*1debfc3dSmrg dnl Check to see if basic C math functions have float versions. 376*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig, 377*1debfc3dSmrg float_trig, 378*1debfc3dSmrg acosf asinf atanf \ 379*1debfc3dSmrg cosf sinf tanf \ 380*1debfc3dSmrg coshf sinhf tanhf) 381*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float round, 382*1debfc3dSmrg float_round, 383*1debfc3dSmrg ceilf floorf) 384*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expf) 385*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf) 386*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinff) 387*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f) 388*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf) 389*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf) 390*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf) 391*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf) 392*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf) 393*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logf) 394*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10f) 395*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modff) 396*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modf) 397*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powf) 398*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf) 399*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf) 400*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitef) 401*1debfc3dSmrg 402*1debfc3dSmrg dnl Check to see if basic C math functions have long double versions. 403*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig, 404*1debfc3dSmrg long_double_trig, 405*1debfc3dSmrg acosl asinl atanl \ 406*1debfc3dSmrg cosl sinl tanl \ 407*1debfc3dSmrg coshl sinhl tanhl) 408*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round, 409*1debfc3dSmrg long_double_round, 410*1debfc3dSmrg ceill floorl) 411*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl) 412*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl) 413*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l) 414*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expl) 415*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl) 416*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl) 417*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl) 418*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl) 419*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl) 420*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logl) 421*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10l) 422*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modfl) 423*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powl) 424*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl) 425*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl) 426*1debfc3dSmrg GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel) 427*1debfc3dSmrg 428*1debfc3dSmrg LIBS="$ac_save_LIBS" 429*1debfc3dSmrg CXXFLAGS="$ac_save_CXXFLAGS" 430*1debfc3dSmrg]) 431