X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=libstdc%2B%2B-v3%2Flinkage.m4;h=b24f4556000b30d8b75b98a80d4b93c7a4284604;hp=87c64cb9b57ccf57464ffbdcf90899bb8ebf21d2;hb=ef4f26e54914a90c2cf2ec95afba9fa7238eb58b;hpb=708a325092013c660b683da1cacbffd44f26bd85 diff --git a/libstdc++-v3/linkage.m4 b/libstdc++-v3/linkage.m4 index 87c64cb9b57..b24f4556000 100644 --- a/libstdc++-v3/linkage.m4 +++ b/libstdc++-v3/linkage.m4 @@ -1,5 +1,5 @@ dnl -dnl This file contains stuff. +dnl This file contains macros for testing linkage. dnl dnl @@ -20,13 +20,30 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [ #endif ], [ $1(0);], - [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) + [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) AC_LANG_RESTORE ]) fi AC_MSG_RESULT($glibcxx_cv_func_$1_use) ]) + +dnl +dnl Define autoheader template for using the underscore functions +dnl For each parameter, create a macro where if func doesn't exist, +dnl but _func does, then it will "#define func _func". +dnl +dnl GLIBCXX_MAYBE_UNDERSCORED_FUNCS +AC_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])]) +]) + + dnl dnl Check to see if the (math function) argument passed is dnl 1) declared when using the c++ compiler @@ -50,6 +67,7 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1], [ AC_CHECK_FUNCS(_$1) fi fi + GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) ]) @@ -59,19 +77,36 @@ dnl of functions at once. It's an all-or-nothing check -- either dnl 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 ))dnl AC_MSG_CHECKING([for $1 functions]) AC_CACHE_VAL(glibcxx_cv_func_$2_use, [ AC_LANG_SAVE AC_LANG_CPLUSPLUS AC_TRY_COMPILE([#include ], - [ `for x in $3; do echo "$x (0);"; done` ], + 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"; then - AC_CHECK_FUNCS($3) + AC_CHECK_FUNCS(funclist) + else + AC_MSG_CHECKING([for _$1 functions]) + AC_CACHE_VAL(glibcxx_cv_func__$2_use, [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include ], + 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"; then + AC_CHECK_FUNCS(patsubst(funclist,[\w+],[_\&])) + fi fi + GLIBCXX_MAYBE_UNDERSCORED_FUNCS(funclist) + undefine([funclist]) ]) dnl @@ -117,6 +152,7 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2], [ AC_CHECK_FUNCS(_$1) fi fi + GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) ]) @@ -163,6 +199,7 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3], [ AC_CHECK_FUNCS(_$1) fi fi + GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) ]) @@ -202,7 +239,7 @@ dnl 2) has "C" linkage dnl dnl argument 1 is name of function to check dnl -dnl ASSUMES argument is a math function with TWO parameters +dnl ASSUMES argument is a stdlib function with TWO parameters dnl dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2 AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [ @@ -221,6 +258,7 @@ AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [ if test x$glibcxx_cv_func_$1_use = x"yes"; then AC_CHECK_FUNCS($1) fi + GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1) ]) @@ -231,7 +269,7 @@ dnl 2) has "C" linkage dnl dnl argument 1 is name of function to check dnl -dnl ASSUMES argument is a function with THREE parameters +dnl ASSUMES argument is a stdlib function with THREE parameters dnl dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3 AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [ @@ -253,116 +291,6 @@ AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [ ]) dnl -dnl 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 is -dnl 1) declared when using the c++ compiler -dnl 2) has "C" linkage -dnl -dnl Define HAVE_CARGF etc if "cargf" is declared and links -dnl -dnl argument 1 is name of function to check -dnl -dnl ASSUMES argument is a math function with ONE parameter -dnl -dnl GLIBCXX_CHECK_BUILTIN_MATH_DECL_LINKAGE_1 -AC_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; then - AC_CACHE_VAL(glibcxx_cv_func_$1_use, [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include ], - [ $1(0);], - [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no]) - AC_LANG_RESTORE - ]) - fi - AC_MSG_RESULT($glibcxx_cv_func_$1_use) - if test x$glibcxx_cv_func_$1_use = x"yes"; then - AC_MSG_CHECKING([for $1 linkage]) - if test x${glibcxx_cv_func_$1_link+set} != xset; then - AC_CACHE_VAL(glibcxx_cv_func_$1_link, [ - AC_TRY_LINK([#include ], - [ $1(0);], - [glibcxx_cv_func_$1_link=yes], [glibcxx_cv_func_$1_link=no]) - ]) - fi - AC_MSG_RESULT($glibcxx_cv_func_$1_link) - if test x$glibcxx_cv_func_$1_link = x"yes"; then - ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED(${ac_tr_func}) - fi - fi -]) - - -dnl -dnl Check to see what builtin math functions are supported -dnl -dnl check for __builtin_abs -dnl check for __builtin_fabsf -dnl check for __builtin_fabs -dnl check for __builtin_fabl -dnl check for __builtin_labs -dnl check for __builtin_sqrtf -dnl check for __builtin_sqrtl -dnl check for __builtin_sqrt -dnl check for __builtin_sinf -dnl check for __builtin_sin -dnl check for __builtin_sinl -dnl check for __builtin_cosf -dnl check for __builtin_cos -dnl check for __builtin_cosl -dnl -dnl GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT -AC_DEFUN([GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT], [ - dnl Test for builtin math functions. - dnl These are made in gcc/c-common.c - GLIBCXX_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) - - dnl There is, without a doubt, a more elegant way to have these - dnl names exported so that they won't be stripped out of acconfig.h by - dnl autoheader. I leave this as an exercise to somebody less frustrated - dnl than I.... please email the libstdc++ list if you can figure out a - dnl more elegant approach (see autoconf/acgen.m4 and specifically - dnl AC_CHECK_FUNC for things to steal.) - dummyvar=no - if test x$dummyvar = x"yes"; then - AC_DEFINE(HAVE___BUILTIN_ABS) - AC_DEFINE(HAVE___BUILTIN_LABS) - AC_DEFINE(HAVE___BUILTIN_COS) - AC_DEFINE(HAVE___BUILTIN_COSF) - AC_DEFINE(HAVE___BUILTIN_COSL) - AC_DEFINE(HAVE___BUILTIN_FABS) - AC_DEFINE(HAVE___BUILTIN_FABSF) - AC_DEFINE(HAVE___BUILTIN_FABSL) - AC_DEFINE(HAVE___BUILTIN_SIN) - AC_DEFINE(HAVE___BUILTIN_SINF) - AC_DEFINE(HAVE___BUILTIN_SINL) - AC_DEFINE(HAVE___BUILTIN_SQRT) - AC_DEFINE(HAVE___BUILTIN_SQRTF) - AC_DEFINE(HAVE___BUILTIN_SQRTL) - fi -]) - -dnl dnl Check to see what the underlying c library is like dnl These checks need to do two things: dnl 1) make sure the name is declared when using the c++ compiler @@ -404,16 +332,10 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $libm" - dnl Check libmx - AC_CHECK_LIB(mx, sqrtf, libmx="-lmx") - dnl ac_save_LIBS="$LIBS" - LIBS="$LIBS $libmx" - 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) @@ -440,6 +362,7 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [ 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) @@ -456,7 +379,6 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [ 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) @@ -472,83 +394,6 @@ AC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [ GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl) GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel) - dnl Some runtimes have these functions with a preceding underscore. Please - dnl keep this sync'd with the one above. And if you add any new symbol, - dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h. - dnl Check to see if certain C math functions exist. - - 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) - - 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) - LIBS="$ac_save_LIBS" CXXFLAGS="$ac_save_CXXFLAGS" ]) - - -dnl -dnl Check to see if there is native support for complex -dnl -dnl Don't compile bits in math/* if native support exits. -dnl -dnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found. -dnl -dnl GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT -AC_DEFUN([GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT], [ - dnl Check for complex versions of math functions of platform. This will - dnl always pass if libm is available, and fail if it isn't. If it is - dnl 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. - 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 function - dnl provides the non-complex long double functions that are needed. - dnl Currently this includes copysignl, which should be - dnl cached from the GLIBCXX_CHECK_MATH_SUPPORT macro, above. - if test x$ac_cv_func_copysignl = x"yes"; then - AC_CHECK_FUNCS([__signbitl], , [LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"]) - fi - - # XXX Review this. Nothing uses it. - if test -n "$LIBMATHOBJS"; then - need_libmath=yes - fi - AC_SUBST(LIBMATHOBJS) -]) - - -# Check for functions in math library. -# Ulrich Drepper , 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"])]) - -dnl vim:et:ts=2