1# exp2l.m4 serial 3 2dnl Copyright (C) 2010-2014 Free Software Foundation, Inc. 3dnl This file is free software; the Free Software Foundation 4dnl gives unlimited permission to copy and/or distribute it, 5dnl with or without modifications, as long as this notice is preserved. 6 7AC_DEFUN([gl_FUNC_EXP2L], 8[ 9 m4_divert_text([DEFAULTS], [gl_exp2l_required=plain]) 10 AC_REQUIRE([gl_MATH_H_DEFAULTS]) 11 AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) 12 AC_REQUIRE([gl_FUNC_EXP2]) 13 14 dnl Persuade glibc <math.h> to declare exp2l(). 15 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) 16 17 dnl Test whether exp2l() exists. Assume that exp2l(), if it exists, is 18 dnl defined in the same library as exp2(). 19 save_LIBS="$LIBS" 20 LIBS="$LIBS $EXP2_LIBM" 21 AC_CHECK_FUNCS([exp2l]) 22 LIBS="$save_LIBS" 23 if test $ac_cv_func_exp2l = yes; then 24 HAVE_EXP2L=1 25 EXP2L_LIBM="$EXP2_LIBM" 26 dnl Also check whether it's declared. 27 dnl IRIX 6.5 has exp2l() in libm but doesn't declare it in <math.h>. 28 AC_CHECK_DECL([exp2l], , [HAVE_DECL_EXP2L=0], [[#include <math.h>]]) 29 m4_ifdef([gl_FUNC_EXP2L_IEEE], [ 30 if test $gl_exp2l_required = ieee && test $REPLACE_EXP2L = 0; then 31 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 32 AC_CACHE_CHECK([whether exp2l works according to ISO C 99 with IEC 60559], 33 [gl_cv_func_exp2l_ieee], 34 [ 35 save_LIBS="$LIBS" 36 LIBS="$LIBS $EXP2L_LIBM" 37 AC_RUN_IFELSE( 38 [AC_LANG_SOURCE([[ 39#ifndef __NO_MATH_INLINES 40# define __NO_MATH_INLINES 1 /* for glibc */ 41#endif 42#include <math.h> 43#undef exp2l 44extern 45#ifdef __cplusplus 46"C" 47#endif 48long double exp2l (long double); 49static long double dummy (long double x) { return 0; } 50static long double zero; 51int main (int argc, char *argv[]) 52{ 53 long double (*my_exp2l) (long double) = argc ? exp2l : dummy; 54 int result = 0; 55 /* This test fails on OpenBSD 4.9, where exp2l(NaN) = 0.0. */ 56 if (exp2l (zero / zero) == 0.0L) 57 result |= 1; 58 /* This test fails on IRIX 6.5, where exp2l(-Inf) = 1.0. */ 59 if (!(exp2l (-1.0L / zero) == 0.0L)) 60 result |= 2; 61 return result; 62} 63 ]])], 64 [gl_cv_func_exp2l_ieee=yes], 65 [gl_cv_func_exp2l_ieee=no], 66 [case "$host_os" in 67 # Guess yes on glibc systems. 68 *-gnu*) gl_cv_func_exp2l_ieee="guessing yes" ;; 69 # If we don't know, assume the worst. 70 *) gl_cv_func_exp2l_ieee="guessing no" ;; 71 esac 72 ]) 73 LIBS="$save_LIBS" 74 ]) 75 case "$gl_cv_func_exp2l_ieee" in 76 *yes) ;; 77 *) REPLACE_EXP2L=1 ;; 78 esac 79 fi 80 ]) 81 else 82 HAVE_EXP2L=0 83 HAVE_DECL_EXP2L=0 84 fi 85 if test $HAVE_EXP2L = 0 || test $REPLACE_EXP2L = 1; then 86 dnl Find libraries needed to link lib/exp2l.c. 87 if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then 88 EXP2L_LIBM="$EXP2_LIBM" 89 else 90 AC_REQUIRE([gl_FUNC_ISNANL]) 91 AC_REQUIRE([gl_FUNC_ROUNDL]) 92 AC_REQUIRE([gl_FUNC_LDEXPL]) 93 EXP2L_LIBM= 94 dnl Append $ISNANL_LIBM to EXP2L_LIBM, avoiding gratuitous duplicates. 95 case " $EXP2L_LIBM " in 96 *" $ISNANL_LIBM "*) ;; 97 *) EXP2L_LIBM="$EXP2L_LIBM $ISNANL_LIBM" ;; 98 esac 99 dnl Append $ROUNDL_LIBM to EXP2L_LIBM, avoiding gratuitous duplicates. 100 case " $EXP2L_LIBM " in 101 *" $ROUNDL_LIBM "*) ;; 102 *) EXP2L_LIBM="$EXP2L_LIBM $ROUNDL_LIBM" ;; 103 esac 104 dnl Append $LDEXPL_LIBM to EXP2L_LIBM, avoiding gratuitous duplicates. 105 case " $EXP2L_LIBM " in 106 *" $LDEXPL_LIBM "*) ;; 107 *) EXP2L_LIBM="$EXP2L_LIBM $LDEXPL_LIBM" ;; 108 esac 109 fi 110 fi 111 AC_SUBST([EXP2L_LIBM]) 112]) 113