dnl Autoconfigure input file for fetchmail
dnl Eric S. Raymond <esr@thyrsus.com>
dnl
dnl Process this file with autoconf to produce a configure script.
dnl

AC_INIT(fetchmail.h)		dnl A distinctive file to look for in srcdir. 
AC_CONFIG_HEADER(config.h)

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

AC_CANONICAL_HOST
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_CPP			dnl Later checks need this.
AC_PROG_CC_C_O
AC_AIX
AC_ISC_POSIX
AC_MINIX
AC_HEADER_STDC
AC_TYPE_SIZE_T
AC_TYPE_PID_T
AC_TYPE_SIGNAL
AC_CHECK_HEADERS(unistd.h termios.h termio.h sgtty.h stdarg.h alloca.h sys/itimer.h fcntl.h sys/fcntl.h) 

AC_C_CONST			dnl getopt needs this.

AC_PROG_LEX
AC_PROG_YACC
AC_SUBST(LIBOBJS)

# Under sysV68, socket and friends are provided by the C library.
# -linet does not provide socket, but causes multiple definition
# errors at link-time.  It is thus better to only use the C library.
# So don't add -linet to the link list unless it's necessary
AC_CHECK_FUNC(socket,
    AC_MSG_RESULT(using libc's socket),
    AC_CHECK_LIB(socket,socket)
    AC_CHECK_LIB(inet,socket))

AC_CHECK_LIB(nsl,inet_addr)
AC_CHECK_LIB(opie,opiegenerator)

dnl Port hack for Interactive UNIX System V/386 Release 3.2
AC_CHECK_LIB(cposix, strchr,
		[EXTRADEFS="$EXTRADEFS -D_SYSV3"
		LIBS="$LIBS -lcposix"])

AC_CHECK_FUNC(strstr, AC_DEFINE(HAVE_STRSTR), 
              [EXTRASRC="$EXTRASRC \$(srcdir)/strstr.c"
               EXTRAOBJ="$EXTRAOBJ strstr.o"])

AC_CHECK_FUNC(strcasecmp, AC_DEFINE(HAVE_STRCASECMP), 
              [EXTRASRC="$EXTRASRC \$(srcdir)/strcasecmp.c"
               EXTRAOBJ="$EXTRAOBJ strcasecmp.o"])
             
AC_CHECK_FUNC(getopt_long, AC_DEFINE(HAVE_GETOPTLONG),
              [EXTRASRC="$EXTRASRC \$(srcdir)/getopt.c \$(srcdir)/getopt1.c"
               EXTRAOBJ="$EXTRAOBJ getopt.o getopt1.o"])

AC_FUNC_VPRINTF
AC_FUNC_ALLOCA
if test -n "$ALLOCA" 
then
  EXTRASRC="$EXTRASRC \$(srcdir)/alloca.c"
  EXTRAOBJ="$EXTRAOBJ alloca.o"
fi

dnl All AC_CHECK_FUNCs must precede the following AC_SUBSTs

AC_SUBST(EXTRADEFS)
AC_SUBST(EXTRASRC)
AC_SUBST(EXTRAOBJ)

AC_CHECK_FUNCS(tcsetattr stty setsid seteuid gethostbyname res_search herror \
  strrchr strerror setlinebuf syslog snprintf vsnprintf vsyslog atexit \
  inet_aton)

# Under Red Hat 4.0 (and many other Linuxes) -lresolv is seriously flaky
# and breaks gethostbyname(2).  It's better to use the bind stuff in the C
# library.  So don't add -lresolv to the link list unless it's necessary
# (It will be necessary when using GNU libc6).
AC_CHECK_FUNC(res_search,
    AC_MSG_RESULT(using libc's resolver functions),
    AC_CHECK_LIB(resolv,res_search, 
	[AC_DEFINE(HAVE_RES_SEARCH) AC_MSG_RESULT(found resolver functions in libresolv); LIBS="$LIBS -lresolv"], AC_MSG_RESULT(no resolver calls found)))

dnl AC_FUNC_SETVBUF_REVERSED

dnl Check for usable void pointer type
AC_MSG_CHECKING(use of void pointer type)
AC_TRY_COMPILE([],
   [char *p;
    void *xmalloc();
    p = (char *) xmalloc(1);
   ],
 [AC_DEFINE(HAVE_VOIDPOINTER) AC_MSG_RESULT(yes)],
 AC_MSG_RESULT(no))

dnl Check out the wait reality.  We have to assume sys/wait.h is present.
AC_CHECK_FUNCS(waitpid wait3)
AC_MSG_CHECKING(for union wait);
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;
#endif
#ifdef HAVE_WAITPID
/* Make sure union wait works with waitpid.  */
pid = waitpid (-1, &status, 0);
#endif
],
  [AC_DEFINE(HAVE_UNION_WAIT) AC_MSG_RESULT(yes)],
  AC_MSG_RESULT(no))

AC_MSG_CHECKING(sys_siglist declaration in signal.h or unistd.h)
AC_TRY_LINK([#include <signal.h>
/* NetBSD declares sys_siglist in <unistd.h>.  */
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif], [char *msg = *(sys_siglist + 1);],
  [AC_DEFINE(SYS_SIGLIST_DECLARED) AC_MSG_RESULT(yes)],
  AC_MSG_RESULT(no))

AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)

###	use option --enable-POP2 to compile in the POP2 fallback support
AC_ARG_ENABLE(POP2,
	[  --enable-POP2        compile in POP2 protocol support (obsolete)],
	[with_POP2=$enableval],
	[with_POP2=no])
test "$with_POP2" = "yes" && AC_DEFINE(POP2_ENABLE)

###	use option --enable-OPIE to compile in the OPIE support
AC_ARG_ENABLE(OPIE,
	[  --enable-OPIE        compile in OPIE protocol support (obsolete)],
	[with_OPIE=$enableval],
	[with_OPIE=no])
test "$with_OPIE" = "yes" && AC_DEFINE(OPIE_ENABLE)

###	use option --with-kerberos=DIR to point at a Kerberos directory
AC_ARG_WITH(kerberos,
	[  --with-kerberos=DIR  point fetchmail compilation at a Kerberos directory])

# The "then" arm (nonempty $with_kerberos) is kind of a crock.  It works for
# configuring the BSD/OS Kerberos IV support, though. 
if test -n "$with_kerberos"
then
    CFLAGS="$CFLAGS -DKERBEROS_V4 -I$with_kerberos"
    LDFLAGS="$LDFLAGS -L$dir/lib"
    LIBS="$LIBS -lkrb -ldes"
else
    for dir in /usr/kerberos /usr/kerberosIV /usr/athena
    do
      if test -f "$dir/include/krb.h"
      then
        CFLAGS="$CFLAGS -DKERBEROS_V4 -I$dir/include"
        LDFLAGS="$LDFLAGS -L$dir/lib"
        LIBS="$LIBS -lkrb -ldes"
        break
      fi
    done
fi

AC_OUTPUT(Makefile, [
	# The reason for this odd makedepend line is that we want
	# to have all dependencies evaluated relative to the source directory
	# and let VPATH do all the dirty work when we build remotely
	echo "You can ignore any makedepend error messages";
	(cd $srcdir; makedepend -f - *.c) >>Makefile])

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:
