1# log1pf.m4 serial 3 2dnl Copyright (C) 2012-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_LOG1PF], 8[ 9 m4_divert_text([DEFAULTS], [gl_log1pf_required=plain]) 10 AC_REQUIRE([gl_MATH_H_DEFAULTS]) 11 AC_REQUIRE([gl_FUNC_LOG1P]) 12 13 dnl Persuade glibc <math.h> to declare log1pf(). 14 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) 15 16 dnl Test whether log1pf() exists. Assume that log1pf(), if it exists, is 17 dnl defined in the same library as log1p(). 18 save_LIBS="$LIBS" 19 LIBS="$LIBS $LOG1P_LIBM" 20 AC_CHECK_FUNCS([log1pf]) 21 LIBS="$save_LIBS" 22 if test $ac_cv_func_log1pf = yes; then 23 LOG1PF_LIBM="$LOG1P_LIBM" 24 25 save_LIBS="$LIBS" 26 LIBS="$LIBS $LOG1PF_LIBM" 27 gl_FUNC_LOG1PF_WORKS 28 LIBS="$save_LIBS" 29 case "$gl_cv_func_log1pf_works" in 30 *yes) ;; 31 *) REPLACE_LOG1PF=1 ;; 32 esac 33 34 m4_ifdef([gl_FUNC_LOG1PF_IEEE], [ 35 if test $gl_log1pf_required = ieee && test $REPLACE_LOG1PF = 0; then 36 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 37 AC_CACHE_CHECK([whether log1pf works according to ISO C 99 with IEC 60559], 38 [gl_cv_func_log1pf_ieee], 39 [ 40 save_LIBS="$LIBS" 41 LIBS="$LIBS $LOG1PF_LIBM" 42 AC_RUN_IFELSE( 43 [AC_LANG_SOURCE([[ 44#ifndef __NO_MATH_INLINES 45# define __NO_MATH_INLINES 1 /* for glibc */ 46#endif 47#include <math.h> 48]gl_FLOAT_MINUS_ZERO_CODE[ 49]gl_FLOAT_SIGNBIT_CODE[ 50static float dummy (float x) { return 0; } 51int main (int argc, char *argv[]) 52{ 53 float (*my_log1pf) (float) = argc ? log1pf : dummy; 54 /* This test fails on OpenBSD 4.9, AIX 7.1. */ 55 float y = my_log1pf (minus_zerof); 56 if (!(y == 0.0f) || (signbitf (minus_zerof) && !signbitf (y))) 57 return 1; 58 return 0; 59} 60 ]])], 61 [gl_cv_func_log1pf_ieee=yes], 62 [gl_cv_func_log1pf_ieee=no], 63 [case "$host_os" in 64 # Guess yes on glibc systems. 65 *-gnu*) gl_cv_func_log1pf_ieee="guessing yes" ;; 66 # If we don't know, assume the worst. 67 *) gl_cv_func_log1pf_ieee="guessing no" ;; 68 esac 69 ]) 70 LIBS="$save_LIBS" 71 ]) 72 case "$gl_cv_func_log1pf_ieee" in 73 *yes) ;; 74 *) REPLACE_LOG1PF=1 ;; 75 esac 76 fi 77 ]) 78 else 79 HAVE_LOG1PF=0 80 fi 81 if test $HAVE_LOG1PF = 0 || test $REPLACE_LOG1PF = 1; then 82 dnl Find libraries needed to link lib/log1pf.c. 83 LOG1PF_LIBM="$LOG1P_LIBM" 84 fi 85 AC_SUBST([LOG1PF_LIBM]) 86]) 87 88dnl Test whether log1pf() works. 89dnl On IRIX 6.5, log1pf(-1.0f) returns +Infinity instead of -Infinity. 90AC_DEFUN([gl_FUNC_LOG1PF_WORKS], 91[ 92 AC_REQUIRE([AC_PROG_CC]) 93 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 94 AC_CACHE_CHECK([whether log1pf works], [gl_cv_func_log1pf_works], 95 [ 96 AC_RUN_IFELSE( 97 [AC_LANG_SOURCE([[ 98#include <math.h> 99volatile float x; 100float y; 101int main () 102{ 103 x = -1.0f; 104 y = log1pf (x); 105 if (!(y + y == y && y < 0.0f)) 106 return 1; 107 return 0; 108} 109]])], 110 [gl_cv_func_log1pf_works=yes], 111 [gl_cv_func_log1pf_works=no], 112 [case "$host_os" in 113 irix*) gl_cv_func_log1pf_works="guessing no";; 114 *) gl_cv_func_log1pf_works="guessing yes";; 115 esac 116 ]) 117 ]) 118]) 119