*** empty log message ***
[coreutils.git] / m4 / fpending.m4
blob87398b142b4ba5e9ccccfd631ecac62be355c8de
1 #serial 6
3 # Copyright (C) 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
4 # This file is free software; the Free Software Foundation
5 # gives unlimited permission to copy and/or distribute it,
6 # with or without modifications, as long as this notice is preserved.
8 dnl From Jim Meyering
9 dnl Using code from emacs, based on suggestions from Paul Eggert
10 dnl and Ulrich Drepper.
12 dnl Find out how to determine the number of pending output bytes on a stream.
13 dnl glibc (2.1.93 and newer) and Solaris provide __fpending.  On other systems,
14 dnl we have to grub around in the FILE struct.
16 AC_DEFUN([gl_FUNC_FPENDING],
18   AC_LIBSOURCES([__fpending.c, __fpending.h])
20   AC_CHECK_HEADERS(stdio_ext.h)
21   AC_REPLACE_FUNCS([__fpending])
22   fp_headers='
23 #     if HAVE_STDIO_EXT_H
24 #      include <stdio_ext.h>
25 #     endif
27   AC_CHECK_DECLS([__fpending], , , $fp_headers)
28   if test $ac_cv_func___fpending = no; then
29     AC_CACHE_CHECK(
30               [how to determine the number of pending output bytes on a stream],
31                    ac_cv_sys_pending_output_n_bytes,
32       [
33         for ac_expr in                                          \
34                                                                 \
35             '# glibc2'                                          \
36             'fp->_IO_write_ptr - fp->_IO_write_base'            \
37                                                                 \
38             '# traditional Unix'                                \
39             'fp->_ptr - fp->_base'                              \
40                                                                 \
41             '# BSD'                                             \
42             'fp->_p - fp->_bf._base'                            \
43                                                                 \
44             '# SCO, Unixware'                                   \
45             'fp->__ptr - fp->__base'                            \
46                                                                 \
47             '# old glibc?'                                      \
48             'fp->__bufp - fp->__buffer'                         \
49                                                                 \
50             '# old glibc iostream?'                             \
51             'fp->_pptr - fp->_pbase'                            \
52                                                                 \
53             '# VMS'                                             \
54             '(*fp)->_ptr - (*fp)->_base'                        \
55                                                                 \
56             '# e.g., DGUX R4.11; the info is not available'     \
57             1                                                   \
58             ; do
60           # Skip each embedded comment.
61           case "$ac_expr" in '#'*) continue;; esac
63           AC_TRY_COMPILE(
64             [#include <stdio.h>
65             ],
66             [FILE *fp = stdin; (void) ($ac_expr);],
67             fp_done=yes
68           )
69           test "$fp_done" = yes && break
70         done
72         ac_cv_sys_pending_output_n_bytes=$ac_expr
73       ]
74     )
75     AC_DEFINE_UNQUOTED(PENDING_OUTPUT_N_BYTES,
76       $ac_cv_sys_pending_output_n_bytes,
77       [the number of pending output bytes on stream `fp'])
78   fi