Support SIGPIPE in stdio functions for writing.
[gnulib.git] / m4 / stdio_h.m4
1 # stdio_h.m4 serial 13
2 dnl Copyright (C) 2007-2008 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   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
10   gl_CHECK_NEXT_HEADERS([stdio.h])
11   dnl No need to create extra modules for these functions. Everyone who uses
12   dnl <stdio.h> likely needs them.
13   GNULIB_FPRINTF=1
14   GNULIB_PRINTF=1
15   GNULIB_VFPRINTF=1
16   GNULIB_VPRINTF=1
17   GNULIB_FPUTC=1
18   GNULIB_PUTC=1
19   GNULIB_PUTCHAR=1
20   GNULIB_FPUTS=1
21   GNULIB_PUTS=1
22   GNULIB_FWRITE=1
23   dnl This ifdef is just an optimization, to avoid performing a configure
24   dnl check whose result is not used. It does not make the test of
25   dnl GNULIB_STDIO_H_SIGPIPE or GNULIB_SIGPIPE redundant.
26   m4_ifdef([gl_SIGNAL_SIGPIPE], [
27     gl_SIGNAL_SIGPIPE
28     if test $gl_cv_header_signal_h_SIGPIPE != yes; then
29       REPLACE_STDIO_WRITE_FUNCS=1
30       AC_LIBOBJ([stdio-write])
31     fi
32   ])
33 ])
34
35 AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
36 [
37   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
38   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
39   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
40 ])
41
42 AC_DEFUN([gl_STDIO_H_DEFAULTS],
43 [
44   GNULIB_FPRINTF=0;              AC_SUBST([GNULIB_FPRINTF])
45   GNULIB_FPRINTF_POSIX=0;        AC_SUBST([GNULIB_FPRINTF_POSIX])
46   GNULIB_PRINTF=0;               AC_SUBST([GNULIB_PRINTF])
47   GNULIB_PRINTF_POSIX=0;         AC_SUBST([GNULIB_PRINTF_POSIX])
48   GNULIB_SNPRINTF=0;             AC_SUBST([GNULIB_SNPRINTF])
49   GNULIB_SPRINTF_POSIX=0;        AC_SUBST([GNULIB_SPRINTF_POSIX])
50   GNULIB_VFPRINTF=0;             AC_SUBST([GNULIB_VFPRINTF])
51   GNULIB_VFPRINTF_POSIX=0;       AC_SUBST([GNULIB_VFPRINTF_POSIX])
52   GNULIB_VPRINTF=0;              AC_SUBST([GNULIB_VPRINTF])
53   GNULIB_VPRINTF_POSIX=0;        AC_SUBST([GNULIB_VPRINTF_POSIX])
54   GNULIB_VSNPRINTF=0;            AC_SUBST([GNULIB_VSNPRINTF])
55   GNULIB_VSPRINTF_POSIX=0;       AC_SUBST([GNULIB_VSPRINTF_POSIX])
56   GNULIB_VASPRINTF=0;            AC_SUBST([GNULIB_VASPRINTF])
57   GNULIB_OBSTACK_PRINTF=0;       AC_SUBST([GNULIB_OBSTACK_PRINTF])
58   GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
59   GNULIB_FOPEN=0;                AC_SUBST([GNULIB_FOPEN])
60   GNULIB_FREOPEN=0;              AC_SUBST([GNULIB_FREOPEN])
61   GNULIB_FSEEK=0;                AC_SUBST([GNULIB_FSEEK])
62   GNULIB_FSEEKO=0;               AC_SUBST([GNULIB_FSEEKO])
63   GNULIB_FTELL=0;                AC_SUBST([GNULIB_FTELL])
64   GNULIB_FTELLO=0;               AC_SUBST([GNULIB_FTELLO])
65   GNULIB_FFLUSH=0;               AC_SUBST([GNULIB_FFLUSH])
66   GNULIB_FPUTC=0;                AC_SUBST([GNULIB_FPUTC])
67   GNULIB_PUTC=0;                 AC_SUBST([GNULIB_PUTC])
68   GNULIB_PUTCHAR=0;              AC_SUBST([GNULIB_PUTCHAR])
69   GNULIB_FPUTS=0;                AC_SUBST([GNULIB_FPUTS])
70   GNULIB_PUTS=0;                 AC_SUBST([GNULIB_PUTS])
71   GNULIB_FWRITE=0;               AC_SUBST([GNULIB_FWRITE])
72   GNULIB_GETDELIM=0;             AC_SUBST([GNULIB_GETDELIM])
73   GNULIB_GETLINE=0;              AC_SUBST([GNULIB_GETLINE])
74   GNULIB_PERROR=0;               AC_SUBST([GNULIB_PERROR])
75   GNULIB_STDIO_H_SIGPIPE=0;      AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
76   dnl Assume proper GNU behavior unless another module says otherwise.
77   REPLACE_STDIO_WRITE_FUNCS=0;   AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
78   REPLACE_FPRINTF=0;             AC_SUBST([REPLACE_FPRINTF])
79   REPLACE_VFPRINTF=0;            AC_SUBST([REPLACE_VFPRINTF])
80   REPLACE_PRINTF=0;              AC_SUBST([REPLACE_PRINTF])
81   REPLACE_VPRINTF=0;             AC_SUBST([REPLACE_VPRINTF])
82   REPLACE_SNPRINTF=0;            AC_SUBST([REPLACE_SNPRINTF])
83   HAVE_DECL_SNPRINTF=1;          AC_SUBST([HAVE_DECL_SNPRINTF])
84   REPLACE_VSNPRINTF=0;           AC_SUBST([REPLACE_VSNPRINTF])
85   HAVE_DECL_VSNPRINTF=1;         AC_SUBST([HAVE_DECL_VSNPRINTF])
86   REPLACE_SPRINTF=0;             AC_SUBST([REPLACE_SPRINTF])
87   REPLACE_VSPRINTF=0;            AC_SUBST([REPLACE_VSPRINTF])
88   HAVE_VASPRINTF=1;              AC_SUBST([HAVE_VASPRINTF])
89   REPLACE_VASPRINTF=0;           AC_SUBST([REPLACE_VASPRINTF])
90   HAVE_DECL_OBSTACK_PRINTF=1;    AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
91   REPLACE_OBSTACK_PRINTF=0;      AC_SUBST([REPLACE_OBSTACK_PRINTF])
92   REPLACE_FOPEN=0;               AC_SUBST([REPLACE_FOPEN])
93   REPLACE_FREOPEN=0;             AC_SUBST([REPLACE_FREOPEN])
94   HAVE_FSEEKO=1;                 AC_SUBST([HAVE_FSEEKO])
95   REPLACE_FSEEKO=0;              AC_SUBST([REPLACE_FSEEKO])
96   REPLACE_FSEEK=0;               AC_SUBST([REPLACE_FSEEK])
97   HAVE_FTELLO=1;                 AC_SUBST([HAVE_FTELLO])
98   REPLACE_FTELLO=0;              AC_SUBST([REPLACE_FTELLO])
99   REPLACE_FTELL=0;               AC_SUBST([REPLACE_FTELL])
100   REPLACE_FFLUSH=0;              AC_SUBST([REPLACE_FFLUSH])
101   HAVE_DECL_GETDELIM=1;          AC_SUBST([HAVE_DECL_GETDELIM])
102   HAVE_DECL_GETLINE=1;           AC_SUBST([HAVE_DECL_GETLINE])
103   REPLACE_GETLINE=0;             AC_SUBST([REPLACE_GETLINE])
104   REPLACE_PERROR=0;              AC_SUBST([REPLACE_PERROR])
105 ])
106
107 dnl Code shared by fseeko and ftello.  Determine if large files are supported,
108 dnl but stdin does not start as a large file by default.
109 AC_DEFUN([gl_STDIN_LARGE_OFFSET],
110   [
111     AC_CACHE_CHECK([whether stdin defaults to large file offsets],
112       [gl_cv_var_stdin_large_offset],
113       [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],
114 [[#if defined __SL64 && defined __SCLE /* cygwin */
115   /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making
116      fseeko/ftello needlessly fail.  This bug was fixed in 1.5.25, and
117      it is easier to do a version check than building a runtime test.  */
118 # include <cygwin/version.h>
119 # if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25)
120   choke me
121 # endif
122 #endif]])],
123         [gl_cv_var_stdin_large_offset=yes],
124         [gl_cv_var_stdin_large_offset=no])])
125 ])