copy-file now truncates output after writing
[emacs.git] / m4 / stdio_h.m4
blobf60cc2156e00cccbbc135fd4cc3e1d4b63be3fba
1 # stdio_h.m4 serial 46
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.
7 AC_DEFUN([gl_STDIO_H],
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
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
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   ])
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   ])
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])