1 | # perror.m4 serial 10
|
---|
2 | dnl Copyright (C) 2008-2022 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_PERROR],
|
---|
8 | [
|
---|
9 | AC_REQUIRE([gl_STDIO_H_DEFAULTS])
|
---|
10 | AC_REQUIRE([gl_HEADER_ERRNO_H])
|
---|
11 | AC_REQUIRE([gl_FUNC_STRERROR_R])
|
---|
12 | AC_REQUIRE([gl_FUNC_STRERROR_0])
|
---|
13 | AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
---|
14 | dnl We intentionally do not check for the broader REPLACE_STRERROR_R,
|
---|
15 | dnl since on glibc systems, strerror_r is replaced only for signature
|
---|
16 | dnl issues, and perror is just fine. Rather, we only want to
|
---|
17 | dnl replace perror if strerror_r was replaced for a content fix.
|
---|
18 | if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" != false:0; then
|
---|
19 | dnl The system's perror() cannot know about the new errno values we add
|
---|
20 | dnl to <errno.h>, or any fix for strerror(0). Replace it.
|
---|
21 | REPLACE_PERROR=1
|
---|
22 | fi
|
---|
23 | case ${gl_cv_func_strerror_r_works-unset} in
|
---|
24 | unset|*yes)
|
---|
25 | AC_CACHE_CHECK([whether perror matches strerror],
|
---|
26 | [gl_cv_func_perror_works],
|
---|
27 | [AC_RUN_IFELSE(
|
---|
28 | [AC_LANG_PROGRAM(
|
---|
29 | [[#include <errno.h>
|
---|
30 | #include <stdio.h>
|
---|
31 | #include <stdlib.h>
|
---|
32 | #include <string.h>
|
---|
33 | ]],
|
---|
34 | [[char *str = strerror (-1);
|
---|
35 | if (!getenv("CONFTEST_OUTPUT")) return 0;
|
---|
36 | if (!str) str = "";
|
---|
37 | puts (str);
|
---|
38 | errno = -1;
|
---|
39 | perror ("");
|
---|
40 | return 0;
|
---|
41 | ]])],
|
---|
42 | [if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \
|
---|
43 | && cmp conftest.txt1 conftest.txt2 >/dev/null; then
|
---|
44 | gl_cv_func_perror_works=yes
|
---|
45 | else
|
---|
46 | gl_cv_func_perror_works=no
|
---|
47 | fi
|
---|
48 | rm -rf conftest.txt1 conftest.txt2],
|
---|
49 | [gl_cv_func_perror_works=no],
|
---|
50 | [case "$host_os" in
|
---|
51 | # Guess yes on musl systems.
|
---|
52 | *-musl*) gl_cv_func_perror_works="guessing yes" ;;
|
---|
53 | # Guess yes on native Windows.
|
---|
54 | mingw*) gl_cv_func_perror_works="guessing yes" ;;
|
---|
55 | # Otherwise obey --enable-cross-guesses.
|
---|
56 | *) gl_cv_func_perror_works="$gl_cross_guess_normal" ;;
|
---|
57 | esac
|
---|
58 | ])
|
---|
59 | ])
|
---|
60 | case "$gl_cv_func_perror_works" in
|
---|
61 | *yes) ;;
|
---|
62 | *) REPLACE_PERROR=1 ;;
|
---|
63 | esac
|
---|
64 | ;;
|
---|
65 | *)
|
---|
66 | dnl The system's perror() probably inherits the bugs in the
|
---|
67 | dnl system's strerror_r(). Replace it.
|
---|
68 | REPLACE_PERROR=1
|
---|
69 | ;;
|
---|
70 | esac
|
---|
71 | ])
|
---|