1: # stdio_h.m4 serial 49
2: dnl Copyright (C) 2007-2019 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_STDIO_H],
8: [
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
13: #endif
14: ])
15: AC_DEFINE([__USE_MINGW_ANSI_STDIO])
16: AC_REQUIRE([gl_STDIO_H_DEFAULTS])
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 No need to create extra modules for these functions. Everyone who uses
44: dnl <stdio.h> likely needs them.
45: GNULIB_FSCANF=1
46: gl_MODULE_INDICATOR([fscanf])
47: GNULIB_SCANF=1
48: gl_MODULE_INDICATOR([scanf])
49: GNULIB_FGETC=1
50: GNULIB_GETC=1
51: GNULIB_GETCHAR=1
52: GNULIB_FGETS=1
53: GNULIB_FREAD=1
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], [
60: gl_NONBLOCKING_IO
61: if test $gl_cv_have_nonblocking != yes; then
62: REPLACE_STDIO_READ_FUNCS=1
63: AC_LIBOBJ([stdio-read])
64: fi
65: ])
66:
67: dnl No need to create extra modules for these functions. Everyone who uses
68: dnl <stdio.h> likely needs them.
69: GNULIB_FPRINTF=1
70: GNULIB_PRINTF=1
71: GNULIB_VFPRINTF=1
72: GNULIB_VPRINTF=1
73: GNULIB_FPUTC=1
74: GNULIB_PUTC=1
75: GNULIB_PUTCHAR=1
76: GNULIB_FPUTS=1
77: GNULIB_PUTS=1
78: GNULIB_FWRITE=1
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], [
85: 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])
89: fi
90: ])
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], [
97: gl_NONBLOCKING_IO
98: if test $gl_cv_have_nonblocking != yes; then
99: REPLACE_STDIO_WRITE_FUNCS=1
100: AC_LIBOBJ([stdio-write])
101: fi
102: ])
103:
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])
110: ])
111:
112: AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
113: [
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])
119: ])
120:
121: AC_DEFUN([gl_STDIO_H_DEFAULTS],
122: [
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])
225: ])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>