Home | History | Annotate | Line # | Download | only in config
      1 dnl GCC_CHECK_LIBM
      2 dnl
      3 dnl Check whether -lm is available.  This is a pre-requisite for
      4 dnl GCC_CHECK_MATH_FUNC so that it will link with -lm.
      5 AC_DEFUN([GCC_CHECK_LIBM],
      6 [AC_CHECK_LIB([m],[sin])])
      7 
      8 dnl GCC_CHECK_MATH_HEADERS
      9 dnl
     10 dnl Check for math.h and complex.h.  This is a pre-requisite for
     11 dnl GCC_CHECK_MATH_FUNC so that it includes the right headers.
     12 dnl (Some systems, such as AIX or OpenVMS may define macro for math
     13 dnl  functions).
     14 AC_DEFUN([GCC_CHECK_MATH_HEADERS],
     15 [AC_CHECK_HEADERS_ONCE(math.h complex.h)])
     16 
     17 dnl GCC_CHECK_MATH_FUNC([name])
     18 dnl
     19 dnl Check whether math function NAME is available on the system (by compiling
     20 dnl and linking a C program) and run define HAVE_name on success.
     21 dnl
     22 dnl Note that OpenVMS system insists on including complex.h before math.h
     23 AC_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 
     36 int (*ptr)() = (int (*)())$1;
     37 
     38 int
     39 main ()
     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 
     52 dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type])
     53 dnl
     54 dnl Check if math function NAME fallback for function with single
     55 dnl TYPE argument and TYPE result can be implemented using
     56 dnl __builtin_NAME expanded inline without needing unavailable math
     57 dnl library function.
     58 AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1],
     59 [
     60   AC_REQUIRE([GCC_CHECK_LIBM])
     61 if 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 
     70 int
     71 main ()
     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
     82 fi])
     83 
     84 dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type])
     85 dnl
     86 dnl Check if math function NAME fallback for function with two
     87 dnl TYPE arguments and TYPE result can be implemented using
     88 dnl __builtin_NAME expanded inline without needing unavailable math
     89 dnl library function.
     90 AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2],
     91 [
     92   AC_REQUIRE([GCC_CHECK_LIBM])
     93 if 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 
    102 int
    103 main ()
    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
    114 fi])
    115