>From e5e007412f004532d3a6f4226b7aa69f9fc43410 Mon Sep 17 00:00:00 2001 From: "A. Gordon" Date: Wed, 16 Apr 2014 11:35:55 -0400 Subject: [PATCH] m4: tests for buggy expl() implementations On OpenBSD 5.4, expl() incorrectly returns 'nan' for small values. Detect this and use Gnulib's expl if needed. Discussed here: http://marc.info/?t=139159081700002&r=1&w=2 (Message from David Coppa on 2014-02-05 to openbsd-tech mailing list). Fixed here (in revision 1.2): http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libm/src/ld128/s_floorl.c --- m4/expl.m4 | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/m4/expl.m4 b/m4/expl.m4 index 247bc6e..1fa84cc 100644 --- a/m4/expl.m4 +++ b/m4/expl.m4 @@ -53,6 +53,35 @@ AC_DEFUN([gl_FUNC_EXPL], EXPL_LIBM=-lm fi fi + dnl On OpenBSD5.4 the system's native expl() is buggy: + dnl it returns 'nan' for small values. Tests for this anomaly. + if test $gl_cv_func_expl_no_libm = yes \ + || test $gl_cv_func_expl_in_libm = yes; then + AC_CACHE_CHECK([checks whether expl is buggy], + [gl_cv_func_expl_buggy], + [ + save_LIBS="$LIBS" + LIBS="$EXPL_LIBM" + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include +]], [[return isnan(expl(-1.0))|| + isnan(expl(-0.8))|| + isnan(expl(-0.4)); ]])], + [gl_cv_func_func_expl_buggy=no], [gl_cv_func_expl_buggy=yes], + [case $host_os in + mingw*) gl_cv_func_expl_buggy="guessing no";; + *) gl_cv_func_expl_buggy="guessing yes";; + esac]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_expl_buggy = yes; then + dnl TODO: Use gnulib's expl instead of the system's expl + AC_MSG_NOTICE([Detected buggy expl(), using gnulib's implementation]) + gl_cv_func_expl_in_libm=no + gl_cv_func_expl_no_libm=no + fi + fi if test $gl_cv_func_expl_no_libm = yes \ || test $gl_cv_func_expl_in_libm = yes; then dnl Also check whether it's declared. -- 1.9.1