Make pthread mutex locking more generic. Instead of
[privoxy.git] / configure.in
index 14ce3ff..c2b1ed4 100644 (file)
@@ -1,8 +1,8 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl 
-dnl $Id: configure.in,v 1.70 2002/05/27 23:26:34 mal0rd Exp $
+dnl $Id: configure.in,v 1.93 2006/09/22 01:26:20 hal9 Exp $
 dnl 
-dnl Written by and Copyright (C) 2001, 2002 the SourceForge
+dnl Written by and Copyright (C) 2001 - 2004 the SourceForge
 dnl Privoxy team. http://www.privoxy.org/
 dnl
 dnl Based on the Internet Junkbuster originally written
@@ -28,14 +28,82 @@ 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.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 Revision 1.93  2006/09/22 01:26:20  hal9
+dnl Set version to 3.0.5 BETA for hopefully release this weekend.
 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 Revision 1.92  2006/08/17 17:09:49  fabiankeil
+dnl Added check for timegm().
+dnl
+dnl Revision 1.91  2006/08/13 22:01:51  fabiankeil
+dnl Added checks for strptime() and random()
+dnl
+dnl Revision 1.90  2006/07/18 14:48:45  david__schmidt
+dnl Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch)
+dnl with what was really the latest development (the v_3_0_branch branch)
+dnl
+dnl Revision 1.68.2.20  2004/01/31 16:31:46  oes
+dnl Resetting version info to 0.0.0 UNRELEASED
+dnl
+dnl Revision 1.68.2.19  2004/01/30 09:26:03  oes
+dnl Added docbook paths for debian sarge; set status for release
+dnl
+dnl Revision 1.68.2.18  2003/12/08 15:10:29  oes
+dnl Bugfix: --with-docbook now correctly accepts its path parameter. Thanks, Roland!
+dnl
+dnl Revision 1.68.2.17  2003/10/18 18:41:26  david__schmidt
+dnl Update to remain buildable on OS/2 - remove the failures
+dnl due to missing unixisms
+dnl
+dnl Revision 1.68.2.16  2003/03/26 16:05:14  oes
+dnl Marked as 0.0.0 UNRELEASED
+dnl
+dnl Revision 1.68.2.15  2003/03/26 00:25:00  oes
+dnl Bump version for 3.0.2
+dnl
+dnl Revision 1.68.2.14  2003/03/25 13:27:12  hal9
+dnl Manually apply Docbook/FreeBSD patch #708081 from a.go at tiscali.nl.
+dnl
+dnl Revision 1.68.2.13  2003/03/18 19:38:57  oes
+dnl Set version info for 3.0.1 release
+dnl
+dnl Revision 1.68.2.12  2003/03/07 03:41:04  david__schmidt
+dnl Wrapping all *_r functions (the non-_r versions of them) with mutex semaphores for OSX.  Hopefully this will take care of all of those pesky crash reports.
+dnl
+dnl Revision 1.68.2.11  2003/03/06 15:22:37  oes
+dnl Fixed minor shell syntax bug
+dnl
+dnl Revision 1.68.2.10  2003/01/08 16:39:41  oes
+dnl Changing default to exclude FEATURE_IMAGE_DETECT_MSIE because of problem reports with recent IEs
+dnl
+dnl Revision 1.68.2.9  2002/12/13 23:47:45  hal9
+dnl Add openbsd $specialflags per gunner at styx2002.no-ip.org
+dnl
+dnl Revision 1.68.2.8  2002/11/27 12:55:26  oes
+dnl Fixed broken handling of pre-set CFLAGS
+dnl
+dnl Revision 1.68.2.7  2002/10/25 02:44:22  hal9
+dnl Port of make install, etc from main trunk. Needs testing! Add Slackware
+dnl support, and other related changes. Update related docs.
+dnl
+dnl Revision 1.68.2.6  2002/09/25 15:35:15  oes
+dnl Marking as non-release
+dnl
+dnl Revision 1.68.2.5  2002/08/25 23:37:00  hal9
+dnl Getting ready for 3.0 release.
+dnl
+dnl Revision 1.68.2.4  2002/08/10 11:21:57  oes
+dnl - Set Version to 2.9.20 (beta)
+dnl - Add two AC_DEFINEs that indicate if the pcre*.h headers
+dnl   are located in a pcre/ subdir to the include path.
+dnl
+dnl Revision 1.68.2.3  2002/08/06 11:29:36  oes
+dnl Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH
+dnl
+dnl Revision 1.68.2.2  2002/07/30 19:36:09  hal9
+dnl Bump version to 2.9.17.
+dnl
+dnl Revision 1.68.2.1  2002/07/26 15:21:12  oes
+dnl  Bumped version number for 2.9.16 freeze
 dnl
 dnl Revision 1.68  2002/05/25 16:54:54  jongfoster
 dnl Detect if the compiler supports -pthread.
@@ -379,54 +447,58 @@ dnl =================================================================
 dnl AutoConf Initialization
 dnl =================================================================
 
-AC_REVISION($Revision: 1.70 $)
-AC_INIT(src/jcc.c)
+AC_REVISION($Revision: 1.93 $)
+AC_INIT(jcc.c)
 
-if test ! -f src/config.h.in; then
+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
+   if test "$answer" != "y"; then
       exit 1
    else
       autoheader
   fi
 fi  
 
-AC_CONFIG_HEADER([src/config.h])
+AC_CONFIG_HEADER([config.h])
 AC_CANONICAL_HOST
 
+dodk=auto
+DKPREFIX=none
 AC_ARG_WITH(docbook, dnl
-  --with-docbook=<directory>   
-                           Set the location of the dsssl stylesheet
-                          (default = search),[dnl
-DKPREFIX=$withval
+  --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 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 Application version number
 dnl =================================================================
 
 VERSION_MAJOR=3
-VERSION_MINOR=1
-VERSION_POINT=1
-CODE_STATUS="alpha"
+VERSION_MINOR=0
+VERSION_POINT=5
+CODE_STATUS="BETA"
 
 dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be
-dnl used for CGI output
+dnl used for CGI output. Set version to 0.0.0 and status to "UNRELEASED"
+dnl whenever CVS in a stable branch differs from the last release.
 
 dnl =================================================================
 dnl Substitute the version numbers
@@ -447,13 +519,24 @@ 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
+
 AC_PROG_CC
 AC_PROG_CPP
 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,/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 =================================================================
 dnl debug, gcc and gdb support 
@@ -463,60 +546,113 @@ 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="-ggdb"
-                       else
-                         CFLAGS="-g"
-                       fi
-                       CFLAGS="$CFLAGS -Wshadow  -Wconversion"
-                     else
-                       CFLAGS="-g"
-                     fi
-                  fi
+                    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 are unset
-             if test "$GCC" = yes; then
-               CFLAGS="-O2"
-             else
-               CFLAGS=
-             fi
-           fi
-       ]
+        [
+            if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
+              if test "$GCC" = yes; then
+                CFLAGS="-O2"
+              fi
+            fi
+        ]
 )
 
-AC_ARG_WITH(user,
-        [  --with-user=privoxy            Set user under which privoxy run],
+dnl =================================================================
+dnl Check for user and group validity
+dnl =================================================================
+
+
+if test "$EMXOS2" = yes; then
+  echo "Skipping user and group validity stuff.";
+
+else
+
+  $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
-                    USER=$with_user;
+                  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
         ],
         [
-          USER=privoxy;
+          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_SUBST(USER)
 
-AC_ARG_WITH(group,
+  AC_MSG_CHECKING([for group])
+  AC_ARG_WITH(group,
         [  --with-group=privoxy         Set group for privoxy],
-        [
+        [ 
                 if test "x$withval" != "xyes"; then
-                    GROUP=$with_group;
+                  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
         ],
         [
-          GROUP=privoxy;
+          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)
+  )
+  AC_SUBST(GROUP)
+
+fi
+
 dnl =================================================================
 dnl additional gcc flags
 dnl =================================================================
@@ -552,6 +688,17 @@ else
   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.
@@ -580,18 +727,33 @@ else
 fi
 AC_SUBST(WIN_ONLY)
 
-dnl Check for a text browser that supports -dump
-AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
+dnl Checking which text html browser we have avaliable
+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 NOT USED?
-dnl Check for a docbook -> HTML converter
-dnl AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
-dnl 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
-dnl Openjade is preferred according to docs, but jade
-dnl is *much* faster.
 AC_CHECK_PROGS(JADEBIN,jade openjade,false)
 AC_SUBST(JADEBIN)
 
@@ -599,47 +761,55 @@ 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)
-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; do
-       echo -n "checking for $i/html/docbook.dsl..."
-       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; do
-       echo -n "checking for $i..."
-       if test -f $i; then
-               echo "yes"
-               JADECAT="$JADECAT -c $i"
-       else
-               echo "no"
-       fi
-done
-AC_SUBST(JADECAT)
-
-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
+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(RPM_BASE)
+AC_SUBST(JADECAT)
+AC_SUBST(DKPREFIX)
 
 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
 old_CFLAGS_nospecial=$CFLAGS
@@ -880,10 +1050,19 @@ dnl Mac OSX specific
 dnl =================================================================
     
 case "$host" in
-*-apple-darwin*) SPECIAL_CFLAGS="-Dunix"
+*-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 =================================================================
@@ -933,7 +1112,7 @@ 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])
+AC_CHECK_FUNCS([atexit getcwd gethostbyaddr gethostbyaddr_r gethostbyname gethostbyname_r inet_ntoa localtime_r memchr memmove memset random regcomp select setlocale socket strchr strdup strerror strftime strptime strstr strtoul timegm])
 
 
 dnl =================================================================
@@ -942,10 +1121,27 @@ 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])], [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])], [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])
-
+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
@@ -988,12 +1184,11 @@ AC_ARG_ENABLE(stats,
 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(FEATURE_IMAGE_DETECT_MSIE)
-fi],
-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