| 1 | # stdio_h.m4 serial 56
|
|---|
| 2 | dnl Copyright (C) 2007-2021 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_ONCE([gl_STDIO_H],
|
|---|
| 8 | [
|
|---|
| 9 | AC_REQUIRE([gl_STDIO_H_DEFAULTS])
|
|---|
| 10 | AH_VERBATIM([MINGW_ANSI_STDIO],
|
|---|
| 11 | [/* Use GNU style printf and scanf. */
|
|---|
| 12 | #ifndef __USE_MINGW_ANSI_STDIO
|
|---|
| 13 | # undef __USE_MINGW_ANSI_STDIO
|
|---|
| 14 | #endif
|
|---|
| 15 | ])
|
|---|
| 16 | AC_DEFINE([__USE_MINGW_ANSI_STDIO])
|
|---|
| 17 | gl_NEXT_HEADERS([stdio.h])
|
|---|
| 18 |
|
|---|
| 19 | dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and
|
|---|
| 20 | dnl inttypes.h behave like gnu instead of system; we must give our
|
|---|
| 21 | dnl printf wrapper the right attribute to match.
|
|---|
| 22 | AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros],
|
|---|
| 23 | [gl_cv_func_printf_attribute_flavor],
|
|---|
| 24 | [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|---|
| 25 | #define __STDC_FORMAT_MACROS 1
|
|---|
| 26 | #include <stdio.h>
|
|---|
| 27 | #include <inttypes.h>
|
|---|
| 28 | /* For non-mingw systems, compilation will trivially succeed.
|
|---|
| 29 | For mingw, compilation will succeed for older mingw (system
|
|---|
| 30 | printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
|
|---|
| 31 | #if (defined _WIN32 && ! defined __CYGWIN__) && \
|
|---|
| 32 | (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
|---|
| 33 | extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
|
|---|
| 34 | #endif
|
|---|
| 35 | ]])], [gl_cv_func_printf_attribute_flavor=system],
|
|---|
| 36 | [gl_cv_func_printf_attribute_flavor=gnu])])
|
|---|
| 37 | if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
|
|---|
| 38 | AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1],
|
|---|
| 39 | [Define to 1 if printf and friends should be labeled with
|
|---|
| 40 | attribute "__gnu_printf__" instead of "__printf__"])
|
|---|
| 41 | fi
|
|---|
| 42 |
|
|---|
| 43 | dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c"
|
|---|
| 44 | dnl "expected source file, required through AC_LIBSOURCES, not found". It is
|
|---|
| 45 | dnl also an optimization, to avoid performing a configure check whose result
|
|---|
| 46 | dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
|
|---|
| 47 | dnl or GNULIB_NONBLOCKING redundant.
|
|---|
| 48 | m4_ifdef([gl_NONBLOCKING_IO], [
|
|---|
| 49 | gl_NONBLOCKING_IO
|
|---|
| 50 | if test $gl_cv_have_nonblocking != yes; then
|
|---|
| 51 | REPLACE_STDIO_READ_FUNCS=1
|
|---|
| 52 | AC_LIBOBJ([stdio-read])
|
|---|
| 53 | fi
|
|---|
| 54 | ])
|
|---|
| 55 |
|
|---|
| 56 | dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
|
|---|
| 57 | dnl "expected source file, required through AC_LIBSOURCES, not found". It is
|
|---|
| 58 | dnl also an optimization, to avoid performing a configure check whose result
|
|---|
| 59 | dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or
|
|---|
| 60 | dnl GNULIB_SIGPIPE redundant.
|
|---|
| 61 | m4_ifdef([gl_SIGNAL_SIGPIPE], [
|
|---|
| 62 | gl_SIGNAL_SIGPIPE
|
|---|
| 63 | if test $gl_cv_header_signal_h_SIGPIPE != yes; then
|
|---|
| 64 | REPLACE_STDIO_WRITE_FUNCS=1
|
|---|
| 65 | AC_LIBOBJ([stdio-write])
|
|---|
| 66 | fi
|
|---|
| 67 | ])
|
|---|
| 68 | dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
|
|---|
| 69 | dnl "expected source file, required through AC_LIBSOURCES, not found". It is
|
|---|
| 70 | dnl also an optimization, to avoid performing a configure check whose result
|
|---|
| 71 | dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
|
|---|
| 72 | dnl or GNULIB_NONBLOCKING redundant.
|
|---|
| 73 | m4_ifdef([gl_NONBLOCKING_IO], [
|
|---|
| 74 | gl_NONBLOCKING_IO
|
|---|
| 75 | if test $gl_cv_have_nonblocking != yes; then
|
|---|
| 76 | REPLACE_STDIO_WRITE_FUNCS=1
|
|---|
| 77 | AC_LIBOBJ([stdio-write])
|
|---|
| 78 | fi
|
|---|
| 79 | ])
|
|---|
| 80 |
|
|---|
| 81 | dnl Check for declarations of anything we want to poison if the
|
|---|
| 82 | dnl corresponding gnulib module is not in use, and which is not
|
|---|
| 83 | dnl guaranteed by both C89 and C11.
|
|---|
| 84 | gl_WARN_ON_USE_PREPARE([[#include <stdio.h>
|
|---|
| 85 | ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen
|
|---|
| 86 | renameat snprintf tmpfile vdprintf vsnprintf])
|
|---|
| 87 |
|
|---|
| 88 | AC_REQUIRE([AC_C_RESTRICT])
|
|---|
| 89 |
|
|---|
| 90 | AC_CHECK_DECLS_ONCE([fcloseall])
|
|---|
| 91 | if test $ac_cv_have_decl_fcloseall = no; then
|
|---|
| 92 | HAVE_DECL_FCLOSEALL=0
|
|---|
| 93 | fi
|
|---|
| 94 | ])
|
|---|
| 95 |
|
|---|
| 96 | # gl_STDIO_MODULE_INDICATOR([modulename])
|
|---|
| 97 | # sets the shell variable that indicates the presence of the given module
|
|---|
| 98 | # to a C preprocessor expression that will evaluate to 1.
|
|---|
| 99 | # This macro invocation must not occur in macros that are AC_REQUIREd.
|
|---|
| 100 | AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
|
|---|
| 101 | [
|
|---|
| 102 | dnl Ensure to expand the default settings once only.
|
|---|
| 103 | gl_STDIO_H_REQUIRE_DEFAULTS
|
|---|
| 104 | gl_MODULE_INDICATOR_SET_VARIABLE([$1])
|
|---|
| 105 | dnl Define it also as a C macro, for the benefit of the unit tests.
|
|---|
| 106 | gl_MODULE_INDICATOR_FOR_TESTS([$1])
|
|---|
| 107 | ])
|
|---|
| 108 |
|
|---|
| 109 | # Initializes the default values for AC_SUBSTed shell variables.
|
|---|
| 110 | # This macro must not be AC_REQUIREd. It must only be invoked, and only
|
|---|
| 111 | # outside of macros or in macros that are not AC_REQUIREd.
|
|---|
| 112 | AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS],
|
|---|
| 113 | [
|
|---|
| 114 | m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS], [
|
|---|
| 115 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DPRINTF])
|
|---|
| 116 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCLOSE])
|
|---|
| 117 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPEN])
|
|---|
| 118 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFLUSH])
|
|---|
| 119 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC])
|
|---|
| 120 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS])
|
|---|
| 121 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN])
|
|---|
| 122 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF])
|
|---|
| 123 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX])
|
|---|
| 124 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE])
|
|---|
| 125 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTC])
|
|---|
| 126 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTS])
|
|---|
| 127 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREAD])
|
|---|
| 128 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREOPEN])
|
|---|
| 129 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSCANF])
|
|---|
| 130 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEK])
|
|---|
| 131 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEKO])
|
|---|
| 132 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELL])
|
|---|
| 133 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELLO])
|
|---|
| 134 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FWRITE])
|
|---|
| 135 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETC])
|
|---|
| 136 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCHAR])
|
|---|
| 137 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDELIM])
|
|---|
| 138 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLINE])
|
|---|
| 139 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF])
|
|---|
| 140 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF_POSIX])
|
|---|
| 141 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PCLOSE])
|
|---|
| 142 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PERROR])
|
|---|
| 143 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POPEN])
|
|---|
| 144 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF])
|
|---|
| 145 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF_POSIX])
|
|---|
| 146 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTC])
|
|---|
| 147 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTCHAR])
|
|---|
| 148 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTS])
|
|---|
| 149 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMOVE])
|
|---|
| 150 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAME])
|
|---|
| 151 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAMEAT])
|
|---|
| 152 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANF])
|
|---|
| 153 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SNPRINTF])
|
|---|
| 154 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SPRINTF_POSIX])
|
|---|
| 155 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING])
|
|---|
| 156 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE])
|
|---|
| 157 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TMPFILE])
|
|---|
| 158 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VASPRINTF])
|
|---|
| 159 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFSCANF])
|
|---|
| 160 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSCANF])
|
|---|
| 161 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VDPRINTF])
|
|---|
| 162 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF])
|
|---|
| 163 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF_POSIX])
|
|---|
| 164 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF])
|
|---|
| 165 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF_POSIX])
|
|---|
| 166 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSNPRINTF])
|
|---|
| 167 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSPRINTF_POSIX])
|
|---|
| 168 | dnl Support Microsoft deprecated alias function names by default.
|
|---|
| 169 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCLOSEALL], [1])
|
|---|
| 170 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FDOPEN], [1])
|
|---|
| 171 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FILENO], [1])
|
|---|
| 172 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETW], [1])
|
|---|
| 173 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTW], [1])
|
|---|
| 174 | gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TEMPNAM], [1])
|
|---|
| 175 | ])
|
|---|
| 176 | m4_require(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS])
|
|---|
| 177 | AC_REQUIRE([gl_STDIO_H_DEFAULTS])
|
|---|
| 178 | ])
|
|---|
| 179 |
|
|---|
| 180 | AC_DEFUN([gl_STDIO_H_DEFAULTS],
|
|---|
| 181 | [
|
|---|
| 182 | dnl Assume proper GNU behavior unless another module says otherwise.
|
|---|
| 183 | HAVE_DECL_FCLOSEALL=1; AC_SUBST([HAVE_DECL_FCLOSEALL])
|
|---|
| 184 | HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE])
|
|---|
| 185 | HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO])
|
|---|
| 186 | HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO])
|
|---|
| 187 | HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM])
|
|---|
| 188 | HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE])
|
|---|
| 189 | HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
|
|---|
| 190 | HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF])
|
|---|
| 191 | HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF])
|
|---|
| 192 | HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF])
|
|---|
| 193 | HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO])
|
|---|
| 194 | HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO])
|
|---|
| 195 | HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE])
|
|---|
| 196 | HAVE_POPEN=1; AC_SUBST([HAVE_POPEN])
|
|---|
| 197 | HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT])
|
|---|
| 198 | HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF])
|
|---|
| 199 | HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF])
|
|---|
| 200 | REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF])
|
|---|
| 201 | REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE])
|
|---|
| 202 | REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN])
|
|---|
| 203 | REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH])
|
|---|
| 204 | REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN])
|
|---|
| 205 | REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF])
|
|---|
| 206 | REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE])
|
|---|
| 207 | REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN])
|
|---|
| 208 | REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK])
|
|---|
| 209 | REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO])
|
|---|
| 210 | REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL])
|
|---|
| 211 | REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO])
|
|---|
| 212 | REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM])
|
|---|
| 213 | REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE])
|
|---|
| 214 | REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF])
|
|---|
| 215 | REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR])
|
|---|
| 216 | REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN])
|
|---|
| 217 | REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF])
|
|---|
| 218 | REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE])
|
|---|
| 219 | REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME])
|
|---|
| 220 | REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT])
|
|---|
| 221 | REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF])
|
|---|
| 222 | REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF])
|
|---|
| 223 | REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS])
|
|---|
| 224 | REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
|
|---|
| 225 | REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE])
|
|---|
| 226 | REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF])
|
|---|
| 227 | REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF])
|
|---|
| 228 | REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF])
|
|---|
| 229 | REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF])
|
|---|
| 230 | REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF])
|
|---|
| 231 | REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF])
|
|---|
| 232 | ])
|
|---|