Home | History | Annotate | Download | only in m4
      1 # strerror.m4 serial 9
      2 dnl Copyright (C) 2002, 2007-2008 Free Software Foundation, Inc.
      3 dnl This file is free software; the Free Software Foundation
      4 dnl gives unlimited permission to copy and/or distribute it,
      5 dnl with or without modifications, as long as this notice is preserved.
      6 
      7 AC_DEFUN([gl_FUNC_STRERROR],
      8 [
      9   AC_REQUIRE([gl_FUNC_STRERROR_SEPARATE])
     10   if test $REPLACE_STRERROR = 1; then
     11     AC_LIBOBJ([strerror])
     12     AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR],
     13       [Define this to 1 if strerror is broken.])
     14   fi
     15 ])
     16 
     17 # Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ).
     18 AC_DEFUN([gl_FUNC_STRERROR_SEPARATE],
     19 [
     20   AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
     21   AC_REQUIRE([gl_HEADER_ERRNO_H])
     22   if test -z "$ERRNO_H"; then
     23     AC_CACHE_CHECK([for working strerror function],
     24      [gl_cv_func_working_strerror],
     25      [AC_RUN_IFELSE(
     26         [AC_LANG_PROGRAM(
     27            [[#include <string.h>
     28            ]],
     29            [[return !*strerror (-2);]])],
     30         [gl_cv_func_working_strerror=yes],
     31         [gl_cv_func_working_strerror=no],
     32         [dnl Assume crossbuild works if it compiles.
     33          AC_COMPILE_IFELSE(
     34            [AC_LANG_PROGRAM(
     35               [[#include <string.h>
     36               ]],
     37               [[return !*strerror (-2);]])],
     38            [gl_cv_func_working_strerror=yes],
     39            [gl_cv_func_working_strerror=no])
     40       ])
     41     ])
     42     if test $gl_cv_func_working_strerror = no; then
     43       dnl The system's strerror() fails to return a string for out-of-range
     44       dnl integers. Replace it.
     45       REPLACE_STRERROR=1
     46     fi
     47   else
     48     dnl The system's strerror() cannot know about the new errno values we add
     49     dnl to <errno.h>. Replace it.
     50     REPLACE_STRERROR=1
     51   fi
     52   if test $REPLACE_STRERROR = 1; then
     53     gl_PREREQ_STRERROR
     54   fi
     55 ])
     56 
     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])
     67   fi
     68 ])
     69