2 dnl Copyright (C) 2007-2018 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.
9 AH_VERBATIM([MINGW_ANSI_STDIO],
10 [/* Use GNU style printf and scanf. */
11 #ifndef __USE_MINGW_ANSI_STDIO
12 # undef __USE_MINGW_ANSI_STDIO
15 AC_DEFINE([__USE_MINGW_ANSI_STDIO])
16 AC_REQUIRE([gl_STDIO_H_DEFAULTS])
17 gl_NEXT_HEADERS([stdio.h])
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
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 __WIN32__) && ! defined __CYGWIN__) && \
32 (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
33 extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
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__"])
43 dnl No need to create extra modules for these functions. Everyone who uses
44 dnl <stdio.h> likely needs them.
46 gl_MODULE_INDICATOR([fscanf])
48 gl_MODULE_INDICATOR([scanf])
54 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c"
55 dnl "expected source file, required through AC_LIBSOURCES, not found". It is
56 dnl also an optimization, to avoid performing a configure check whose result
57 dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
58 dnl or GNULIB_NONBLOCKING redundant.
59 m4_ifdef([gl_NONBLOCKING_IO], [
61 if test $gl_cv_have_nonblocking != yes; then
62 REPLACE_STDIO_READ_FUNCS=1
63 AC_LIBOBJ([stdio-read])
67 dnl No need to create extra modules for these functions. Everyone who uses
68 dnl <stdio.h> likely needs them.
79 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
80 dnl "expected source file, required through AC_LIBSOURCES, not found". It is
81 dnl also an optimization, to avoid performing a configure check whose result
82 dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or
83 dnl GNULIB_SIGPIPE redundant.
84 m4_ifdef([gl_SIGNAL_SIGPIPE], [
86 if test $gl_cv_header_signal_h_SIGPIPE != yes; then
87 REPLACE_STDIO_WRITE_FUNCS=1
88 AC_LIBOBJ([stdio-write])
91 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
92 dnl "expected source file, required through AC_LIBSOURCES, not found". It is
93 dnl also an optimization, to avoid performing a configure check whose result
94 dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
95 dnl or GNULIB_NONBLOCKING redundant.
96 m4_ifdef([gl_NONBLOCKING_IO], [
98 if test $gl_cv_have_nonblocking != yes; then
99 REPLACE_STDIO_WRITE_FUNCS=1
100 AC_LIBOBJ([stdio-write])
104 dnl Check for declarations of anything we want to poison if the
105 dnl corresponding gnulib module is not in use, and which is not
106 dnl guaranteed by both C89 and C11.
107 gl_WARN_ON_USE_PREPARE([[#include <stdio.h>
108 ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen
109 renameat snprintf tmpfile vdprintf vsnprintf])
112 AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
114 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
115 AC_REQUIRE([gl_STDIO_H_DEFAULTS])
116 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
117 dnl Define it also as a C macro, for the benefit of the unit tests.
118 gl_MODULE_INDICATOR_FOR_TESTS([$1])
121 AC_DEFUN([gl_STDIO_H_DEFAULTS],
123 GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF])
124 GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE])
125 GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN])
126 GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH])
127 GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC])
128 GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS])
129 GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN])
130 GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF])
131 GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX])
132 GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE])
133 GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC])
134 GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS])
135 GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD])
136 GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN])
137 GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF])
138 GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK])
139 GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO])
140 GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL])
141 GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO])
142 GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE])
143 GNULIB_GETC=0; AC_SUBST([GNULIB_GETC])
144 GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR])
145 GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM])
146 GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE])
147 GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF])
148 GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
149 GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE])
150 GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR])
151 GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN])
152 GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF])
153 GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX])
154 GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC])
155 GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR])
156 GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS])
157 GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE])
158 GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME])
159 GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT])
160 GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF])
161 GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF])
162 GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX])
163 GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING])
164 GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
165 GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE])
166 GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF])
167 GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF])
168 GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF])
169 GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF])
170 GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF])
171 GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX])
172 GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF])
173 GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX])
174 GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF])
175 GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX])
176 dnl Assume proper GNU behavior unless another module says otherwise.
177 HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE])
178 HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO])
179 HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO])
180 HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM])
181 HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE])
182 HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
183 HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF])
184 HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF])
185 HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF])
186 HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO])
187 HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO])
188 HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE])
189 HAVE_POPEN=1; AC_SUBST([HAVE_POPEN])
190 HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT])
191 HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF])
192 HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF])
193 REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF])
194 REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE])
195 REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN])
196 REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH])
197 REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN])
198 REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF])
199 REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE])
200 REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN])
201 REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK])
202 REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO])
203 REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL])
204 REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO])
205 REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM])
206 REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE])
207 REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF])
208 REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR])
209 REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN])
210 REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF])
211 REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE])
212 REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME])
213 REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT])
214 REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF])
215 REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF])
216 REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS])
217 REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
218 REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE])
219 REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF])
220 REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF])
221 REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF])
222 REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF])
223 REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF])
224 REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF])