dnl $Id: configure.ac,v 2.63 2003-08-07 16:32:12 rjkaes Exp $ dnl Devlopers, please strive to achieve this order: dnl dnl 0. Initialization and options processing dnl 1. Programs dnl 2. Libraries dnl 3. Header files dnl 4. Types dnl 5. Structures dnl 6. Compiler characteristics dnl 7. Functions, global variables dnl 8. System services dnl dnl Read the Autoconf manual for details. AC_INIT([tinyproxy], [1.7.0], [rjkaes@users.sourceforge.net]) AC_CONFIG_SRCDIR([src/tinyproxy.c]) AC_PREREQ(2.52) AC_CANONICAL_TARGET AH_TEMPLATE([TARGET_SYSTEM], [A string containing the target system for which tinyproxy was built.]) AC_DEFINE_UNQUOTED(TARGET_SYSTEM, ["$target"]) AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AM_CONFIG_HEADER(config.h) dnl Check if we're compiling on a weird platform :) AC_AIX AC_GNU_SOURCE AC_MINIX dnl dnl Command line options dnl dnl Set the URL name for find the statistics of tinyproxy AH_TEMPLATE([DEFAULT_STATHOST], [This controls remote proxy stats display.]) AC_ARG_WITH(stathost, [AC_HELP_STRING([--with-stathost=HOST], [Default status host])], [AC_DEFINE_UNQUOTED(DEFAULT_STATHOST, "$withval")], [AC_DEFINE_UNQUOTED(DEFAULT_STATHOST, "tinyproxy.stats")]) dnl Set the default configuration file location test "$prefix" = "NONE" && prefix=/usr/local AH_TEMPLATE([DEFAULT_CONF_FILE], [This is the default file name for the configuration file.]) AC_ARG_WITH(config, [AC_HELP_STRING([--with-config=FILE], [Set the default location of the config file])], [tp_config_file="$withval"], [tp_config_file="tinyproxy.conf"]) # If the first character is a slash, it's an absolute path if [[ `echo $tp_config_file | cut -c1` = "/" ]]; then TINYPROXY_CONFIG_DIR=`echo "$tp_config_file" | sed 's/^\(.*\)\/[[^\/]]*$/\1/'` TINYPROXY_CONFIG_FILE=`echo "$tp_config_file" | sed 's/^.*\/\([[^\/]]*\)$/\1/'` else # If sysconfdir is /usr/etc, change it to /etc (since /usr/etc doesn't exist) if [[ "/usr/etc" = `eval echo $sysconfdir` -a "/usr" = "$prefix" ]]; then TINYPROXY_CONFIG_DIR="/etc/tinyproxy" else TINYPROXY_CONFIG_DIR=`eval echo $sysconfdir/tinyproxy` fi TINYPROXY_CONFIG_FILE="$tp_config_file" fi AC_DEFINE_UNQUOTED(DEFAULT_CONF_FILE, "$TINYPROXY_CONFIG_DIR/$TINYPROXY_CONFIG_FILE") AC_MSG_NOTICE([Default config location and file is: $TINYPROXY_CONFIG_DIR/$TINYPROXY_CONFIG_FILE]) dnl Add compiler-specific optimization flags AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug], [Disable aggressive optimizations (default is NO)])], debug_enabled=$enableval, debug_enabled=no) dnl Add in profiling information AC_ARG_ENABLE(profiling, [AC_HELP_STRING([--enable-profiling], [Enable profiling information (default is NO)])], profiling_enabled=$enableval, profiling_enabled=no) dnl Include SOCKS support AC_ARG_ENABLE(socks, [AC_HELP_STRING([--enable-socks], [Enable SOCKS support (default is NO)])], socks_enabled=$enableval, socks_enabled=no) dnl Check to see if the XTinyproxy header is to be included AH_TEMPLATE([XTINYPROXY_ENABLE], [Define if you want to have the peer's IP address included in a XTinyproxy header sent to the server.]) AC_ARG_ENABLE(xtinyproxy, [AC_HELP_STRING([--enable-xtinyproxy], [Include X-Tinyproxy header (default is YES)])], xtinyproxy_enabled=$enableval, xtinyproxy_enabled=yes) if test x"$xtinyproxy_enabled" = x"yes"; then AC_DEFINE(XTINYPROXY_ENABLE) fi dnl Include filtering for domain/URLs AH_TEMPLATE([FILTER_ENABLE], [Defined if you would like filtering code included.]) AC_ARG_ENABLE(filter, [AC_HELP_STRING([--enable-filter], [Enable filtering of domains/URLs (default is YES)])], filter_enabled=$enableval, filter_enabled=yes) if test x"$filter_enabled" = x"yes"; then ADDITIONAL_OBJECTS="$ADDITIONAL_OBJECTS filter.o" AC_DEFINE(FILTER_ENABLE) fi dnl Include support for upstream proxies? AH_TEMPLATE([UPSTREAM_SUPPORT], [Include support for connecting to an upstream proxy.]) AC_ARG_ENABLE(upstream, [AC_HELP_STRING([--enable-upstream], [Enable support for upstream proxies (default is YES)])], upstream_enabled=$enableval, upstream_enabled=yes) if test x"$upstream_enabled" = x"yes"; then AC_DEFINE(UPSTREAM_SUPPORT) fi dnl Include the transparent proxy support AH_TEMPLATE([TRANSPARENT_PROXY], [Include support for using tinyproxy as a transparent proxy.]) AC_ARG_ENABLE(transparent-proxy, [AC_HELP_STRING([--enable-transparent-proxy], [Enable transparent proxy support (default is NO)])], transparent_enabled=$enableval, transparent_enabled=no) if test x"$transparent_enabled" = x"yes"; then AC_DEFINE(TRANSPARENT_PROXY) fi dnl Include support for a statically compiled tinyproxy AC_ARG_ENABLE(static, [AC_HELP_STRING([--enable-static], [Statically link tinyproxy (default is NO)])], [LDFLAGS="-static $LDFLAGS"]) dnl dnl Checks for programs dnl AC_PROG_MAKE_SET AC_PROG_CC AC_ISC_POSIX AC_PROG_INSTALL AC_PROG_LN_S AM_PROG_LEX AC_PROG_YACC AC_PROG_LIBTOOL dnl If a CFLAGS variable was passed during configure, set the initial dnl CFLAGS variable to it; otherwise, start with an empty CFLAGS if test x"$ac_env_CFLAGS_set" = x"set" ; then CFLAGS=$ac_env_CFLAGS_value else CFLAGS="" fi dnl Make sure YACC is actually bison if test x"$YACC" != x"bison -y"; then AC_MSG_WARN([You will need bison if you want to regenerate the parser.]) fi dnl dnl Checks for libraries dnl AC_CHECK_LIB(socket, socket, , [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, tinyproxy_no_nsl_checks=no) unset ac_cv_func_yp_get_default_domain if test x"$tinyproxy_no_nsl_checks" != x"yes"; then AC_CHECK_LIB(nsl, gethostname, , [AC_CHECK_LIB(nsl, gethostbyaddr)]) fi AC_CHECK_LIB(resolv, inet_aton) AC_CHECK_LIB(socks, main, socks_library=yes, socks_library=no) dnl dnl Checks for headers dnl AC_HEADER_STDC AC_HEADER_TIME AC_CHECK_HEADERS([sys/ioctl.h sys/mman.h sys/resource.h \ sys/select.h sys/socket.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 \ netdb.h pwd.h regex.h signal.h stdarg.h stddef.h stdio.h \ sysexits.h syslog.h time.h wchar.h wctype.h]) dnl OpenBSD machines don't like having malloc included (even if it's present) dnl as they expect you to use stdlib.h case "$target" in *-openbsd*) ;; *) AC_CHECK_HEADER(malloc.h);; esac AC_CHECK_HEADER(socks.h, socks_header=yes, socks_header=no) dnl dnl Checks for types dnl AM_C_PROTOTYPES AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_TYPE_PID_T AC_TYPE_SIGNAL 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(ssize_t, int) AC_UNP_CHECK_TYPE(socklen_t, unsigned int) AC_UNP_CHECK_TYPE(in_addr_t, uint32_t) dnl dnl Checks for libary functions dnl AC_FUNC_ALLOCA AC_CHECK_FUNCS([isascii memcpy setrlimit ftruncate regexec]) AC_CHECK_FUNCS([strlcpy strlcat]) dnl dnl Compiler characteristics dnl dnl If profiling is enabled, then enable the debugging code if test x"$profiling_enabled" = x"yes" ; then AC_MSG_NOTICE([profiling is enabled, therefore enabling debugging code.]) debug_enabled=yes fi dnl Enable the debugging flags (by checking for the GCC compiler) if test x"$debug_enabled" = x"yes" ; then dnl Add the warnings if we have the GCC compiler if test x"$GCC" = x"yes" ; then if test x"$profiling_enabled" = x"yes" ; then CFLAGS="-pg -fprofile-arcs $CFLAGS" fi 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="-Wall -g -DYYDEBUG $CFLAGS" YFLAGS="-v -d" if test x"$ac_cv_prog_LEX" = x"flex" ; then LEX_FLAGS="--warn --debug" fi else dnl No debugging information, include the optimizations CFLAGS="-O2 -DNDEBUG $CFLAGS" YFLAGS="-d" fi dnl dnl Make sure we can actually handle the "--with-*" and "--enable-*" stuff. dnl dnl Handle the SOCKS support if test x"$socks_enabled" = x"yes"; then if test x"$socks_header" = x"yes" -a x"$socks_library" = x"yes"; then CFLAGS="-I/usr/include/sock.h -DSOCKS $CFLAGS" LIBS="-lsocks $LIBS" else AC_MSG_ERROR([Could not include the SOCKS library or header]) fi fi dnl Handle the REGEX library if test x"$ac_cv_func_regexec" != x"yes"; then AC_MSG_ERROR([Could not locate the regexec() function]) else AC_MSG_CHECKING([whether the system's regex library is broken]) AC_CACHE_VAL(tinyproxy_cv_regex_broken, [AC_TRY_RUN([ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_REGEX_H # include #endif int main(void) { regex_t blah; if (regcomp(&blah, "foo.*bar", REG_NOSUB) != 0) exit(1); if (regexec(&blah, "foobar", 0, NULL, 0) != 0) exit(1); else exit(0); return 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 x"$tinyproxy_cv_regex_broken" = x"yes" ; then AC_MSG_ERROR([Your system's regexec() function is broken.]) fi fi dnl dnl Substitute the variables into the various Makefiles dnl AC_SUBST(CFLAGS) AC_SUBST(LDFLAGS) AC_SUBST(YFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LEX_FLAGS) AC_SUBST(LIBS) AC_SUBST(ADDITIONAL_OBJECTS) AC_SUBST(TINYPROXY_CONFIG_DIR) AC_SUBST(TINYPROXY_CONFIG_FILE) AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile]) AC_OUTPUT