1dnl GCC_CHECK_LIBM 2dnl 3dnl Check whether -lm is available. This is a pre-requisite for 4dnl GCC_CHECK_MATH_FUNC so that it will link with -lm. 5AC_DEFUN([GCC_CHECK_LIBM], 6[AC_CHECK_LIB([m],[sin])]) 7 8dnl GCC_CHECK_MATH_HEADERS 9dnl 10dnl Check for math.h and complex.h. This is a pre-requisite for 11dnl GCC_CHECK_MATH_FUNC so that it includes the right headers. 12dnl (Some systems, such as AIX or OpenVMS may define macro for math 13dnl functions). 14AC_DEFUN([GCC_CHECK_MATH_HEADERS], 15[AC_CHECK_HEADERS_ONCE(math.h complex.h)]) 16 17dnl GCC_CHECK_MATH_FUNC([name]) 18dnl 19dnl Check whether math function NAME is available on the system (by compiling 20dnl and linking a C program) and run define HAVE_name on success. 21dnl 22dnl Note that OpenVMS system insists on including complex.h before math.h 23AC_DEFUN([GCC_CHECK_MATH_FUNC], 24[ 25 AC_REQUIRE([GCC_CHECK_LIBM]) 26 AC_REQUIRE([GCC_CHECK_MATH_HEADERS]) 27 AC_CACHE_CHECK([for $1], [gcc_cv_math_func_$1], 28 [AC_LINK_IFELSE([AC_LANG_SOURCE([ 29#ifdef HAVE_COMPLEX_H 30#include <complex.h> 31#endif 32#ifdef HAVE_MATH_H 33#include <math.h> 34#endif 35 36int (*ptr)() = (int (*)())$1; 37 38int 39main () 40{ 41 return 0; 42} 43])], 44[gcc_cv_math_func_$1=yes], 45[gcc_cv_math_func_$1=no])]) 46 if test $gcc_cv_math_func_$1 = yes; then 47 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1),[1], 48 [Define to 1 if you have the `$1' function.]) 49 fi 50]) 51 52dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type]) 53dnl 54dnl Check if math function NAME fallback for function with single 55dnl TYPE argument and TYPE result can be implemented using 56dnl __builtin_NAME expanded inline without needing unavailable math 57dnl library function. 58AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1], 59[ 60 AC_REQUIRE([GCC_CHECK_LIBM]) 61if test $gcc_cv_math_func_$1 = no; then 62 AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], 63 [AC_LINK_IFELSE([AC_LANG_SOURCE([ 64$2 65$1_fallback ($2 x) 66{ 67 return __builtin_$1 (x); 68} 69 70int 71main () 72{ 73 return 0; 74} 75])], 76[gcc_cv_math_inline_builtin_$1=yes], 77[gcc_cv_math_inline_builtin_$1=no])]) 78 if test $gcc_cv_math_inline_builtin_$1 = yes; then 79 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], 80 [Define to 1 if `__builtin_$1' is expanded inline.]) 81 fi 82fi]) 83 84dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type]) 85dnl 86dnl Check if math function NAME fallback for function with two 87dnl TYPE arguments and TYPE result can be implemented using 88dnl __builtin_NAME expanded inline without needing unavailable math 89dnl library function. 90AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2], 91[ 92 AC_REQUIRE([GCC_CHECK_LIBM]) 93if test $gcc_cv_math_func_$1 = no; then 94 AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], 95 [AC_LINK_IFELSE([AC_LANG_SOURCE([ 96$2 97$1_fallback ($2 x, $2 y) 98{ 99 return __builtin_$1 (x, y); 100} 101 102int 103main () 104{ 105 return 0; 106} 107])], 108[gcc_cv_math_inline_builtin_$1=yes], 109[gcc_cv_math_inline_builtin_$1=no])]) 110 if test $gcc_cv_math_inline_builtin_$1 = yes; then 111 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], 112 [Define to 1 if `__builtin_$1' is expanded inline.]) 113 fi 114fi]) 115