Blame m4/ldexpl.m4

Packit 8f70b4
# ldexpl.m4 serial 17
Packit 8f70b4
dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
Packit 8f70b4
dnl This file is free software; the Free Software Foundation
Packit 8f70b4
dnl gives unlimited permission to copy and/or distribute it,
Packit 8f70b4
dnl with or without modifications, as long as this notice is preserved.
Packit 8f70b4
Packit 8f70b4
AC_DEFUN([gl_FUNC_LDEXPL],
Packit 8f70b4
[
Packit 8f70b4
  AC_REQUIRE([gl_MATH_H_DEFAULTS])
Packit 8f70b4
  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
Packit 8f70b4
  AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM
Packit 8f70b4
Packit 8f70b4
  dnl Persuade glibc <math.h> to declare ldexpl().
Packit 8f70b4
  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
Packit 8f70b4
Packit 8f70b4
  dnl Check whether it's declared.
Packit 8f70b4
  dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>.
Packit 8f70b4
  AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]])
Packit 8f70b4
Packit 8f70b4
  LDEXPL_LIBM=
Packit 8f70b4
  if test $HAVE_DECL_LDEXPL = 1; then
Packit 8f70b4
    gl_CHECK_LDEXPL_NO_LIBM
Packit 8f70b4
    if test $gl_cv_func_ldexpl_no_libm = no; then
Packit 8f70b4
      AC_CACHE_CHECK([whether ldexpl() can be used with libm],
Packit 8f70b4
        [gl_cv_func_ldexpl_in_libm],
Packit 8f70b4
        [
Packit 8f70b4
          save_LIBS="$LIBS"
Packit 8f70b4
          LIBS="$LIBS -lm"
Packit 8f70b4
          AC_LINK_IFELSE(
Packit 8f70b4
            [AC_LANG_PROGRAM(
Packit 8f70b4
               [[#include <math.h>
Packit 8f70b4
                 long double x;]],
Packit 8f70b4
               [[return ldexpl (x, -1) > 0;]])],
Packit 8f70b4
            [gl_cv_func_ldexpl_in_libm=yes],
Packit 8f70b4
            [gl_cv_func_ldexpl_in_libm=no])
Packit 8f70b4
          LIBS="$save_LIBS"
Packit 8f70b4
        ])
Packit 8f70b4
      if test $gl_cv_func_ldexpl_in_libm = yes; then
Packit 8f70b4
        LDEXPL_LIBM=-lm
Packit 8f70b4
      fi
Packit 8f70b4
    fi
Packit 8f70b4
    if test $gl_cv_func_ldexpl_no_libm = yes \
Packit 8f70b4
       || test $gl_cv_func_ldexpl_in_libm = yes; then
Packit 8f70b4
      save_LIBS="$LIBS"
Packit 8f70b4
      LIBS="$LIBS $LDEXPL_LIBM"
Packit 8f70b4
      gl_FUNC_LDEXPL_WORKS
Packit 8f70b4
      LIBS="$save_LIBS"
Packit 8f70b4
      case "$gl_cv_func_ldexpl_works" in
Packit 8f70b4
        *yes) gl_func_ldexpl=yes ;;
Packit 8f70b4
        *)    gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;;
Packit 8f70b4
      esac
Packit 8f70b4
    else
Packit 8f70b4
      gl_func_ldexpl=no
Packit 8f70b4
    fi
Packit 8f70b4
    if test $gl_func_ldexpl = yes; then
Packit 8f70b4
      AC_DEFINE([HAVE_LDEXPL], [1],
Packit 8f70b4
        [Define if the ldexpl() function is available.])
Packit 8f70b4
    fi
Packit 8f70b4
  fi
Packit 8f70b4
  if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then
Packit 8f70b4
    dnl Find libraries needed to link lib/ldexpl.c.
Packit 8f70b4
    if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
Packit 8f70b4
      AC_REQUIRE([gl_FUNC_LDEXP])
Packit 8f70b4
      LDEXPL_LIBM="$LDEXP_LIBM"
Packit 8f70b4
    else
Packit 8f70b4
      LDEXPL_LIBM="$ISNANL_LIBM"
Packit 8f70b4
    fi
Packit 8f70b4
  fi
Packit 8f70b4
  AC_SUBST([LDEXPL_LIBM])
Packit 8f70b4
])
Packit 8f70b4
Packit 8f70b4
dnl Test whether ldexpl() can be used without linking with libm.
Packit 8f70b4
dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly.
Packit 8f70b4
AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM],
Packit 8f70b4
[
Packit 8f70b4
  AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm],
Packit 8f70b4
    [gl_cv_func_ldexpl_no_libm],
Packit 8f70b4
    [
Packit 8f70b4
      AC_LINK_IFELSE(
Packit 8f70b4
        [AC_LANG_PROGRAM(
Packit 8f70b4
           [[#include <math.h>
Packit 8f70b4
             long double x;]],
Packit 8f70b4
           [[return ldexpl (x, -1) > 0;]])],
Packit 8f70b4
        [gl_cv_func_ldexpl_no_libm=yes],
Packit 8f70b4
        [gl_cv_func_ldexpl_no_libm=no])
Packit 8f70b4
    ])
Packit 8f70b4
])
Packit 8f70b4
Packit 8f70b4
dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1
Packit 8f70b4
dnl and Mac OS X 10.4/PowerPC).
Packit 8f70b4
AC_DEFUN([gl_FUNC_LDEXPL_WORKS],
Packit 8f70b4
[
Packit 8f70b4
  AC_REQUIRE([AC_PROG_CC])
Packit 8f70b4
  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
Packit 8f70b4
  AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works],
Packit 8f70b4
    [
Packit 8f70b4
      AC_RUN_IFELSE(
Packit 8f70b4
        [AC_LANG_SOURCE([[
Packit 8f70b4
#include <math.h>
Packit 8f70b4
extern
Packit 8f70b4
#ifdef __cplusplus
Packit 8f70b4
"C"
Packit 8f70b4
#endif
Packit 8f70b4
long double ldexpl (long double, int);
Packit 8f70b4
int main()
Packit 8f70b4
{
Packit 8f70b4
  int result = 0;
Packit 8f70b4
  {
Packit 8f70b4
    volatile long double x = 1.0;
Packit 8f70b4
    volatile long double y = ldexpl (x, -1);
Packit 8f70b4
    if (y != 0.5L)
Packit 8f70b4
      result |= 1;
Packit 8f70b4
  }
Packit 8f70b4
  {
Packit 8f70b4
    volatile long double x = 1.73205L;
Packit 8f70b4
    volatile long double y = ldexpl (x, 0);
Packit 8f70b4
    if (y != x)
Packit 8f70b4
      result |= 2;
Packit 8f70b4
  }
Packit 8f70b4
  return result;
Packit 8f70b4
}]])],
Packit 8f70b4
        [gl_cv_func_ldexpl_works=yes],
Packit 8f70b4
        [gl_cv_func_ldexpl_works=no],
Packit 8f70b4
        [
Packit 8f70b4
changequote(,)dnl
Packit 8f70b4
         case "$host_os" in
Packit 8f70b4
           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;;
Packit 8f70b4
                            # Guess yes on native Windows.
Packit 8f70b4
           mingw*)          gl_cv_func_ldexpl_works="guessing yes" ;;
Packit 8f70b4
           *)               gl_cv_func_ldexpl_works="guessing yes" ;;
Packit 8f70b4
         esac
Packit 8f70b4
changequote([,])dnl
Packit 8f70b4
        ])
Packit 8f70b4
    ])
Packit 8f70b4
])