File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srcm4 / strerror.m4
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 13:38:46 2021 UTC (3 years, 3 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_16p0, HEAD
libiconv 1.16

    1: # strerror.m4 serial 20
    2: dnl Copyright (C) 2002, 2007-2019 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_HEADER_STRING_H_DEFAULTS])
   10:   AC_REQUIRE([gl_HEADER_ERRNO_H])
   11:   AC_REQUIRE([gl_FUNC_STRERROR_0])
   12:   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   13:   m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
   14:     AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
   15:   ])
   16:   if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then
   17:     AC_CACHE_CHECK([for working strerror function],
   18:      [gl_cv_func_working_strerror],
   19:      [AC_RUN_IFELSE(
   20:         [AC_LANG_PROGRAM(
   21:            [[#include <string.h>
   22:            ]],
   23:            [[if (!*strerror (-2)) return 1;]])],
   24:         [gl_cv_func_working_strerror=yes],
   25:         [gl_cv_func_working_strerror=no],
   26:         [case "$host_os" in
   27:                           # Guess yes on glibc systems.
   28:            *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;;
   29:                           # Guess yes on musl systems.
   30:            *-musl*)       gl_cv_func_working_strerror="guessing yes" ;;
   31:                           # If we don't know, assume the worst.
   32:            *)             gl_cv_func_working_strerror="guessing no" ;;
   33:          esac
   34:         ])
   35:     ])
   36:     case "$gl_cv_func_working_strerror" in
   37:       *yes) ;;
   38:       *)
   39:         dnl The system's strerror() fails to return a string for out-of-range
   40:         dnl integers. Replace it.
   41:         REPLACE_STRERROR=1
   42:         ;;
   43:     esac
   44:     m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
   45:       dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's
   46:       dnl buffer, we must replace strerror.
   47:       case "$gl_cv_func_strerror_r_works" in
   48:         *no) REPLACE_STRERROR=1 ;;
   49:       esac
   50:     ])
   51:   else
   52:     dnl The system's strerror() cannot know about the new errno values we add
   53:     dnl to <errno.h>, or any fix for strerror(0). Replace it.
   54:     REPLACE_STRERROR=1
   55:   fi
   56: ])
   57: 
   58: dnl Detect if strerror(0) passes (that is, does not set errno, and does not
   59: dnl return a string that matches strerror(-1)).
   60: AC_DEFUN([gl_FUNC_STRERROR_0],
   61: [
   62:   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   63:   REPLACE_STRERROR_0=0
   64:   AC_CACHE_CHECK([whether strerror(0) succeeds],
   65:    [gl_cv_func_strerror_0_works],
   66:    [AC_RUN_IFELSE(
   67:       [AC_LANG_PROGRAM(
   68:          [[#include <string.h>
   69:            #include <errno.h>
   70:          ]],
   71:          [[int result = 0;
   72:            char *str;
   73:            errno = 0;
   74:            str = strerror (0);
   75:            if (!*str) result |= 1;
   76:            if (errno) result |= 2;
   77:            if (strstr (str, "nknown") || strstr (str, "ndefined"))
   78:              result |= 4;
   79:            return result;]])],
   80:       [gl_cv_func_strerror_0_works=yes],
   81:       [gl_cv_func_strerror_0_works=no],
   82:       [case "$host_os" in
   83:                         # Guess yes on glibc systems.
   84:          *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
   85:                         # Guess yes on musl systems.
   86:          *-musl*)       gl_cv_func_strerror_0_works="guessing yes" ;;
   87:                         # Guess yes on native Windows.
   88:          mingw*)        gl_cv_func_strerror_0_works="guessing yes" ;;
   89:                         # If we don't know, assume the worst.
   90:          *)             gl_cv_func_strerror_0_works="guessing no" ;;
   91:        esac
   92:       ])
   93:   ])
   94:   case "$gl_cv_func_strerror_0_works" in
   95:     *yes) ;;
   96:     *)
   97:       REPLACE_STRERROR_0=1
   98:       AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0)
   99:         does not return a message implying success.])
  100:       ;;
  101:   esac
  102: ])

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>