dnl Process this file with autoconf to produce a configure script.
-dnl
-dnl $Id: configure.in,v 1.5 2001/06/29 13:26:27 oes Exp $
-dnl
-dnl Written by and Copyright (C) 2001 the SourceForge
-dnl IJBSWA team. http://ijbswa.sourceforge.net
+dnl
+dnl $Id: configure.in,v 1.166 2011/12/26 17:03:31 fabiankeil Exp $
+dnl
+dnl Written by and Copyright (C) 2001-2010 the
+dnl Privoxy team. http://www.privoxy.org/
dnl
dnl Based on the Internet Junkbuster originally written
-dnl by and Copyright (C) 1997 Anonymous Coders and
+dnl by and Copyright (C) 1997 Anonymous Coders and
dnl Junkbusters Corporation. http://www.junkbusters.com
dnl
-dnl This program is free software; you can redistribute it
+dnl This program is free software; you can redistribute it
dnl and/or modify it under the terms of the GNU General
dnl Public License as published by the Free Software
dnl Foundation; either version 2 of the License, or (at
dnl your option) any later version.
-dnl
+dnl
dnl This program is distributed in the hope that it will
dnl be useful, but WITHOUT ANY WARRANTY; without even the
dnl implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE. See the GNU General Public
dnl License for more details.
-dnl
+dnl
dnl The GNU General Public License should be included with
dnl this file. If not, you can view it at
dnl http://www.gnu.org/copyleft/gpl.html
dnl or write to the Free Software Foundation, Inc., 59
dnl Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-dnl
-dnl $Log: configure.in,v $
-dnl Revision 1.5 2001/06/29 13:26:27 oes
-dnl Introduced #define CODE_STATUS
-dnl
-dnl Revision 1.4 2001/05/29 09:50:24 jongfoster
-dnl Unified blocklist/imagelist/permissionslist.
-dnl File format is still under discussion, but the internal changes
-dnl are (mostly) done.
-dnl
-dnl Also modified interceptor behaviour:
-dnl - We now intercept all URLs beginning with one of the following
-dnl prefixes (and *only* these prefixes):
-dnl * http://i.j.b/
-dnl * http://ijbswa.sf.net/config/
-dnl * http://ijbswa.sourceforge.net/config/
-dnl - New interceptors "home page" - go to http://i.j.b/ to see it.
-dnl - Internal changes so that intercepted and fast redirect pages
-dnl are not replaced with an image.
-dnl - Interceptors now have the option to send a binary page direct
-dnl to the client. (i.e. ijb-send-banner uses this)
-dnl - Implemented show-url-info interceptor. (Which is why I needed
-dnl the above interceptors changes - a typical URL is
-dnl "http://i.j.b/show-url-info?url=www.somesite.com/banner.gif".
-dnl The previous mechanism would not have intercepted that, and
-dnl if it had been intercepted then it then it would have replaced
-dnl it with an image.)
-dnl
-dnl Revision 1.3 2001/05/22 18:46:04 oes
-dnl
-dnl - Enabled filtering banners by size rather than URL
-dnl by adding patterns that replace all standard banner
-dnl sizes with the "Junkbuster" gif to the re_filterfile
-dnl
-dnl - Enabled filtering WebBugs by providing a pattern
-dnl which kills all 1x1 images
-dnl
-dnl - Added support for PCRE_UNGREEDY behaviour to pcrs,
-dnl which is selected by the (nonstandard and therefore
-dnl capital) letter 'U' in the option string.
-dnl It causes the quantifiers to be ungreedy by default.
-dnl Appending a ? turns back to greedy (!).
-dnl
-dnl - Added a new interceptor ijb-send-banner, which
-dnl sends back the "Junkbuster" gif. Without imagelist or
-dnl MSIE detection support, or if tinygif = 1, or the
-dnl URL isn't recognized as an imageurl, a lame HTML
-dnl explanation is sent instead.
-dnl
-dnl - Added new feature, which permits blocking remote
-dnl script redirects and firing back a local redirect
-dnl to the browser.
-dnl The feature is conditionally compiled, i.e. it
-dnl can be disabled with --disable-fast-redirects,
-dnl plus it must be activated by a "fast-redirects"
-dnl line in the config file, has its own log level
-dnl and of course wants to be displayed by show-proxy-args
-dnl Note: Boy, all the #ifdefs in 1001 locations and
-dnl all the fumbling with configure.in and acconfig.h
-dnl were *way* more work than the feature itself :-(
-dnl
-dnl - Because a generic redirect template was needed for
-dnl this, tinygif = 3 now uses the same.
-dnl
-dnl - Moved GIFs, and other static HTTP response templates
-dnl to project.h
-dnl
-dnl - Some minor fixes
-dnl
-dnl - Removed some >400 CRs again (Jon, you really worked
-dnl a lot! ;-)
-dnl
-dnl Revision 1.2 2001/05/20 01:21:20 jongfoster
-dnl Version 2.9.4 checkin.
-dnl - Merged popupfile and cookiefile, and added control over PCRS
-dnl filtering, in new "permissionsfile".
-dnl - Implemented LOG_LEVEL_FATAL, so that if there is a configuration
-dnl file error you now get a message box (in the Win32 GUI) rather
-dnl than the program exiting with no explanation.
-dnl - Made killpopup use the PCRS MIME-type checking and HTTP-header
-dnl skipping.
-dnl - Removed tabs from "config"
-dnl - Moved duplicated url parsing code in "loaders.c" to a new funcition.
-dnl - Bumped up version number.
-dnl
-dnl Revision 1.1.1.1 2001/05/15 13:58:50 oes
-dnl Initial import of version 2.9.3 source tree
dnl
-dnl
+
+dnl =================================================================
+dnl AutoConf Initialization
+dnl =================================================================
+
+AC_REVISION($Revision: 1.166 $)
AC_INIT(jcc.c)
-AC_CONFIG_HEADER(config.h)
-VERSION_MAJOR=2
-VERSION_MINOR=9
-VERSION_POINT=5
+if test ! -f config.h.in; then
+ echo "You need to run autoheader first. "
+ echo -n "Shall I do this for you now? (y/n) "
+ read answer
+ if test "$answer" != "y"; then
+ exit 1
+ else
+ autoheader
+ fi
+fi
+
+AC_CONFIG_HEADER([config.h])
+AC_CANONICAL_HOST
+
+dodk=auto
+DKPREFIX=none
+AC_ARG_WITH(docbook, dnl
+ --with-docbook=[[yes|no|directory]]
+ Enable docbook documentation creation
+ (default = yes, for gnu and linux),[dnl
+case "$with_docbook" in
+yes) dodk=yes;;
+no) dodk=no;;
+*)
+ dodk=yes
+ DKPREFIX=$withval
+ ;;
+esac
+])
+DB2HTML=false
+AC_ARG_WITH(db2html, dnl
+ --with-db2html=<path/executable>
+ Set the location of the docbook to html converter
+ (default = search),[dnl
+DB2HTML=$withval
+])
+
+dnl =================================================================
+dnl Application version number
+dnl =================================================================
+
+VERSION_MAJOR=3
+VERSION_MINOR=0
+VERSION_POINT=20
+CODE_STATUS="UNRELEASED"
+
+dnl CODE_STATUS can be "alpha", "beta", "stable" or "UNRELEASED",
+dnl and will be used for CGI output. Increment version number and
+dnl set status to "UNRELEASED" whenever CVS differs from the last
+dnl release and no new release is near.
+
+dnl =================================================================
+dnl Substitute the version numbers
+dnl =================================================================
AC_SUBST(VERSION_MAJOR)
AC_SUBST(VERSION_MINOR)
AC_SUBST(VERSION_POINT)
+AC_SUBST(CODE_STATUS)
-dnl This can be "alpha", "beta", or "stable"
-dnl and will be used for CGI output
dnl
-AC_DEFINE(CODE_STATUS, "alpha")
-
AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR})
AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT})
AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}")
+AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}")
+
+dnl =================================================================
+dnl Checks for programs needed to build.
+dnl =================================================================
+
+dnl Keep AC_PROG_CC from setting its own defaults:
+if test "X$CFLAGS" = "X"; then
+ CFLAGS=" "
+fi
-dnl Checks for programs.
-dnl AC_PROG_CXX
AC_PROG_CC
AC_PROG_CPP
-dnl AC_PROG_INSTALL
-dnl AC_PROG_LN_S
-dnl AC_PROG_MAKE_SET
-dnl RANLIB is for PCRE:
-dnl AC_PROG_RANLIB
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_AWK
+
+AC_CHECK_PROG(GDB,gdb,yes,no)
+AC_PATH_PROG(BGROUPS,groups,no,$PATH:/bin:/usr/bin:/usr/local/bin)
+AC_PATH_PROG(ID,id,no,$PATH:/bin:/usr/bin:/usr/local/bin)
+AC_SUBST(ID)
+AC_SUBST(BGROUPS)
+
+dnl =================================================================
+dnl debug, gcc and gdb support
+dnl =================================================================
+
+AC_ARG_WITH(debug,
+ [ --with-debug Enable debug mode],
+ [
+ if test "x$withval" != "xno" ; then
+ if test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ if test "$GDB"; then
+ CFLAGS="$CFLAGS -ggdb"
+ else
+ CFLAGS="$CFLAGS -g"
+ fi
+ CFLAGS="$CFLAGS -Wshadow -Wconversion"
+ else
+ CFLAGS="$CFLAGS -g"
+ fi
+ fi
+ fi
+ ],
+ [
+ if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ fi
+ fi
+ ]
+)
+
+dnl =================================================================
+dnl Check for user and group validity
+dnl =================================================================
+
+
+if test "$EMXOS2" = yes; then
+ echo "Skipping user and group validity stuff.";
-AC_MINGW32
-AC_CYGWIN
-AC_EXEEXT
-AC_OBJEXT
+else
-dnl Checks for libraries.
-dnl AC_CHECK_LIB(pcre, pcre_compile)
-dnl AC_CHECK_LIB(pcreposix, regcomp, pcre)
+ $ID privoxy >/dev/null 2>/dev/null
+ if test $? -ne 0 ; then
+ AC_MSG_WARN(There is no user 'privoxy' on this system)
+ fi
+ AC_MSG_CHECKING([for user])
+ AC_ARG_WITH(user,
+ [ --with-user=privoxy Set user under which privoxy will run],
+ [
+ if test "x$withval" != "xyes"; then
+ if test $ID = no ; then
+ AC_MSG_ERROR(There is no 'id' program on this system)
+ else
+ AC_MSG_RESULT($with_user)
+ $ID $with_user 2>/dev/null >/dev/null
+ if test $? -eq 0 ; then
+ USER=$with_user;
+ else
+ AC_MSG_ERROR(There is no user '$with_user' on this system)
+ fi
+ fi
+ else
+ AC_MSG_ERROR(We need a user if you give me this parameter)
+ fi
+ ],
+ [
+ if test $ID = no ; then
+ AC_MSG_ERROR(There is no 'id' programm on this system)
+ else
+ AC_MSG_RESULT(none specified)
+ USER=$with_user
+ fi
+ ]
+ )
+ AC_SUBST(USER)
+
+ AC_MSG_CHECKING([for group])
+ AC_ARG_WITH(group,
+ [ --with-group=privoxy Set group for privoxy],
+ [
+ if test "x$withval" != "xyes"; then
+ if test $BGROUPS = no ; then
+ AC_MSG_ERROR(There is no 'groups' program on this system)
+ else
+ AC_MSG_RESULT($with_group)
+ $BGROUPS $USER >/dev/null
+ if test $? -eq 0 ; then
+ # FIXME: this fails if valid group, but not first group
+ # listed.
+ if test "$with_group" != "`$BGROUPS $USER | sed 's/.*: //' 2>/dev/null |$AWK '{print $1}'`" ; then
+ AC_MSG_ERROR(The given value '$withval' does not match group entry)
+ else
+ GROUP=$with_group;
+ fi
+ else
+ AC_MSG_ERROR(There is no group entry for user '$USER')
+ fi
+ fi
+ else
+ AC_MSG_ERROR(We need a group if you give me this parameter)
+ fi
+ ],
+ [
+ if test $BGROUPS = no ; then
+ AC_MSG_ERROR(There is no 'groups' programm on this system)
+ else
+ AC_MSG_RESULT(none specified)
+ GROUP=$with_group;
+ fi
+ ]
+ )
+ AC_SUBST(GROUP)
+
+fi
+
+dnl =================================================================
+dnl additional gcc flags
+dnl =================================================================
+dnl
+if test "$GCC"; then
+ if test "$host" != "powerpc-unknown-amigaos"; then
+ CFLAGS="-pipe $CFLAGS"
+ fi
+fi
-dnl Checks for header files.
-AC_HEADER_STDC
-dnl AC_HEADER_SYS_WAIT
-dnl AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/time.h unistd.h)
-dnl limits.h is for PCRE:
-dnl AC_CHECK_HEADERS(limits.h)
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_SIZE_T
+dnl =================================================================
+dnl Build type
+dnl =================================================================
+dnl
+dnl Must do this first.
+dnl
+dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler
+dnl into Cygwin or MinGW32 modes. Depending on the mode selected,
+dnl the compiler will use completely different sets of library
+dnl and include files.
+dnl
+dnl =================================================================
-dnl Checks for library functions.
-dnl AC_TYPE_SIGNAL
-dnl AC_CHECK_FUNC(strstr)
-dnl bcopy and memmove are for PCRE
-AC_CHECK_FUNCS(strerror bcopy memmove)
+AC_MINGW32
+AC_CYGWIN
-dnl Build type
+if test "$MINGW32" = "yes"; then
+ target_type=mingw
+else
+ if test "$CYGWIN" = "yes"; then
+ target_type=cygwin
+ else
+ target_type=unix
+ fi
+fi
+
+if test $dodk = auto; then
+ dodk=no
+ if test $target_type = unix; then
+ case "$host_os" in
+ linux* | gnu*)
+ dodk=yes
+ ;;
+ esac
+ fi
+fi
+
+dnl Decide what to do based on target_type
+dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
+dnl This is because we don't know yet whether pthread is enabled.
AC_ARG_ENABLE(mingw32,
-[ --enable-mingw32 Use mingw32 for a Windows GUI],
+[ --enable-mingw32 Use mingw32 for a Windows GUI],
[if test $enableval = yes; then
- WIN_ONLY=
- CYGWIN_FLAGS="-mwindows -mno-cygwin"
- echo "Using mingw32 (Win32 GUI)"
- else
- WIN_ONLY=#
- if test "$CYGWIN" = "yes"; then
- CYGWIN_FLAGS="-mno-win32"
- echo "Using Cygnus (Win32 command line)"
- else
- CYGWIN_FLAGS=
- fi
- fi],
-[if test "$MINGW32" = "yes"; then
- WIN_ONLY=
- CYGWIN_FLAGS="-mwindows -mno-cygwin"
- echo "Using mingw32 (Win32 GUI)"
- else
- WIN_ONLY=#
- if test "$CYGWIN" = "yes"; then
- CYGWIN_FLAGS="-mno-win32"
- echo "Using Cygnus (Win32 command line)"
- else
- CYGWIN_FLAGS=
- fi
- fi])
+ target_type=mingw
+fi])
+if test $target_type = mingw; then
+ WIN_ONLY=
+ CFLAGS="$CFLAGS -DWINVER=0x501"
+ SPECIAL_CFLAGS="-mwindows -mno-cygwin"
+ PTHREAD_LIB=-lpthreadGC
+ echo "Using mingw32 (Win32 GUI)"
+else
+ WIN_ONLY=#
+ if test $target_type = cygwin; then
+ SPECIAL_CFLAGS="-mno-win32"
+ PTHREAD_LIB=
+ echo "Using Cygnus (Win32 command line)"
+ else
+ SPECIAL_CFLAGS=
+ PTHREAD_LIB=-lpthread
+ fi
+fi
AC_SUBST(WIN_ONLY)
-AC_SUBST(CYGWIN_FLAGS)
-SOLARIS_ONLY=#
-AC_SUBST(SOLARIS_ONLY)
+dnl Checking which text html browser we have available
+if test $dodk != no; then
+ AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
+ if test "$WDUMP" = false; then
+ AC_MSG_WARN(You need some kind of text browser to build documentation \(w3m, lynx and links are supported\))
+ fi
+ if test $DB2HTML = false; then
+ dnl We need to clean the variable, otherwise AC_CHECK_PROGS
+ dnl will fail
+ DB2HTML=""
+ AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
+ fi
+fi
+AC_SUBST(WDUMP)
+AC_SUBST(DB2HTML)
+
+dnl If we use rpm, we need to check where %_topdir is
+AC_CHECK_PROGS(RPMBIN,rpm,false)
+if test $RPMBIN != false; then
+ RPM_BASE=`rpm --eval "%{_topdir}"`
+ if test "$RPM_BASE" = ""; then
+ RPM_BASE=/usr/src/redhat
+ fi
+fi
+AC_SUBST(RPM_BASE)
+
+dnl Check for jade, so we can build the documentation
+AC_CHECK_PROGS(JADEBIN,jade openjade,false)
+AC_SUBST(JADEBIN)
+
+dnl Check for man2html for docs.
+AC_CHECK_PROGS(MAN2HTML,man2html,false)
+AC_SUBST(MAN2HTML)
+
+dnl Set doc status flag for conditional content inclusions
+DOC_STATUS=p-not-stable
+if test $CODE_STATUS = stable; then
+ DOC_STATUS="p-stable"
+fi
+AC_SUBST(DOC_STATUS)
+
+dnl Checking for the docbook.dsl stylesheet file
+dnl It is still not portable (directory slash)
+JADECAT=""
+if test $dodk = yes; then
+ if test $DKPREFIX = none; then
+ for i in /usr/share/sgml/docbook/dsssl-stylesheets \
+ /usr/share/sgml/docbkdsl /usr/share/sgml/docbook-dsssl \
+ /usr/local/share/sgml/docbook/dsssl/modular \
+ /usr/share/sgml/docbook/stylesheet/dsssl/modular/ \
+ ; do
+dnl echo -n does not fly with /bin/sh.
+dnl echo -n "checking for $i/html/docbook.dsl..."
+ AC_MSG_CHECKING([for $i])
+ if test -f $i/html/docbook.dsl; then
+ echo "yes"
+ DKPREFIX=$i
+ break
+ else
+ echo "no"
+ fi
+ done
+# where are the catalogs?
+ for i in /usr/share/sgml/CATALOG.docbk30 \
+ /usr/share/sgml/CATALOG.docbk31 \
+ /usr/share/sgml/CATALOG.docbk31 \
+ /usr/local/share/sgml/docbook/3.0/docbook.cat \
+ /usr/local/share/sgml/docbook/3.1/docbook.cat \
+ /usr/share/sgml/docbook/dtd/3.1/docbook.cat \
+ ; do
+dnl echo -n "checking for $i..."
+ AC_MSG_CHECKING([for $i])
+ if test -f $i; then
+ echo "yes"
+ JADECAT="$JADECAT -c $i"
+ else
+ echo "no"
+ fi
+ done
+ fi
+fi
+AC_SUBST(JADECAT)
+AC_SUBST(DKPREFIX)
+
+AC_ARG_ENABLE(large-file-support,
+[ --enable-large-file-support Define _LARGE_FILES and friends.
+ Required by some systems to support files larger then 2GB.],
+[if test $enableval = yes; then
+ CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1"
+fi])
-dnl Features
+dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
+old_CFLAGS_nospecial=$CFLAGS
+CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
-dnl Regex engine:
+# Hack to force AutoConf to use the CFLAGS we just set
+dnl Warning: This may break with a future version of Autoconf
+dnl Tested with autoconf 2.13
+ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-GNU_REGEX_ONLY=
-PCRE_REGEX_ONLY=
-NO_REGEX_ONLY=#
-AC_ARG_ENABLE(regex,
-[ --disable-regex Don't allow regular expressions in the blockfile],
-[if test $enableval = yes; then
- AC_DEFINE(REGEX)
-else
- NO_REGEX_ONLY=
- GNU_REGEX_ONLY=#
- PCRE_REGEX_ONLY=#
-fi],AC_DEFINE(REGEX))
+dnl =================================================================
+dnl Thread support
+dnl =================================================================
-AC_ARG_ENABLE(pcre-regex,
-[ --disable-pcre-regex Use old, slow GNU Regex instead of PCRE.],
-[if test $enableval = yes; then
- AC_DEFINE(PCRE)
- GNU_REGEX_ONLY=#
+AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
+
+AC_ARG_ENABLE(pthread,
+[ --disable-pthread Don't use POSIX threads (pthreads)],
+[if test $enableval = no; then
+ # Disable pthreads
+ if test $have_pthread = yes; then
+ AC_MSG_WARN([pthreads seem to be available but you are using --disable-pthread.])
+ AC_MSG_WARN([This is almost always a mistake and can render Privoxy unacceptable slow.])
+ fi
+ have_pthread=no
+fi])
+
+if test $have_pthread = yes; then
+ PTHREAD_ONLY=
+ AC_DEFINE(FEATURE_PTHREAD)
+ echo Using POSIX threads
+ if test "$GCC" = "yes"; then
+ # Set a GCC specific switch:
+ if test "$target_type" = "unix"; then
+ ac_jgf_save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -pthread"
+ AC_TRY_LINK([#include <pthread.h>],
+ [void *p = pthread_create;],
+ [
+ # This compiler switch makes GCC on Linux thread-safe
+ # However, it's not supported on most other OS.
+ PTHREAD_LIB=
+ SPECIAL_CFLAGS="-pthread"
+ ])
+ CFLAGS=$ac_jgf_save_CFLAGS
+ fi
+ fi
else
- PCRE_REGEX_ONLY=#
-fi],[AC_DEFINE(PCRE)
- GNU_REGEX_ONLY=#
+ PTHREAD_ONLY=#
+ echo Using native threads
+fi
+
+AC_SUBST(PTHREAD_ONLY)
+
+dnl =================================================================
+dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
+dnl gmtime and localtime
+dnl =================================================================
+
+dnl Next line needed to find the gethost*_r functions on Solaris
+AC_CHECK_LIB(nsl, gethostbyname)
+
+AC_CHECK_FUNC(gethostbyaddr_r, [
+ AC_MSG_CHECKING([signature of gethostbyaddr_r])
+ AC_TRY_COMPILE([
+# include <netdb.h>
+ ], [
+ struct hostent *h, *hp;
+ char *a, *b;
+ int l, bl, t, e;
+ (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
+ ], [
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS)
+ AC_MSG_RESULT([8 args])
+ ], [
+ AC_TRY_COMPILE([
+# include <netdb.h>
+ ], [
+ struct hostent *h;
+ char *a, *b;
+ int l, bl, t, e;
+ (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
+ ], [
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS)
+ AC_MSG_RESULT([7 args])
+ ], [
+ AC_TRY_COMPILE([
+# include <netdb.h>
+ ], [
+ struct hostent_data *d;
+ struct hostent *h;
+ char a,
+ int l, t;
+ (void) gethostbyaddr_r(a, l, t, h, d)
+ ], [
+ AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS)
+ AC_MSG_RESULT([5 args])
+ ], [
+ AC_MSG_RESULT(unrecognised)
+ ])
+ ])
+ ])
+], [
+ AC_MSG_RESULT(no)
])
-AC_SUBST(GNU_REGEX_ONLY)
-AC_SUBST(PCRE_REGEX_ONLY)
-AC_SUBST(NO_REGEX_ONLY)
+AC_CHECK_FUNC(gethostbyname_r, [
+ AC_MSG_CHECKING([signature of gethostbyname_r])
+ AC_TRY_COMPILE([
+# include <netdb.h>
+ ], [
+ struct hostent *h, *r;
+ char *n, *b;
+ int bl, e;
+ (void) gethostbyname_r(n, h, b, bl, &r, &e)
+ ], [
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS)
+ AC_MSG_RESULT([6 args])
+ ], [
+ AC_TRY_COMPILE([
+# include <netdb.h>
+ ], [
+ struct hostent *h;
+ char *n, *b;
+ int bl, e;
+ (void) gethostbyname_r(n, h, b, bl, &e)
+ ], [
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS)
+ AC_MSG_RESULT([5 args])
+ ], [
+ AC_TRY_COMPILE([
+# include <netdb.h>
+ ], [
+ struct hostent_data *d;
+ struct hostent *h;
+ char *n,
+ (void) gethostbyname_r(n, h, d)
+ ], [
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS)
+ AC_MSG_RESULT([3 args])
+ ], [
+ AC_MSG_RESULT(unrecognised)
+ ])
+ ])
+ ])
+], [
+ AC_MSG_RESULT(no)
+])
+AC_CHECK_FUNC(gmtime_r, [
+ AC_MSG_CHECKING([signature of gmtime_r])
+ AC_TRY_COMPILE([
+# include <time.h>
+ ], [
+ struct time *t;
+ struct tm *tm;
+ (void) gmtime_r(t, tm)
+ ], [
+ AC_MSG_RESULT(ok)
+ AC_DEFINE(HAVE_GMTIME_R)
+ ], [
+ AC_MSG_RESULT(unrecognised)
+ ])
+], [
+ AC_MSG_RESULT(no)
+])
-dnl Other features:
+AC_CHECK_FUNC(localtime_r, [
+ AC_MSG_CHECKING([signature of localtime_r])
+ AC_TRY_COMPILE([
+# include <time.h>
+ ], [
+ struct time *t;
+ struct tm *tm;
+ (void) localtime_r(t, tm)
+ ], [
+ AC_MSG_RESULT(ok)
+ AC_DEFINE(HAVE_LOCALTIME_R)
+ ], [
+ AC_MSG_RESULT(unrecognised)
+ ])
+], [
+ AC_MSG_RESULT(no)
+])
-AC_ARG_ENABLE(toggle,
-[ --disable-toggle Don't support temporary disable],
-[if test $enableval = yes; then
- AC_DEFINE(TOGGLE)
-fi],AC_DEFINE(TOGGLE))
+dnl =================================================================
+dnl Solaris specific
+dnl FIXME: Not tested on Solaris yet...
+dnl ISFIXED: Have tested it on Solaris, but there are other ways to
+dnl make these checks generic, e.g.:
+dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
+dnl (Moritz Barsnick <moritz@barsnick.net>)
+dnl =================================================================
+
+
+SOCKET_LIB=
+
+case "$host" in
+*-solaris*) SOCKET_LIB="-lsocket -lnsl"
+ AC_DEFINE(__EXTENSIONS__)
+ if test "$GCC" = "yes"; then
+ # Set a GCC specific switch:
+ # This compiler switch makes Solaris thread-safe
+ PTHREAD_LIB=
+ SPECIAL_CFLAGS="-pthreads"
+ else
+ # What do we do without GCC? Guess this:
+ SPECIAL_CFLAGS="-D_REENTRANT"
+ fi
+;;
+esac
+
+AC_SUBST(SOCKET_LIB)
+
+dnl =================================================================
+dnl Solaris problem, and others perhaps (socklen_t is undefined)
+dnl =================================================================
+
+AC_MSG_CHECKING([for socklen_t])
+AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
+ AC_MSG_RESULT([no])
+ AC_DEFINE(socklen_t,int,
+ [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
+
+
+dnl =================================================================
+dnl OS/2 specific
+dnl =================================================================
+
+case "$host" in
+*-os2-emx*) SOCKET_LIB=-lsocket
+;;
+esac
+
+AC_SUBST(SOCKET_LIB)
+
+dnl =================================================================
+dnl Mac OSX specific
+dnl =================================================================
+
+case "$host" in
+*-apple-darwin*) SPECIAL_CFLAGS="-Dunix"
+;;
+esac
+
+dnl =================================================================
+dnl OpenBSD specific
+dnl =================================================================
+
+case "$host" in
+*-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix"
+;;
+esac
+
+dnl =================================================================
+dnl AmigaOS specific
+dnl =================================================================
-PCRS_ONLY=
-AC_ARG_ENABLE(pcrs,
-[ --disable-pcrs Don't support arbitrary content modification],
+AMIGAOS_ONLY=#
+
+case "$host" in
+*-amigaos) AMIGAOS_ONLY=
+;;
+esac
+
+AC_SUBST(AMIGAOS_ONLY)
+
+dnl =================================================================
+dnl Check for standard compiler stuff
+dnl =================================================================
+
+AC_EXEEXT
+AC_OBJEXT
+AC_HEADER_STDC
+AC_HEADER_DIRENT
+AC_C_CONST
+AC_TYPE_SIZE_T
+AC_TYPE_PID_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+AC_CHECK_SIZEOF(int, 4)
+AC_CHECK_SIZEOF(char *, 4)
+AC_CHECK_SIZEOF(long, 4)
+AC_CHECK_SIZEOF(long long, 8)
+AC_CHECK_SIZEOF(size_t, 4)
+
+dnl Checks for header files.
+dnl AC_HEADER_SYS_WAIT
+dnl AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/time.h unistd.h)
+AC_CHECK_HEADERS([OS.h arpa/inet.h errno.h fcntl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h sys/timeb.h sys/wait.h unistd.h])
+
+dnl Checks for library functions.
+dnl bcopy is for PCRE
+AC_CHECK_FUNCS([bcopy])
+AC_PROG_GCC_TRADITIONAL
+AC_TYPE_SIGNAL
+AC_CHECK_FUNCS([access atexit getcwd gethostbyaddr gethostbyaddr_r gethostbyname gethostbyname_r gettimeofday inet_ntoa localtime_r memchr memmove memset poll putenv random regcomp select setlocale snprintf socket strchr strdup strerror strftime strlcat strlcpy strptime strstr strtoul timegm tzset])
+
+dnl Checks for RFC 2553 resolver and socket functions
+AC_ARG_ENABLE(ipv6-support,
+[ --disable-ipv6-support Disable IPv6 support and other RFC-2554-related improvements],
[if test $enableval = yes; then
- AC_DEFINE(PCRS)
- AC_DEFINE(DENY_GZIP)
+ enable_ipv6_support=yes
+fi], enable_ipv6_support=yes)
+
+if test $enable_ipv6_support != yes; then
+ AC_MSG_WARN([Skipping checks for IPv6 support and other RFC-2554-related improvements.
+ Due to lock contention, this may result in slower DNS resolution for IPv4 setups, too.])
+elif test $target_type = mingw; then
+ AC_CHECK_LIB(ws2_32, main)
+
+ AC_MSG_CHECKING(getaddrinfo in ws2_32)
+ AC_TRY_LINK(
+ [
+ #include<windows.h>
+ #include<ws2tcpip.h>
+ ],
+ [getaddrinfo(0,0,0,0)],
+ have_ws2_32_getaddrinfo=yes
+ )
+ AC_MSG_RESULT($have_ws2_32_getaddrinfo)
+
+ AC_MSG_CHECKING(getnameinfo in ws2_32)
+ AC_TRY_LINK(
+ [
+ #include<windows.h>
+ #include<ws2tcpip.h>
+ ],
+ [getnameinfo(0,0,0,0,0,0,0)],
+ have_ws2_32_getnameinfo=yes
+ )
+ AC_MSG_RESULT($have_ws2_32_getnameinfo)
+
+ if test $have_ws2_32_getaddrinfo ; then
+ if test $have_ws2_32_getnameinfo ; then
+ AC_DEFINE([HAVE_RFC2553], [1],
+ [Define if RFC 2553 resolver functions like getaddrinfo(3) and
+ getnameinfo(3) present])
+ fi
+ fi
else
- PCRS_ONLY=#
-fi],[AC_DEFINE(PCRS) AC_DEFINE(DENY_GZIP)])
-AC_SUBST(PCRS_ONLY)
+ AC_CHECK_FUNC([getaddrinfo],
+ [AC_CHECK_FUNC([getnameinfo],
+ [AC_DEFINE([HAVE_RFC2553], [1],
+ [Define if RFC 2553 resolver functions like getaddrinfo(3) and
+ getnameinfo(3) present])
+ ])
+ ])
+fi
+
+dnl =================================================================
+dnl Checks for libraries.
+dnl =================================================================
+dnl Note: Some systems may have the library but not the system header
+dnl file, so we must check for both.
+dnl Also check for correct version
+AC_CHECK_LIB(pcre, pcre_compile, [
+ AC_CHECK_HEADER(pcre.h, [
+ AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
+ ], [
+ AC_CHECK_HEADER(pcre/pcre.h, [
+ AC_EGREP_HEADER(pcre_fullinfo, pcre/pcre.h, [have_pcre=yes]; [AC_DEFINE(PCRE_H_IN_SUBDIR)], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
+ ], [have_pcre=no])
+ ])
+], [have_pcre=no])
+
+AC_CHECK_LIB(pcreposix, regcomp, [
+ AC_CHECK_HEADER(pcreposix.h, [
+ AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
+ ], [
+ AC_CHECK_HEADER(pcre/pcreposix.h, [
+ AC_EGREP_HEADER(pcreposix_regerror, pcre/pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]; [AC_DEFINE(PCREPOSIX_H_IN_SUBDIR)])
+ ], [have_pcreposix=no])
+ ])
+], [have_pcreposix=no], -lpcre)
+
+dnl ================================================================
+dnl libpcrs is temporarily disabled.
+dnl
+dnl Privoxy's own pcrs version fixes some problems that
+dnl are present in libpcrs 0.3, the last pcrs release we
+dnl know of, and as libpcrs seems to be currently unmaintained
+dnl we can't send these fixes upstream.
+dnl ================================================================
+dnl
+dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
-AC_ARG_ENABLE(force,
-[ --disable-force Don't allow blockfle to be bypassed],
-[if test $enableval = yes; then
- AC_DEFINE(FORCE_LOAD)
-fi],AC_DEFINE(FORCE_LOAD))
+dnl =================================================================
+dnl Always defined
+dnl =================================================================
-AC_ARG_ENABLE(fast-redirects,
-[ --disable-fast-redirects Don't support fast redirects],
-[if test $enableval = yes; then
- AC_DEFINE(FAST_REDIRECTS)
-fi], AC_DEFINE(FAST_REDIRECTS))
+AC_DEFINE(__MT__)
-AC_ARG_ENABLE(killpopup,
-[ --disable-killpopup Never block popups],
+dnl =================================================================
+dnl Features
+dnl =================================================================
+
+AC_ARG_ENABLE(toggle,
+[ --disable-toggle Don't support temporary disable],
[if test $enableval = yes; then
- AC_DEFINE(KILLPOPUPS)
-fi],AC_DEFINE(KILLPOPUPS))
+ AC_DEFINE(FEATURE_TOGGLE)
+fi],AC_DEFINE(FEATURE_TOGGLE))
-AC_ARG_ENABLE(stats,
-[ --disable-stats Don't keep statistics],
+AC_ARG_ENABLE(force,
+[ --disable-force Don't allow single-page disable],
[if test $enableval = yes; then
- AC_DEFINE(STATISTICS)
-fi],AC_DEFINE(STATISTICS))
+ AC_DEFINE(FEATURE_FORCE_LOAD)
+fi],AC_DEFINE(FEATURE_FORCE_LOAD))
-AC_ARG_ENABLE(split-proxy-args,
-[ --disable-split-proxy-args One big show-proxy-args page, not one per file.],
+AC_ARG_ENABLE(fast-redirects,
+[ --disable-fast-redirects Don't support fast redirects],
[if test $enableval = yes; then
- AC_DEFINE(SPLIT_PROXY_ARGS)
-fi],AC_DEFINE(SPLIT_PROXY_ARGS))
+ AC_DEFINE(FEATURE_FAST_REDIRECTS)
+fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
-AC_ARG_ENABLE(webdav,
-[ --disable-webdav Don't support WebDAV. This option stops MS Outlook
- Express from accessing HotMail e-mail.],
+AC_ARG_ENABLE(stats,
+[ --disable-stats Don't keep statistics],
[if test $enableval = yes; then
- AC_DEFINE(WEBDAV)
-fi],
-AC_DEFINE(WEBDAV))
+ AC_DEFINE(FEATURE_STATISTICS)
+fi],AC_DEFINE(FEATURE_STATISTICS))
AC_ARG_ENABLE(ie-images,
-[ --disable-ie-images Don't auto-detect whether a request from MS Internet
- Explorer is for an image or HTML.],
+[ --enable-ie-images Enable a quick but not always reliable auto-detect whether requests from
+ MS Internet Explorer are for an image or not.],
[if test $enableval = yes; then
- AC_DEFINE(DETECT_MSIE_IMAGES)
-fi],
-AC_DEFINE(DETECT_MSIE_IMAGES))
+ AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE)
+fi],)
AC_ARG_ENABLE(image-blocking,
-[ --disable-image-blocking Don't try to figure out whether a request is
- for an image or HTML - assume HTML.],
+[ --disable-image-blocking Don't try to figure out whether a request is
+ for an image or HTML - assume HTML.],
[if test $enableval = yes; then
- AC_DEFINE(IMAGE_BLOCKING)
+ AC_DEFINE(FEATURE_IMAGE_BLOCKING)
fi],
-AC_DEFINE(IMAGE_BLOCKING))
+AC_DEFINE(FEATURE_IMAGE_BLOCKING))
-AC_ARG_ENABLE(acl-files,
-[ --disable-acl-files Prevents the use of ACL files to control access to
- the proxy by IP address.],
+AC_ARG_ENABLE(acl-support,
+[ --disable-acl-support Prevents the use of ACLs to control access to
+ Privoxy by IP address.],
[if test $enableval = yes; then
- AC_DEFINE(ACL_FILES)
+ AC_DEFINE(FEATURE_ACL)
fi],
-AC_DEFINE(ACL_FILES))
+AC_DEFINE(FEATURE_ACL))
AC_ARG_ENABLE(trust-files,
-[ --disable-trust-files Prevents the use of trust files.],
+[ --disable-trust-files Prevents the use of trust files.],
[if test $enableval = yes; then
- AC_DEFINE(TRUST_FILES)
+ AC_DEFINE(FEATURE_TRUST)
fi],
-AC_DEFINE(TRUST_FILES))
+AC_DEFINE(FEATURE_TRUST))
-AC_ARG_ENABLE(jar-files,
-[ --disable-jar-files Prevents the use of jar files to capture cookies.],
+AC_ARG_ENABLE(editor,
+[ --disable-editor Prevents the use of the web-based actions file
+ editor and web-based temporary disable setting.],
[if test $enableval = yes; then
- AC_DEFINE(JAR_FILES)
+ AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
fi],
-AC_DEFINE(JAR_FILES))
+AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
-LIBRARY_PCRE_ONLY=#
-STATIC_PCRE_ONLY=
-AC_ARG_ENABLE(static-pcre,
-[ --disable-static-pcre Link dynamically with the pcre and pcreposix
- libraries. You must build the libraries seperately.],
-[if test $enableval = no; then
- LIBRARY_PCRE_ONLY=
- STATIC_PCRE_ONLY=#
+AC_ARG_ENABLE(no-gifs,
+[ --enable-no-gifs Use politically correct PNG format instead of GIF
+ for built-in images. May not work with all browsers.],
+[if test $enableval = yes; then
+ AC_DEFINE(FEATURE_NO_GIFS)
fi])
-AC_SUBST(LIBRARY_PCRE_ONLY)
+
+AC_ARG_ENABLE(graceful-termination,
+[ --enable-graceful-termination Allow to shutdown Privoxy through the webinterface.],
+[if test $enableval = yes; then
+ AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
+fi])
+
+AC_ARG_ENABLE(extended-host-patterns,
+[ --enable-extended-host-patterns Enable and require PCRE syntax in host patterns. This feature hasn't
+ been announced yet and it's not clear if it's a good idea. It's expected
+ to work, but undocumented. You should only enable it if you know what
+ PCRE is and are sure that you need it for your host patterns. You can
+ use tools/url-pattern-translator.pl to convert existing action files to
+ use PCRE host patterns. Please don't enable this option when creating
+ packages for others that may not be expecting it.],
+[if test $enableval = yes; then
+ AC_DEFINE(FEATURE_EXTENDED_HOST_PATTERNS)
+fi])
+
+AC_ARG_ENABLE(accept-filter,
+[ --enable-accept-filter Try to use accf_http(9) if supported.],
+[if test $enableval = yes; then
+ AC_DEFINE(FEATURE_ACCEPT_FILTER)
+fi])
+
+dnl pcre/pcrs is needed for CGI anyway, so
+dnl the choice is only between static and
+dnl dynamic:
+
+AC_ARG_ENABLE(dynamic-pcre,
+[ --disable-dynamic-pcre Use the built-in, static pcre, even if libpcre is available],
+[ if test $enableval = "no"; then have_pcre=no; fi ])
+
+dnl =================================================
+dnl libpcrs is temporarily disabled,
+dnl see comment above for the reason.
+dnl =================================================
+dnl AC_ARG_ENABLE(dynamic-pcrs,
+dnl [ --disable-dynamic-pcrs Use the built-in, static pcrs, even if libpcrs is available],
+dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
+
+
+dnl ====================================================
+dnl This check is incomplete. For mingw32 zlib is found
+dnl by configure, but not necessarily by the compiler.
+dnl ====================================================
+AC_ARG_ENABLE(zlib,
+[ --disable-zlib Don't use zlib to decompress data before filtering.],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+ AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
+ if test $have_zlib = "yes"; then
+ LIBS="$LIBS -lz"
+ AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
+ else
+ AC_MSG_WARN([No zlib found.
+ Privoxy will not be able to filter compressed content.
+ This may become a fatal error in the future.])
+ fi
+fi
+
+AC_ARG_ENABLE(compression,
+[ --enable-compression Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
+[enableval2=$enableval],
+[enableval2=no])
+if test $enableval2 = yes; then
+ if test $have_zlib = "yes"; then
+ echo Enabling compression support.
+ AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
+ else
+ AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
+ fi
+fi
+
+
+# If we have libpcre and either we also have pcreposix or
+# we don't need pcreposix, then link pcre dynamically; else
+# build it and link statically
+#
+if test $have_pcre = "yes"; then
+ echo "using libpcre"
+ pcre_dyn=yes
+ STATIC_PCRE_ONLY=#
+ LIBS="$LIBS -lpcre -lpcreposix"
+else
+ AC_MSG_WARN([You are using the static PCRE code which is out of date and scheduled for removal, for details see:
+ http://sourceforge.net/mailarchive/forum.php?thread_name=20080511195555.2dc6cfdc%40fabiankeil.de&forum_name=ijbswa-developers])
+ pcre_dyn=no
+ AC_DEFINE(STATIC_PCRE)
+ STATIC_PCRE_ONLY=
+fi
+
+AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
+
+if test $have_pthread = "yes" -o $target_type = "mingw"; then
+ echo Enabling connection-sharing support.
+ AC_DEFINE(FEATURE_CONNECTION_SHARING)
+fi
+
+dnl =================================================
+dnl libpcrs is temporarily disabled,
+dnl see comment above for the reason.
+dnl =================================================
+dnl # If we have libpcrs and pcre is linked dynamically
+dnl # then also link pcrs dynamically, else build and link
+dnl # pcrs statically
+dnl
+dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
+dnl echo "using libpcrs"
+dnl STATIC_PCRS_ONLY=#
+dnl LIBS="$LIBS -lpcrs"
+dnl else
+dnl echo "using built-in static pcrs"
+ AC_DEFINE(STATIC_PCRS)
+ STATIC_PCRS_ONLY=
+dnl fi
+
AC_SUBST(STATIC_PCRE_ONLY)
+AC_SUBST(STATIC_PCRS_ONLY)
+
+dnl =================================================================
+dnl Final cleanup and output
+dnl =================================================================
+
+dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
+dnl in the Makefile
+CFLAGS=$old_CFLAGS_nospecial
+AC_SUBST(SPECIAL_CFLAGS)
-AC_OUTPUT(Makefile)
+AC_SUBST(PTHREAD_LIB)
+AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)