Annotation of embedaddon/libiconv/srcm4/strerror.m4, revision 1.1.1.3

1.1.1.3 ! misho       1: # strerror.m4 serial 20
        !             2: dnl Copyright (C) 2002, 2007-2019 Free Software Foundation, Inc.
1.1       misho       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])
1.1.1.2   misho      11:   AC_REQUIRE([gl_FUNC_STRERROR_0])
1.1.1.3 ! misho      12:   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
1.1.1.2   misho      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
1.1       misho      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:            ]],
1.1.1.2   misho      23:            [[if (!*strerror (-2)) return 1;]])],
1.1       misho      24:         [gl_cv_func_working_strerror=yes],
                     25:         [gl_cv_func_working_strerror=no],
1.1.1.3 ! misho      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:         ])
1.1       misho      35:     ])
1.1.1.3 ! misho      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
1.1.1.2   misho      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:     ])
1.1       misho      51:   else
                     52:     dnl The system's strerror() cannot know about the new errno values we add
1.1.1.2   misho      53:     dnl to <errno.h>, or any fix for strerror(0). Replace it.
1.1       misho      54:     REPLACE_STRERROR=1
                     55:   fi
                     56: ])
                     57: 
1.1.1.2   misho      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: [
1.1.1.3 ! misho      62:   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
1.1.1.2   misho      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],
1.1.1.3 ! misho      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:       ])
1.1.1.2   misho      93:   ])
1.1.1.3 ! misho      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
1.1       misho     102: ])

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