+2011-06-08 Bruno Haible <bruno@clisp.org>
+
+ strerror_r-posix: Tweaks.
+ * m4/strerror.m4 (gl_FUNC_STRERROR): Omit the code that tests
+ gl_cv_func_strerror_r_works if gl_FUNC_STRERROR_R_WORKS is not present.
+ * m4/strerror_r.m4 (gl_FUNC_STRERROR_R_WORKS): Fix AC_CACHE_CHECK
+ message. Move gl_HEADER_STRING_H_DEFAULTS invocation from here...
+ (gl_FUNC_STRERROR_R): ... to here.
+ (gl_PREREQ_STRERROR_R): Test for __xpg_strerror_r.
+
2011-06-07 Eric Blake <eblake@redhat.com>
perror: document fixed bugs
dnl integers. Replace it.
REPLACE_STRERROR=1
fi
- dnl If the system's strerror_r clobbers strerror, we must replace strerror.
- case $gl_cv_func_strerror_r_works in
- *no) REPLACE_STRERROR=1 ;;
- esac
+ m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
+ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's
+ dnl buffer, we must replace strerror.
+ case "$gl_cv_func_strerror_r_works" in
+ *no) REPLACE_STRERROR=1 ;;
+ esac
+ ])
else
dnl The system's strerror() cannot know about the new errno values we add
dnl to <errno.h>. Replace it.
AC_DEFUN([gl_FUNC_STRERROR_R],
[
+ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
dnl Persuade Solaris <string.h> to declare strerror_r().
*no) REPLACE_STRERROR_R=1 ;;
esac
else
- dnl The system's strerror() has a wrong signature. Replace it.
+ dnl The system's strerror_r() has a wrong signature. Replace it.
REPLACE_STRERROR_R=1
fi
else
# Prerequisites of lib/strerror_r.c.
AC_DEFUN([gl_PREREQ_STRERROR_R], [
+ dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
+ AC_CHECK_FUNCS([__xpg_strerror_r])
AC_CHECK_FUNCS_ONCE([catgets])
- :
])
# Detect if strerror_r works, but without affecting whether a replacement
# strerror_r will be used.
AC_DEFUN([gl_FUNC_STRERROR_R_WORKS],
[
- AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
AC_REQUIRE([gl_HEADER_ERRNO_H])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
dnl The system's strerror() has a wrong signature.
dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
AC_CHECK_FUNCS([__xpg_strerror_r])
- dnl glibc < 2.14 does not populate buf on failure
- dnl cygwin < 1.7.10 clobbers strerror
+ dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure.
+ dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer.
if test $ac_cv_func___xpg_strerror_r = yes; then
- AC_CACHE_CHECK([whether strerror_r works],
+ AC_CACHE_CHECK([whether __xpg_strerror_r works],
[gl_cv_func_strerror_r_works],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
]])],
[gl_cv_func_strerror_r_works=yes],
[gl_cv_func_strerror_r_works=no],
- [dnl guess no on all platforms that have __xpg_strerror_r,
- dnl at least until fixed glibc and cygwin are more common
+ [dnl Guess no on all platforms that have __xpg_strerror_r,
+ dnl at least until fixed glibc and cygwin are more common.
gl_cv_func_strerror_r_works="guessing no"
])
])