/* 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 TIOCGWINSZ_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).  */
