1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-20 11:01:20 +03:00

round: Don't override undeclared system function on IRIX 6.5.

* m4/check-math-lib.m4 (gl_CHECK_MATH_LIB): Accept an optional third
argument.
* m4/round.m4 (gl_FUNC_ROUND): Search for round() in the libraries
also when it is not declared. Set HAVE_ROUND. For replacement code,
test HAVE_ROUND, not HAVE_DECL_ROUND.
* modules/round (configure.ac): For replacement code, test HAVE_ROUND,
not HAVE_DECL_ROUND.
(Depends-on): Update conditions.
* modules/round-ieee (Depends-on): Update conditions.
* doc/posix-functions/round.texi: Mention the IRIX problem.
This commit is contained in:
Bruno Haible
2012-03-08 01:26:03 +01:00
parent 0d9ccdd3fa
commit c0ea2abaac
6 changed files with 71 additions and 37 deletions

View File

@@ -1,3 +1,17 @@
2012-03-07 Bruno Haible <bruno@clisp.org>
round: Don't override undeclared system function on IRIX 6.5.
* m4/check-math-lib.m4 (gl_CHECK_MATH_LIB): Accept an optional third
argument.
* m4/round.m4 (gl_FUNC_ROUND): Search for round() in the libraries
also when it is not declared. Set HAVE_ROUND. For replacement code,
test HAVE_ROUND, not HAVE_DECL_ROUND.
* modules/round (configure.ac): For replacement code, test HAVE_ROUND,
not HAVE_DECL_ROUND.
(Depends-on): Update conditions.
* modules/round-ieee (Depends-on): Update conditions.
* doc/posix-functions/round.texi: Mention the IRIX problem.
2012-03-07 Bruno Haible <bruno@clisp.org> 2012-03-07 Bruno Haible <bruno@clisp.org>
copysignf: Don't override undeclared system function on IRIX 6.5. copysignf: Don't override undeclared system function on IRIX 6.5.

View File

@@ -10,10 +10,10 @@ Portability problems fixed by either Gnulib module @code{round} or @code{round-i
@itemize @itemize
@item @item
This function is missing on some platforms: This function is missing on some platforms:
FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, older IRIX 6.5, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5.
@item @item
This function is not declared on some platforms: 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.
@item @item
This functions returns a wrong result for x = 1/2 - 2^-54 on some platforms: This functions returns a wrong result for x = 1/2 - 2^-54 on some platforms:
NetBSD 3.0, AIX 7.1. NetBSD 3.0, AIX 7.1.

View File

@@ -1,10 +1,10 @@
# check-math-lib.m4 serial 3 # check-math-lib.m4 serial 4
dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc. dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved. dnl with or without modifications, as long as this notice is preserved.
dnl dnl
dnl gl_CHECK_MATH_LIB (VARIABLE, EXPRESSION) dnl gl_CHECK_MATH_LIB (VARIABLE, EXPRESSION [, EXTRA-CODE])
dnl dnl
dnl Sets the shell VARIABLE according to the libraries needed by EXPRESSION dnl Sets the shell VARIABLE according to the libraries needed by EXPRESSION
dnl to compile and link: to the empty string if no extra libraries are needed, dnl to compile and link: to the empty string if no extra libraries are needed,
@@ -22,6 +22,7 @@ AC_DEFUN([gl_CHECK_MATH_LIB], [
# define __NO_MATH_INLINES 1 /* for glibc */ # define __NO_MATH_INLINES 1 /* for glibc */
#endif #endif
#include <math.h> #include <math.h>
$3
double x;]], double x;]],
[$2])], [$2])],
[$1=$libm [$1=$libm

View File

@@ -1,4 +1,4 @@
# round.m4 serial 14 # round.m4 serial 15
dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc. dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
@@ -8,12 +8,23 @@ AC_DEFUN([gl_FUNC_ROUND],
[ [
m4_divert_text([DEFAULTS], [gl_round_required=plain]) m4_divert_text([DEFAULTS], [gl_round_required=plain])
AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_MATH_H_DEFAULTS])
dnl Persuade glibc <math.h> to declare round(). dnl Persuade glibc <math.h> to declare round().
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
AC_CHECK_DECLS([round], , , [[#include <math.h>]])
if test "$ac_cv_have_decl_round" = yes; then gl_CHECK_MATH_LIB([ROUND_LIBM], [x = round (x);],
gl_CHECK_MATH_LIB([ROUND_LIBM], [x = round (x);]) [extern
#ifdef __cplusplus
"C"
#endif
double round (double);
])
if test "$ROUND_LIBM" != missing; then if test "$ROUND_LIBM" != missing; then
HAVE_ROUND=1
dnl Also check whether it's declared.
dnl IRIX 6.5 has round() in libm but doesn't declare it in <math.h>.
AC_CHECK_DECLS([round], , [HAVE_DECL_ROUND=0], [[#include <math.h>]])
dnl Test whether round() produces correct results. On NetBSD 3.0, for dnl Test whether round() produces correct results. On NetBSD 3.0, for
dnl x = 1/2 - 2^-54, the system's round() returns a wrong result. dnl x = 1/2 - 2^-54, the system's round() returns a wrong result.
AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PROG_CC])
@@ -25,6 +36,11 @@ AC_DEFUN([gl_FUNC_ROUND],
AC_RUN_IFELSE([AC_LANG_SOURCE([[ AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <float.h> #include <float.h>
#include <math.h> #include <math.h>
extern
#ifdef __cplusplus
"C"
#endif
double round (double);
#ifdef _MSC_VER #ifdef _MSC_VER
# pragma fenv_access (off) # pragma fenv_access (off)
#endif #endif
@@ -51,12 +67,9 @@ int main()
LIBS="$save_LIBS" LIBS="$save_LIBS"
]) ])
case "$gl_cv_func_round_works" in case "$gl_cv_func_round_works" in
*no) ROUND_LIBM=missing ;; *no) REPLACE_ROUND=1 ;;
esac esac
fi
if test "$ROUND_LIBM" = missing; then
REPLACE_ROUND=1
fi
m4_ifdef([gl_FUNC_ROUND_IEEE], [ m4_ifdef([gl_FUNC_ROUND_IEEE], [
if test $gl_round_required = ieee && test $REPLACE_ROUND = 0; then if test $gl_round_required = ieee && test $REPLACE_ROUND = 0; then
AC_CACHE_CHECK([whether round works according to ISO C 99 with IEC 60559], AC_CACHE_CHECK([whether round works according to ISO C 99 with IEC 60559],
@@ -70,6 +83,11 @@ int main()
# define __NO_MATH_INLINES 1 /* for glibc */ # define __NO_MATH_INLINES 1 /* for glibc */
#endif #endif
#include <math.h> #include <math.h>
extern
#ifdef __cplusplus
"C"
#endif
double round (double);
]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_MINUS_ZERO_CODE[
]gl_DOUBLE_SIGNBIT_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[
static double dummy (double f) { return 0; } static double dummy (double f) { return 0; }
@@ -94,9 +112,10 @@ int main (int argc, char *argv[])
fi fi
]) ])
else else
HAVE_ROUND=0
HAVE_DECL_ROUND=0 HAVE_DECL_ROUND=0
fi fi
if test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1; then if test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1; then
dnl Find libraries needed to link lib/round.c. dnl Find libraries needed to link lib/round.c.
gl_FUNC_FLOOR_LIBS gl_FUNC_FLOOR_LIBS
gl_FUNC_CEIL_LIBS gl_FUNC_CEIL_LIBS

View File

@@ -11,12 +11,12 @@ m4/ceil.m4
Depends-on: Depends-on:
math math
extensions extensions
float [test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] float [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1]
floor [test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] floor [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1]
configure.ac: configure.ac:
gl_FUNC_ROUND gl_FUNC_ROUND
if test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1; then if test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1; then
AC_LIBOBJ([round]) AC_LIBOBJ([round])
fi fi
gl_MATH_MODULE_INDICATOR([round]) gl_MATH_MODULE_INDICATOR([round])

View File

@@ -8,8 +8,8 @@ m4/signbit.m4
Depends-on: Depends-on:
round round
floor-ieee [test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] floor-ieee [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1]
ceil-ieee [test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] ceil-ieee [test $HAVE_ROUND = 0 || test $REPLACE_ROUND = 1]
configure.ac: configure.ac:
gl_FUNC_ROUND_IEEE gl_FUNC_ROUND_IEEE