2 dnl Copyright (C) 2007-2015 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 dnl For __USE_MINGW_ANSI_STDIO
10 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
12 AC_REQUIRE([gl_STDIO_H_DEFAULTS])
13 gl_NEXT_HEADERS([stdio.h])
15 dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and
16 dnl inttypes.h behave like gnu instead of system; we must give our
17 dnl printf wrapper the right attribute to match.
18 AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros],
19 [gl_cv_func_printf_attribute_flavor],
20 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
21 #define __STDC_FORMAT_MACROS 1
24 /* For non-mingw systems, compilation will trivially succeed.
25 For mingw, compilation will succeed for older mingw (system
26 printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
27 #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \
28 (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
29 extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
31 ]])], [gl_cv_func_printf_attribute_flavor=system],
32 [gl_cv_func_printf_attribute_flavor=gnu])])
33 if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
34 AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1],
35 [Define to 1 if printf and friends should be labeled with
36 attribute "__gnu_printf__" instead of "__printf__"])
39 dnl No need to create extra modules for these functions. Everyone who uses
40 dnl <stdio.h> likely needs them.
42 gl_MODULE_INDICATOR([fscanf])
44 gl_MODULE_INDICATOR([scanf])
50 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c"
51 dnl "expected source file, required through AC_LIBSOURCES, not found". It is
52 dnl also an optimization, to avoid performing a configure check whose result
53 dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
54 dnl or GNULIB_NONBLOCKING redundant.
55 m4_ifdef([gl_NONBLOCKING_IO], [
57 if test $gl_cv_have_nonblocking != yes; then
58 REPLACE_STDIO_READ_FUNCS=1
59 AC_LIBOBJ([stdio-read])
63 dnl No need to create extra modules for these functions. Everyone who uses
64 dnl <stdio.h> likely needs them.
75 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
76 dnl "expected source file, required through AC_LIBSOURCES, not found". It is
77 dnl also an optimization, to avoid performing a configure check whose result
78 dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or
79 dnl GNULIB_SIGPIPE redundant.
80 m4_ifdef([gl_SIGNAL_SIGPIPE], [
82 if test $gl_cv_header_signal_h_SIGPIPE != yes; then
83 REPLACE_STDIO_WRITE_FUNCS=1
84 AC_LIBOBJ([stdio-write])
87 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
88 dnl "expected source file, required through AC_LIBSOURCES, not found". It is
89 dnl also an optimization, to avoid performing a configure check whose result
90 dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
91 dnl or GNULIB_NONBLOCKING redundant.
92 m4_ifdef([gl_NONBLOCKING_IO], [
94 if test $gl_cv_have_nonblocking != yes; then
95 REPLACE_STDIO_WRITE_FUNCS=1
96 AC_LIBOBJ([stdio-write])
100 dnl Check for declarations of anything we want to poison if the
101 dnl corresponding gnulib module is not in use, and which is not
102 dnl guaranteed by both C89 and C11.
103 gl_WARN_ON_USE_PREPARE([[#include <stdio.h>
104 ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen
105 renameat snprintf tmpfile vdprintf vsnprintf])
108 AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
110 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
111 AC_REQUIRE([gl_STDIO_H_DEFAULTS])
112 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
113 dnl Define it also as a C macro, for the benefit of the unit tests.
114 gl_MODULE_INDICATOR_FOR_TESTS([$1])
117 AC_DEFUN([gl_STDIO_H_DEFAULTS],
119 GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF])
120 GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE])
121 GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN])
122 GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH])
123 GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC])
124 GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS])
125 GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN])
126 GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF])
127 GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX])
128 GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE])
129 GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC])
130 GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS])
131 GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD])
132 GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN])
133 GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF])
134 GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK])
135 GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO])
136 GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL])
137 GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO])
138 GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE])
139 GNULIB_GETC=0; AC_SUBST([GNULIB_GETC])
140 GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR])
141 GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM])
142 GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE])
143 GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF])
144 GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
145 GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE])
146 GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR])
147 GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN])
148 GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF])
149 GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX])
150 GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC])
151 GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR])
152 GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS])
153 GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE])
154 GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME])
155 GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT])
156 GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF])
157 GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF])
158 GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX])
159 GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING])
160 GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
161 GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE])
162 GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF])
163 GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF])
164 GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF])
165 GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF])
166 GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF])
167 GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX])
168 GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF])
169 GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX])
170 GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF])
171 GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX])
172 dnl Assume proper GNU behavior unless another module says otherwise.
173 HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE])
174 HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO])
175 HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO])
176 HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM])
177 HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE])
178 HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
179 HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF])
180 HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF])
181 HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF])
182 HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO])
183 HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO])
184 HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE])
185 HAVE_POPEN=1; AC_SUBST([HAVE_POPEN])
186 HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT])
187 HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF])
188 HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF])
189 REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF])
190 REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE])
191 REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN])
192 REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH])
193 REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN])
194 REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF])
195 REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE])
196 REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN])
197 REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK])
198 REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO])
199 REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL])
200 REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO])
201 REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM])
202 REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE])
203 REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF])
204 REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR])
205 REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN])
206 REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF])
207 REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE])
208 REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME])
209 REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT])
210 REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF])
211 REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF])
212 REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS])
213 REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
214 REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE])
215 REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF])
216 REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF])
217 REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF])
218 REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF])
219 REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF])
220 REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF])