view m4/fpending.m4 @ 17469:3efb2780c5ae

fpending: port to recent Cygwin change to stdio_ext.h Reported by LRN in <http://lists.gnu.org/archive/html/bug-gnulib/2013-08/msg00028.html>. * lib/fpending.h: Don't worry about HAVE_DECL___FPENDING; just declare __fpending unless it's a macro. A duplicate decl shouldn't hurt. * m4/fpending.m4 (gl_FUNC_FPENDING): Check that an __fpending call compiles and links, instead of separately checking for decl and lib function. * modules/fpending (configure-ac): Adjust to fpending.m4's renaming of shell variable.
author Paul Eggert <eggert@cs.ucla.edu>
date Sun, 11 Aug 2013 16:36:16 -0700
parents e542fd46ad6f
children
line wrap: on
line source

# serial 20

# Copyright (C) 2000-2001, 2004-2013 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

dnl From Jim Meyering
dnl Using code from emacs, based on suggestions from Paul Eggert
dnl and Ulrich Drepper.

dnl Find out how to determine the number of pending output bytes on a stream.
dnl glibc (2.1.93 and newer) and Solaris provide __fpending.  On other systems,
dnl we have to grub around in the FILE struct.

AC_DEFUN([gl_FUNC_FPENDING],
[
  AC_CHECK_HEADERS_ONCE([stdio_ext.h])
  AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending],
    [
      AC_LINK_IFELSE(
        [AC_LANG_PROGRAM(
           [[#include <stdio.h>
             #if HAVE_STDIO_EXT_H
             # include <stdio_ext.h>
             #endif
           ]],
           [[return ! __fpending (stdin);]])],
        [gl_cv_func___fpending=yes],
        [gl_cv_func___fpending=no])
    ])
])

AC_DEFUN([gl_PREREQ_FPENDING],
[
  AC_CACHE_CHECK(
              [how to determine the number of pending output bytes on a stream],
                 ac_cv_sys_pending_output_n_bytes,
    [
      for ac_expr in                                                    \
                                                                        \
          '# glibc2'                                                    \
          'fp->_IO_write_ptr - fp->_IO_write_base'                      \
                                                                        \
          '# traditional Unix'                                          \
          'fp->_ptr - fp->_base'                                        \
                                                                        \
          '# BSD'                                                       \
          'fp->_p - fp->_bf._base'                                      \
                                                                        \
          '# SCO, Unixware'                                             \
          '(fp->__ptr ? fp->__ptr - fp->__base : 0)'                    \
                                                                        \
          '# QNX'                                                       \
          '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
                                                                        \
          '# old glibc?'                                                \
          'fp->__bufp - fp->__buffer'                                   \
                                                                        \
          '# old glibc iostream?'                                       \
          'fp->_pptr - fp->_pbase'                                      \
                                                                        \
          '# emx+gcc'                                                   \
          'fp->_ptr - fp->_buffer'                                      \
                                                                        \
          '# Minix'                                                     \
          'fp->_ptr - fp->_buf'                                         \
                                                                        \
          '# Plan9'                                                     \
          'fp->wp - fp->buf'                                            \
                                                                        \
          '# VMS'                                                       \
          '(*fp)->_ptr - (*fp)->_base'                                  \
                                                                        \
          '# e.g., DGUX R4.11; the info is not available'               \
          1                                                             \
          ; do

        # Skip each embedded comment.
        case "$ac_expr" in '#'*) continue;; esac

        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],
          [[FILE *fp = stdin; (void) ($ac_expr);]])],
          [fp_done=yes]
        )
        test "$fp_done" = yes && break
      done

      ac_cv_sys_pending_output_n_bytes=$ac_expr
    ]
  )
  AC_DEFINE_UNQUOTED([PENDING_OUTPUT_N_BYTES],
    $ac_cv_sys_pending_output_n_bytes,
    [the number of pending output bytes on stream 'fp'])
])