/* acconfig.h
   This file is in the public domain.

   Descriptive text for the C preprocessor macros that
   the distributed Autoconf macros can define.
   No software package will use all of them; autoheader copies the ones
   your configure.in uses into your configuration header file templates.

   The entries are in sort -df order: alphabetical, case insensitive,
   ignoring punctuation (such as underscores).  Although this order
   can split up related entries, it makes it easier to check whether
   a given entry is in the file.

   Leave the following blank line there!!  Autoheader needs it.  */


/* Definitions pulled in from aclocal.m4. */
#undef VOID_SIGHANDLER

#undef GWINSZ_IN_SYS_IOCTL

#undef TIOCSTAT_IN_SYS_IOCTL

#undef HAVE_GETPW_DECLS

#undef FIONREAD_IN_SYS_IOCTL

#undef HAVE_BSD_SIGNALS

#undef HAVE_LSTAT

#undef HAVE_POSIX_SIGNALS

#undef HAVE_POSIX_SIGSETJMP

#undef HAVE_USG_SIGHOLD

#undef MUST_REINSTALL_SIGHANDLERS

#undef SPEED_T_IN_SYS_TYPES

#undef STRCOLL_BROKEN

#undef STRUCT_DIRENT_HAS_D_FILENO

#undef STRUCT_DIRENT_HAS_D_INO

#undef STRUCT_WINSIZE_IN_SYS_IOCTL

#undef STRUCT_WINSIZE_IN_TERMIOS


/* Leave that blank line there!!  Autoheader needs it.
   If you're adding to this file, keep in mind:
   The entries are in sort -df order: alphabetical, case insensitive,
   ignoring punctuation (such as underscores).  */
