Resyncing HEAD with v_3_0_branch for two OSX fixes:
[privoxy.git] / configure.in
index 593ef0d..e36526a 100644 (file)
@@ -1,9 +1,9 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl 
-dnl $Id: configure.in,v 1.2 2001/05/20 01:21:20 jongfoster Exp $
+dnl $Id: configure.in,v 1.88 2003/03/23 02:15:51 hal9 Exp $
 dnl 
-dnl Written by and Copyright (C) 2001 the SourceForge
-dnl IJBSWA team.  http://ijbswa.sourceforge.net
+dnl Written by and Copyright (C) 2001, 2002 the SourceForge
+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 
@@ -28,6 +28,398 @@ 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.88  2003/03/23 02:15:51  hal9
+dnl Apply Docbook/FreeBSD patch from a.go at tiscali.nl. Thanks!
+dnl
+dnl Revision 1.87  2002/12/28 04:10:22  david__schmidt
+dnl Initial drop of dashboard instrumentation - enabled with
+dnl --enable-activity-console
+dnl
+dnl Revision 1.86  2002/12/13 23:47:10  hal9
+dnl Add openbsd special flags per gunner at styx2002.no-ip.org
+dnl
+dnl Revision 1.85  2002/11/27 12:40:54  oes
+dnl Fixed broken handling of pre-set CFLAGS
+dnl
+dnl Revision 1.84  2002/10/24 22:24:57  hal9
+dnl Make install: Minor clean up for variable handling.
+dnl
+dnl Revision 1.83  2002/10/24 16:32:41  hal9
+dnl echo -n does not work with true /bin/sh. Use AC_MSG_CHECKING for docbook stuff.
+dnl
+dnl Revision 1.82  2002/09/27 04:24:07  hal9
+dnl Minor change of "! test" to "test -ne" for Solaris.
+dnl
+dnl Revision 1.81  2002/09/27 00:38:44  hal9
+dnl Some general cleanup of the user/group stuff. Including remove up to ':' to
+dnl make Linux (?) compatible with other *nix. Better AC output stuff.
+dnl
+dnl Revision 1.80  2002/09/26 18:47:46  hal9
+dnl This is most of Al's patch for --with-user and --with-group which tests that
+dnl these are valid values, if specified. If not specified, they are left empty.
+dnl
+dnl Revision 1.79  2002/09/07 02:11:06  hal9
+dnl Remove some testing stuff inadvertantly left in.
+dnl
+dnl Revision 1.78  2002/09/06 23:18:08  hal9
+dnl Migrate PCRE_H_IN_SUBDIR from 3.0 branch for pcre/pcre.h on RH, etc.
+dnl
+dnl Revision 1.77  2002/09/06 13:23:03  oes
+dnl Removed non-functional test for gcc support for -pthread
+dnl
+dnl Revision 1.76  2002/09/05 14:52:17  oes
+dnl Synced in some changes fromm the stable branch:
+dnl Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH
+dnl
+dnl Revision 1.75  2002/09/04 12:19:33  oes
+dnl Resurrected acconfig.h and removed double quotes from AC_DEFINE params to enable build on older systems
+dnl
+dnl Revision 1.74  2002/09/03 17:31:33  oes
+dnl Added workaround for very strange behaviour of AC_PROG_CC, which sets CFLAGS to -g -O2 if empty
+dnl
+dnl Revision 1.73  2002/06/05 00:26:21  hal9
+dnl Move all doc build stuff to doc/source/GNUmakefile, leaving a 'make dok'
+dnl target only in toplevel. Add DOC_STATUS variable so docs can be built without
+dnl touching sgml source.
+dnl
+dnl Revision 1.72  2002/06/04 15:52:25  jongfoster
+dnl Removing need for acconfig.h (apparently using acconfig.h is an
+dnl obsolete coding style).
+dnl Moving the DocBook stuff together
+dnl
+dnl Revision 1.71  2002/06/04 14:51:49  jongfoster
+dnl Updating for new paths:
+dnl - Source files in src/
+dnl - Object files in obj/
+dnl
+dnl Revision 1.70  2002/05/27 23:26:34  mal0rd
+dnl Made doc-generation configuration automatic.
+dnl References to DB2HTML were removed, not used.
+dnl --with-docbook now only needed if in odd path.
+dnl
+dnl Revision 1.69  2002/05/25 18:11:49  jongfoster
+dnl Wahay!!! 3.0.x has branched!
+dnl New development version is 3.1.1 alpha
+dnl
+dnl Revision 1.68  2002/05/25 16:54:54  jongfoster
+dnl Detect if the compiler supports -pthread.
+dnl Hopefully this will fix bug 560442.  (I don't have a HP PA-RISC
+dnl machine to test this!)
+dnl
+dnl Revision 1.67  2002/05/03 14:33:59  oes
+dnl Generate doc/soucre/ldp.dsl
+dnl
+dnl Revision 1.66  2002/05/03 00:41:56  oes
+dnl Set version to 2.9.15 to comply with new versioning scheme
+dnl
+dnl Revision 1.65  2002/04/25 19:13:57  morcego
+dnl Removed RPM release number declaration on configure.in
+dnl Changed makefile to use given value for RPM_PACKAGEV when on uploading
+dnl targets (will produce an error, explaining who to do it, if no value
+dnl if provided).
+dnl
+dnl Revision 1.64  2002/04/22 16:32:31  morcego
+dnl configure.in, *.spec: Bumping release to 2 (2.9.14-2)
+dnl -rh.spec: uid and gid are now macros
+dnl -suse.spec: Changing the header Copyright to License (Copyright is
+dnl             deprecable)
+dnl
+dnl Revision 1.63  2002/04/11 11:00:21  oes
+dnl Applied Moritz' fix for socklen_t on Solaris
+dnl
+dnl Revision 1.62  2002/04/11 10:09:20  oes
+dnl Version 2.9.14
+dnl
+dnl Revision 1.61  2002/04/10 18:14:45  morcego
+dnl - (privoxy-rh.spec only) Relisting template files on the %%files section
+dnl - (configure.in, privoxy-rh.spec) Bumped package release to 5
+dnl
+dnl Revision 1.60  2002/04/09 16:38:49  oes
+dnl Added detection of missing config.h.in
+dnl
+dnl Revision 1.59  2002/04/06 20:23:55  jongfoster
+dnl Removing unnessacery tests (C++, ranlib)
+dnl
+dnl Revision 1.58  2002/04/04 20:49:20  swa
+dnl attempt to consolidate the
+dnl different dokbook versions.
+dnl
+dnl Revision 1.57  2002/04/04 00:36:36  gliptak
+dnl always use pcre for matching
+dnl
+dnl Revision 1.56  2002/04/03 22:28:03  gliptak
+dnl Removed references to gnu_regex
+dnl
+dnl Revision 1.55  2002/04/03 03:54:38  gliptak
+dnl Checking pcre version
+dnl
+dnl Revision 1.54  2002/04/01 00:54:24  gliptak
+dnl More changes needed around regex support.
+dnl
+dnl Revision 1.53  2002/03/29 20:09:01  swa
+dnl al's patch
+dnl
+dnl Revision 1.52  2002/03/29 19:51:40  gliptak
+dnl Correcting compile problem with Debian
+dnl
+dnl Revision 1.51  2002/03/28 20:43:00  swa
+dnl set make correctly
+dnl
+dnl Revision 1.50  2002/03/27 03:03:45  hal9
+dnl Add test for man2html
+dnl
+dnl Revision 1.49  2002/03/27 02:19:52  david__schmidt
+dnl More Mac OSX support:
+dnl - Get rid of extraneous, noisy -pthread warnings
+dnl - Define unix so we get oes' unix-tagged changes
+dnl
+dnl Revision 1.48  2002/03/26 22:29:54  swa
+dnl we have a new homepage!
+dnl
+dnl Revision 1.47  2002/03/26 16:41:00  hal9
+dnl Upped RPM Release to 3 (need to build new RH packages)
+dnl
+dnl Revision 1.46  2002/03/24 18:55:06  jongfoster
+dnl Making Docbook work under Windows
+dnl
+dnl Revision 1.45  2002/03/24 14:19:55  swa
+dnl set rpm package release in configure.in. nowhere else.
+dnl
+dnl Revision 1.44  2002/03/24 13:25:43  swa
+dnl name change related issues
+dnl
+dnl Revision 1.43  2002/03/24 12:56:21  swa
+dnl name change related issues.
+dnl
+dnl Revision 1.42  2002/03/22 18:11:37  jongfoster
+dnl Bumping version number to 2.9.12
+dnl
+dnl Revision 1.41  2002/03/19 19:30:04  morcego
+dnl - Fixing stylesheet checking on configure. If it is found, no further checks
+dnl   should be done
+dnl
+dnl - configure will now check for db2html or docbook2html (should work now
+dnl   on SuSe without the docbktls package)
+dnl
+dnl Revision 1.40  2002/03/09 14:33:30  oes
+dnl Fixing the (harmless) AC_CHECK_FILE warnings
+dnl
+dnl Revision 1.39  2002/03/08 16:46:13  oes
+dnl Added --enable-no-gifs
+dnl
+dnl Revision 1.38  2002/03/08 14:13:50  morcego
+dnl Fixing configure, to remove a command not found error.
+dnl
+dnl Revision 1.37  2002/03/08 12:58:21  oes
+dnl Tiny bugfix in AC_ARG_WITH(debug)
+dnl
+dnl Revision 1.36  2002/03/06 23:50:36  morcego
+dnl Will not test for a text browser if we are not using docbook.
+dnl
+dnl Revision 1.35  2002/03/06 21:55:52  morcego
+dnl New configure option: --with-docbook=(yes|no|directory)
+dnl Preliminary new platform detection code included. Will work with the
+dnl old one for now. No use just trowing it away
+dnl
+dnl Revision 1.34  2002/03/06 20:57:00  morcego
+dnl Fixing detection of stylesheets on SuSe.
+dnl
+dnl Revision 1.33  2002/03/05 17:31:11  morcego
+dnl Search for docbook.dsl. Should solve portability problems for SuSe.
+dnl
+dnl Revision 1.32  2002/03/05 14:07:43  morcego
+dnl configure now detects rpm topdir, and change GNUmakefile acordingly
+dnl    (based on sugestion by Sarantis Paskalis)
+dnl
+dnl Revision 1.31  2002/03/05 13:43:28  morcego
+dnl Checking for text browser, so redhat-dok can work.
+dnl
+dnl Revision 1.30  2002/03/04 17:58:01  oes
+dnl Deleted _DEBUG and PID_FILE_PATH
+dnl
+dnl Revision 1.29  2002/02/28 14:20:53  oes
+dnl Fixed detection of gethost*_r functions on Solaris
+dnl
+dnl Revision 1.28  2002/02/27 15:02:38  oes
+dnl Incremented version number
+dnl
+dnl Revision 1.27  2002/01/10 12:35:18  oes
+dnl Added cross-compile defaults to the AC_CHECK_SIZEOF macros
+dnl to silence autoconf warnings. Numbers are for Intel/Linux.
+dnl Is there a better way?
+dnl
+dnl Revision 1.26  2002/01/09 14:29:49  oes
+dnl - Added AC_CHECK_FUNC tests for the availability of
+dnl   gethostbyname_r, gethostbyaddr_r, gmtime_r and
+dnl   localtime_r, as well as AC_TRY_COMPILE tests to
+dnl   determine their signatures.
+dnl
+dnl - Fixed a bug with the init of CFLAGS that was
+dnl   reported by barsnick
+dnl
+dnl Revision 1.25  2002/01/04 15:27:18  oes
+dnl Changed quoting of CODE_STATUS for use in make
+dnl
+dnl Revision 1.24  2001/12/30 14:07:31  steudten
+dnl - Add signal handling (unix)
+dnl - Add SIGHUP handler (unix)
+dnl - Add creation of pidfile (unix)
+dnl - Add action 'top' in rc file (RH)
+dnl - Add entry 'SIGNALS' to manpage
+dnl - Add exit message to logfile (unix)
+dnl
+dnl Revision 1.23  2001/12/09 20:24:42  david__schmidt
+dnl Change from "alpha" to "beta" in configure.in
+dnl
+dnl Revision 1.22  2001/12/01 11:24:01  jongfoster
+dnl Renaming Makefile.in to GNUmakefile.in so that non-GNU versions of
+dnl make break in a more obvious way.
+dnl
+dnl Revision 1.21  2001/11/30 21:35:54  jongfoster
+dnl Bumping version number to 2.9.10
+dnl
+dnl Revision 1.20  2001/10/23 21:24:09  jongfoster
+dnl Support for FEATURE_CGI_EDIT_ACTIONS
+dnl
+dnl Revision 1.19  2001/10/07 15:33:14  oes
+dnl Removed FEATURE_DENY_GZIP
+dnl Bumped up version number
+dnl
+dnl Revision 1.18  2001/09/13 13:10:24  steudten
+dnl
+dnl PreWork for Debug Interface.
+dnl Add new option "--with-debug" to enable debugging (flags aso.)
+dnl
+dnl Revision 1.17  2001/09/12 23:44:55  david__schmidt
+dnl Mac OSX (Darwin) support added.
+dnl
+dnl Revision 1.16  2001/09/12 22:55:45  joergs
+dnl AmigaOS support added.
+dnl
+dnl Revision 1.15  2001/09/12 17:28:59  david__schmidt
+dnl
+dnl OS/2 port: update autoconf'd support for the platform.
+dnl
+dnl Revision 1.14  2001/07/30 22:12:11  jongfoster
+dnl Fixing Solaris build (I hope) and tidying up #defines:
+dnl - All feature #defines are now of the form FEATURE_xxx
+dnl - Permanently turned off WIN_GUI_EDIT
+dnl - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+dnl
+dnl Revision 1.13  2001/07/29 17:09:17  jongfoster
+dnl Major changes to build system in order to fix these bugs:
+dnl - pthreads under Linux was broken - changed -lpthread to -pthread
+dnl - Compiling in MinGW32 mode under CygWin now correctly detects
+dnl   which shared libraries are available
+dnl - Solaris support (?) (Not tested under Solaris yet)
+dnl
+dnl Revision 1.12  2001/07/25 19:16:27  oes
+dnl Bumping version number to 2.9.8
+dnl
+dnl Revision 1.11  2001/07/21 18:00:07  jongfoster
+dnl Bumping version number to 2.9.7
+dnl
+dnl Revision 1.10  2001/07/18 17:25:04  oes
+dnl Fixed a typo
+dnl
+dnl Revision 1.9  2001/07/15 19:45:13  jongfoster
+dnl Added support for linking with POSIX threads library
+dnl
+dnl Revision 1.8  2001/07/15 17:54:29  jongfoster
+dnl Renaming #define STATIC to STATIC_PCRE
+dnl Adding new #define FEATURE_PTHREAD that will be used to enable
+dnl POSIX threads support.
+dnl
+dnl Revision 1.7  2001/07/13 13:58:05  oes
+dnl    Completely reorganized the selection scheme for
+dnl    pcre, pcreposix, pcrs and gnu_regex:
+dnl
+dnl    The presence of shared pcre, pcreposix or pcrs
+dnl    libraried is now autodetected. Additionally, the
+dnl    user can enforce using the built-in static variants
+dnl    by specifying --disable-dynamic-(pcre|pcrs).
+dnl    Care is taken to avoid that pcre is dyn, while pcreposix
+dnl    is static, if both are used and that pcrs is static if
+dnl    pcrs is.
+dnl
+dnl    The choice between pcre, gnu or no regex for actionsfile
+dnl    URL matching is now via
+dnl    --(enable|disable)-regex-matching[=(gnu|pcre|no)] with the
+dnl    default being pcre.
+dnl
+dnl Revision 1.6  2001/06/29 21:56:40  oes
+dnl Version -> 2.9.5
+dnl
+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
@@ -45,235 +437,938 @@ 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 
-AC_INIT(jcc.c)
-AC_CONFIG_HEADER(config.h)
 
-VERSION_MAJOR=2
-VERSION_MINOR=9
-VERSION_POINT=4
+
+dnl =================================================================
+dnl AutoConf Initialization
+dnl =================================================================
+
+AC_REVISION($Revision: 1.88 $)
+AC_INIT(src/jcc.c)
+if test ! -f src/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([src/config.h])
+AC_CANONICAL_HOST
+
+
+dnl =================================================================
+dnl Application version number
+dnl =================================================================
+
+VERSION_MAJOR=3
+VERSION_MINOR=1
+VERSION_POINT=1
+CODE_STATUS="alpha"
+
+dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be
+dnl used for CGI output
+
+dnl =================================================================
+dnl Substitute the version numbers
+dnl =================================================================
 
 AC_SUBST(VERSION_MAJOR)
 AC_SUBST(VERSION_MINOR)
 AC_SUBST(VERSION_POINT)
+AC_SUBST(CODE_STATUS)
+AC_SUBST(SYSCONFDIR)
 
-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}")
+dnl
+AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR},
+  [Version number - Major (X._._).])
+AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR},
+  [Version number - Minor (_.X._).])
+AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT},
+  [Version number - Point (_._.X).])
+AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}",
+  [Version number, as a string.])
+AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}",
+  [Status of the code: "alpha", "beta" or "stable".])
+
+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_MINGW32
-AC_CYGWIN
-AC_EXEEXT
-AC_OBJEXT
+AC_CHECK_PROG(GDB,gdb,yes,no)
+AC_PATH_PROG(BGROUPS,groups,no,/bin:/usr/bin:/usr/local/bin)
+AC_PATH_PROG(ID,id,no,/bin:/usr/bin:/usr/local/bin)
+AC_SUBST(ID)
+AC_SUBST(BGROUPS)
 
-dnl Checks for libraries.
-dnl AC_CHECK_LIB(pcre, pcre_compile)
-dnl AC_CHECK_LIB(pcreposix, regcomp, pcre)
+dnl =================================================================
+dnl debug, gcc and gdb support 
+dnl =================================================================
 
-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)
+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 Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_SIZE_T
+dnl =================================================================
+dnl Check for user and group validity
+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)
+$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_WARN(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_WARN(There is no 'id' program 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_WARN(There is no 'groups' program on this system)
+          else
+            AC_MSG_RESULT(none specified)
+            GROUP=$with_group;
+          fi
+        ]
+)
+AC_SUBST(GROUP)
+
+dnl =================================================================
+dnl additional gcc flags
+dnl =================================================================
+dnl 
+if test "$GCC"; then
+  CFLAGS="-pipe $CFLAGS"
+fi
+
+
+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 =================================================================
+
+AC_MINGW32
+AC_CYGWIN
+
+if test "$MINGW32" = "yes"; then
+  target_type=mingw
+else
+  if test "$CYGWIN" = "yes"; then
+    target_type=cygwin
+  else
+    target_type=unix
+  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],
 [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=
+  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 Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
+old_CFLAGS_nospecial=$CFLAGS
+CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
 
-dnl Features
+# 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'
 
-dnl Regex engine:
 
-GNU_REGEX_ONLY=
-PCRE_REGEX_ONLY=
-NO_REGEX_ONLY=#
+dnl =================================================================
+dnl Thread support
+dnl =================================================================
 
-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))
+AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
 
-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_ARG_ENABLE(pthread,
+[  --disable-pthread       Don't use POSIX threads (pthreads)],
+[if test $enableval = no; then
+  # Disable pthreads
+  have_pthread=no
+fi])
+
+if test $have_pthread = yes; then
+  PTHREAD_ONLY=
+  AC_DEFINE(FEATURE_PTHREAD,1,
+  [Define to use POSIX threads instead of native threads.])
+  echo Using POSIX threads
+  if test "$GCC" = "yes"; then
+    # Set a GCC specific switch:
+    if test "$target_type" = "unix"; then
+      # This compiler switch makes GCC on Linux thread-safe
+      # However, it's not supported on most other OS.
+      PTHREAD_LIB=
+      SPECIAL_CFLAGS="-pthread"
+    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,1,
+      [Define if gethostbyaddr_r() exists and takes 8 arguments])
+    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,1,
+      [Define if gethostbyaddr_r() exists and takes 7 arguments])
+      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,1,
+      [Define if gethostbyaddr_r() exists and takes 5 arguments])
+        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,1,
+      [Define if gethostbyname_r() exists and takes 6 arguments])
+    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,1,
+      [Define if gethostbyname_r() exists and takes 5 arguments])
+      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,1,
+      [Define if gethostbyname_r() exists and takes 3 arguments])
+        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,1,
+      [Define if gmtime_r(struct time *, struct tm *) exists])
+  ], [
+    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,1,
+      [Define if localtime_r(struct time *, struct tm *) exists])
+  ], [
+    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 =================================================================
 
-PCRS_ONLY=
-AC_ARG_ENABLE(pcrs,
-[  --disable-pcrs          Don't support arbitrary content modification],
-[if test $enableval = yes; then
-  AC_DEFINE(PCRS)
-  AC_DEFINE(DENY_GZIP)
-else
-  PCRS_ONLY=#
-fi],[AC_DEFINE(PCRS) AC_DEFINE(DENY_GZIP)])
-AC_SUBST(PCRS_ONLY)
+
+SOCKET_LIB=
+
+case "$host" in
+*-solaris*) SOCKET_LIB="-lsocket -lnsl"
+            AC_DEFINE(__EXTENSIONS__,1,
+              [Define to 1 on Solaris.  Do not define on other platforms.])
+            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 -DOSX_DARWIN"
+;;  
+esac
+
+dnl =================================================================
+dnl OpenBSD specific
+dnl =================================================================
+
+case "$host" in
+*-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix"
+;;
+esac
+
+dnl =================================================================
+dnl AmigaOS specific
+dnl =================================================================
+
+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 AC_TYPE_SIGNAL
+dnl AC_CHECK_FUNC(strstr)
+dnl bcopy and memmove are for PCRE
+AC_CHECK_FUNCS([strerror bcopy memmove])
+AC_PROG_GCC_TRADITIONAL
+dnl uncommenting does not work for swa. suse linux
+dnl AC_FUNC_MALLOC
+AC_FUNC_SETPGRP
+AC_TYPE_SIGNAL
+dnl uncommenting does not work for swa. suse linux
+dnl AC_FUNC_STAT
+AC_CHECK_FUNCS([atexit getcwd gethostbyaddr gethostbyname inet_ntoa localtime_r memchr memmove memset regcomp select setlocale socket strchr strdup strerror strftime strstr strtoul])
+
+
+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) 
+
+AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
+
+dnl =================================================================
+dnl Always defined
+dnl =================================================================
+
+AC_DEFINE(__MT__,1,
+  [Always define this, for thread safety on some platforms.])
+
+dnl =================================================================
+dnl Features
+dnl =================================================================
+
+AC_ARG_ENABLE(toggle,
+[  --disable-toggle         Don't support temporary disable],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_TOGGLE,1,
+    [ Allow Privoxy to be "disabled" so it is just a normal non-blocking
+      non-anonymizing proxy.  This is useful if you're trying to access a
+      blocked or broken site - just change the setting in the config file,
+      or use the handy "Disable" menu option in the Windows GUI. ])
+fi
 
 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))
+[  --disable-force          Don't allow single-page disable],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_FORCE_LOAD,1,
+    [ Bypass filtering for 1 page only. ])
+fi
 
 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))
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_FAST_REDIRECTS,1,
+    [ Locally redirect remote script-redirect URLs. ])
+fi
 
 AC_ARG_ENABLE(killpopup,
-[  --disable-killpopup     Never block popups],
-[if test $enableval = yes; then
-  AC_DEFINE(KILLPOPUPS)
-fi],AC_DEFINE(KILLPOPUPS))
+[  --disable-killpopup      Never block popups],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_KILL_POPUPS,1,
+    [ Kills JavaScript popups - window.open, onunload, etc. ])
+fi
 
 AC_ARG_ENABLE(stats,
-[  --disable-stats         Don't keep statistics],
-[if test $enableval = yes; then
-  AC_DEFINE(STATISTICS)
-fi],AC_DEFINE(STATISTICS))
-
-AC_ARG_ENABLE(split-proxy-args,
-[  --disable-split-proxy-args  One big show-proxy-args page, not one per file.],
-[if test $enableval = yes; then
-  AC_DEFINE(SPLIT_PROXY_ARGS)
-fi],AC_DEFINE(SPLIT_PROXY_ARGS))
+[  --disable-stats          Don't keep statistics],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_STATISTICS,1,
+    [ Enables statistics function. ])
+fi
 
-AC_ARG_ENABLE(webdav,
-[  --disable-webdav        Don't support WebDAV.  This option stops MS Outlook
-                          Express from accessing HotMail e-mail.],
-[if test $enableval = yes; then
-  AC_DEFINE(WEBDAV)
-fi],
-AC_DEFINE(WEBDAV))
+AC_ARG_ENABLE(activity-console,
+[  --enable-activity-console    Gather and send extended statistics to the activity console],
+[enableval2=$enableval],
+[enableval2=no])
+if test $enableval2 = yes; then
+  ACTIVITY_ONLY=
+  AC_DEFINE(FEATURE_ACTIVITY_CONSOLE,1,
+    [ Enables sending statistics to the activity console. This is currently
+      experimental, and will require some porting work for a few more platforms. ])
+  else
+    ACTIVITY_ONLY=#
+fi
+AC_SUBST(ACTIVITY_ONLY)
 
 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.],
-[if test $enableval = yes; then
-  AC_DEFINE(DETECT_MSIE_IMAGES)
-fi],
-AC_DEFINE(DETECT_MSIE_IMAGES))
+[  --enable-ie-images      Don't auto-detect whether a request from MS Internet
+                           Explorer is for an image or HTML.],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE,1,
+    [ Detect image requests automatically for MSIE.  Will fall back to
+      other image-detection methods (i.e. ´´+image´´ action) for other
+      browsers.
 
-AC_ARG_ENABLE(image-list,
-[  --disable-image-list    Don't try to figure out whether a request is for an
-                          image or HTML using the imagelist - assume HTML.],
-[if test $enableval = yes; then
-  AC_DEFINE(USE_IMAGE_LIST)
-fi],
-AC_DEFINE(USE_IMAGE_LIST))
+      You must also define FEATURE_IMAGE_BLOCKING to use this feature.
+
+      It detects the following header pair as an image request:
+      ´´User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)´´,
+      ´´Accept: * / *´´.
+
+      And the following as a HTML request:
+      User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0),
+      Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, * / *.
+
+      And no, I haven't got that backwards - IE is being wierd.
+
+      Known limitations: 
+      1) If you press shift-reload on a blocked HTML page, you get
+         the image blocked page, not the HTML ´´blocked´´ page.
+      2) Once an image ´´blocked´´ page has been sent, viewing it 
+         in it's own browser window *should* bring up the HTML
+         ´´blocked´´ page, but it doesn't.  You need to clear the 
+         browser cache to get the HTML version again.
+
+      These limitations are due to IE making inconsistent choices
+      about which ´´Accept:´´ header to send. ])
+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.],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_IMAGE_BLOCKING,1,
+    [ Allow blocking using images as well as HTML.
+      If you do not define this then everything is blocked as HTML.
+      Note that this is required if you want to use FEATURE_IMAGE_DETECT_MSIE. ])
+fi
 
 AC_ARG_ENABLE(acl-files,
-[  --disable-acl-files     Prevents the use of ACL files to control access to
-                          the proxy by IP address.],
-[if test $enableval = yes; then
-  AC_DEFINE(ACL_FILES)
-fi],
-AC_DEFINE(ACL_FILES))
+[  --disable-acl-files      Prevents the use of ACL files to control access to
+                           the proxy by IP address.],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_ACL,1,
+    [ Define to 1 to allow the use of an ACL to control access to the proxy by IP address. ])
+fi
 
 AC_ARG_ENABLE(trust-files,
-[  --disable-trust-files   Prevents the use of trust files.],
-[if test $enableval = yes; then
-  AC_DEFINE(TRUST_FILES)
-fi],
-AC_DEFINE(TRUST_FILES))
+[  --disable-trust-files    Prevents the use of trust files.],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_TRUST,1,
+    [ Define to 1 to allow the use of trust files. ])
+fi
 
 AC_ARG_ENABLE(jar-files,
-[  --disable-jar-files     Prevents the use of jar files to capture cookies.],
-[if test $enableval = yes; then
-  AC_DEFINE(JAR_FILES)
-fi],
-AC_DEFINE(JAR_FILES))
-
-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=
+[  --disable-jar-files      Prevents the use of jar files to capture cookies.],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_COOKIE_JAR,1,
+    [ Define to 1 to allow the user to capture cookies. ])
+fi
+
+AC_ARG_ENABLE(editor,
+[  --disable-editor         Prevents the use of the web-based actions file
+                           editor and web-based temporary disable setting.],
+[enableval2=$enableval],
+[enableval2=yes])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS,1,
+    [ Define to 1 to enable the web-based configuration (actions file) editor.
+      If you have a shared proxy, you might want to turn this off. ])
+fi
+
+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.],
+[enableval2=$enableval],
+[enableval2=no])
+if test $enableval2 = yes; then
+  AC_DEFINE(FEATURE_NO_GIFS,1,
+    [ Define to 1 to use PNG instead of GIF for built-in images. ])
+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 ])
+
+AC_ARG_ENABLE(dynamic-pcrs,
+[  --disable-dynamic-pcrs        Use the built-in, static pcrs, even if
+                                libpcrs is available],
+[ if test $enableval = "no"; then have_pcrs=no; 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=#
-fi])
-AC_SUBST(LIBRARY_PCRE_ONLY)
+  LIBS="$LIBS -lpcre -lpcreposix"
+else
+  echo "using built-in static pcre"
+  pcre_dyn=no
+  AC_DEFINE(STATIC_PCRE,1,
+    [Define to 1 if PCRE should be statically built in instead of linking
+     with libpcre.
+     (This is determined by configure depending on the availiability of
+     libpcre and user preferences). The name is ugly, but pcre needs it.
+     Don't try to change this here! Use configure instead.])
+  STATIC_PCRE_ONLY=
+fi
+
+# If we have libpcrs and pcre is linked dynamically
+# then also link pcrs dynamically, else build and link
+# pcrs statically
+#
+if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
+  echo "using libpcrs"
+  STATIC_PCRS_ONLY=#
+  LIBS="$LIBS -lpcrs"
+else
+  echo "using built-in static pcrs"
+  AC_DEFINE(STATIC_PCRS,1,
+    [Define to 1 if PCRS should be statically built in instead of linking
+     with libpcrs.
+     (This is determined by configure depending on the availiability of
+     libpcrs and user preferences).
+     Don't try to change this here! Use configure instead.])
+  STATIC_PCRS_ONLY=
+fi
+
 AC_SUBST(STATIC_PCRE_ONLY)
+AC_SUBST(STATIC_PCRS_ONLY)
+
+dnl =================================================================
+dnl DocBook stuff
+dnl =================================================================
+
+AC_ARG_WITH(docbook, dnl
+  --with-docbook=<directory>    
+                           Set the location of the dsssl stylesheet
+                           (default = search),[dnl
+DKPREFIX=$withval
+])
+
+dnl Check for jade, so we can build the documentation
+dnl Openjade is preferred according to docs, but jade
+dnl is *much* faster.
+AC_CHECK_PROGS(JADEBIN,jade openjade,false)
+AC_SUBST(JADEBIN)
+
+dnl Checking for the docbook.dsl stylesheet file
+dnl It is still not portable (directory slash)
+dnl   ^ Why not?  All systems use / don't they?
+dnl   Windows certainly can.  Is this a Mac or
+dnl   Amiga issue?  -- Jon  /dsssl/docbook/html/docbook.dsl
+DKPREFIXCOPY=$DKPREFIX
+DKPREFIX=false
+for i in $DKPREFIXCOPY /usr/share/sgml/docbook/stylesheet/dsssl/modular \
+        /usr/share/sgml/docbook/dsssl-stylesheets /usr/share/sgml/docbkdsl \
+        /usr/share/sgml/docbook-dsssl /usr/local/share/sgml/docbook/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
+AC_SUBST(DKPREFIX)
+
+JADECAT=""
+dnl where are the catalogs?
+for i in /usr/share/sgml/CATALOG.docbk30 \
+         /usr/share/sgml/CATALOG.docbk31 \
+        /usr/local/share/sgml/docbook/3.0/docbook.cat \
+        /usr/local/share/sgml/docbook/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
+AC_SUBST(JADECAT)
+
+dnl NOT USED?
+dnl DB2HTML=false
+dnl AC_ARG_WITH(db2html, dnl
+dnl  --with-db2html=<path/executable>
+dnl                          Set the location of the docbook to html converter
+dnl                           (default = search),[dnl
+dnl DB2HTML=$withval
+dnl ])
+dnl if ! test -x $DB2HTML; then
+dnl     DB2HTML=""
+dnl fi
+dnl 
+dnl Check for a docbook -> HTML converter
+dnl AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
+dnl AC_SUBST(DB2HTML)
+
+dnl Check for a text browser that supports -dump
+AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
+AC_SUBST(WDUMP)
+
+dnl Check for man2html for docs.
+AC_CHECK_PROGS(MAN2HTML,man2html,false)
+AC_SUBST(MAN2HTML)
+
+dnl Set doc status, used for conditional content inclusions
+DOC_STATUS=""
+if  test $CODE_STATUS = alpha; then
+     DOC_STATUS="-ip-alpha -ip-not-stable"
+fi
+if  test $CODE_STATUS = beta; then
+     DOC_STATUS="-ip-beta -ip-not-stable"
+fi
+if  test $CODE_STATUS = stable; then
+     DOC_STATUS="-ip-stable"
+fi
+echo "checking for doc status flags... $DOC_STATUS"
+AC_SUBST(DOC_STATUS)
+
+dnl =================================================================
+dnl RPM stuff
+dnl =================================================================
+
+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 =================================================================
+dnl Final cleanup and output
+dnl =================================================================
+
+dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it seperately
+dnl in the Makefile
+CFLAGS=$old_CFLAGS_nospecial
+AC_SUBST(SPECIAL_CFLAGS)
+
+AC_SUBST(PTHREAD_LIB)
 
-AC_OUTPUT(Makefile)
+AC_OUTPUT(GNUmakefile doc/source/ldp.dsl doc/source/GNUmakefile)