immutable: Add tests.
[gnulib.git] / m4 / stdio_h.m4
blob4c3f24accaa7c0be54296d1fd7fb459e4c1ec9bd
1 # stdio_h.m4 serial 52
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.
7 AC_DEFUN([gl_STDIO_H],
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
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
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
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   ])
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   ])
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])
111   AC_REQUIRE([AC_C_RESTRICT])
113   AC_CHECK_DECLS_ONCE([fcloseall])
114   if test $ac_cv_have_decl_fcloseall = no; then
115     HAVE_DECL_FCLOSEALL=0
116   fi
119 AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
121   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
122   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
123   gl_MODULE_INDICATOR_SET_VARIABLE([$1])
124   dnl Define it also as a C macro, for the benefit of the unit tests.
125   gl_MODULE_INDICATOR_FOR_TESTS([$1])
128 AC_DEFUN([gl_STDIO_H_DEFAULTS],
130   GNULIB_DPRINTF=0;              AC_SUBST([GNULIB_DPRINTF])
131   GNULIB_FCLOSE=0;               AC_SUBST([GNULIB_FCLOSE])
132   GNULIB_FDOPEN=0;               AC_SUBST([GNULIB_FDOPEN])
133   GNULIB_FFLUSH=0;               AC_SUBST([GNULIB_FFLUSH])
134   GNULIB_FGETC=0;                AC_SUBST([GNULIB_FGETC])
135   GNULIB_FGETS=0;                AC_SUBST([GNULIB_FGETS])
136   GNULIB_FOPEN=0;                AC_SUBST([GNULIB_FOPEN])
137   GNULIB_FPRINTF=0;              AC_SUBST([GNULIB_FPRINTF])
138   GNULIB_FPRINTF_POSIX=0;        AC_SUBST([GNULIB_FPRINTF_POSIX])
139   GNULIB_FPURGE=0;               AC_SUBST([GNULIB_FPURGE])
140   GNULIB_FPUTC=0;                AC_SUBST([GNULIB_FPUTC])
141   GNULIB_FPUTS=0;                AC_SUBST([GNULIB_FPUTS])
142   GNULIB_FREAD=0;                AC_SUBST([GNULIB_FREAD])
143   GNULIB_FREOPEN=0;              AC_SUBST([GNULIB_FREOPEN])
144   GNULIB_FSCANF=0;               AC_SUBST([GNULIB_FSCANF])
145   GNULIB_FSEEK=0;                AC_SUBST([GNULIB_FSEEK])
146   GNULIB_FSEEKO=0;               AC_SUBST([GNULIB_FSEEKO])
147   GNULIB_FTELL=0;                AC_SUBST([GNULIB_FTELL])
148   GNULIB_FTELLO=0;               AC_SUBST([GNULIB_FTELLO])
149   GNULIB_FWRITE=0;               AC_SUBST([GNULIB_FWRITE])
150   GNULIB_GETC=0;                 AC_SUBST([GNULIB_GETC])
151   GNULIB_GETCHAR=0;              AC_SUBST([GNULIB_GETCHAR])
152   GNULIB_GETDELIM=0;             AC_SUBST([GNULIB_GETDELIM])
153   GNULIB_GETLINE=0;              AC_SUBST([GNULIB_GETLINE])
154   GNULIB_OBSTACK_PRINTF=0;       AC_SUBST([GNULIB_OBSTACK_PRINTF])
155   GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
156   GNULIB_PCLOSE=0;               AC_SUBST([GNULIB_PCLOSE])
157   GNULIB_PERROR=0;               AC_SUBST([GNULIB_PERROR])
158   GNULIB_POPEN=0;                AC_SUBST([GNULIB_POPEN])
159   GNULIB_PRINTF=0;               AC_SUBST([GNULIB_PRINTF])
160   GNULIB_PRINTF_POSIX=0;         AC_SUBST([GNULIB_PRINTF_POSIX])
161   GNULIB_PUTC=0;                 AC_SUBST([GNULIB_PUTC])
162   GNULIB_PUTCHAR=0;              AC_SUBST([GNULIB_PUTCHAR])
163   GNULIB_PUTS=0;                 AC_SUBST([GNULIB_PUTS])
164   GNULIB_REMOVE=0;               AC_SUBST([GNULIB_REMOVE])
165   GNULIB_RENAME=0;               AC_SUBST([GNULIB_RENAME])
166   GNULIB_RENAMEAT=0;             AC_SUBST([GNULIB_RENAMEAT])
167   GNULIB_SCANF=0;                AC_SUBST([GNULIB_SCANF])
168   GNULIB_SNPRINTF=0;             AC_SUBST([GNULIB_SNPRINTF])
169   GNULIB_SPRINTF_POSIX=0;        AC_SUBST([GNULIB_SPRINTF_POSIX])
170   GNULIB_STDIO_H_NONBLOCKING=0;  AC_SUBST([GNULIB_STDIO_H_NONBLOCKING])
171   GNULIB_STDIO_H_SIGPIPE=0;      AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
172   GNULIB_TMPFILE=0;              AC_SUBST([GNULIB_TMPFILE])
173   GNULIB_VASPRINTF=0;            AC_SUBST([GNULIB_VASPRINTF])
174   GNULIB_VFSCANF=0;              AC_SUBST([GNULIB_VFSCANF])
175   GNULIB_VSCANF=0;               AC_SUBST([GNULIB_VSCANF])
176   GNULIB_VDPRINTF=0;             AC_SUBST([GNULIB_VDPRINTF])
177   GNULIB_VFPRINTF=0;             AC_SUBST([GNULIB_VFPRINTF])
178   GNULIB_VFPRINTF_POSIX=0;       AC_SUBST([GNULIB_VFPRINTF_POSIX])
179   GNULIB_VPRINTF=0;              AC_SUBST([GNULIB_VPRINTF])
180   GNULIB_VPRINTF_POSIX=0;        AC_SUBST([GNULIB_VPRINTF_POSIX])
181   GNULIB_VSNPRINTF=0;            AC_SUBST([GNULIB_VSNPRINTF])
182   GNULIB_VSPRINTF_POSIX=0;       AC_SUBST([GNULIB_VSPRINTF_POSIX])
183   dnl Support Microsoft deprecated alias function names by default.
184   GNULIB_MDA_FCLOSEALL=1;        AC_SUBST([GNULIB_MDA_FCLOSEALL])
185   GNULIB_MDA_FDOPEN=1;           AC_SUBST([GNULIB_MDA_FDOPEN])
186   GNULIB_MDA_FILENO=1;           AC_SUBST([GNULIB_MDA_FILENO])
187   GNULIB_MDA_GETW=1;             AC_SUBST([GNULIB_MDA_GETW])
188   GNULIB_MDA_PUTW=1;             AC_SUBST([GNULIB_MDA_PUTW])
189   GNULIB_MDA_TEMPNAM=1;          AC_SUBST([GNULIB_MDA_TEMPNAM])
190   dnl Assume proper GNU behavior unless another module says otherwise.
191   HAVE_DECL_FCLOSEALL=1;         AC_SUBST([HAVE_DECL_FCLOSEALL])
192   HAVE_DECL_FPURGE=1;            AC_SUBST([HAVE_DECL_FPURGE])
193   HAVE_DECL_FSEEKO=1;            AC_SUBST([HAVE_DECL_FSEEKO])
194   HAVE_DECL_FTELLO=1;            AC_SUBST([HAVE_DECL_FTELLO])
195   HAVE_DECL_GETDELIM=1;          AC_SUBST([HAVE_DECL_GETDELIM])
196   HAVE_DECL_GETLINE=1;           AC_SUBST([HAVE_DECL_GETLINE])
197   HAVE_DECL_OBSTACK_PRINTF=1;    AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
198   HAVE_DECL_SNPRINTF=1;          AC_SUBST([HAVE_DECL_SNPRINTF])
199   HAVE_DECL_VSNPRINTF=1;         AC_SUBST([HAVE_DECL_VSNPRINTF])
200   HAVE_DPRINTF=1;                AC_SUBST([HAVE_DPRINTF])
201   HAVE_FSEEKO=1;                 AC_SUBST([HAVE_FSEEKO])
202   HAVE_FTELLO=1;                 AC_SUBST([HAVE_FTELLO])
203   HAVE_PCLOSE=1;                 AC_SUBST([HAVE_PCLOSE])
204   HAVE_POPEN=1;                  AC_SUBST([HAVE_POPEN])
205   HAVE_RENAMEAT=1;               AC_SUBST([HAVE_RENAMEAT])
206   HAVE_VASPRINTF=1;              AC_SUBST([HAVE_VASPRINTF])
207   HAVE_VDPRINTF=1;               AC_SUBST([HAVE_VDPRINTF])
208   REPLACE_DPRINTF=0;             AC_SUBST([REPLACE_DPRINTF])
209   REPLACE_FCLOSE=0;              AC_SUBST([REPLACE_FCLOSE])
210   REPLACE_FDOPEN=0;              AC_SUBST([REPLACE_FDOPEN])
211   REPLACE_FFLUSH=0;              AC_SUBST([REPLACE_FFLUSH])
212   REPLACE_FOPEN=0;               AC_SUBST([REPLACE_FOPEN])
213   REPLACE_FPRINTF=0;             AC_SUBST([REPLACE_FPRINTF])
214   REPLACE_FPURGE=0;              AC_SUBST([REPLACE_FPURGE])
215   REPLACE_FREOPEN=0;             AC_SUBST([REPLACE_FREOPEN])
216   REPLACE_FSEEK=0;               AC_SUBST([REPLACE_FSEEK])
217   REPLACE_FSEEKO=0;              AC_SUBST([REPLACE_FSEEKO])
218   REPLACE_FTELL=0;               AC_SUBST([REPLACE_FTELL])
219   REPLACE_FTELLO=0;              AC_SUBST([REPLACE_FTELLO])
220   REPLACE_GETDELIM=0;            AC_SUBST([REPLACE_GETDELIM])
221   REPLACE_GETLINE=0;             AC_SUBST([REPLACE_GETLINE])
222   REPLACE_OBSTACK_PRINTF=0;      AC_SUBST([REPLACE_OBSTACK_PRINTF])
223   REPLACE_PERROR=0;              AC_SUBST([REPLACE_PERROR])
224   REPLACE_POPEN=0;               AC_SUBST([REPLACE_POPEN])
225   REPLACE_PRINTF=0;              AC_SUBST([REPLACE_PRINTF])
226   REPLACE_REMOVE=0;              AC_SUBST([REPLACE_REMOVE])
227   REPLACE_RENAME=0;              AC_SUBST([REPLACE_RENAME])
228   REPLACE_RENAMEAT=0;            AC_SUBST([REPLACE_RENAMEAT])
229   REPLACE_SNPRINTF=0;            AC_SUBST([REPLACE_SNPRINTF])
230   REPLACE_SPRINTF=0;             AC_SUBST([REPLACE_SPRINTF])
231   REPLACE_STDIO_READ_FUNCS=0;    AC_SUBST([REPLACE_STDIO_READ_FUNCS])
232   REPLACE_STDIO_WRITE_FUNCS=0;   AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
233   REPLACE_TMPFILE=0;             AC_SUBST([REPLACE_TMPFILE])
234   REPLACE_VASPRINTF=0;           AC_SUBST([REPLACE_VASPRINTF])
235   REPLACE_VDPRINTF=0;            AC_SUBST([REPLACE_VDPRINTF])
236   REPLACE_VFPRINTF=0;            AC_SUBST([REPLACE_VFPRINTF])
237   REPLACE_VPRINTF=0;             AC_SUBST([REPLACE_VPRINTF])
238   REPLACE_VSNPRINTF=0;           AC_SUBST([REPLACE_VSNPRINTF])
239   REPLACE_VSPRINTF=0;            AC_SUBST([REPLACE_VSPRINTF])