dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$Id$])
AC_INIT(vpath.c)		dnl A distinctive file to look for in srcdir.
AC_CONFIG_HEADER(config.h)

# We want these before the checks, so the checks can modify their values.
test -z "$CFLAGS" && CFLAGS=-g AC_SUBST(CFLAGS)
test -z "$LDFLAGS" && LDFLAGS=-g AC_SUBST(LDFLAGS)

AC_SET_MAKE
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_RANLIB
AC_PROG_CPP			dnl Later checks need this.
AC_AIX
AC_ISC_POSIX
AC_MINIX
AC_STDC_HEADERS
AC_DIR_HEADER
AC_UID_T			dnl Also does gid_t.
AC_GETGROUPS_T
AC_PID_T
AC_RETSIGTYPE
AC_HAVE_HEADERS(unistd.h limits.h sys/param.h fcntl.h string.h memory.h \
	        sys/timeb.h)
AC_MINUS_C_MINUS_O
AC_CONST			dnl getopt needs this.
AC_STAT_MACROS_BROKEN

AC_SUBST(LIBOBJS)

AC_HAVE_FUNCS(getdtablesize sys_siglist _sys_siglist psignal \
	      dup2 getcwd sigsetmask getgroups setlinebuf \
	      seteuid setegid setreuid setregid strerror)
AC_ALLOCA
AC_VFORK
AC_SETVBUF_REVERSED
AC_GETLOADAVG
AC_STRCOLL

dnl Check out the wait reality.
AC_HAVE_HEADERS(sys/wait.h) AC_HAVE_FUNCS(waitpid wait3)
AC_COMPILE_CHECK(union wait, [#include <sys/types.h>
#include <sys/wait.h>],
	 	 [union wait status; int pid; pid = wait (&status);
#ifdef WEXITSTATUS
/* Some POSIXoid systems have both the new-style macros and the old
   union wait type, and they do not work together.  If union wait
   conflicts with WEXITSTATUS et al, we don't want to use it at all.  */
if (WEXITSTATUS (status) != 0) pid = -1;
#endif
#ifdef HAVE_WAITPID
/* Make sure union wait works with waitpid.  */
pid = waitpid (-1, &status, 0);
#endif
],
		 AC_DEFINE(HAVE_UNION_WAIT))

AC_SYS_SIGLIST_DECLARED

# The presence of the following is not meant to imply
# that make necessarily works on those systems.
AC_DYNIX_SEQ
AC_XENIX_DIR
AC_IRIX_SUN

AC_SUBST(REMOTE) REMOTE=stub
AC_WITH(customs, [REMOTE=cstms
LIBS="$LIBS libcustoms.a"])

echo checking for location of SCCS get command
if test -f /usr/sccs/get; then
  SCCS_GET=/usr/sccs/get
  AC_DEFINE(SCCS_GET, "/usr/sccs/get")
else
  SCCS_GET=get
  AC_DEFINE(SCCS_GET, "get")
fi
ac_clean_files="$ac_clean_files s.conftest conftoast" # Remove these later.
if ( /usr/sccs/admin -n s.conftest || admin -n s.conftest ) >/dev/null 2>&1 &&
   test -f s.conftest; then
  # We successfully created an SCCS file.
  echo checking if SCCS get command understands -G
  if $SCCS_GET -Gconftoast s.conftest >/dev/null 2>&1 &&
     test -f conftoast; then
    AC_DEFINE(SCCS_GET_MINUS_G)
  fi
fi
rm -f s.conftest conftoast

AC_OUTPUT(Makefile build.sh glob/Makefile, [
# Makefile uses this timestamp file to know when to remake Makefile,
# build.sh, and glob/Makefile.
touch stamp-config])

dnl Local Variables:
dnl comment-start: "dnl "
dnl comment-end: ""
dnl comment-start-skip: "\\bdnl\\b\\s *"
dnl compile-command: "make configure config.h.in"
dnl End:
