summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2019-02-01 04:34:37 +0100
committerBruno Haible <bruno@clisp.org>2019-02-02 02:03:02 +0100
commitb39cc72608e7ae56e959e2f12f7c8b355e63a35a (patch)
treeaed76819cdea1a2424963b0a9d251053d0983583 /m4
parent97e23d40a659c85048b59852e1871823f727aeb2 (diff)
downloadgnulib-b39cc72608e7ae56e959e2f12f7c8b355e63a35a.tar.gz
c-strtod, c-strtold: Use the bug fixes for strtod, strtold.
* lib/stdlib.in.h (GNULIB_defined_strtod_function, GNULIB_defined_strtold_function): New macros. * lib/c-strtod.c (HAVE_GOOD_STRTOD_L): New macro. (STRTOD): Ignore HAVE_C99_STRTOLD. (c_locale): Don't define it on platforms where strtod_l/strtold_l is deemed buggy. But do use it on platforms where uselocale exists and is usable. (C_STRTOD): Don't use STRTOD_L on platforms where strtod_l/strtold_l is deemed buggy. On platforms where uselocale exists and is usable, use uselocale and strtod/strtold. * m4/c-strtod.m4 (gl_C99_STRTOLD): Remove macro. (gl_C_STRTOD): Require gt_FUNC_USELOCALE. (gl_C_STRTOLD): Likewise. Define HAVE_C99_STRTOLD unconditionally. * modules/c-strtod (Files): Add m4/intl-thread-locale.m4. (Depends-on): Add strtod. * modules/c-strtold (Files): Add m4/intl-thread-locale.m4. (Depends-on): Add strtold.
Diffstat (limited to 'm4')
-rw-r--r--m4/c-strtod.m433
1 files changed, 5 insertions, 28 deletions
diff --git a/m4/c-strtod.m4 b/m4/c-strtod.m4
index 1694a2396c..1d4b7f860c 100644
--- a/m4/c-strtod.m4
+++ b/m4/c-strtod.m4
@@ -1,4 +1,4 @@
-# c-strtod.m4 serial 16
+# c-strtod.m4 serial 17
# Copyright (C) 2004-2006, 2009-2019 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
@@ -7,36 +7,11 @@
# Written by Paul Eggert.
-AC_DEFUN([gl_C99_STRTOLD],
-[
- AC_CACHE_CHECK([whether strtold conforms to C99],
- [gl_cv_func_c99_strtold],
- [AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[/* On HP-UX before 11.23, strtold returns a struct instead of
- long double. Reject implementations like that, by requiring
- compatibility with the C99 prototype. */
- #include <stdlib.h>
- static long double (*p) (char const *, char **) = strtold;
- static long double
- test (char const *nptr, char **endptr)
- {
- long double r;
- r = strtold (nptr, endptr);
- return r;
- }]],
- [[return test ("1.0", NULL) != 1 || p ("1.0", NULL) != 1;]])],
- [gl_cv_func_c99_strtold=yes],
- [gl_cv_func_c99_strtold=no])])
- if test $gl_cv_func_c99_strtold = yes; then
- AC_DEFINE([HAVE_C99_STRTOLD], [1], [Define to 1 if strtold conforms to C99.])
- fi
-])
-
dnl Prerequisites of lib/c-strtod.c.
AC_DEFUN([gl_C_STRTOD],
[
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([gt_FUNC_USELOCALE])
AC_CHECK_HEADERS_ONCE([xlocale.h])
dnl We can't use AC_CHECK_FUNC here, because strtod_l() is defined as a
@@ -71,6 +46,8 @@ dnl Prerequisites of lib/c-strtold.c.
AC_DEFUN([gl_C_STRTOLD],
[
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
- AC_REQUIRE([gl_C99_STRTOLD])
+ AC_REQUIRE([gt_FUNC_USELOCALE])
+ AC_DEFINE([HAVE_C99_STRTOLD], [1],
+ [Define to 1 because the gnulib 'strtold' module provides a C99-conforming strtold function.])
AC_CHECK_FUNCS([strtold_l])
])