2
dnl Copyright (C) 2002, 2007, 2008, 2009 Free Software Foundation, Inc.
1
# strerror.m4 serial 16
2
dnl Copyright (C) 2002, 2007-2011 Free Software Foundation, Inc.
3
3
dnl This file is free software; the Free Software Foundation
4
4
dnl gives unlimited permission to copy and/or distribute it,
5
5
dnl with or without modifications, as long as this notice is preserved.
7
7
AC_DEFUN([gl_FUNC_STRERROR],
9
AC_REQUIRE([gl_FUNC_STRERROR_SEPARATE])
10
if test $REPLACE_STRERROR = 1; then
12
AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR],
13
[Define this to 1 if strerror is broken.])
17
# Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ).
18
AC_DEFUN([gl_FUNC_STRERROR_SEPARATE],
20
9
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
21
10
AC_REQUIRE([gl_HEADER_ERRNO_H])
22
if test -z "$ERRNO_H"; then
11
AC_REQUIRE([gl_FUNC_STRERROR_0])
12
m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
13
AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
15
if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
23
16
AC_CACHE_CHECK([for working strerror function],
24
17
[gl_cv_func_working_strerror],
27
20
[[#include <string.h>
29
[[return !*strerror (-2);]])],
22
[[if (!*strerror (-2)) return 1;]])],
30
23
[gl_cv_func_working_strerror=yes],
31
24
[gl_cv_func_working_strerror=no],
32
[dnl Assume crossbuild works if it compiles.
37
[[return !*strerror (-2);]])],
38
[gl_cv_func_working_strerror=yes],
39
[gl_cv_func_working_strerror=no])
25
[dnl Be pessimistic on cross-compiles for now.
26
gl_cv_func_working_strerror="guessing no"])
42
if test $gl_cv_func_working_strerror = no; then
28
if test "$gl_cv_func_working_strerror" != yes; then
43
29
dnl The system's strerror() fails to return a string for out-of-range
44
30
dnl integers. Replace it.
33
m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
34
dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's
35
dnl buffer, we must replace strerror.
36
case "$gl_cv_func_strerror_r_works" in
37
*no) REPLACE_STRERROR=1 ;;
48
41
dnl The system's strerror() cannot know about the new errno values we add
49
dnl to <errno.h>. Replace it.
42
dnl to <errno.h>, or any fix for strerror(0). Replace it.
52
if test $REPLACE_STRERROR = 1; then
57
# Prerequisites of lib/strerror.c.
58
AC_DEFUN([gl_PREREQ_STRERROR], [
59
AC_CHECK_DECLS([strerror])
60
AC_CHECK_HEADERS_ONCE([sys/socket.h])
61
if test $ac_cv_header_sys_socket_h != yes; then
62
dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
63
dnl the check for those headers unconditional; yet cygwin reports
64
dnl that the headers are present but cannot be compiled (since on
65
dnl cygwin, all socket information should come from sys/socket.h).
66
AC_CHECK_HEADERS([winsock2.h])
47
dnl Detect if strerror(0) passes (that is, does not set errno, and does not
48
dnl return a string that matches strerror(-1)).
49
AC_DEFUN([gl_FUNC_STRERROR_0],
52
AC_CACHE_CHECK([whether strerror(0) succeeds],
53
[gl_cv_func_strerror_0_works],
63
if (!*str) result |= 1;
64
if (errno) result |= 2;
65
if (strstr (str, "nknown") || strstr (str, "ndefined"))
68
[gl_cv_func_strerror_0_works=yes],
69
[gl_cv_func_strerror_0_works=no],
70
[dnl Be pessimistic on cross-compiles for now.
71
gl_cv_func_strerror_0_works="guessing no"])
73
if test "$gl_cv_func_strerror_0_works" != yes; then
75
AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0)
76
does not return a message implying success.])