dnl $Id: configure.in,v 1.12 2001-06-05 03:56:52 rjkaes Exp $

AC_INIT()
AM_INIT_AUTOMAKE(tinyproxy,1.4.0pre6)
AM_CONFIG_HEADER(config.h)

AC_CANONICAL_HOST
AC_CANONICAL_TARGET

dnl Checks for programs.
AC_PROG_AWK
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_YACC
if test "$YACC" != "bison -y"; then
    AC_MSG_WARN(You will need bison if you want to regenerate the parser.)
else
    AC_MSG_CHECKING(bison version)
    oldIFS=$IFS; IFS=.
    set `bison -V | sed -e 's/^GNU Bison version //'`
    IFS=$oldIFS
    if test "$1" = "1" -a "$2" -lt "25"; then
        AC_MSG_WARN(Bison 1.25 or newer needed to regenerate parsers (found $1.$2).)
    fi
    AC_MSG_RESULT($1.$2 (ok))
fi

AM_PROG_LEX
AM_C_PROTOTYPES

dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(\
sys/types.h \
sys/ioctl.h \
sys/resource.h \
sys/select.h \
sys/socket.h \
sys/stat.h \
sys/sysctl.h \
sys/time.h \
sys/uio.h \
sys/un.h \
sys/wait.h \
arpa/inet.h \
netinet/in.h \
alloca.h \
assert.h \
ctype.h \
errno.h \
fcntl.h \
grp.h \
io.h \
libintl.h \
malloc.h \
netdb.h \
pthread.h \
pwd.h \
regex.h \
signal.h \
stdarg.h \
stddef.h \
stdint.h \
stdio.h \
stdlib.h \
string.h \
strings.h \
sysexists.h \
syslog.h \
time.h \
unistd.h \
wchar.h \
wctype.h \
)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_HEADER_TIME
AC_UNP_CHECK_TYPE(uint8_t, unsigned char)
AC_UNP_CHECK_TYPE(int16_t, short)
AC_UNP_CHECK_TYPE(uint16_t, unsigned short)
AC_UNP_CHECK_TYPE(int32_t, int)
AC_UNP_CHECK_TYPE(uint32_t, unsigned int)
AC_UNP_CHECK_TYPE(size_t, unsigned int)
AC_UNP_CHECK_TYPE(ssize_t, int)
AC_UNP_CHECK_TYPE(socklen_t, unsigned int)
AC_UNP_CHECK_TYPE(in_addr_t, uint32_t)

dnl Checks for libraries
AC_CHECK_LIB(pthread, pthread_create)
if test "$ac_cv_lib_pthread_pthread_create" = "yes"; then
    CFLAGS="-D_REENTRANT $CFLAGS"
else
    AC_CHECK_LIB(pthreads, pthread_create)
    if test "$ac_cv_lib_pthreads_pthread_create" = "yes"; then
        CFLAGS="-D_REENTRANT $CFLAGS"
    else
	AC_MSG_ERROR(You must have a POSIX compliant threading library installed)
    fi
fi

AC_CHECK_LIB(socket, socket, LIBS="-lsocket $LIBS", AC_CHECK_LIB(socket, htonl))

dnl Some systems (OpenServer 5) dislike -lsocket -lnsl, so we try to
dnl avoid -lnsl checks, if we already have the functions which are
dnl usually in libnsl

unset ac_cv_func_yp_get_default_domain
AC_CHECK_FUNC(yp_get_default_domain, [ tinyproxy_no_nsl_checks=yes ], [ ])
unset ac_cv_func_yp_get_default_domain

if test "$tinyproxy_no_nsl_checks" != "yes"; then
    AC_CHECK_LIB(nsl, gethostname, LIBS="-lnsl $LIBS", AC_CHECK_LIB(nsl, gethostbyaddr))
fi

AC_CHECK_LIB(resolv, inet_aton)

dnl Checks for library functions.
AC_FUNC_ALLOCA
dnl AC_FUNC_MEMCMP
AC_TYPE_SIGNAL
AC_FUNC_STRFTIME
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(\
ftruncate \
select \
setrlimit \
socket \
strdup \
strerror \
strtol \
vsnprintf \
vsyslog \
)
AC_CHECK_FUNCS(strlcpy strlcat)

AC_ARG_WITH(stathost, [  --with-stathost=HOST    Default status host],
            AC_DEFINE_UNQUOTED(DEFAULT_STATHOST, "$withval"))

dnl Set the default configuration file location
AC_ARG_WITH(config,
[  --with-config=FILE      Set the default location of the config file],
	    AC_DEFINE_UNQUOTED(DEFAULT_CONF_FILE, "$withval"))

dnl Check for the regex library
AC_ARG_WITH(regex, [  --with-regex            Use the GNU regex libary],
            tinyproxy_cv_regex=yes,
            AC_CHECK_FUNCS(regcomp, tinyproxy_cv_regex=no, tinyproxy_cv_regex=yes))

if test "$tinyproxy_cv_regex" != "yes" ; then
    AC_MSG_CHECKING(whether your system's regexp library is completely broken)
    AC_CACHE_VAL(tinyproxy_cv_regex_broken,
                 AC_TRY_RUN([
# include <unistd.h>
# include <regex.h>
int main(void)
{
	regex_t blah;
	return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec(&blah, "foobar", 0, NULL, 0);
}
                            ],
                            tinyproxy_cv_regex_broken=no,
                            tinyproxy_cv_regex_broken=yes,
                            tinyproxy_cv_regex_broken=yes))

    AC_MSG_RESULT($tinyproxy_cv_regex_broken)
    if test "$tinyproxy_cv_regex_broken" = "yes" ; then
        echo "Using the included GNU regex instead." >&AC_FD_MSG
        tinyproxy_cv_regex=yes
    fi
fi

if test "$tinyproxy_cv_regex" = "yes" ; then
    AC_DEFINE(USE_GNU_REGEX)
    LIBOBJS="gnuregex.o $LIBOBJS"
fi

dnl Add compiler-specific optimization flags
AC_ARG_ENABLE(debug,
[  --enable-debug          Disable aggressive optimizations [default=no]],
              debug_enabled=yes)

CFLAGS="-Wall $CFLAGS"
if test "$enable_debug" = "yes" ; then
    dnl Add the warnings if we have the GCC compiler
    if test x$ac_cv_prog_gcc = xyes ; then
        CFLAGS="-Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes $CFLAGS"
        CFLAGS="-Wmissing-prototypes -Wmissing-declarations $CFLAGS"
        CFLAGS="-Wpointer-arith -Waggregate-return -Wnested-externs $CFLAGS"
    fi
    CFLAGS="-DYYDEBUG $CFLAGS"
    YFLAGS="-v -d"
else
    dnl No debugging information, include the optimizations
    YFLAGS="-d"
fi

dnl Check for SOCKS support
AC_ARG_ENABLE(socks,
[  --enable-socks          Enable SOCKS support [default=no]],
              socks_enabled=yes, socks_enabled=no)

if test "$socks_enabled" = "yes"; then
    AC_CHECK_HEADER(socks.h, socks_header=yes, socks_header=no)
    AC_CHECK_LIB(socks, main, socks_library=yes, socks_library=no)
    if test "$socks_header" = "yes" -a "$socks_library" = "yes"; then
        CFLAGS="-I/usr/include/sock.h -DSOCKS $CFLAGS"
        LIBS="-lsocks $LIBS"
    else
        AC_MSG_ERROR(could not find the SOCKS library or header)
    fi
fi

dnl Check to see if the XTinyproxy header is to be included
AC_ARG_ENABLE(xtinyproxy,
[  --enable-xtinyproxy     Include X-Tinyproxy header [default=yes]],
              xtinyproxy_enabled=yes, xtinyproxy_enabled=yes)

if test "$xtinyproxy_enabled" = "yes"; then
    AC_DEFINE(XTINYPROXY_ENABLE)
fi

dnl Include filtering for domain/URLs
AC_ARG_ENABLE(filter,
[  --enable-filter         Enable filtering of domains/URLs [default=yes]],
              filter_enabled=yes, filter_enabled=yes)

if test "$filter_enabled" = "yes"; then
    LIBOBJS="$LIBOBJS filter.o"
    AC_DEFINE(FILTER_ENABLE)
fi

dnl Include support for upstream proxies? (TCP tunneling)
AC_ARG_ENABLE(tunnel,
[  --enable-tunnel         Enable support for TCP tunneling [default=yes]],
              tunnel_enabled=yes, tunnel_enabled=yes)

if test "$tunnel_enabled" = "yes" ; then
    AC_DEFINE(TUNNEL_SUPPORT)
fi

dnl Substitute the variables into the various Makefiles
AC_SUBST(CFLAGS)
AC_SUBST(YFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LIBS)
AC_SUBST(LIBOBJS)

AC_OUTPUT(Makefile src/Makefile doc/Makefile)