From 76db5ae75eab1d97d66e6133532ea406c281fb4a Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 8 Mar 2012 02:06:10 +0100 Subject: [PATCH] roundl: Don't override undeclared system function on IRIX 6.5. * m4/roundl.m4 (gl_FUNC_ROUNDL): Search for roundl() in the libraries also when it is not declared. Set HAVE_ROUNDL. For replacement code, test HAVE_ROUNDL, not HAVE_DECL_ROUNDL. * modules/roundl (configure.ac): For replacement code, test HAVE_ROUNDL, not HAVE_DECL_ROUNDL. (Depends-on): Update conditions. * doc/posix-functions/roundl.texi: Mention the IRIX problem. --- ChangeLog | 11 +++++++++++ doc/posix-functions/roundl.texi | 4 ++-- m4/roundl.m4 | 29 +++++++++++++++++++++-------- modules/roundl | 6 +++--- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 86a061583b..0a4daf2092 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2012-03-07 Bruno Haible + + roundl: Don't override undeclared system function on IRIX 6.5. + * m4/roundl.m4 (gl_FUNC_ROUNDL): Search for roundl() in the libraries + also when it is not declared. Set HAVE_ROUNDL. For replacement code, + test HAVE_ROUNDL, not HAVE_DECL_ROUNDL. + * modules/roundl (configure.ac): For replacement code, test + HAVE_ROUNDL, not HAVE_DECL_ROUNDL. + (Depends-on): Update conditions. + * doc/posix-functions/roundl.texi: Mention the IRIX problem. + 2012-03-07 Bruno Haible roundf: Don't override undeclared system function on IRIX 6.5. diff --git a/doc/posix-functions/roundl.texi b/doc/posix-functions/roundl.texi index 9ce84d050f..f420c47edf 100644 --- a/doc/posix-functions/roundl.texi +++ b/doc/posix-functions/roundl.texi @@ -10,10 +10,10 @@ Portability problems fixed by either Gnulib module @code{roundl} or @code{roundl @itemize @item This function is missing on some platforms: -FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. +FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @item This function is not declared on some platforms: -glibc 2.8, OSF/1 5.1. +glibc 2.8, IRIX 6.5, OSF/1 5.1. @end itemize Portability problems fixed by Gnulib module @code{roundl-ieee}: diff --git a/m4/roundl.m4 b/m4/roundl.m4 index eca8f234fb..a48f878d3e 100644 --- a/m4/roundl.m4 +++ b/m4/roundl.m4 @@ -1,4 +1,4 @@ -# roundl.m4 serial 13 +# roundl.m4 serial 14 dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -13,12 +13,19 @@ AC_DEFUN([gl_FUNC_ROUNDL], dnl Persuade glibc to declare roundl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_CHECK_DECLS([roundl], , , [[#include ]]) - if test "$ac_cv_have_decl_roundl" = yes; then - gl_CHECK_MATH_LIB([ROUNDL_LIBM], [x = roundl (x);]) - if test "$ROUNDL_LIBM" = missing; then - REPLACE_ROUNDL=1 - fi + gl_CHECK_MATH_LIB([ROUNDL_LIBM], [x = roundl (x);], + [extern + #ifdef __cplusplus + "C" + #endif + long double roundl (long double); + ]) + if test "$ROUNDL_LIBM" != missing; then + HAVE_ROUNDL=1 + dnl Also check whether it's declared. + dnl IRIX 6.5 has roundl() in libm but doesn't declare it in . + AC_CHECK_DECLS([roundl], , [HAVE_DECL_ROUNDL=0], [[#include ]]) + m4_ifdef([gl_FUNC_ROUNDL_IEEE], [ if test $gl_roundl_required = ieee && test $REPLACE_ROUNDL = 0; then AC_CACHE_CHECK([whether roundl works according to ISO C 99 with IEC 60559], @@ -32,6 +39,11 @@ AC_DEFUN([gl_FUNC_ROUNDL], # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include +extern +#ifdef __cplusplus +"C" +#endif +long double roundl (long double); ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[ ]gl_LONG_DOUBLE_SIGNBIT_CODE[ static long double dummy (long double f) { return 0; } @@ -60,9 +72,10 @@ int main (int argc, char *argv[]) fi ]) else + HAVE_ROUNDL=0 HAVE_DECL_ROUNDL=0 fi - if test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then + if test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then dnl Find libraries needed to link lib/roundl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_ROUND]) diff --git a/modules/roundl b/modules/roundl index 3b5c962889..22486ab779 100644 --- a/modules/roundl +++ b/modules/roundl @@ -12,12 +12,12 @@ m4/ceill.m4 Depends-on: math extensions -round [{ test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] -float [{ test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] +round [{ test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] +float [{ test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_ROUNDL -if test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then +if test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then AC_LIBOBJ([roundl]) fi gl_MATH_MODULE_INDICATOR([roundl]) -- 2.39.5