dnl
dnl This file contains stuff.
dnl

# Base decisions on target environment.
case "${host}" in
  *-darwin*)
    # Darwin versions vary, but the linker should work in a cross environment,
    # so we just check for all the features here.
    # Check for available headers.
    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h machine/endian.h \
    machine/param.h sys/machine.h fp.h locale.h float.h inttypes.h gconv.h \
    sys/types.h])

    GLIBCXX_CHECK_COMPILER_FEATURES
    # Don't call GLIBCXX_CHECK_LINKER_FEATURES, Darwin doesn't have a GNU ld
    GLIBCXX_CHECK_MATH_SUPPORT
    GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    GLIBCXX_CHECK_STDLIB_SUPPORT

    # For showmanyc_helper().
    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
    GLIBCXX_CHECK_POLL
    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG

    # For xsputn_2().
    AC_CHECK_HEADERS(sys/uio.h)
    GLIBCXX_CHECK_WRITEV

    AC_DEFINE(HAVE_LC_MESSAGES)

    AC_TRY_COMPILE(
      [#include <setjmp.h>],
      [sigjmp_buf env;
       while (! sigsetjmp (env, 1))
         siglongjmp (env, 1);
    ],
    [AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available.])])

    AC_DEFINE(HAVE_MMAP)
    ;;

  *djgpp)
    AC_CHECK_HEADERS([float.h ieeefp.h inttypes.h locale.h \
      memory.h stdint.h stdlib.h strings.h string.h unistd.h \
      wchar.h wctype.h machine/endian.h sys/ioctl.h sys/param.h \
      sys/resource.h sys/stat.h sys/time.h sys/types.h sys/uio.h])
    GLIBCXX_CHECK_COMPILER_FEATURES
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_MATH_SUPPORT
    GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    GLIBCXX_CHECK_STDLIB_SUPPORT
    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
    AC_DEFINE(HAVE_WRITEV)
    ;;

  *-freebsd*)
    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
      machine/endian.h machine/param.h sys/machine.h sys/types.h \
      fp.h locale.h float.h inttypes.h sys/resource.h sys/stat.h \
      sys/time.h unistd.h])
    SECTION_FLAGS='-ffunction-sections -fdata-sections'
    AC_SUBST(SECTION_FLAGS) 
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    AC_DEFINE(HAVE_LC_MESSAGES)
    AC_DEFINE(HAVE_GETPAGESIZE)
    AC_DEFINE(HAVE_SETENV)
    AC_DEFINE(HAVE_SIGSETJMP)
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_COPYSIGNF)
    AC_DEFINE(HAVE_FINITEF)
    AC_DEFINE(HAVE_FINITE)
    AC_DEFINE(HAVE_FREXPF)
    AC_DEFINE(HAVE_HYPOT)
    AC_DEFINE(HAVE_HYPOTF)
    AC_DEFINE(HAVE_ISINF)
    AC_DEFINE(HAVE_ISNAN)
    AC_DEFINE(HAVE_ISNANF)

    AC_DEFINE(HAVE_MMAP)
    AC_DEFINE(HAVE_ACOSF)
    AC_DEFINE(HAVE_ASINF)
    AC_DEFINE(HAVE_ATAN2F)
    AC_DEFINE(HAVE_ATANF)
    AC_DEFINE(HAVE_CEILF)
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_COPYSIGNF)
    AC_DEFINE(HAVE_COSF)
    AC_DEFINE(HAVE_COSHF)
    AC_DEFINE(HAVE_EXPF)
    AC_DEFINE(HAVE_FABSF)
    AC_DEFINE(HAVE_FLOORF)
    AC_DEFINE(HAVE_FMODF)
    AC_DEFINE(HAVE_FREXPF)
    AC_DEFINE(HAVE_LDEXPF)
    AC_DEFINE(HAVE_LOG10F)
    AC_DEFINE(HAVE_LOGF)
    AC_DEFINE(HAVE_MODFF)
    AC_DEFINE(HAVE_POWF)
    AC_DEFINE(HAVE_SINF)
    AC_DEFINE(HAVE_SINHF)
    AC_DEFINE(HAVE_SQRTF)
    AC_DEFINE(HAVE_TANF)
    AC_DEFINE(HAVE_TANHF)
    if test x"long_double_math_on_this_cpu" = x"yes"; then
      AC_DEFINE(HAVE_FINITEL)
      AC_DEFINE(HAVE_ISINFL)
      AC_DEFINE(HAVE_ISNANL)
    fi
    ;;
  *-hpux*)
    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
      machine/endian.h machine/param.h sys/machine.h sys/types.h \
      fp.h locale.h float.h inttypes.h])
    SECTION_FLAGS='-ffunction-sections -fdata-sections'
    AC_SUBST(SECTION_FLAGS)
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_COPYSIGNF)
    AC_DEFINE(HAVE_FREXPF)
    AC_DEFINE(HAVE_HYPOT)
    case "$target" in
      *-hpux10*)
	AC_DEFINE(HAVE_FINITE)
	AC_DEFINE(HAVE_FINITEF)
	AC_DEFINE(HAVE_ISINF)
	AC_DEFINE(HAVE_ISINFF)
	AC_DEFINE(HAVE_ISNAN)
	AC_DEFINE(HAVE_ISNANF)
	;;
    esac
    ;;
  *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
      machine/endian.h machine/param.h sys/machine.h sys/types.h \
      fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
    SECTION_FLAGS='-ffunction-sections -fdata-sections'
    AC_SUBST(SECTION_FLAGS)
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT

    # For LFS.
    AC_DEFINE(HAVE_INT64_T)
    case "$target" in
      *-uclinux*)
        # Don't enable LFS with uClibc
        ;;
      *)
        AC_DEFINE(_GLIBCXX_USE_LFS)
    esac

    # For showmanyc_helper().
    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
    GLIBCXX_CHECK_POLL
    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG

    # For xsputn_2().
    AC_CHECK_HEADERS(sys/uio.h)
    GLIBCXX_CHECK_WRITEV

    AC_DEFINE(HAVE_ACOSF)
    AC_DEFINE(HAVE_ASINF)
    AC_DEFINE(HAVE_ATANF)
    AC_DEFINE(HAVE_ATAN2F)
    AC_DEFINE(HAVE_CEILF)
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_COPYSIGNF)
    AC_DEFINE(HAVE_COSF)
    AC_DEFINE(HAVE_COSHF)
    AC_DEFINE(HAVE_EXPF)
    AC_DEFINE(HAVE_FABSF)
    AC_DEFINE(HAVE_FINITE)
    AC_DEFINE(HAVE_FINITEF)
    AC_DEFINE(HAVE_FLOORF)
    AC_DEFINE(HAVE_FMODF)
    AC_DEFINE(HAVE_FREXPF)
    AC_DEFINE(HAVE_HYPOT)
    AC_DEFINE(HAVE_HYPOTF)
    AC_DEFINE(HAVE_ISINF)
    AC_DEFINE(HAVE_ISINFF)
    AC_DEFINE(HAVE_ISNAN)
    AC_DEFINE(HAVE_ISNANF)
    AC_DEFINE(HAVE_LOGF)
    AC_DEFINE(HAVE_LOG10F)
    AC_DEFINE(HAVE_MODFF)
    AC_DEFINE(HAVE_SINF)
    AC_DEFINE(HAVE_SINHF)
    AC_DEFINE(HAVE_SINCOS)
    AC_DEFINE(HAVE_SINCOSF)
    AC_DEFINE(HAVE_SQRTF)
    AC_DEFINE(HAVE_TANF)
    AC_DEFINE(HAVE_TANHF)
    if test x"long_double_math_on_this_cpu" = x"yes"; then
      AC_DEFINE(HAVE_ACOSL)
      AC_DEFINE(HAVE_ASINL)
      AC_DEFINE(HAVE_ATANL)
      AC_DEFINE(HAVE_ATAN2L)
      AC_DEFINE(HAVE_CEILL)
      AC_DEFINE(HAVE_COPYSIGNL)
      AC_DEFINE(HAVE_COSL)
      AC_DEFINE(HAVE_COSHL)
      AC_DEFINE(HAVE_EXPL)
      AC_DEFINE(HAVE_FABSL)
      AC_DEFINE(HAVE_FINITEL)
      AC_DEFINE(HAVE_FLOORL)
      AC_DEFINE(HAVE_FMODL)
      AC_DEFINE(HAVE_FREXPL)
      AC_DEFINE(HAVE_HYPOTL)
      AC_DEFINE(HAVE_ISINFL)
      AC_DEFINE(HAVE_ISNANL)
      AC_DEFINE(HAVE_LOGL)
      AC_DEFINE(HAVE_LOG10L)
      AC_DEFINE(HAVE_MODFL)
      AC_DEFINE(HAVE_POWL)
      AC_DEFINE(HAVE_SINL)
      AC_DEFINE(HAVE_SINHL)
      AC_DEFINE(HAVE_SINCOSL)
      AC_DEFINE(HAVE_SQRTL)
      AC_DEFINE(HAVE_TANL)
      AC_DEFINE(HAVE_TANHL)
    fi
    ;;
  *-mingw32*)
    AC_CHECK_HEADERS([sys/types.h locale.h float.h])
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    ;;
  *-netbsd*)
    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
      machine/endian.h machine/param.h sys/machine.h sys/types.h \
      fp.h locale.h float.h inttypes.h])
    SECTION_FLAGS='-ffunction-sections -fdata-sections'
    AC_SUBST(SECTION_FLAGS) 
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_COPYSIGNF)
    AC_DEFINE(HAVE_FINITEF)
    AC_DEFINE(HAVE_FINITE)
    AC_DEFINE(HAVE_FREXPF)
    AC_DEFINE(HAVE_HYPOTF)
    AC_DEFINE(HAVE_ISINF)
    AC_DEFINE(HAVE_ISINFF)
    AC_DEFINE(HAVE_ISNAN)
    AC_DEFINE(HAVE_ISNANF)
    if test x"long_double_math_on_this_cpu" = x"yes"; then
      AC_DEFINE(HAVE_FINITEL)
      AC_DEFINE(HAVE_ISINFL)
      AC_DEFINE(HAVE_ISNANL)
    fi
    ;;
  *-qnx6.1* | *-qnx6.2*)
    SECTION_FLAGS='-ffunction-sections -fdata-sections'
    AC_SUBST(SECTION_FLAGS) 
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    AC_DEFINE(HAVE_COSF)
    AC_DEFINE(HAVE_COSL)
    AC_DEFINE(HAVE_COSHF)
    AC_DEFINE(HAVE_COSHL)
    AC_DEFINE(HAVE_LOGF)
    AC_DEFINE(HAVE_LOGL)
    AC_DEFINE(HAVE_LOG10F)
    AC_DEFINE(HAVE_LOG10L)
    AC_DEFINE(HAVE_SINF)
    AC_DEFINE(HAVE_SINL)
    AC_DEFINE(HAVE_SINHF)
    AC_DEFINE(HAVE_SINHL)
    ;;
  *-solaris*)
    case "$target" in
    #  *-solaris2.5)
    #    os_include_dir="os/solaris/solaris2.5"
    #    ;;
    #  *-solaris2.6)
    #    os_include_dir="os/solaris/solaris2.6"
    #    ;;
      *-solaris2.7 | *-solaris2.8 | *-solaris2.9 | *-solaris2.10)
         AC_DEFINE(HAVE_GETPAGESIZE)
         AC_DEFINE(HAVE_SIGSETJMP)
         AC_DEFINE(HAVE_MBSTATE_T)
         AC_DEFINE(HAVE_POLL)
         AC_DEFINE(HAVE_S_ISREG)
         AC_DEFINE(HAVE_LC_MESSAGES)
         AC_DEFINE(HAVE_BTOWC)
         AC_DEFINE(HAVE_FGETWC)
         AC_DEFINE(HAVE_FGETWS)
         AC_DEFINE(HAVE_FINITE)
         AC_DEFINE(HAVE_FPCLASS)
         AC_DEFINE(HAVE_FPUTWC)
         AC_DEFINE(HAVE_FPUTWS)
         AC_DEFINE(HAVE_FWIDE)
         AC_DEFINE(HAVE_FWPRINTF)
         AC_DEFINE(HAVE_FWSCANF)
         AC_DEFINE(HAVE_GETPAGESIZE)
         AC_DEFINE(HAVE_GETWC)
         AC_DEFINE(HAVE_GETWCHAR)
         AC_DEFINE(HAVE_MBRLEN)
         AC_DEFINE(HAVE_MBRTOWC)
         AC_DEFINE(HAVE_MBSINIT)
         AC_DEFINE(HAVE_MBSRTOWCS)
         AC_DEFINE(HAVE_NL_LANGINFO)
         AC_DEFINE(HAVE_PUTWC)
         AC_DEFINE(HAVE_PUTWCHAR)
         AC_DEFINE(HAVE_SWPRINTF)
         AC_DEFINE(HAVE_SWSCANF)
         AC_DEFINE(HAVE_UNGETWC)
         AC_DEFINE(HAVE_VFWPRINTF)
         AC_DEFINE(HAVE_VSWPRINTF)
         AC_DEFINE(HAVE_VWPRINTF)
         AC_DEFINE(HAVE_WCRTOMB)
         AC_DEFINE(HAVE_WCSCAT)
         AC_DEFINE(HAVE_WCSCHR)
         AC_DEFINE(HAVE_WCSCMP)
         AC_DEFINE(HAVE_WCSCOLL)
         AC_DEFINE(HAVE_WCSCPY)
         AC_DEFINE(HAVE_WCSCSPN)
         AC_DEFINE(HAVE_WCSFTIME)
         AC_DEFINE(HAVE_WCSLEN)
         AC_DEFINE(HAVE_WCSNCAT)
         AC_DEFINE(HAVE_WCSNCMP)
         AC_DEFINE(HAVE_WCSNCPY)
         AC_DEFINE(HAVE_WCSPBRK)
         AC_DEFINE(HAVE_WCSRCHR)
         AC_DEFINE(HAVE_WCSRTOMBS)
         AC_DEFINE(HAVE_WCSSPN)
         AC_DEFINE(HAVE_WCSSTR)
         AC_DEFINE(HAVE_WCSTOD)
         AC_DEFINE(HAVE_WCSTOK)
         AC_DEFINE(HAVE_WCSTOL)
         AC_DEFINE(HAVE_WCSTOUL)
         AC_DEFINE(HAVE_WCSXFRM)
         AC_DEFINE(HAVE_WCTOB)
         AC_DEFINE(HAVE_WMEMCHR)
         AC_DEFINE(HAVE_WMEMCMP)
         AC_DEFINE(HAVE_WMEMCPY)
         AC_DEFINE(HAVE_WMEMMOVE)
         AC_DEFINE(HAVE_WMEMSET)
         AC_DEFINE(HAVE_WPRINTF)
         AC_DEFINE(HAVE_WSCANF)
         AC_DEFINE(HAVE_ICONV)
         AC_DEFINE(HAVE_ICONV_CLOSE)
         AC_DEFINE(HAVE_ICONV_OPEN)
         # Look for the pieces required for wchar_t support in order to
         # get all the right HAVE_* macros defined.
         GLIBCXX_CHECK_WCHAR_T_SUPPORT
         # All of the dependencies for wide character support are here, so
         # turn it on.  This requires some syncronization with the
         # GLIBCXX_CHECK_WCHAR_T_SUPPORT in acinclude.m4
         AC_DEFINE(_GLIBCXX_USE_WCHAR_T) 
         # Are these tested for even when cross?
         AC_DEFINE(HAVE_FLOAT_H)
         AC_DEFINE(HAVE_IEEEFP_H)
         AC_DEFINE(HAVE_INTTYPES_H)
         AC_DEFINE(HAVE_LOCALE_H)
         AC_DEFINE(HAVE_NAN_H)
         AC_DEFINE(HAVE_SYS_FILIO_H)
         AC_DEFINE(HAVE_SYS_IOCTL_H)
         AC_DEFINE(HAVE_SYS_ISA_DEFS_H)
         AC_DEFINE(HAVE_SYS_RESOURCE_H)
         AC_DEFINE(HAVE_SYS_TIME_H)
         AC_DEFINE(HAVE_SYS_TYPES_H)
         AC_DEFINE(HAVE_UNISTD_H)
         AC_DEFINE(HAVE_WCHAR_H)
         AC_DEFINE(HAVE_WCTYPE_H)
         AC_DEFINE(HAVE_LIBM)
        ;;
    esac
    case "$target" in
      sparc*-*-solaris2.8 | sparc*-*-solaris2.9 | sparc*-*-solaris2.10)
        # I saw these on sparc-sun-solaris2.8, but not 2.6, and not on i386
        AC_DEFINE(HAVE___BUILTIN_ABS)
        AC_DEFINE(HAVE___BUILTIN_LABS)
        AC_DEFINE(HAVE___BUILTIN_FABS)
        AC_DEFINE(HAVE___BUILTIN_FABSF)
        AC_DEFINE(HAVE___BUILTIN_FABSL)
        AC_DEFINE(HAVE___BUILTIN_COS)
        AC_DEFINE(HAVE___BUILTIN_COSF)
        AC_DEFINE(HAVE___BUILTIN_SIN)
        AC_DEFINE(HAVE___BUILTIN_SINF)
       ;;
    esac
    AC_DEFINE(HAVE_STRTOF)
    AC_DEFINE(HAVE_STRTOLD)
    AC_DEFINE(HAVE_MMAP) 
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_ISNAN)
    AC_DEFINE(HAVE_ISNANF)
    AC_DEFINE(HAVE_MODFF)
    AC_DEFINE(HAVE_HYPOT)
    ;;
  *-tpf)
    AC_CHECK_HEADERS([nan.h endian.h machine/endian.h  \
      sys/param.h sys/types.h locale.h float.h inttypes.h])
    SECTION_FLAGS='-ffunction-sections -fdata-sections'
    AC_SUBST(SECTION_FLAGS)
    GLIBCXX_CHECK_LINKER_FEATURES
    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
    GLIBCXX_CHECK_WCHAR_T_SUPPORT
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_COPYSIGNF)
    AC_DEFINE(HAVE_FINITE)
    AC_DEFINE(HAVE_FINITEF)
    AC_DEFINE(HAVE_FREXPF)
    AC_DEFINE(HAVE_HYPOTF)
    AC_DEFINE(HAVE_ISINF)
    AC_DEFINE(HAVE_ISINFF)
    AC_DEFINE(HAVE_ISNAN)
    AC_DEFINE(HAVE_ISNANF)
    AC_DEFINE(HAVE_SINCOS)
    AC_DEFINE(HAVE_SINCOSF)
    if test x"long_double_math_on_this_cpu" = x"yes"; then
      AC_DEFINE(HAVE_FINITEL)
      AC_DEFINE(HAVE_HYPOTL)
      AC_DEFINE(HAVE_ISINFL)
      AC_DEFINE(HAVE_ISNANL)
    fi
    ;;
  *-vxworks)
    AC_DEFINE(HAVE_MMAP)
    AC_DEFINE(HAVE_ACOSF)
    AC_DEFINE(HAVE_ASINF)
    AC_DEFINE(HAVE_ATAN2F)
    AC_DEFINE(HAVE_ATANF)
    AC_DEFINE(HAVE_CEILF)
    AC_DEFINE(HAVE_COSF)
    AC_DEFINE(HAVE_COSHF)
    AC_DEFINE(HAVE_EXPF)
    AC_DEFINE(HAVE_FABSF)
    AC_DEFINE(HAVE_FLOORF)
    AC_DEFINE(HAVE_FMODF)
    AC_DEFINE(HAVE_HYPOT)
    AC_DEFINE(HAVE_LOG10F)
    AC_DEFINE(HAVE_LOGF)
    AC_DEFINE(HAVE_POWF)
    AC_DEFINE(HAVE_SINF)
    AC_DEFINE(HAVE_SINHF)
    AC_DEFINE(HAVE_SQRTF)
    AC_DEFINE(HAVE_TANF)
    AC_DEFINE(HAVE_TANHF)
    ;;
  *-windiss*)
    AC_DEFINE(HAVE_ACOSF)
    AC_DEFINE(HAVE_ACOSL)
    AC_DEFINE(HAVE_ASINF)
    AC_DEFINE(HAVE_ASINL)
    AC_DEFINE(HAVE_ATAN2F)
    AC_DEFINE(HAVE_ATAN2L)
    AC_DEFINE(HAVE_ATANF)
    AC_DEFINE(HAVE_ATANL)
    AC_DEFINE(HAVE_CEILF)
    AC_DEFINE(HAVE_CEILL)
    AC_DEFINE(HAVE_COPYSIGN)
    AC_DEFINE(HAVE_COPYSIGNF)
    AC_DEFINE(HAVE_COSF)
    AC_DEFINE(HAVE_COSL)
    AC_DEFINE(HAVE_COSHF)
    AC_DEFINE(HAVE_COSHL)
    AC_DEFINE(HAVE_EXPF)
    AC_DEFINE(HAVE_EXPL)
    AC_DEFINE(HAVE_FABSF)
    AC_DEFINE(HAVE_FABSL)
    AC_DEFINE(HAVE_FLOORF)
    AC_DEFINE(HAVE_FLOORL)
    AC_DEFINE(HAVE_FMODF)
    AC_DEFINE(HAVE_FMODL)
    AC_DEFINE(HAVE_FREXPF)
    AC_DEFINE(HAVE_FREXPL)
    AC_DEFINE(HAVE_LDEXPF)
    AC_DEFINE(HAVE_LDEXPL)
    AC_DEFINE(HAVE_LOG10F)
    AC_DEFINE(HAVE_LOG10L)
    AC_DEFINE(HAVE_LOGF)
    AC_DEFINE(HAVE_MODFF)
    AC_DEFINE(HAVE_MODFL)
    AC_DEFINE(HAVE_POWF)
    AC_DEFINE(HAVE_POWL)
    AC_DEFINE(HAVE_SINF)
    AC_DEFINE(HAVE_SINL)
    AC_DEFINE(HAVE_SINHF)
    AC_DEFINE(HAVE_SINHL)
    AC_DEFINE(HAVE_SQRTF)
    AC_DEFINE(HAVE_SQRTL)
    AC_DEFINE(HAVE_TANF)
    AC_DEFINE(HAVE_TANL)
    AC_DEFINE(HAVE_TANHF)
    AC_DEFINE(HAVE_TANHL)
    ;;
  *)
    AC_MSG_ERROR([No support for this host/target combination.])
   ;;
esac

