dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$Id$])
AC_PREREQ(2.13)dnl		dnl Minimum Autoconf version required.
AC_INIT(vpath.c)dnl		dnl A distinctive file to look for in srcdir.

AM_INIT_AUTOMAKE(make, 3.79.1)
AM_CONFIG_HEADER(config.h)

dnl Regular configure stuff

AC_CANONICAL_HOST
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_INSTALL
AC_CHECK_PROG(AR, ar, ar, ar)
AC_PROG_RANLIB
AC_PROG_CPP			dnl Later checks need this.
AC_AIX
AC_ISC_POSIX
AC_MINIX

AC_CHECK_PROG(PERL, perl, perl, perl)	dnl Needed for the test suite (only)

dnl This test must come as early as possible after the compiler configuration
dnl tests, because the choice of the file model can (in principle) affect
dnl whether functions and headers are available, whether they work, etc.
AC_SYS_LARGEFILE

AC_HEADER_STDC
AC_HEADER_DIRENT
AC_TYPE_UID_T			dnl Also does gid_t.
AC_TYPE_PID_T
AC_TYPE_SIGNAL
AC_CHECK_HEADERS(stdlib.h unistd.h limits.h sys/param.h fcntl.h string.h \
		 memory.h sys/time.h sys/timeb.h)
AC_PROG_CC_C_O
AM_PROG_CC_STDC
AC_C_CONST			dnl getopt needs this.
AC_C_INLINE			dnl gettext needs this.
AC_HEADER_STAT
AC_HEADER_TIME

dnl Handle internationalization

ALL_LINGUAS="de es fr ja ko nl pl pt_BR ru"
pds_WITH_GETTEXT


dnl See if the user wants nsec timestamps

AC_ARG_ENABLE(nsec-timestamps,
  [  --disable-nsec-timestamps disable use of sub-second timestamps],
  [make_cv_nsec_timestamps="$enableval"],
  [make_cv_nsec_timestamps="yes"])

if test "x$make_cv_nsec_timestamps" != xno; then
  AC_STRUCT_ST_MTIM_NSEC
fi
jm_AC_TYPE_UINTMAX_T

AC_SUBST(LIBOBJS)

AC_DEFUN(AC_CHECK_SYMBOL, [dnl
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_check_symbol_$1, [dnl
AC_TRY_LINK(, [extern char *sys_siglist[]; puts(*sys_siglist);],
	    ac_cv_check_symbol_$1=yes, ac_cv_check_symbol_$1=no)])
if test "$ac_cv_check_symbol_$1" = yes; then
changequote(,)dnl
  ac_tr_symbol=`echo $1 | tr '[a-z]' '[A-Z]'`
changequote([,])dnl
  AC_DEFINE_UNQUOTED(HAVE_${ac_tr_symbol})
fi
AC_MSG_RESULT($ac_cv_check_symbol_$1)])dnl

# Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
# Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
AC_SEARCH_LIBS(clock_gettime, [rt posix4])
if test "$ac_cv_search_clock_gettime" != no; then
  AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
            [Define if you have the clock_gettime function.])
fi

# See if we have a standard version of gettimeofday().  Since actual
# implementations can differ, just make sure we have the most common
# one.
AC_CACHE_CHECK([for standard gettimeofday], ac_cv_func_gettimeofday,
  [ac_cv_func_gettimeofday=no
   AC_TRY_RUN([#include <sys/time.h>
	       int main ()
	       {
		 struct timeval t; t.tv_sec = -1; t.tv_usec = -1;
		 exit (gettimeofday (&t, 0) != 0
		       || t.tv_sec < 0 || t.tv_usec < 0);
	       }],
	      ac_cv_func_gettimeofday=yes,
	      ac_cv_func_gettimeofday=no,
	      ac_cv_func_gettimeofday="no (cross-compiling)")])
if test $ac_cv_func_gettimeofday = yes; then
  AC_DEFINE(HAVE_GETTIMEOFDAY, 1,
	    [Define if you have a standard gettimeofday function])
fi

AC_CHECK_FUNCS(	memmove memcpy strchr strdup psignal mkstemp mktemp fdopen \
		dup2 getcwd sigsetmask sigaction getgroups setlinebuf \
		seteuid setegid setreuid setregid pipe strerror strsignal)

AC_CHECK_SYMBOL(sys_siglist)
AC_FUNC_ALLOCA
AC_FUNC_VFORK
AC_FUNC_VPRINTF
AC_FUNC_STRCOLL
AC_FUNC_CLOSEDIR_VOID
AC_FUNC_SETVBUF_REVERSED

AC_CHECK_LIB(kstat, kstat_open) dnl _Must_ come before AC_FUNC_GETLOADAVG.
AC_CHECK_FUNCS(pstat_getdynamic) dnl Supposedly in AC_FUNC_GETLOADAVG, but...?
AC_FUNC_GETLOADAVG

# Check out the wait reality.
AC_CHECK_HEADERS(sys/wait.h)
AC_CHECK_FUNCS(waitpid wait3)
AC_MSG_CHECKING(for union wait)
AC_CACHE_VAL(make_cv_union_wait, [dnl
AC_TRY_LINK([#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;
#ifdef WTERMSIG
/* If we have WEXITSTATUS and WTERMSIG, just use them on ints.  */
-- blow chunks here --
#endif
#endif
#ifdef HAVE_WAITPID
/* Make sure union wait works with waitpid.  */
pid = waitpid (-1, &status, 0);
#endif
],
	    [make_cv_union_wait=yes], [make_cv_union_wait=no])])
if test "$make_cv_union_wait" = yes; then
  AC_DEFINE(HAVE_UNION_WAIT, 1, [Define this if you have the \`union wait' type in <sys/wait.h>.])
fi
AC_MSG_RESULT($make_cv_union_wait)

AC_DECL_SYS_SIGLIST

# The presence of the following is not meant to imply
# that make necessarily works on those systems.
AC_SEARCH_LIBS(getpwnam, sun)

AC_SUBST(REMOTE) REMOTE=stub
make_try_customs=no
AC_ARG_WITH(customs,
[  --with-customs=DIR      Enable remote jobs via Customs--see README.customs],
[case "$withval" in
  n|no) ;;
  *) make_cppflags="$CPPFLAGS"
     case "$withval" in
       y|ye|yes) ;;
       *) CPPFLAGS="$CPPFLAGS -I$with_customs/include/customs"
	  make_ldflags="$LDFLAGS -L$with_customs/lib" ;;
     esac
     CF_NETLIBS
     AC_CHECK_HEADER(customs.h,
	             REMOTE=cstms
                       LIBS="$LIBS -lcustoms" LDFLAGS="$make_ldflags",
		     with_customs=no
                       CPPFLAGS="$make_cppflags" make_badcust=yes)
     ;;
esac])

dnl See if we can handle the job server feature, and if the user wants it.

AC_ARG_ENABLE(job-server,
  [  --disable-job-server    Disallow recursive make communication during -jN],
  [make_cv_job_server="$enableval" user_job_server="$enableval"],
  [make_cv_job_server="yes"])

has_wait_nohang=yes
case "$ac_cv_func_waitpid/$ac_cv_func_wait3" in
  no/no) has_wait_nohang=no ;;
esac

case "$ac_cv_func_pipe/$ac_cv_func_sigaction/$has_wait_nohang/$make_cv_job_server" in
  yes/yes/yes/yes) AC_DEFINE(MAKE_JOBSERVER, 1,
                     [Define this to enable job server support in GNU make.]);;
esac

dnl Allow building with dmalloc

AC_ARG_ENABLE(dmalloc,
  [  --enable-dmalloc        Enable support for the dmalloc debugging library],
  [make_cv_dmalloc="$enableval"],
  [make_cv_dmalloc="no"])

case "$make_cv_dmalloc" in
  yes) AC_CHECK_HEADERS(dmalloc.h)
       AC_CHECK_LIB(dmalloc, dmalloc_shutdown)
       CPPFLAGS="$CPPFLAGS -DDMALLOC_FUNC_CHECK" ;;
esac

AC_CACHE_CHECK(for location of SCCS get command, make_cv_path_sccs_get, [
if test -f /usr/sccs/get; then
  make_cv_path_sccs_get=/usr/sccs/get
else
  make_cv_path_sccs_get=get
fi])
AC_DEFINE_UNQUOTED(SCCS_GET,["$make_cv_path_sccs_get"])

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.
  AC_CACHE_CHECK(if SCCS get command understands -G, make_cv_sys_get_minus_G, [
    if $make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 &&
       test -f conftoast; then
       make_cv_sys_get_minus_G=yes
    else
       make_cv_sys_get_minus_G=no
    fi])
  case "$make_cv_sys_get_minus_G" in
    yes) AC_DEFINE(SCCS_GET_MINUS_G, 1,
           [Define this if the SCCS \`get' command understands the \`-G<file>' option.]);;
  esac
fi
rm -f s.conftest conftoast

AC_MSG_CHECKING(if system libc has GNU glob)
AC_CACHE_VAL(make_cv_sys_gnu_glob, [
 AC_TRY_CPP([
#include <features.h>
#include <glob.h>
#include <fnmatch.h>

#define GLOB_INTERFACE_VERSION 1
#if defined _LIBC || !defined __GNU_LIBRARY__ || __GNU_LIBRARY__ <= 1
# error no gnu glob
#else
# include <gnu-versions.h>
# if _GNU_GLOB_INTERFACE_VERSION != GLOB_INTERFACE_VERSION
#  error no gnu glob
# endif
#endif
 ], make_cv_sys_gnu_glob=yes, make_cv_sys_gnu_glob=no)])
case "$make_cv_sys_gnu_glob" in
  yes) AC_MSG_RESULT(yes) ;;
  no)  AC_MSG_RESULT([no; using local copy])
       AC_SUBST(GLOBDIR) GLOBDIR=glob
       AC_SUBST(GLOBINC) GLOBINC='-I$(srcdir)/glob'
       AC_SUBST(GLOBLIB) GLOBLIB=glob/libglob.a
       ;;
esac

AC_DEFINE_UNQUOTED(MAKE_HOST,"$host",[Build host information.])
MAKE_HOST="$host"
AC_SUBST(MAKE_HOST)

MAINT_MAKEFILE=/dev/null
if test -r "$srcdir/maintMakefile"; then
  MAINT_MAKEFILE="$srcdir/maintMakefile"
fi
AC_SUBST_FILE(MAINT_MAKEFILE)

AC_OUTPUT(build.sh Makefile glob/Makefile i18n/Makefile)

dnl If we don't yet have build.sh.in, build.sh is a bogus 0-length file
dnl so remove it.
dnl Can't do this because then remote builds with build.sh don't work.
dnl test -f build.sh.in || rm -f build.sh


case "$make_badcust" in
  yes) echo
       echo "WARNING: --with-customs specified but no customs.h could be found;"
       echo "         disabling Customs support."
       echo ;;
esac

case "$with_customs" in
  ""|n|no|y|ye|yes) ;;
  *) if test -f "$with_customs/lib/libcustoms.a"; then
       :
     else
       echo
       echo "WARNING: \`$with_customs/lib' does not appear to contain the"
       echo "         Customs library.  You must build and install Customs"
       echo "         before compiling GNU make."
       echo
     fi ;;
esac

case "$has_wait_nohang" in
  no) echo
      echo "WARNING: Your system has neither waitpid() nor wait3()."
      echo "         Without one of these, signal handling is unreliable."
      echo "         You should be aware that running GNU make with -j"
      echo "         could result in erratic behavior."
      echo ;;
esac

case "$make_cv_job_server/$user_job_server" in
  no/yes) echo
	  echo "WARNING: Make job server requires a POSIX-ish system that"
	  echo "         supports the pipe(), sigaction(), and either"
          echo "         waitpid() or wait3() functions.  Your system doesn't"
	  echo "         appear to provide one or more of those."
	  echo "         Disabling job server support."
          echo ;;
esac

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:
