1# stdio_h.m4 serial 46
2dnl Copyright (C) 2007-2015 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7AC_DEFUN([gl_STDIO_H],
8[
9  dnl For __USE_MINGW_ANSI_STDIO
10  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
11
12  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
13  gl_NEXT_HEADERS([stdio.h])
14
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
22       #include <stdio.h>
23       #include <inttypes.h>
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];
30       #endif
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__"])
37  fi
38
39  dnl No need to create extra modules for these functions. Everyone who uses
40  dnl <stdio.h> likely needs them.
41  GNULIB_FSCANF=1
42  gl_MODULE_INDICATOR([fscanf])
43  GNULIB_SCANF=1
44  gl_MODULE_INDICATOR([scanf])
45  GNULIB_FGETC=1
46  GNULIB_GETC=1
47  GNULIB_GETCHAR=1
48  GNULIB_FGETS=1
49  GNULIB_FREAD=1
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], [
56    gl_NONBLOCKING_IO
57    if test $gl_cv_have_nonblocking != yes; then
58      REPLACE_STDIO_READ_FUNCS=1
59      AC_LIBOBJ([stdio-read])
60    fi
61  ])
62
63  dnl No need to create extra modules for these functions. Everyone who uses
64  dnl <stdio.h> likely needs them.
65  GNULIB_FPRINTF=1
66  GNULIB_PRINTF=1
67  GNULIB_VFPRINTF=1
68  GNULIB_VPRINTF=1
69  GNULIB_FPUTC=1
70  GNULIB_PUTC=1
71  GNULIB_PUTCHAR=1
72  GNULIB_FPUTS=1
73  GNULIB_PUTS=1
74  GNULIB_FWRITE=1
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], [
81    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])
85    fi
86  ])
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], [
93    gl_NONBLOCKING_IO
94    if test $gl_cv_have_nonblocking != yes; then
95      REPLACE_STDIO_WRITE_FUNCS=1
96      AC_LIBOBJ([stdio-write])
97    fi
98  ])
99
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])
106])
107
108AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
109[
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])
115])
116
117AC_DEFUN([gl_STDIO_H_DEFAULTS],
118[
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])
221])
222