dnl
dnl $Id: configure.in,v 1.44 2003/10/11 20:50:50 hartmann Exp $
dnl

dnl IU_LIB_NCURSES -- check for, and configure, ncurses
dnl
dnl If libncurses is found to exist on this system and the --disable-ncurses
dnl flag wasn't specified, defines LIBNCURSES with the appropriate linker
dnl specification, and possibly defines NCURSES_INCLUDE with the appropriate
dnl -I flag to get access to ncurses include files.
dnl
AC_DEFUN([IU_LIB_NCURSES], [
  AC_ARG_ENABLE(ncurses,    [  --disable-ncurses       don't prefer -lncurses over -lcurses],
              , enable_ncurses=yes)
  if test "$enable_ncurses" = yes; then
    AC_CHECK_LIB(ncurses, initscr, LIBNCURSES="-lncurses")
    if test "$LIBNCURSES"; then
      # Use ncurses header files instead of the ordinary ones, if possible;
      # is there a better way of doing this, that avoids looking in specific
      # directories?
      AC_ARG_WITH(ncurses-include-dir,
[  --with-ncurses-include-dir=DIR
                          Set directory containing the include files for
                          use with -lncurses, when it isn't installed as
                          the default curses library.  If DIR is "none",
                          then no special ncurses include files are used.
  --without-ncurses-include-dir
                          Equivalent to --with-ncurses-include-dir=none])dnl
      if test "${with_ncurses_include_dir+set}" = set; then
        AC_MSG_CHECKING(for ncurses include dir)
	case "$with_ncurses_include_dir" in
	  no|none)
	    freesweep_cv_includedir_ncurses=none;;
	  *)
	    freesweep_cv_includedir_ncurses="$with_ncurses_include_dir";;
	esac
        AC_MSG_RESULT($freesweep_cv_includedir_ncurses)
      else
	AC_CACHE_CHECK(for ncurses include dir,
		       freesweep_cv_includedir_ncurses,
	  for D in $includedir $prefix/include /local/include /usr/local/include /include /usr/include; do
	    if test -d $D/ncurses; then
	      freesweep_cv_includedir_ncurses="$D/ncurses"
	      break
	    fi
	    test "$freesweep_cv_includedir_ncurses" \
	      || freesweep_cv_includedir_ncurses=none
	  done)
      fi
      if test "$freesweep_cv_includedir_ncurses" = none; then
        NCURSES_INCLUDE=""
      else
        NCURSES_INCLUDE="-I$freesweep_cv_includedir_ncurses"
      fi
    fi
  fi
  AC_SUBST(NCURSES_INCLUDE)
  AC_SUBST(LIBNCURSES)])dnl

dnl IU_LIB_TERMCAP -- check for various termcap libraries
dnl
dnl Checks for various common libraries implementing the termcap interface,
dnl including ncurses (unless --disable ncurses is specified), curses (which
dnl does on some systems), termcap, and termlib.  If termcap is found, then
dnl LIBTERMCAP is defined with the appropriate linker specification.
dnl 
AC_DEFUN([IU_LIB_TERMCAP], [
  AC_REQUIRE([IU_LIB_NCURSES])
  if test "$LIBNCURSES"; then
    LIBTERMCAP="$LIBNCURSES"
  else
    AC_CHECK_LIB(curses, tgetent, LIBTERMCAP=-lcurses)
    if test "$ac_cv_lib_curses_tgetent" = no; then
      AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP=-ltermcap)
    fi
    if test "$ac_cv_lib_termcap_tgetent" = no; then
      AC_CHECK_LIB(termlib, tgetent, LIBTERMCAP=-ltermlib)
    fi
  fi
  AC_SUBST(LIBTERMCAP)])dnl

dnl IU_LIB_CURSES -- checke for curses, and associated libraries
dnl
dnl Checks for varions libraries implementing the curses interface, and if
dnl found, defines LIBCURSES to be the appropriate linker specification,
dnl *including* any termcap libraries if needed (some versions of curses
dnl don't need termcap).
dnl
AC_DEFUN([IU_LIB_CURSES], [
  AC_REQUIRE([IU_LIB_TERMCAP])
  AC_REQUIRE([IU_LIB_NCURSES])
  if test "$LIBNCURSES"; then
    LIBCURSES="$LIBNCURSES"	# ncurses doesn't require termcap
  else
    _IU_SAVE_LIBS="$LIBS"
    LIBS="$LIBTERMCAP"
    AC_CHECK_LIB(curses, initscr, LIBCURSES="-lcurses")
    if test "$LIBCURSES" -a "$LIBTERMCAP" -a "$LIBCURSES" != "$LIBTERMCAP"; then
      AC_CACHE_CHECK(whether curses needs $LIBTERMCAP,
		     freesweep_cv_curses_needs_termcap,
	LIBS="$LIBCURSES"
	AC_TRY_LINK([#include <curses.h>], [initscr ();],
		    [freesweep_cv_curses_needs_termcap=no],
		    [freesweep_cv_curses_needs_termcap=yes]))
      if test $freesweep_cv_curses_needs_termcap = yes; then
	  LIBCURSES="$LIBCURSES $LIBTERMCAP"
      fi
    fi
    LIBS="$_IU_SAVE_LIBS"
  fi
  AC_SUBST(LIBCURSES)])dnl




dnl Process this file with autoconf to produce a configure script.
AC_INIT(sweep.h.in)dnl
AC_CONFIG_HEADER(config.h)dnl

dnl Find out where we're building
AC_CANONICAL_HOST

dnl Checks for programs.
AC_PROG_CC
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PATH_PROG(TAR, tar)dnl
AC_PATH_PROG(GZIP, gzip)dnl
AC_PATH_PROG(RM, rm)dnl

dnl Set the prefsdir to something
AC_ARG_WITH(prefsdir, [  --with-prefsdir=DIR    put the shared best time file in DIR [/usr/local/share]], PREFSDIR=$with_prefsdir, PREFSDIR='/usr/local/share')dnl
AC_SUBST(PREFSDIR)dnl

dnl Set the scoresdir to something
dnl AC_ARG_WITH(scoresdir, [  --with-scoresdir=DIR    put the shared best time file in DIR [/usr/local/share]], SCORESDIR=$with_scoresdir, SCORESDIR='/usr/local/share')dnl
AC_ARG_WITH(scoresdir, [  --with-scoresdir=DIR    put the shared best time file in DIR [/usr/local/share]], SCORESDIR=$with_scoresdir)dnl
AC_SUBST(SCORESDIR)dnl
if test X$SCORESDIR != X ; then
	AC_DEFINE_UNQUOTED(SCORESDIR, $SCORESDIR)dnl
fi

dnl Look for ncurses in a variable.

dnl Check for debugging file
AC_ARG_ENABLE(debug-log,
[  --enable-debug-log      Enables debugging file, debug.log.], enable_debug_log=yes)
if test "$enable_debug_log" = 'yes' ; then
	AC_DEFINE(DEBUG_LOG)dnl
fi

dnl Check for curses and ncurses.
IU_LIB_NCURSES
IU_LIB_CURSES

if test "X${LIBNCURSES}" != "X" ; then
	LIBS="${LIBNCURSES} ${LIBS}"
	HAVE_LIBNCURSES=1
	AC_SUBST(HAVE_LIBNCURSES)dnl
else
	dnl Look for curses
	AC_CHECK_LIB(curses,main)dnl
fi

dnl Replace `main' with a function in -lm:
AC_CHECK_LIB(m,main)dnl

dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(limits.h string.h unistd.h sys/file.h getopt.h errno.h sys/types.h)dnl

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T

dnl Checks for library functions.
AC_TYPE_SIGNAL
AC_CHECK_FUNCS(strdup memset memmove fileno lockf flock get_current_dir_name strncpy strncat)dnl

# Look for lesser but similar functions.
AC_DEFUN([AC_FUNC_SNPRINTF],
[AC_CACHE_CHECK(for working snprintf, ac_cv_func_snprintf,
[AC_TRY_RUN([#include <stdio.h>
int main () { exit (!(3 <= snprintf(NULL,0,"%d",100))); }
], ac_cv_func_snprintf=yes, ac_cv_func_snprintf=no,
ac_cv_func_snprintf=no)])
if test $ac_cv_func_snprintf = yes; then
  AC_DEFINE(HAVE_SNPRINTF)
  fi
  ])

AC_CHECK_FUNCS(snprintf)dnl
if test "${ac_cv_func_snprintf}" = 'no' ; then
	AC_MSG_WARN([Consider getting a system with snprintf.])
	AC_CHECK_FUNCS(sprintf)dnl
fi

AC_CHECK_FUNCS(vsnprintf)dnl
if test "${ac_cv_func_vsnprintf}" = 'no' ; then
	AC_MSG_WARN([Consider getting a system with vsnprintf.])
	AC_CHECK_FUNCS(vsprintf)dnl
fi

AC_CHECK_FUNCS(getopt_long)dnl
if test "${ac_cv_func_getopt_long}" = 'no' ; then
	AC_MSG_WARN([Consider getting a system with getopt_long.])
	AC_CHECK_FUNCS(getopt)dnl
fi

dnl If neither locking mechanism is there, disable group scores.
if test "${with_scoresdir}" != '' ; then
	if test "${ac_cv_func_flock}" = 'no' && test "${ac_cv_func_lockf}" = 'no' ; then
		AC_MSG_WARN([Neither lockf nor flock was found. Best times files will be risky.])dnl
	else
		AC_DEFINE(USE_GROUP_BEST_FILE)dnl
	fi
fi

AC_OUTPUT(Makefile sweep.h freesweep.6)dnl
