dnl| configure.in
dnl|
dnl| You can process this file with autoconf to produce a configure script.
dnl| However, normally the supplied configure script will work fine.
dnl|
dnl| If you do need to change the configure script, instead of editing
dnl| it directly, try to edit configure.in (in a way that will keep
dnl| it portable to sites and systems other than your own), and run autoconf 
dnl| to regenerate configure.  Then submit your changes to be folded into
dnl| the standard version of xboard.

AC_INIT(xboard.c)
AC_CONFIG_HEADER(config.h)

PRODUCT=xboard
VERSION=4.2
PATCHLEVEL=7

if test -z "$CFLAGS" ; then
dnl| Prevent the next macro from setting CFLAGS to -g
  CFLAGS=" "
fi
AC_PROG_CC
AC_PROG_CPP
AC_ISC_POSIX
AC_PROG_INSTALL
AC_CHECK_PROGS(LEX, lex flex, lex_not_found)
if test "$LEX" != lex_not_found ; then
  AC_DECL_YYTEXT
fi
AC_CHECK_PROGS(RSH, remsh rsh, rsh)
AC_DEFINE_UNQUOTED(REMOTE_SHELL, "$RSH")
AC_CHECK_PROG(NROFF, nroff, [nroff -man], cat)
AC_SUBST(NROFFFLAGS)
AC_PATH_PROGS(AWKPATH, awk mawk gawk nawk)
AC_PATH_PROGS(PERLPATH, perl)

AC_ARG_WITH(Xaw3d, [  --with-Xaw3d            use Xaw3d instead of Xaw],
  [AC_DEFINE(USE_XAW3D)
   XAW_LIBS="-lXaw3d"],
  XAW_LIBS="-lXaw")
AC_SUBST(XAW_LIBS)

AC_HEADER_STDC
AC_HEADER_TIME
AC_HEADER_SYS_WAIT
AC_HEADER_DIRENT
AC_TYPE_SIGNAL
AC_CHECK_HEADERS(stropts.h sys/time.h string.h unistd.h sys/systeminfo.h)
AC_CHECK_HEADERS(fcntl.h sys/fcntl.h, break)
AC_CHECK_HEADERS(sys/socket.h lan/socket.h, break)
AC_CHECK_HEADER(stddef.h, [], AC_DEFINE(X_WCHAR, 1))

AC_CHECK_FUNCS(_getpty grantpt setitimer usleep)
AC_CHECK_FUNCS(gettimeofday ftime, break)
AC_CHECK_FUNCS(random rand48, break)
AC_CHECK_FUNCS(gethostname sysinfo, break)
AC_CHECK_FUNC(setlocale, [],
  AC_CHECK_LIB(i, setlocale, [], AC_DEFINE(X_LOCALE, 1)))

AC_CHECK_LIB(seq, getpseudotty)

AC_PATH_XTRA
if test -n "$no_x" ; then
  echo $PRODUCT requires the X Window System header files and libraries!
  echo They were not found on your system.  See FAQ topic C.2.
  echo configure failed
  exit 1
fi

AC_CANONICAL_HOST

dnl| The following info is mostly gathered from GNU Emacs 19.24.  Basically,
dnl| we are trying to find out whether this is a System-V derivative in
dnl| which pipes don't work with select() and if so, whether there is anything
dnl| strange about the way to open a pty.  Some of the work was done above
dnl| by looking for _getpty, grantpt, and getpseudotty.  A few other strange
dnl| properties of particular systems are also handled here.

dnl| 4/6/97 I'm not sure there really are any systems where pipes
dnl| don't work with select(), and ptys cause problems on many
dnl| systems, so I'm changing the default to disable ptys in all
dnl| cases.  I will change it back if I get bug reports that are fixed
dnl| by doing a "configure --enable-ptys"

USE_PTYS=0
case "$host" in
  *-*-hpux* )
    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
	[sprintf (pty_name, "/dev/pty/tty%c%x", c, i);])
    AC_DEFINE(PTY_NAME_SPRINTF,
	[sprintf (pty_name, "/dev/ptym/pty%c%x", c, i);])
dnl| USE_PTYS=1
    if test "$GCC" = yes; then
      CONF_CFLAGS="-fwritable-strings"
    else

dnl| Note: You might be able to build xboard even if your compiler does not
dnl| support ANSI C (-Aa).  xboard itself does not require ANSI C.  I don't
dnl| know whether the X header files on HP-UX require it.

      CONF_CFLAGS="-Aa -D_HPUX_SOURCE"
    fi

dnl| HP doesn't supply a full set of X header files and libraries.  People
dnl| often have some things installed in one place and some in another. 
dnl| AC_PATH_XTRA will find only one place, so we try to add all the
dnl| likely ones that might be missing here.  It might be better to
dnl| change AC_PATH_XTRA to try to extract this information from imake,
dnl| since folks who install the missing bits often configure their
dnl| imake to find them, but I don't want to delve into autoconf and
dnl| hack on its internals.

    if test -d /opt/hppd/include/X11; then
      X_CFLAGS="$X_CFLAGS -I/opt/hppd/include"
      X_LIBS="$X_LIBS -L/opt/hppd/lib"
    elif test -d /usr/contrib/X11R5/include; then
      X_CFLAGS="$X_CFLAGS -I/usr/contrib/X11R5/include"
      X_LIBS="$X_LIBS -L/usr/contrib/X11R5/lib"
    elif test -d /usr/contrib/mitX11R5/include; then
      X_CFLAGS="$X_CFLAGS -I/usr/contrib/mitX11R5/include"
      X_LIBS="$X_LIBS -L/usr/contrib/mitX11R5/lib"
    elif test -d /MIT/X11R5/include; then
      X_CFLAGS="$X_CFLAGS -I/MIT/X11R5/include"
      X_LIBS="$X_LIBS -L/MIT/X11R5/lib"
    elif test -d /usr/local/include/X11R5; then
      X_CFLAGS="$X_CFLAGS -I/usr/local/include/X11R5"
      X_LIBS="$X_LIBS -L/usr/local/lib/X11R5"
    fi
    if test -d /usr/include/X11R5; then
      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R5"
      X_LIBS="$X_LIBS -L/usr/lib/X11R5 -L/usr/lib/X11R4"
    elif test -d /usr/include/X11R4; then
      X_CFLAGS="$X_CFLAGS -I/usr/include/X11R4"
      X_LIBS="$X_LIBS -L/usr/lib/X11R4"
    fi
  ;;

  romp-ibm-aix* )
    AC_DEFINE(IBMRTAIX, 1)
dnl| USE_PTYS=1
  ;;

  i386-ibm-aix )
dnl| USE_PTYS=1
    if test "$GCC" = yes; then
      CONF_CFLAGS="-fwritable-strings"
    fi
  ;;

  *-*-aix3* | *-*-bosx* )
    AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)])
    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");])
    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [strcpy (pty_name, ttyname (fd));])
dnl| USE_PTYS=1
  ;;

  *-*-cxux* )
    AC_DEFINE(FIRST_PTY_LETTER, 'A')
    AC_DEFINE(LAST_PTY_LETTER, 'P')
dnl| USE_PTYS=1
  ;;

  *-*-uniplus* )
    AC_DEFINE(UNIPLUS, 1)
dnl| USE_PTYS=1
  ;;

  *-*-rtu* )
    AC_DEFINE(FIRST_PTY_LETTER, 'z')
    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
        [sprintf (pty_name, "/dev/ttyp%x", i);])
    AC_DEFINE(PTY_NAME_SPRINTF,
	[sprintf (pty_name, "/dev/pty%x", i);])
    AC_DEFINE(RTU, 1)
dnl| USE_PTYS=1
  ;;

  *-*-iris* | *-*-irix3* )
    AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)])
    AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");])
    AC_DEFINE(PTY_TTY_NAME_SPRINTF,
	[sprintf (pty_name, "/dev/ttyq%d", minor(stb.st_rdev));])
dnl| USE_PTYS=1
  ;;

  *-*-irix* )
dnl| USE_PTYS=1
  ;;

  *-*-sunos4* | *-*-solaris1* )

dnl| Work around a bug in the SunOS 4.x linker.  Not needed if you have patches
dnl|  100512-02 and 100573-03 from Sun.  The X FAQ says that the following is
dnl|  "overkill," but doesn't explain what should be done instead.

    if test "$GCC" = yes; then
      PRE_XMULIB="-static"
      POST_XMULIB="-dynamic"
    else
      PRE_XMULIB="-Bstatic"
      POST_XMULIB="-Bdynamic"
    fi
  ;;

  *-*-sunos5* | *-*-solaris2* )
dnl| USE_PTYS=1

dnl| I'm not sure -lelf is needed, but it was in the old Imakefile.
dnl| The other libraries should all be found by Ac_PATH_XTRA or other
dnl| code above.

    X_LIBS="$X_LIBS -lelf"
  ;;

  *-*-sco* )
    AC_DEFINE(PTY_ITERATION, [for (i = 0; ; i++)])
    AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ptyp%d", i);])
    AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ttyp%d", i);])
dnl| USE_PTYS=1
  ;;
	
  *-*-dynix* | *-*-ptx* )
dnl| USE_PTYS=1
  ;;

  *-*-esix* )
dnl| USE_PTYS=1
  ;;

  *-*-usg5-4* | *-*-sysvr4* )
dnl| USE_PTYS=1
  ;;

  *-*-usg* | *-*-sysv* | *-*-aix* )
dnl| USE_PTYS=1
  ;;

  vax-*-ultrix )
    if test "$GCC" = yes; then
      CONF_CFLAGS="-fwritable-strings"
    fi
  ;;
esac

AC_ARG_ENABLE(xpm,
[  --enable-xpm            libXpm will be used if found (default)
  --disable-xpm           libXpm will not be used],
[enable_xpm="$enableval"], [enable_xpm="yes"])

if test "$enable_xpm" = "yes"; then
  save_cflags="$CFLAGS"
  CFLAGS="$CFLAGS $X_CFLAGS"
  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
  AC_CHECK_HEADERS(X11/xpm.h)
  CFLAGS="$save_cflags"
  if test "$ac_cv_header_X11_xpm_h" = "yes"; then
    save_ldflags="$LDFLAGS"
    LDFLAGS="$LDFLAGS $X_LIBS"
    AC_CHECK_LIB(Xpm, XpmReadFileToPixmap,
                 [X_PRE_LIBS="-lXpm $X_PRE_LIBS"; AC_DEFINE(HAVE_LIBXPM)], [],
                 [$X_PRE_LIBS -lX11 $X_EXTRA_LIBS])
    LDFLAGS="$save_ldflags"
  fi
fi

AC_SUBST(PRE_XMULIB)
AC_SUBST(POST_XMULIB)
AC_SUBST(CONF_CFLAGS)
AC_SUBST(CONF_LDFLAGS)

AC_MSG_CHECKING(whether ptys or pipes should be used)
AC_ARG_ENABLE(ptys, 
[  --enable-ptys           force use of pseudo-ttys with child processes
  --disable-ptys          force use of pipes with child processes],
[if test "$enableval" = yes; then
  USE_PTYS=1
  AC_MSG_RESULT([ptys (user override)])
fi
if test "$enableval" = no; then
  USE_PTYS=0
  AC_MSG_RESULT([pipes (user override)])
fi],
[if test "$USE_PTYS" = 1; then
  AC_MSG_RESULT(ptys)
else
  AC_MSG_RESULT(pipes)
fi])
AC_DEFINE_UNQUOTED(USE_PTYS, $USE_PTYS)

AC_ARG_ENABLE(zippy, 
[  --enable-zippy          support interfacing a chess program to ICS (default)
  --disable-zippy         do not support interfacing a chess program to ICS],
[enable_zippy="$enableval"], [enable_zippy="yes"])
if test "$enable_zippy" = yes; then
  AC_DEFINE(ZIPPY, 1)
  ZIPPY_O=zippy.o
  ZIPPY_H=zippy.h
fi
AC_SUBST(ZIPPY_O)  
AC_SUBST(ZIPPY_H)  

AC_ARG_ENABLE(sigint, 
[  --enable-sigint         sending SIGINT (^C) wakes up GNU Chess (default)
  --disable-sigint        typing a command wakes up GNU Chess],
[if test "$enableval" = yes; then
  AC_DEFINE(ATTENTION, 1)
fi],
[AC_DEFINE(ATTENTION, 1)])

AC_DEFINE_UNQUOTED(PRODUCT, "$PRODUCT")
AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
AC_DEFINE_UNQUOTED(PATCHLEVEL, "$PATCHLEVEL")
AC_SUBST(PRODUCT)
AC_SUBST(VERSION)
AC_SUBST(PATCHLEVEL)

AC_OUTPUT(Makefile cmail xboard.texinfo,
[test -z "$CONFIG_HEADERS" || date > stamp-h
chmod 755 cmail
])
