dnl ######################################################################
dnl Process this file with autoconf to produce a configure script.
dnl ######################################################################

AC_PREREQ(2.12)

AC_INIT(src/cfengine.c)
AC_CONFIG_HEADER(src/conf.h)

AC_CANONICAL_SYSTEM

cfversion=`cat $srcdir/version`
AC_SUBST(cfversion)

#
# Add to the default list of places in LDFLAGS to compensate for
# ... the configure default value of LIBS on some systems
#
for x in /usr/local/gnu/lib /usr/local/gnulib /usr/local/lib /usr/lib /lib
do
  if test -d "$x"; then
    y=`expr match "$LDFLAGS" ".*-L$x"`
    if test $y -eq 0; then
      LDFLAGS="$LDFLAGS -L$x"
    fi
  fi
done

#
# Add to the default list of places in CPPFLAGS to match LDFLAGS above
# 
for x in /usr/include /usr/local/gnu/include /usr/local/include
do 
  if test -d "$x"; then
    y=`expr match "$CPPFLAGS" ".*-I$x"`
    if test $y -eq 0; then
      CPPFLAGS="$CPPFLAGS -I$x"
    fi
  fi
done

dnl ######################################################################
dnl Checks for programs.
dnl ######################################################################

AC_PROG_MAKE_SET

AC_PROG_CC
ADD_CC_WALL=false	dnl Is this needed?  Let autoconf decide?

AC_PROG_LEX
AC_PROG_YACC

AC_PROG_RANLIB
AC_PROG_INSTALL

AC_PATH_PROG(PERL, perl, /bin/false, \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_PATH_PROG(TEX, tex, /bin/false, \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_PATH_PROG(TEXINDEX, texindex, /bin/false, \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_PATH_PROG(DVIPS, dvips, /bin/false, \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_PATH_PROG(TEXI2HTML, texi2html, /bin/false, \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_PATH_PROG(MAKEINFO, makeinfo, /bin/false, \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)

dnl #######################################################################
dnl Determine what documentation to build by looking for builders
dnl #######################################################################

AC_CHECK_PROG(TFILE, tex, "cfengine.dvi", "", \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_CHECK_PROG(DFILE, dvips, "cfengine.ps", "", \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_CHECK_PROG(HFILE, texi2html, "cfengine.html", "", \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)
AC_CHECK_PROG(IFILE, makeinfo, "cfengine.info", "", \
		$PATH:$prefix/bin:/usr/bin:/usr/local/bin)

CFDOCS="$IFILE $TFILE $DFILE $HFILE"
AC_SUBST(CFDOCS)

dnl ######################################################################
dnl Checks for libraries.
dnl ######################################################################

dnl AC_CHECK_LIB(m, main)
AC_CHECK_LIB(socket, main)
AC_CHECK_LIB(db, main)        dnl Berkeley database lib
AC_CHECK_LIB(wrap, main)      dnl TCP wrappers library

dnl ######################################################################
dnl Checks for header files.
dnl ######################################################################

AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(sys/mount.h)
AC_CHECK_HEADERS(utime.h)
AC_CHECK_HEADERS(time.h)
AC_CHECK_HEADERS(sys/time.h)
AC_CHECK_HEADERS(malloc.h)
AC_CHECK_HEADERS(vfs.h)
AC_CHECK_HEADERS(sys/vfs.h)
AC_CHECK_HEADERS(sys/sockio.h)
AC_CHECK_HEADERS(sys/statvfs.h)
AC_CHECK_HEADERS(sys/statfs.h)
AC_CHECK_HEADERS(sys/param.h)
AC_CHECK_HEADERS(fcntl.h)
AC_CHECK_HEADERS(sys/filesys.h)
AC_CHECK_HEADERS(dustat.h)
AC_CHECK_HEADERS(tcpd.h)
AC_CHECK_HEADERS(db.h)
AC_CHECK_HEADERS(db/db.h)

AC_HEADER_STDC
AC_HEADER_TIME
AC_HEADER_SYS_WAIT
AC_HEADER_DIRENT

dnl ######################################################################
dnl Checks for data types
dnl ######################################################################

AC_TYPE_MODE_T
AC_TYPE_SIZE_T
AC_TYPE_UID_T
AC_TYPE_PID_T

dnl ######################################################################
dnl Checks for typedefs, structures, and compiler characteristics.
dnl ######################################################################

AC_C_CONST

dnl ######################################################################
dnl Check for special functions
dnl ######################################################################

AC_CHECK_FUNCS(getcwd getnetgrent waitpid)
AC_CHECK_FUNCS(uname gethostname realpath)
AC_CHECK_FUNCS(lchown strstr putenv)
AC_CHECK_FUNCS(bcopy mkfifo statfs statvfs)

dnl #######################################################################
dnl Newer BSD systems don't have a compatible rtentry - use ortentry
dnl #######################################################################
 
rtry=rtentry
AC_MSG_CHECKING(for either struct rtentry or struct ortentry)
AC_EGREP_HEADER(ortentry, net/route.h, AC_DEFINE(HAVE_ORTENTRY) rtry=ortentry)
AC_MSG_RESULT($rtry)

dnl ######################################################################
dnl OS specific stuff
dnl ######################################################################

LIBS="$LIBS -L../pub -lcfpub"

dnl
dnl dsm - To ensure conf.h is picked up via VPATH
dnl
if test "$srcdir" != "."; then
  CPPFLAGS="$CPPFLAGS -I`pwd`/src"
fi

dnl
dnl dsm - This case should be in the conf.h.in file.
dnl
case "$target_os" in

   sunos3*)
	AC_DEFINE(REGEX_MALLOC)
	AC_DEFINE(SUN3)
        ;;
   sunos4*)
	AC_DEFINE(REGEX_MALLOC)
	AC_DEFINE(SUN4)
        ;;
   solaris2.4*)
	AC_DEFINE(REGEX_MALLOC)
	AC_DEFINE(SOLARIS)
        CPPFLAGS="-w $CPPFLAGS"
        LIBS="$LIBS -lnsl -lelf"
        ;;
   solaris*)
	AC_DEFINE(REGEX_MALLOC)
	AC_DEFINE(SOLARIS)
        AC_DEFINE(_POSIX_C_SOURCE)
        AC_DEFINE(__EXTENSIONS__)
        LIBS="$LIBS -lnsl -lelf"
        ;;
   ultrix*)
	AC_DEFINE(ULTRIX)
        ;;
   hpux*) 
	AC_DEFINE(HPuUX)
        if test "$GCC" != "yes"; then
	  AC_DEFINE(REGEX_MALLOC)
        fi
        LIBS="$LIBS -lc -lPW"
        ;;
   aix*)
	AC_DEFINE(AIX)
        ;;
   osf*)
	AC_DEFINE(OSF)
        ;;
   irix6*)
	AC_DEFINE(REGEX_MALLOC)
        AC_DEFINE(HAVE_ORTENTRY) # Have to hack this for 6.* owing to bug
	AC_DEFINE(IRIX)
        CFLAGS="$CFLAGS -w"
        ;;
   irix*)
	AC_DEFINE(REGEX_MALLOC)
	AC_DEFINE(IRIX)
        CFLAGS="$CFLAGS -w"
        ;;
   linux*)
	AC_DEFINE(LINUX)
        ;;
   freebsd*)
	AC_DEFINE(FREEBSD)
        ;;
   netbsd*)
	AC_DEFINE(NETBSD)
        ;;
   newsos*)
	AC_DEFINE(NEWS_OS)
        ;;
   bsd/os*)
	AC_DEFINE(BSDOS)
        ;;
   bsd*)
	AC_DEFINE(BSD43)
        ;;
   aos*)
	AC_DEFINE(AOS)
        ;;
   nextstep*)
	AC_DEFINE(NEXTSTEP)
        ;;

   unicos*)
	AC_DEFINE(REGEX_MALLOC)
	AC_DEFINE(CFCRAY)
        ;;

   cray*)
	AC_DEFINE(REGEX_MALLOC)
	AC_DEFINE(CFCRAY)
        ;;


   *)
	echo Unknown system type $target_os
        exit 1
        ;;
esac


dnl #####################################################################
dnl Locks, Logs and stuff
dnl NOTE: Some of these variables are meant to be overridden at
dnl       compile time, but this method fixes LOCKFILEDIR and
dnl       LOGFILEDIR to their value at configure time.
dnl #####################################################################
  
if test -d /var/run; then

 dir1=/var/run
 dir2=/var/run
  
else

 dir1=/etc
 dir2=/etc

fi

AC_DEFINE_UNQUOTED(LOCKFILEDIR, "${dir1}/cfengine")
AC_DEFINE_UNQUOTED(LOGFILEDIR, "${dir2}/cfengine")
  
dnl #####################################################################
dnl Hostname and Version stuff
dnl #####################################################################
  
AC_PATH_PROG(HOSTNAME, hostname, "", $PATH)

dnl #####################################################################
dnl dsm - is this really necessary? mb - yes for ancient 4.3
dnl #####################################################################

AC_DEFINE_UNQUOTED(AUTOCONF_HOSTNAME, "`$HOSTNAME`")
AC_DEFINE_UNQUOTED(AUTOCONF_SYSNAME, "$target_os")
AC_DEFINE_UNQUOTED(CFVERSION, "$cfversion")

dnl ######################################################################
dnl Now make the Makefiles
dnl ######################################################################

AC_OUTPUT(pub/Makefile doc/Makefile src/Makefile bin/Makefile contrib/Makefile \
	inputs/Makefile Makefile bin/cf-install bin/cfbackup bin/cfrestore \
	bin/cfmail bin/cfdaily bin/cfwrap bin/cfbg bin/noseyparker \
	bin/editquotas contrib/cfdoc)

chmod 0755 bin/cfbackup bin/cfrestore bin/cfmail bin/cfdaily bin/cfwrap \
		bin/cfbg bin/noseyparker bin/editquotas

echo "Configuration done. Run make to build cfengine."

