Quantcast

[MERGE] libsquid-compat shuffling pt 1

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[MERGE] libsquid-compat shuffling pt 1

Amos Jeffries
Administrator
This code shuffling creates an internal library libsquid-compat.la
Into which some of the portability defines and OS-specific wrappers
have already been sorted. The remaining and duplicate code will be
removed in pt 2.

The purpose of this library is to provide a pure invisible portability
layer below the main code of Squid and associated binaries. It DOES NOT
include general purpose utility functions found only in Squid.
To be included at this layer the code must be provided natively by
some system and needed by Squid on all systems.

The compat layer is included globally by the config.h and squid.h
headers. One of which should be the first included by any .c* file in Squid.

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [hidden email]-20090121081342-lankok6431zi98yg
# target_branch: file:///src/squid/bzr/trunk/
# testament_sha1: e4297c8399c7083a3382dccbbeb98f085c765187
# timestamp: 2009-01-21 21:34:12 +1300
# base_revision_id: [hidden email]-20090121034747-\
#   xrf59xyzmv0dfzxq
#
# Begin patch
=== modified file 'Makefile.am'
--- Makefile.am 2009-01-09 13:12:24 +0000
+++ Makefile.am 2009-01-21 08:05:22 +0000
@@ -2,8 +2,8 @@
 #
 
 AUTOMAKE_OPTIONS = dist-bzip2 subdir-objects 1.5 foreign
-DIST_SUBDIRS = lib snmplib scripts src icons errors contrib doc helpers test-suite tools
-SUBDIRS = lib @makesnmplib@ scripts src/ip src icons errors doc helpers test-suite tools
+DIST_SUBDIRS = libsquid-compat lib snmplib scripts src icons errors contrib doc helpers test-suite tools
+SUBDIRS = libsquid-compat lib @makesnmplib@ scripts src/ip src icons errors doc helpers test-suite tools
 
 DISTCLEANFILES = include/stamp-h include/stamp-h[0-9]*
 DEFAULT_PINGER = $(libexecdir)/`echo pinger | sed '$(transform);s/$$/$(EXEEXT)/'`

=== modified file 'configure.in'
--- configure.in 2009-01-21 03:47:47 +0000
+++ configure.in 2009-01-21 08:13:42 +0000
@@ -95,7 +95,7 @@
 
 CRYPTLIB=''
 REGEXLIB='' # -lregex
-LIBREGEX='' # libregex.a
+# LIBREGEX='' # libregex.a
 
 dnl find out the exe extension for this platform. If it's not empty, use it for CGI's as well.
 AC_EXEEXT
@@ -293,15 +293,6 @@
     fi
 fi
 
-AC_ARG_ENABLE(gnuregex,
-  AC_HELP_STRING([--enable-gnuregex],
-                 [Compile GNUregex.  Unless you have reason to use
-                 this option, you should not enable it.
-                 This library file is usually only required on Windows and
-                 very old Unix boxes which do not have their own regex
-                 library built in.]),
-[USE_GNUREGEX=$enableval])
-
 SquidInline="yes"
 
 AC_ARG_ENABLE(optimizations,
@@ -3227,6 +3218,14 @@
     fi
 fi
 
+AC_ARG_ENABLE(gnuregex,
+  AC_HELP_STRING([--enable-gnuregex],
+                 [Compile GNUregex.  Unless you have reason to use
+                 this option, you should not enable it.
+                 This library file is usually only required on Windows and
+                 very old Unix boxes which do not have their own regex
+                 library built in.]),
+[USE_GNUREGEX=$enableval])
 if test -z "$USE_GNUREGEX" ; then
     case "$host" in
     *-sun-solaris2.[[0-4]])
@@ -3250,12 +3249,12 @@
 fi
 AC_MSG_RESULT($USE_GNUREGEX)
 if test "$USE_GNUREGEX" = "yes"; then
- REGEXLIB="-lregex"
- LIBREGEX="libregex.a"
+ # override system regex with ours. Not good. But what was asked for.
+ REGEXLIB=""
  AC_DEFINE(USE_GNUREGEX,1,[Define if we should use GNU regex])
 fi
 AC_SUBST(REGEXLIB)
-AC_SUBST(LIBREGEX)
+#AC_SUBST(LIBREGEX)
 
 dnl Not cached since people are likely to tune this
 AC_MSG_CHECKING(Default FD_SETSIZE value)
@@ -3811,6 +3810,7 @@
 
 AC_CONFIG_FILES([\
  Makefile \
+ libsquid-compat/Makefile \
  lib/Makefile \
  scripts/Makefile \
  scripts/RunCache \

=== modified file 'helpers/basic_auth/LDAP/Makefile.am'
--- helpers/basic_auth/LDAP/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/LDAP/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,5 +11,13 @@
 EXTRA_DIST = squid_ldap_auth.8
 squid_ldap_auth_SOURCES = squid_ldap_auth.c
 
-LDADD = -L$(top_builddir)/lib -lmiscutil $(LIB_LDAP) $(LIB_LBER) $(XTRA_LIBS)
-INCLUDES      = -I$(top_srcdir)/include
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(LIB_LDAP) \
+ $(LIB_LBER) \
+ $(XTRA_LIBS)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include

=== modified file 'helpers/basic_auth/MSNT/Makefile.am'
--- helpers/basic_auth/MSNT/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/MSNT/Makefile.am 2009-01-21 08:13:42 +0000
@@ -27,9 +27,12 @@
 sysconf_DATA = \
  msntauth.conf.default
 
-LDADD = -L$(top_builddir)/lib -lmiscutil $(XTRA_LIBS)
+LDADD = -L$(top_builddir)/lib -lmiscutil $(XTRA_LIBS) -L$(top_builddir)/libsquid-compat/libsquid-compat.la
 
-INCLUDES      = -I$(top_srcdir)/include
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src
 
 confload.o: confload.c
  $(COMPILE) -DSYSCONFDIR=\"$(sysconfdir)\" -c $(srcdir)/confload.c -o $@
@@ -41,5 +44,3 @@
  echo "$(INSTALL_DATA) $(srcdir)/msntauth.conf.default $(DESTDIR)$(sysconfdir)/msntauth.conf" ; \
  $(INSTALL_DATA) $(srcdir)/msntauth.conf.default $(DESTDIR)$(sysconfdir)/msntauth.conf ; \
  fi
-
-

=== modified file 'helpers/basic_auth/NCSA/Makefile.am'
--- helpers/basic_auth/NCSA/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/NCSA/Makefile.am 2009-01-21 08:13:42 +0000
@@ -10,5 +10,14 @@
 ncsa_auth_SOURCES = ncsa_auth.c crypt_md5.c crypt_md5.h
 man_MANS = ncsa_auth.8
 EXTRA_DIST = ncsa_auth.8
-LDADD = -L$(top_builddir)/lib -lmiscutil $(CRYPTLIB) $(XTRA_LIBS) $(SSLLIB)
-INCLUDES      = -I$(top_srcdir)/include
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS) \
+ $(SSLLIB)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src

=== modified file 'helpers/basic_auth/PAM/Makefile.am'
--- helpers/basic_auth/PAM/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/PAM/Makefile.am 2009-01-21 08:13:42 +0000
@@ -6,9 +6,16 @@
 #  Uncomment and customize the following to suit your needs:
 #
 
-INCLUDES = -I$(top_srcdir)/include
-
 man_MANS = pam_auth.8
 EXTRA_DIST = pam_auth.8
 libexec_PROGRAMS = pam_auth
-LDADD = -L$(top_builddir)/lib -lmiscutil -lpam $(XTRA_LIBS)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ -lpam \
+ $(XTRA_LIBS)

=== modified file 'helpers/basic_auth/SASL/Makefile.am'
--- helpers/basic_auth/SASL/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/SASL/Makefile.am 2009-01-21 08:13:42 +0000
@@ -6,8 +6,16 @@
 #  Uncomment and customize the following to suit your needs:
 #
 
-INCLUDES = -I$(top_srcdir)/include
-
 libexec_PROGRAMS = sasl_auth
-LDADD = -L$(top_builddir)/lib -lmiscutil $(LIBSASL) $(XTRA_LIBS)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(LIBSASL) \
+ $(XTRA_LIBS)
+
 EXTRA_DIST = squid_sasl_auth squid_sasl_auth.conf

=== modified file 'helpers/basic_auth/SMB/Makefile.am'
--- helpers/basic_auth/SMB/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/SMB/Makefile.am 2009-01-21 08:13:42 +0000
@@ -22,6 +22,11 @@
 smb_auth_CFLAGS = -DSAMBAPREFIX=\"$(SAMBAPREFIX)\" -DHELPERSCRIPT=\"$(SMB_AUTH_HELPER_PATH)\"
 EXTRA_DIST = smb_auth.sh COPYING-2.0
 
-LDADD = -L$(top_builddir)/lib -lmiscutil $(XTRA_LIBS)
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include
 
-INCLUDES = -I$(top_srcdir)/include
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(XTRA_LIBS)

=== modified file 'helpers/basic_auth/YP/Makefile.am'
--- helpers/basic_auth/YP/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/YP/Makefile.am 2009-01-21 08:13:42 +0000
@@ -7,5 +7,13 @@
 
 libexec_PROGRAMS = yp_auth
 yp_auth_SOURCES = yp_auth.c nis_support.h nis_support.c
-LDADD = -L$(top_builddir)/lib -lmiscutil $(CRYPTLIB) $(XTRA_LIBS)
-INCLUDES = -I$(top_srcdir)/include
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS)

=== modified file 'helpers/basic_auth/getpwnam/Makefile.am'
--- helpers/basic_auth/getpwnam/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/getpwnam/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,5 +11,13 @@
 
 getpwname_auth_SOURCES = getpwnam_auth.c
 
-INCLUDES      = -I$(top_srcdir)/include
-LDADD = -L$(top_builddir)/lib -lmiscutil $(CRYPTLIB) $(XTRA_LIBS)
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS)

=== modified file 'helpers/basic_auth/mswin_sspi/Makefile.am'
--- helpers/basic_auth/mswin_sspi/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/mswin_sspi/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,9 +11,15 @@
 
 mswin_auth_SOURCES = mswin_auth.c valid.c valid.h
 
-LDADD = -L$(top_builddir)/lib -lnetapi32 -ladvapi32 -lsspwin32 \
-          -lmiscutil $(XTRA_LIBS)
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ -lnetapi32 -ladvapi32 -lsspwin32 \
+ $(XTRA_LIBS)
 
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
 
 EXTRA_DIST = readme.txt

=== modified file 'helpers/basic_auth/squid_radius_auth/Makefile.am'
--- helpers/basic_auth/squid_radius_auth/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/basic_auth/squid_radius_auth/Makefile.am 2009-01-21 08:13:42 +0000
@@ -15,5 +15,12 @@
  radius-util.c \
  radius-util.h
 
-LDADD = -L$(top_builddir)/lib -lmiscutil $(SSLLIB) $(XTRA_LIBS)
-INCLUDES = -I$(top_srcdir)/include
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(SSLLIB) \
+ $(XTRA_LIBS)

=== modified file 'helpers/digest_auth/eDirectory/Makefile.am'
--- helpers/digest_auth/eDirectory/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/digest_auth/eDirectory/Makefile.am 2009-01-21 08:13:42 +0000
@@ -13,7 +13,18 @@
  ldap_backend.h \
  edir_ldapext.c \
  edir_ldapext.h
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
- -I$(top_srcdir)/src/
-
-LDADD = -L$(top_builddir)/lib -lmiscutil $(LIB_LDAP) $(LIB_LBER) $(CRYPTLIB) $(XTRA_LIBS) $(SSLLIB)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(LIB_LDAP) \
+ $(LIB_LBER) \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS) \
+ $(SSLLIB)

=== modified file 'helpers/digest_auth/ldap/Makefile.am'
--- helpers/digest_auth/ldap/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/digest_auth/ldap/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,7 +11,18 @@
  digest_common.h \
  ldap_backend.c \
  ldap_backend.h
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
- -I$(top_srcdir)/src/
-
-LDADD = -L$(top_builddir)/lib -lmiscutil $(LIB_LDAP) $(LIB_LBER) $(CRYPTLIB) $(XTRA_LIBS) $(SSLLIB)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(LIB_LDAP) \
+ $(LIB_LBER) \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS) \
+ $(SSLLIB)

=== modified file 'helpers/digest_auth/password/Makefile.am'
--- helpers/digest_auth/password/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/digest_auth/password/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,7 +11,16 @@
  digest_common.h \
  text_backend.c \
  text_backend.h
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
- -I$(top_srcdir)/src/
-
-LDADD = -L$(top_builddir)/lib -lmiscutil $(CRYPTLIB) $(XTRA_LIBS) $(SSLLIB)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS) \
+ $(SSLLIB)

=== modified file 'helpers/external_acl/ip_user/Makefile.am'
--- helpers/external_acl/ip_user/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/external_acl/ip_user/Makefile.am 2009-01-21 08:13:42 +0000
@@ -15,7 +15,6 @@
  main.c \
  match.c
 
-
 EXTRA_DIST = \
  example.conf \
  example-deny_all_but.conf \
@@ -24,5 +23,13 @@
 
 # sysconf_DATA =
 
-LDADD = -L$(top_builddir)/lib -lmiscutil @XTRA_LIBS@
-INCLUDES = -I. -I$(top_builddir)/include -I$(top_srcdir)/include
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ @XTRA_LIBS@

=== modified file 'helpers/external_acl/ldap_group/Makefile.am'
--- helpers/external_acl/ldap_group/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/external_acl/ldap_group/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,5 +11,15 @@
 EXTRA_DIST = squid_ldap_group.8
 squid_ldap_group_SOURCES = squid_ldap_group.c
 
-LDADD = -L$(top_builddir)/lib -lmiscutil $(LIB_LDAP) $(LIB_LBER) @XTRA_LIBS@
-INCLUDES = -I. -I$(top_builddir)/include -I$(top_srcdir)/include
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(LIB_LDAP) \
+ $(LIB_LBER) \
+ @XTRA_LIBS@

=== modified file 'helpers/external_acl/mswin_ad_group/Makefile.am'
--- helpers/external_acl/mswin_ad_group/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/external_acl/mswin_ad_group/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,9 +11,16 @@
 
 mswin_check_ad_group_SOURCES = mswin_check_ad_group.c mswin_check_ad_group.h
 
-INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include
 
-LDADD   = -L$(top_builddir)/lib -lmiscutil -lnetapi32 -ladvapi32 \
-          -lntdll $(XTRA_LIBS)
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ -lnetapi32 \
+ -ladvapi32 \
+ -lntdll \
+ $(XTRA_LIBS)
 
 EXTRA_DIST = readme.txt

=== modified file 'helpers/external_acl/mswin_lm_group/Makefile.am'
--- helpers/external_acl/mswin_lm_group/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/external_acl/mswin_lm_group/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,9 +11,17 @@
 
 mswin_check_lm_group_SOURCES = win32_check_group.c win32_check_group.h
 
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
 
-LDADD   = -L$(top_builddir)/lib -lmiscutil -lnetapi32 -ladvapi32 \
-          -lntdll $(XTRA_LIBS)
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ -lnetapi32 \
+ -ladvapi32 \
+ -lntdll \
+ $(XTRA_LIBS)
 
 EXTRA_DIST = readme.txt

=== modified file 'helpers/external_acl/session/Makefile.am'
--- helpers/external_acl/session/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/external_acl/session/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,6 +11,12 @@
 EXTRA_DIST = squid_session.8
 squid_session_SOURCES = squid_session.c
 
-LDADD = $(LIB_DB)
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
 
-INCLUDES = -I. -I$(top_builddir)/include -I$(top_srcdir)/include
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ $(LIB_DB)

=== modified file 'helpers/external_acl/unix_group/Makefile.am'
--- helpers/external_acl/unix_group/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/external_acl/unix_group/Makefile.am 2009-01-21 08:13:42 +0000
@@ -11,5 +11,13 @@
 EXTRA_DIST = squid_unix_group.8
 squid_unix_group_SOURCES = check_group.c
 
-LDADD = -L$(top_builddir)/lib -lmiscutil @XTRA_LIBS@
-INCLUDES = -I. -I$(top_builddir)/include -I$(top_srcdir)/include
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ @XTRA_LIBS@

=== modified file 'helpers/ntlm_auth/fakeauth/Makefile.am'
--- helpers/ntlm_auth/fakeauth/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/ntlm_auth/fakeauth/Makefile.am 2009-01-21 08:13:42 +0000
@@ -8,6 +8,15 @@
 
 libexec_PROGRAMS = fakeauth_auth
 fakeauth_auth_SOURCES = fakeauth_auth.c ntlm.h
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
- -I$(top_srcdir)/src/
-LDADD = -L$(top_builddir)/lib -lmiscutil $(CRYPTLIB) $(XTRA_LIBS)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS)

=== modified file 'helpers/ntlm_auth/mswin_sspi/Makefile.am'
--- helpers/ntlm_auth/mswin_sspi/Makefile.am 2009-01-21 03:47:47 +0000
+++ helpers/ntlm_auth/mswin_sspi/Makefile.am 2009-01-21 08:13:42 +0000
@@ -8,9 +8,18 @@
 
 mswin_ntlm_auth_SOURCES = libntlmssp.c ntlm_auth.c ntlm.h
 
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
 
-LDADD = -L$(top_builddir)/lib -lntlmauth -lsspwin32 -lnetapi32 \
-  -ladvapi32 -lmiscutil $(XTRA_LIBS)
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil -lntlmauth \
+ -lsspwin32 \
+ -lnetapi32 \
+ -ladvapi32 \
+ $(XTRA_LIBS)
 
 EXTRA_DIST = readme.txt

=== modified file 'helpers/ntlm_auth/smb_lm/Makefile.am'
--- helpers/ntlm_auth/smb_lm/Makefile.am 2008-10-26 14:49:41 +0000
+++ helpers/ntlm_auth/smb_lm/Makefile.am 2009-01-21 08:05:22 +0000
@@ -6,7 +6,18 @@
 
 libexec_PROGRAMS = ntlm_smb_lm_auth
 ntlm_smb_lm_auth_SOURCES = libntlmssp.c ntlm_smb_lm_auth.c ntlm_smb_lm_auth.h
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
- -I$(top_srcdir)/src/ -I$(srcdir)/smbval
-LDADD = smbval/libsmbvalid.a -L$(top_builddir)/lib -lntlmauth \
-  -lmiscutil $(CRYPTLIB) $(XTRA_LIBS)
+
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src \
+ -I$(srcdir)/smbval
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lntlmauth -lmiscutil \
+ smbval/libsmbvalid.a \
+ $(CRYPTLIB) \
+ $(XTRA_LIBS)

=== modified file 'helpers/ntlm_auth/smb_lm/smbval/Makefile.am'
--- helpers/ntlm_auth/smb_lm/smbval/Makefile.am 2001-08-31 17:19:04 +0000
+++ helpers/ntlm_auth/smb_lm/smbval/Makefile.am 2009-01-21 08:05:22 +0000
@@ -1,9 +1,13 @@
 # makefile for smblib
 
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
- -I$(top_srcdir)/src/
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
 
 noinst_LIBRARIES = libsmbvalid.a
+
 libsmbvalid_a_SOURCES = valid.c session.c rfcnb-util.c rfcnb-io.c \
  smblib-util.c smblib.c smbencrypt.c smbdes.c md4.c byteorder.h \
  rfcnb-error.h  rfcnb-util.h  smbencrypt.h     smblib.h        valid.h \

=== modified file 'include/config.h'
--- include/config.h 2009-01-21 03:47:47 +0000
+++ include/config.h 2009-01-21 08:13:42 +0000
@@ -55,6 +55,8 @@
  *--------------------------------------------------------------------------*
  ****************************************************************************/
 
+#include "compat.h"
+
 #ifdef USE_POSIX_REGEX
 #ifndef USE_RE_SYNTAX
 #define USE_RE_SYNTAX REG_EXTENDED /* default Syntax */
@@ -143,64 +145,6 @@
 */
 #endif
 
-/* FD_SETSIZE must be redefined before including sys/types.h */
-
-/*
- * On some systems, FD_SETSIZE is set to something lower than the
- * actual number of files which can be opened.  IRIX is one case,
- * NetBSD is another.  So here we increase FD_SETSIZE to our
- * configure-discovered maximum *before* any system includes.
- */
-#define CHANGE_FD_SETSIZE 1
-
-/*
- * Cannot increase FD_SETSIZE on Linux, but we can increase __FD_SETSIZE
- * with glibc 2.2 (or later? remains to be seen). We do this by including
- * bits/types.h which defines __FD_SETSIZE first, then we redefine
- * __FD_SETSIZE. Ofcourse a user program may NEVER include bits/whatever.h
- * directly, so this is a dirty hack!
- */
-#if defined(_SQUID_LINUX_)
-#undef CHANGE_FD_SETSIZE
-#define CHANGE_FD_SETSIZE 0
-#include <features.h>
-#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
-#if SQUID_MAXFD > DEFAULT_FD_SETSIZE
-#include <bits/types.h>
-#undef __FD_SETSIZE
-#define __FD_SETSIZE SQUID_MAXFD
-#endif
-#endif
-#endif
-
-/*
- * Cannot increase FD_SETSIZE on FreeBSD before 2.2.0, causes select(2)
- * to return EINVAL.
- * --Marian Durkovic <[hidden email]>
- * --Peter Wemm <[hidden email]>
- */
-#if defined(_SQUID_FREEBSD_)
-#include <osreldate.h>
-#if __FreeBSD_version < 220000
-#undef CHANGE_FD_SETSIZE
-#define CHANGE_FD_SETSIZE 0
-#endif
-#endif
-
-/*
- * Trying to redefine CHANGE_FD_SETSIZE causes a slew of warnings
- * on Mac OS X Server.
- */
-#if defined(_SQUID_APPLE_)
-#undef CHANGE_FD_SETSIZE
-#define CHANGE_FD_SETSIZE 0
-#endif
-
-/* Increase FD_SETSIZE if SQUID_MAXFD is bigger */
-#if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE
-#define FD_SETSIZE SQUID_MAXFD
-#endif
-
 /* Typedefs for missing entries on a system */
 
 #include "squid_types.h"

=== modified file 'lib/Makefile.am'
--- lib/Makefile.am 2009-01-21 03:47:47 +0000
+++ lib/Makefile.am 2009-01-21 08:13:42 +0000
@@ -47,13 +47,12 @@
 endif
 
 EXTRA_LIBRARIES = \
- libregex.a \
  libsspwin32.a
 noinst_LIBRARIES = \
  libmiscutil.a \
  libntlmauth.a \
- $(LIBSSPWIN32) \
- @LIBREGEX@
+ $(LIBSSPWIN32)
+
 #
 # dirent.c, encrypt.c and getopt.c are needed for native Windows support.
 #
@@ -99,8 +98,6 @@
  libTrie/src/TrieNode.o \
  @LIBOBJS@
 # $(top_srcdir)/include/version.h should be a dependency
-libregex_a_SOURCES = \
- GNUregex.c
 libntlmauth_a_SOURCES = \
  ntlmauth.c
 libntlmauth_a_LIBADD = \
@@ -108,7 +105,7 @@
 libsspwin32_a_SOURCES = \
  sspwin32.c
 
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include @SQUID_CPPUNIT_INC@
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include @SQUID_CPPUNIT_INC@ -I$(top_srcdir)/libsquid-compat
 ##FIXME - set these in configure.in and reuse
 
 check_PROGRAMS= \

=== added directory 'libsquid-compat'
=== renamed file 'lib/GNUregex.c' => 'libsquid-compat/GnuRegex.c'
--- lib/GNUregex.c 2009-01-21 03:47:47 +0000
+++ libsquid-compat/GnuRegex.c 2009-01-21 08:13:42 +0000
@@ -34,6 +34,8 @@
 
 #include "config.h"
 
+#if USE_GNUREGEX /* only if squid needs it. Usually not */
+
 #if !HAVE_ALLOCA
 #define REGEX_MALLOC 1
 #endif
@@ -104,7 +106,7 @@
 
 
 /* Get the interface, including the syntax bits.  */
-#include "GNUregex.h"
+#include "GnuRegex.h"
 
 /* Compile a fastmap for the compiled pattern in BUFFER; used to
  * accelerate searches.  Return 0 if successful and -2 if was an
@@ -2362,10 +2364,14 @@
  * the pattern buffer.
  *
  * Returns 0 if we succeed, -2 if an internal error.   */
-
+#ifdef STDC_HEADERS
+int
+re_compile_fastmap(struct re_pattern_buffer *bufp)
+#else
 int
 re_compile_fastmap(bufp)
 struct re_pattern_buffer *bufp;
+#endif
 {
     int j, k;
     fail_stack_type fail_stack;
@@ -4401,6 +4407,7 @@
         free(preg->translate);
     preg->translate = NULL;
 }
+#endif /* USE_GNUREGEX */
 
 /*
  * Local variables:

=== renamed file 'include/GNUregex.h' => 'libsquid-compat/GnuRegex.h'
--- include/GNUregex.h 2009-01-21 03:47:47 +0000
+++ libsquid-compat/GnuRegex.h 2009-01-21 08:13:42 +0000
@@ -1,10 +1,31 @@
 /*
  * $Id$
  */
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
 #ifndef SQUID_REGEXP_LIBRARY_H
 #define SQUID_REGEXP_LIBRARY_H
 
-#include "config.h"
+#if !USE_GNUREGEX /* try the system one by default */
+
+/* POSIX says that <sys/types.h> must be included (by the caller) before
+ * <regex.h>.  */
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_REGEX_H
+#include <regex.h>
+#endif
+
+
+#else  /* USE_GNUREGEX */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
 
 /* Definitions for data structures and routines for the regular
  * expression library, version 0.12.
@@ -405,6 +426,11 @@
               size_t errbuf_size));
 extern void regfree _RE_ARGS((regex_t * preg));
 
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USE_GNUREGEX */
 #endif /* SQUID_REGEXP_LIBRARY_H */
 
 /*

=== added file 'libsquid-compat/Makefile.am'
--- libsquid-compat/Makefile.am 1970-01-01 00:00:00 +0000
+++ libsquid-compat/Makefile.am 2009-01-21 08:05:22 +0000
@@ -0,0 +1,59 @@
+#
+#  Makefile for the Squid Portability Library
+#
+
+# Housekeeping, shared by all Squid Makefiles.
+# TODO: make this set by configure?
+AM_CFLAGS = @SQUID_CFLAGS@
+AM_CXXFLAGS = @SQUID_CXXFLAGS@
+DEFS = @DEFS@
+CLEANFILES =
+
+INCLUDES = -I. -I$(top_srcdir)/src @SQUID_CPPUNIT_INC@ -I$(top_srcdir)/include -I$(top_builddir)/lib
+$(OBJS): $(top_srcdir)/include/version.h $(top_srcdir)/include/autoconf.h
+
+# Ideally this would be 100% inline functions and macro wrappers.
+
+# Port Specific Configurations
+
+noinst_LTLIBRARIES = libsquid-compat.la
+
+libsquid_compat_la_SOURCES = \
+ compat.h \
+ osdetect.h \
+ compat_shared.h \
+ gnuregex.h \
+ squid_fdsetsize.h \
+ squid_stdvarargs.h \
+ squid_valgrind.h \
+ \
+ os/squid_aix.h \
+ os/squid_freebsd.h \
+ os/squid_hpux.h \
+ os/squid_linux.h \
+ os/squid_mswin.h \
+ os/squid_next.h \
+ os/squid_openbsd.h \
+ os/squid_qnx.h \
+ os/squid_sgi.h \
+ os/squid_solaris.h \
+ os/squid_sunos.h \
+ os/squid_windows.h \
+ \
+ compat.cc \
+ GnuRegex.c
+
+
+check_PROGRAMS= testHeaders
+TESTS= $(check_PROGRAMS)
+
+## Special Universal .h dependency test script
+## aborts if error encountered
+testHeaders: $(top_srcdir)/libsquid-compat/*.h $(top_srcdir)/libsquid-compat/os/*.h
+ $(SHELL) $(top_srcdir)/test-suite/testheaders.sh "$(CXXCOMPILE)" "$(top_srcdir)/libsquid-compat/" || exit 1
+ $(SHELL) $(top_srcdir)/test-suite/testheaders.sh "$(CXXCOMPILE)" "$(top_srcdir)/libsquid-compat/os/" || exit 1
+
+## No such file...
+testHeaders.c:
+ touch testHeaders.c
+CLEANFILES += testHeaders.c

=== added file 'libsquid-compat/assert.h'
--- libsquid-compat/assert.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/assert.h 2009-01-15 10:53:56 +0000
@@ -0,0 +1,50 @@
+/*
+ * $Id$
+ *
+ * AUTHOR: Duane Wessels
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_ASSERT_H
+#define SQUID_ASSERT_H
+
+#if defined(NODEBUG)
+#define assert(EX) ((void)0)
+#elif STDC_HEADERS
+#define assert(EX)  ((EX)?((void)0):xassert( # EX , __FILE__, __LINE__))
+#else
+#define assert(EX)  ((EX)?((void)0):xassert("EX", __FILE__, __LINE__))
+#endif
+SQUIDCEXTERN void xassert(const char *, const char *, int);
+
+#endif /* SQUID_ASSERT_H */

=== added file 'libsquid-compat/compat.cc'
=== added file 'libsquid-compat/compat.h'
--- libsquid-compat/compat.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/compat.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,91 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef _SQUID_COMPAT_H
+#define _SQUID_COMPAT_H
+
+/*
+ * From discussions it was chosen to push compat code as far down as possible.
+ * That means we can eventually have a seperate libcompat for most
+ *  compatability and portability hacks and resolutions.
+ *
+ * This file is meant to collate all those hacks files together and
+ * provide a simple include form them in the core squid headers
+ * (presently squid.h and config.h)
+ *
+ * It should not be included directly in any of the squid sources.
+ * If your code requires any symbols from here you should be importing
+ * squid.h at the top line of your .cc or .h file.
+ */
+
+
+/******************************************************/
+/* Define the _SQUID_TYPE_ based on a guess of the OS */
+/* NP: this MUST come first within compat.h           */
+/******************************************************/
+#include "osdetect.h"
+
+
+/*****************************************************/
+/* FDSETSIZE is messy and needs to be done before    */
+/* sys/types.h are defined.                          */
+/*****************************************************/
+#include "squid_fdsetsize.h"
+
+
+/*****************************************************/
+/* Global type re-definitions                        */
+/* this also takes care of the basic system includes */
+/*****************************************************/
+
+/** On linux this must be defined to get PRId64 and friends */
+#define __STDC_FORMAT_MACROS
+
+#include "squid_types.h"
+
+/*****************************************************/
+/* per-OS hacks. One file per OS.                    */
+/* OS-macro wrapping should be done inside the OS .h */
+/*****************************************************/
+
+#include "os/squid_aix.h"
+#include "os/squid_freebsd.h"
+#include "os/squid_hpux.h"
+#include "os/squid_linux.h"
+#include "os/squid_mswin.h"
+#include "os/squid_next.h"
+#include "os/squid_openbsd.h"
+#include "os/squid_qnx.h"
+#include "os/squid_sgi.h"
+#include "os/squid_solaris.h"
+#include "os/squid_windows.h"
+
+/*****************************************************/
+/* portabilities shared between all platforms and    */
+/* components as found to be needed                  */
+/*****************************************************/
+
+#include "compat_shared.h"
+#include "squid_stdvarargs.h"
+#include "assert.h"
+
+/*****************************************************/
+/* component-specific portabilities                  */
+/*****************************************************/
+
+/* Valgrind API macros changed between two versions squid supports */
+#include "squid_valgrind.h"
+
+/* Endian functions are usualy handled by the OS but not always. */
+#include "squid_endian.h"
+
+/**
+ * A Regular Expression library is bundled with Squid.
+ * Default is to use a system provided one, but the bundle
+ * may be used instead with explicit configuration.
+ */
+#include "GnuRegex.h"
+
+
+#endif /* _SQUID_COMPAT_H */

=== added file 'libsquid-compat/compat_shared.h'
--- libsquid-compat/compat_shared.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/compat_shared.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,211 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef _SQUID_COMPAT_SHARED_H
+#define _SQUID_COMPAT_SHARED_H
+
+/*
+ * This file contains all the compatibility and portability hacks
+ * Which are general-case and shared between all OS and support programs.
+ *
+ * If an OS-specific hack is needed there are per-OS files for that in
+ * the os/ sub-directory here.
+ *
+ * These hacks should be platform and location agnostic.
+ * A quick look-over of the code already here should give you an idea
+ * of the requirements for wrapping your hack for safe portability.
+ */
+
+
+/*
+ * sys/resource.h and sys/time.h are apparently order-dependant.
+ */
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#if HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>       /* needs sys/time.h above it */
+#endif
+
+/*
+ * DIRENT functionality can apparently come from many places.
+ * I believe these should really be done by OS-specific compat
+ * files, but for now its left here.
+ */
+#if HAVE_DIRENT_H
+#include <dirent.h>
+#define NAMLEN(dirent) strlen((dirent)->d_name)
+
+#else /* if not HAVE_DIRENT_H */
+#define dirent direct
+#define NAMLEN(dirent) (dirent)->d_namlen
+#if HAVE_SYS_NDIR_H
+#include <sys/ndir.h>
+#endif /* HAVE_SYS_NDIR_H */
+#if HAVE_SYS_DIR_H
+#include <sys/dir.h>
+#endif /* HAVE_SYS_DIR_H */
+#if HAVE_NDIR_H
+#include <ndir.h>
+#endif /* HAVE_NDIR_H */
+#endif /* HAVE_DIRENT_H */
+
+
+/*
+ * Filedescriptor limits in the different select loops
+ *
+ * NP: FreeBSD 7 defines FD_SETSIZE as unsigned but Squid needs
+ *     it to be signed to compare it with signed values.
+ *     Linux and others including FreeBSD <7, define it as signed.
+ *     If this causes any issues please contact [hidden email]
+ */
+#if defined(USE_SELECT) || defined(USE_SELECT_WIN32)
+/* Limited by design */
+# define SQUID_MAXFD_LIMIT    ((signed int)FD_SETSIZE)
+
+#elif defined(USE_POLL)
+/* Limited due to delay pools */
+# define SQUID_MAXFD_LIMIT    ((signed int)FD_SETSIZE)
+
+#elif defined(USE_KQUEUE) || defined(USE_EPOLL)
+# define SQUID_FDSET_NOUSE 1
+
+#else
+# error Unknown select loop model!
+#endif
+
+
+
+#if !HAVE_STRUCT_RUSAGE
+/**
+ * If we don't have getrusage() then we create a fake structure
+ * with only the fields Squid cares about.  This just makes the
+ * source code cleaner, so we don't need lots of #ifdefs in other
+ * places
+ */
+struct rusage
+{
+    struct timeval ru_stime;
+    struct timeval ru_utime;
+    int ru_maxrss;
+    int ru_majflt;
+};
+#endif /* !HAVE_STRUCT_RUSAGE */
+
+
+/* templates require C++ */
+#ifdef __cplusplus
+
+#ifndef min
+/**
+ * min() comparison may not always be provided.
+ * Squid bundles this template for when its needed.
+ * May be used on any type which provides operator '<'
+ */
+template<class A>
+inline A const &
+min(A const & lhs, A const & rhs)
+{
+    if (rhs < lhs)
+        return rhs;
+    return lhs;
+}
+#endif
+#define XMIN(x,y) (min (x,y))
+
+#ifndef max
+/**
+ * max() comparison may not always be provided.
+ * Squid bundles this template for when its needed.
+ * May be used on any type which provides operator '>'
+ */
+template<class A>
+inline A const &
+max(A const & lhs, A const & rhs)
+{
+    if (rhs > lhs)
+        return rhs;
+    return lhs;
+}
+#endif
+#define XMAX(a,b) (max (a,b))
+
+#endif /* __cplusplus */
+
+/**
+ * tempnam() not provided by all systems
+ * TODO: detect WHICH systems and move to their OS-specific compat files
+ */
+#if !HAVE_TEMPNAM
+#include "tempnam.h"
+#endif
+
+/**
+ * strsep() not provided by all systems
+ * TODO: detect WHICH systems and move to their OS-specific compat files
+ */
+#if !HAVE_STRSEP
+#include "strsep.h"
+#endif
+
+/**
+ * strtoll() not provided by all systems
+ * TODO: detect WHICH systems and move to their OS-specific compat files
+ */
+#if !HAVE_STRTOLL
+#include "strtoll.h"
+#endif
+
+/**
+ * Common shared definition of what whitespace consists of for string tests
+ */
+#define w_space     " \t\n\r"
+
+/**
+ * initgroups() not provided by all systems
+ * TODO: detect WHICH systems and move to their OS-specific compat files
+ */
+#if !HAVE_INITGROUPS
+#include "initgroups.h"
+#endif
+
+
+/* REQUIRED for the below logics. If they move this needs to as well */
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#if defined(O_NONBLOCK)
+/**
+ * We used to assume O_NONBLOCK was broken on Solaris, but evidence
+ * now indicates that its fine on Solaris 8, and in fact required for
+ * properly detecting EOF on FIFOs.  So now we assume that if
+ * its defined, it works correctly on all operating systems.
+ */
+#define SQUID_NONBLOCK O_NONBLOCK
+#else
+/** O_NDELAY is our fallback. */
+#define SQUID_NONBLOCK O_NDELAY
+#endif
+
+
+/**
+ * Signalling flags are apparently not always provided.
+ * TODO find out if these can be moved into specific OS portability files.
+ */
+#ifndef SA_RESTART
+#define SA_RESTART 0
+#endif
+#ifndef SA_NODEFER
+#define SA_NODEFER 0
+#endif
+#ifndef SA_RESETHAND
+#define SA_RESETHAND 0
+#endif
+#if SA_RESETHAND == 0 && defined(SA_ONESHOT)
+#undef SA_RESETHAND
+#define SA_RESETHAND SA_ONESHOT
+#endif
+
+
+#endif /* _SQUID_COMPAT_SHARED_H */

=== added directory 'libsquid-compat/os'
=== added file 'libsquid-compat/os/squid_aix.h'
--- libsquid-compat/os/squid_aix.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_aix.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,27 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_AIX_H
+#define SQUID_OS_AIX_H
+
+#ifdef _SQUID_AIX_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+
+/*
+ * Syslog facility on AIX requires some portability wrappers
+ */
+#ifdef HAVE_SYSLOG_H
+#define _XOPEN_EXTENDED_SOURCE
+#define _XOPEN_SOURCE_EXTENDED 1
+#endif
+
+
+#endif /* _SQUID_AIX_ */
+#endif /* SQUID_OS_AIX_H */

=== added file 'libsquid-compat/os/squid_freebsd.h'
--- libsquid-compat/os/squid_freebsd.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_freebsd.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,31 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_FREEBSD_H
+#define SQUID_OS_FREEBSD_H
+
+#ifdef _SQUID_FREEBSD_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+
+#if USE_ASYNC_IO && defined(LINUXTHREADS)
+#define _SQUID_LINUX_THREADS_
+#endif
+
+/*
+ * Don't allow inclusion of malloc.h
+ */
+#if defined(HAVE_MALLOC_H)
+#undef HAVE_MALLOC_H
+#endif
+
+#define _etext etext
+
+#endif /* _SQUID_FREEBSD_ */
+#endif /* SQUID_OS_FREEBSD_H */

=== added file 'libsquid-compat/os/squid_hpux.h'
--- libsquid-compat/os/squid_hpux.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_hpux.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,32 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_HPUX_H
+#define SQUID_OS_PHUX_H
+
+#ifdef _SQUID_HPUX_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+
+#if !defined(HAVE_GETPAGESIZE)
+#define HAVE_GETPAGESIZE
+#define getpagesize( )   sysconf(_SC_PAGE_SIZE)
+#endif
+
+/*
+ * getrusage(...) not available on some HPUX
+ */
+#if !HAVE_GETRUSAGE
+#define HAVE_GETRUSAGE 1
+#define getrusage(a, b)  syscall(SYS_GETRUSAGE, a, b)
+#endif
+
+
+#endif /* _SQUID_HPUX_ */
+#endif /* SQUID_OS_HPUX_H */

=== added file 'libsquid-compat/os/squid_linux.h'
--- libsquid-compat/os/squid_linux.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_linux.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,31 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_LINUX_H
+#define SQUID_OS_LINUX_H
+
+#ifdef _SQUID_LINUX_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+
+#if USE_ASYNC_IO
+#define _SQUID_LINUX_THREADS_
+#endif
+
+/*
+ * res_init() is just a macro re-definition of __res_init on Linux (Debian/Ubuntu)
+ */
+#if !defined(HAVE_RES_INIT) && defined(HAVE___RES_INIT) && !defined(res_init)
+#define res_init  __res_init
+#define HAVE_RES_INIT  HAVE___RES_INIT
+#endif
+
+
+#endif /* _SQUID_LINUX_ */
+#endif /* SQUID_OS_LINUX_H */

=== added file 'libsquid-compat/os/squid_mswin.h'
--- libsquid-compat/os/squid_mswin.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_mswin.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,768 @@
+/*
+ * $Id$
+ *
+ * AUTHOR: Andrey Shorin <[hidden email]>
+ * AUTHOR: Guido Serassio <[hidden email]>
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_MSWIN_H
+#define SQUID_OS_MSWIN_H
+
+#ifdef _SQUID_WIN32_
+
+#define ACL WindowsACL
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#if _MSC_VER == 1400
+#define _CRT_SECURE_NO_DEPRECATE
+#pragma warning( disable : 4290 )
+#pragma warning( disable : 4996 )
+#endif
+#endif
+
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+# define __USE_FILE_OFFSET64 1
+#endif
+
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned __int64 uint64_t;
+
+typedef long pid_t;
+
+#if defined __USE_FILE_OFFSET64
+typedef int64_t off_t;
+typedef uint64_t ino_t;
+
+#else
+typedef long off_t;
+typedef unsigned long ino_t;
+
+#endif
+
+#define INT64_MAX _I64_MAX
+#define INT64_MIN _I64_MIN
+
+#include "default_config_file.h"
+/* Some tricks for MS Compilers */
+#define __STDC__ 1
+#define THREADLOCAL __declspec(thread)
+
+#elif defined(__GNUC__) /* gcc environment */
+
+#define THREADLOCAL __attribute__((section(".tls")))
+
+#endif
+
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#define alloca _alloca
+#endif
+#define chdir _chdir
+#define dup _dup
+#define dup2 _dup2
+#define fdopen _fdopen
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#define fileno _fileno
+#define fstat _fstati64
+#endif
+#define ftruncate WIN32_ftruncate
+#define getcwd _getcwd
+#define getpid _getpid
+#define getrusage WIN32_getrusage
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#define lseek _lseeki64
+#define memccpy _memccpy
+#define mkdir(p) _mkdir(p)
+#define mktemp _mktemp
+#endif
+#define pclose _pclose
+#define pipe WIN32_pipe
+#define popen _popen
+#define putenv _putenv
+#define setmode _setmode
+#define sleep(t) Sleep((t)*1000)
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#define snprintf _snprintf
+#define stat _stati64
+#define strcasecmp _stricmp
+#define strdup _strdup
+#define strlwr _strlwr
+#define strncasecmp _strnicmp
+#define tempnam _tempnam
+#endif
+#define truncate WIN32_truncate
+#define umask _umask
+#define unlink _unlink
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#define vsnprintf _vsnprintf
+#endif
+
+#define O_RDONLY        _O_RDONLY
+#define O_WRONLY        _O_WRONLY
+#define O_RDWR          _O_RDWR
+#define O_APPEND        _O_APPEND
+
+#define O_CREAT         _O_CREAT
+#define O_TRUNC         _O_TRUNC
+#define O_EXCL          _O_EXCL
+
+#define O_TEXT          _O_TEXT
+#define O_BINARY        _O_BINARY
+#define O_RAW           _O_BINARY
+#define O_TEMPORARY     _O_TEMPORARY
+#define O_NOINHERIT     _O_NOINHERIT
+#define O_SEQUENTIAL    _O_SEQUENTIAL
+#define O_RANDOM        _O_RANDOM
+#define O_NDELAY 0
+
+#define S_IFMT   _S_IFMT
+#define S_IFDIR  _S_IFDIR
+#define S_IFCHR  _S_IFCHR
+#define S_IFREG  _S_IFREG
+#define S_IREAD  _S_IREAD
+#define S_IWRITE _S_IWRITE
+#define S_IEXEC  _S_IEXEC
+
+#define S_IRWXO 007
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
+#endif
+
+#define SIGHUP 1 /* hangup */
+#define SIGKILL 9 /* kill (cannot be caught or ignored) */
+#define SIGBUS 10 /* bus error */
+#define SIGPIPE 13 /* write on a pipe with no one to read it */
+#define SIGCHLD 20 /* to parent on child stop or exit */
+#define SIGUSR1 30 /* user defined signal 1 */
+#define SIGUSR2 31 /* user defined signal 2 */
+
+typedef unsigned short int ushort;
+typedef int uid_t;
+typedef int gid_t;
+
+struct passwd {
+    char    *pw_name;      /* user name */
+    char    *pw_passwd;    /* user password */
+    uid_t   pw_uid;        /* user id */
+    gid_t   pw_gid;        /* group id */
+    char    *pw_gecos;     /* real name */
+    char    *pw_dir;       /* home directory */
+    char    *pw_shell;     /* shell program */
+};
+
+struct group {
+    char    *gr_name;      /* group name */
+    char    *gr_passwd;    /* group password */
+    gid_t   gr_gid;        /* group id */
+    char    **gr_mem;      /* group members */
+};
+
+struct statfs {
+    long    f_type;     /* type of filesystem (see below) */
+    long    f_bsize;    /* optimal transfer block size */
+    long    f_blocks;   /* total data blocks in file system */
+    long    f_bfree;    /* free blocks in fs */
+    long    f_bavail;   /* free blocks avail to non-superuser */
+    long    f_files;    /* total file nodes in file system */
+    long    f_ffree;    /* free file nodes in fs */
+    long    f_fsid;     /* file system id */
+    long    f_namelen;  /* maximum length of filenames */
+    long    f_spare[6]; /* spare for later */
+};
+
+#ifndef HAVE_GETTIMEOFDAY
+struct timezone {
+    int tz_minuteswest; /* minutes west of Greenwich */
+    int tz_dsttime; /* type of dst correction */
+};
+#endif
+
+#define CHANGE_FD_SETSIZE 1
+#if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE
+#define FD_SETSIZE SQUID_MAXFD
+#endif
+
+#include <stddef.h>
+#include <process.h>
+#include <errno.h>
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#include <winsock2.h>
+#endif
+#include <ws2tcpip.h>
+#if (EAI_NODATA == EAI_NONAME)
+#undef EAI_NODATA
+#define EAI_NODATA WSANO_DATA
+#endif
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+/* Hack to suppress compiler warnings on FD_SET() & FD_CLR() */
+#pragma warning (push)
+#pragma warning (disable:4142)
+#endif
+/* prevent inclusion of wingdi.h */
+#define NOGDI
+#include <ws2spi.h>
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+#pragma warning (pop)
+#endif
+#include <io.h>
+#include <stdlib.h>
+
+typedef char * caddr_t;
+
+#undef FD_CLOSE
+#undef FD_OPEN
+#undef FD_READ
+#undef FD_WRITE
+#define EISCONN WSAEISCONN
+#define EINPROGRESS WSAEINPROGRESS
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define EALREADY WSAEALREADY
+#define ETIMEDOUT WSAETIMEDOUT
+#define ECONNREFUSED WSAECONNREFUSED
+#define ECONNRESET WSAECONNRESET
+#define ENOTCONN WSAENOTCONN
+#define ERESTART WSATRY_AGAIN
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+
+#undef h_errno
+#define h_errno errno /* we'll set it ourselves */
+
+#undef FD_CLR
+#define FD_CLR(fd, set) do { \
+    u_int __i; \
+    SOCKET __sock = _get_osfhandle(fd); \
+    for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \
+        if (((fd_set FAR *)(set))->fd_array[__i] == __sock) { \
+            while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
+                ((fd_set FAR *)(set))->fd_array[__i] = \
+                    ((fd_set FAR *)(set))->fd_array[__i+1]; \
+                __i++; \
+            } \
+            ((fd_set FAR *)(set))->fd_count--; \
+            break; \
+        } \
+    } \
+} while(0)
+
+#undef FD_SET
+#define FD_SET(fd, set) do { \
+    u_int __i; \
+    SOCKET __sock = _get_osfhandle(fd); \
+    for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
+        if (((fd_set FAR *)(set))->fd_array[__i] == (__sock)) { \
+            break; \
+        } \
+    } \
+    if (__i == ((fd_set FAR *)(set))->fd_count) { \
+        if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
+            ((fd_set FAR *)(set))->fd_array[__i] = (__sock); \
+            ((fd_set FAR *)(set))->fd_count++; \
+        } \
+    } \
+} while(0)
+
+#undef FD_ISSET
+#define FD_ISSET(fd, set) Win32__WSAFDIsSet(fd, (fd_set FAR *)(set))
+
+/* internal to Microsoft CRTLIB */
+typedef struct {
+    long osfhnd;    /* underlying OS file HANDLE */
+    char osfile;    /* attributes of file (e.g., open in text mode?) */
+    char pipech;    /* one char buffer for handles opened on pipes */
+#ifdef _MT
+    int lockinitflag;
+    CRITICAL_SECTION lock;
+#endif  /* _MT */
+}   ioinfo;
+#define IOINFO_L2E          5
+#define IOINFO_ARRAY_ELTS   (1 << IOINFO_L2E)
+#define _pioinfo(i) ( __pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)) )
+#define _osfile(i)  ( _pioinfo(i)->osfile )
+#define _osfhnd(i)  ( _pioinfo(i)->osfhnd )
+#define FOPEN           0x01    /* file handle open */
+
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+
+SQUIDCEXTERN _CRTIMP ioinfo * __pioinfo[];
+SQUIDCEXTERN int __cdecl _free_osfhnd(int);
+
+#elif defined(__MINGW32__) /* MinGW environment */
+
+__MINGW_IMPORT ioinfo * __pioinfo[];
+SQUIDCEXTERN int _free_osfhnd(int);
+
+#endif
+
+SQUIDCEXTERN THREADLOCAL int ws32_result;
+
+#define strerror(e) WIN32_strerror(e)
+
+#ifdef __cplusplus
+
+inline
+int close(int fd)
+{
+    char l_so_type[sizeof(int)];
+    int l_so_type_siz = sizeof(l_so_type);
+    SOCKET sock = _get_osfhandle(fd);
+
+    if (::getsockopt(sock, SOL_SOCKET, SO_TYPE, l_so_type, &l_so_type_siz) == 0) {
+        int result = 0;
+        if (closesocket(sock) == SOCKET_ERROR) {
+            errno = WSAGetLastError();
+            result = 1;
+        }
+        _free_osfhnd(fd);
+        _osfile(fd) = 0;
+        return result;
+    } else
+        return _close(fd);
+}
+
+#if defined(_MSC_VER) /* Microsoft C Compiler ONLY */
+
+#ifndef _S_IREAD
+#define _S_IREAD 0x0100
+#endif
+
+#ifndef _S_IWRITE
+#define _S_IWRITE 0x0080
+#endif
+
+inline
+int open(const char *filename, int oflag, int pmode = 0)
+{
+    return _open(filename, oflag, pmode & (_S_IREAD | _S_IWRITE));
+}
+#endif
+
+inline
+int read(int fd, void * buf, size_t siz)
+{
+    char l_so_type[sizeof(int)];
+    int l_so_type_siz = sizeof(l_so_type);
+    SOCKET sock = _get_osfhandle(fd);
+
+    if (::getsockopt(sock, SOL_SOCKET, SO_TYPE, l_so_type, &l_so_type_siz) == 0)
+        return ::recv(sock, (char FAR *) buf, (int)siz, 0);
+    else
+        return _read(fd, buf, (unsigned int)siz);
+}
+
+inline
+int write(int fd, const void * buf, size_t siz)
+{
+    char l_so_type[sizeof(int)];
+    int l_so_type_siz = sizeof(l_so_type);
+    SOCKET sock = _get_osfhandle(fd);
+
+    if (::getsockopt(sock, SOL_SOCKET, SO_TYPE, l_so_type, &l_so_type_siz) == 0)
+        return ::send(sock, (char FAR *) buf, siz, 0);
+    else
+        return _write(fd, buf, siz);
+}
+
+inline
+char *index(const char *s, int c)
+{
+    return (char *)strchr(s,c);
+}
+
+/** \cond AUTODOCS-IGNORE */
+namespace Squid
+{
+/** \endcond */
+
+inline
+int accept(int s, struct sockaddr * a, size_t * l)
+{
+    SOCKET result;
+    if ((result = ::accept(_get_osfhandle(s), a, (int *)l)) == INVALID_SOCKET) {
+        if (WSAEMFILE == (errno = WSAGetLastError()))
+            errno = EMFILE;
+        return -1;
+    } else
+        return _open_osfhandle(result, 0);
+}
+
+inline
+int bind(int s, struct sockaddr * n, int l)
+{
+    if (::bind(_get_osfhandle(s),n,l) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+inline
+int connect(int s, const struct sockaddr * n, int l)
+{
+    if (::connect(_get_osfhandle(s),n,l) == SOCKET_ERROR) {
+        if (WSAEMFILE == (errno = WSAGetLastError()))
+            errno = EMFILE;
+        return -1;
+    } else
+        return 0;
+}
+
+inline
+struct hostent * gethostbyname (const char *n) {
+    HOSTENT FAR * result;
+    if ((result = ::gethostbyname(n)) == NULL)
+        errno = WSAGetLastError();
+    return result;
+}
+#define gethostbyname(n) Squid::gethostbyname(n)
+
+inline
+SERVENT FAR* getservbyname (const char * n, const char * p)
+{
+    SERVENT FAR * result;
+    if ((result = ::getservbyname(n, p)) == NULL)
+        errno = WSAGetLastError();
+    return result;
+}
+#define getservbyname(n,p) Squid::getservbyname(n,p)
+
+inline
+HOSTENT FAR * gethostbyaddr(const char * a, int l, int t)
+{
+    HOSTENT FAR * result;
+    if ((result = ::gethostbyaddr(a, l, t)) == NULL)
+        errno = WSAGetLastError();
+    return result;
+}
+#define gethostbyaddr(a,l,t) Squid::gethostbyaddr(a,l,t)
+
+inline
+int getsockname(int s, struct sockaddr * n, size_t * l)
+{
+    if ((::getsockname(_get_osfhandle(s), n, (int *)l)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+inline
+int gethostname(char * n, size_t l)
+{
+    if ((::gethostname(n, l)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+#define gethostname(n,l) Squid::gethostname(n,l)
+
+inline
+int getsockopt(int s, int l, int o, void * v, int * n)
+{
+    Sleep(1);
+    if ((::getsockopt(_get_osfhandle(s), l, o,(char *) v, n)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+/* Simple ioctl() emulation */
+inline
+int ioctl(int s, int c, void * a)
+{
+    if ((::ioctlsocket(_get_osfhandle(s), c, (u_long FAR *)a)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+inline
+int ioctlsocket(int s, long c, u_long FAR * a)
+{
+    if ((::ioctlsocket(_get_osfhandle(s), c, a)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+inline
+int listen(int s, int b)
+{
+    if (::listen(_get_osfhandle(s), b) == SOCKET_ERROR) {
+        if (WSAEMFILE == (errno = WSAGetLastError()))
+            errno = EMFILE;
+        return -1;
+    } else
+        return 0;
+}
+#define listen(s,b) Squid::listen(s,b)
+
+inline
+int recv(int s, void * b, size_t l, int f)
+{
+    int result;
+    if ((result = ::recv(_get_osfhandle(s), (char *)b, l, f)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return result;
+}
+
+inline
+int recvfrom(int s, void * b, size_t l, int f, struct sockaddr * fr, size_t * fl)
+{
+    int result;
+    if ((result = ::recvfrom(_get_osfhandle(s), (char *)b, l, f, fr, (int *)fl)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return result;
+}
+
+inline
+int select(int n, fd_set * r, fd_set * w, fd_set * e, struct timeval * t)
+{
+    int result;
+    if ((result = ::select(n,r,w,e,t)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return result;
+}
+#define select(n,r,w,e,t) Squid::select(n,r,w,e,t)
+
+inline
+int send(int s, const void * b, size_t l, int f)
+{
+    int result;
+    if ((result = ::send(_get_osfhandle(s), (char *)b, l, f)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return result;
+}
+
+inline
+int sendto(int s, const void * b, size_t l, int f, const struct sockaddr * t, int tl)
+{
+    int result;
+    if ((result = ::sendto(_get_osfhandle(s), (char *)b, l, f, t, tl)) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return result;
+}
+
+inline
+int setsockopt(SOCKET s, int l, int o, const char * v, int n)
+{
+    SOCKET socket;
+
+    socket = ((s == INVALID_SOCKET) ? s : (SOCKET)_get_osfhandle((int)s));
+
+    if (::setsockopt(socket, l, o, v, n) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+#define setsockopt(s,l,o,v,n) Squid::setsockopt(s,l,o,v,n)
+
+inline
+int shutdown(int s, int h)
+{
+    if (::shutdown(_get_osfhandle(s),h) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+inline
+int socket(int f, int t, int p)
+{
+    SOCKET result;
+    if ((result = ::socket(f, t, p)) == INVALID_SOCKET) {
+        if (WSAEMFILE == (errno = WSAGetLastError()))
+            errno = EMFILE;
+        return -1;
+    } else
+        return _open_osfhandle(result, 0);
+}
+#define socket(f,t,p) Squid::socket(f,t,p)
+
+inline
+int WSAAsyncSelect(int s, HWND h, unsigned int w, long e)
+{
+    if (::WSAAsyncSelect(_get_osfhandle(s), h, w, e) == SOCKET_ERROR) {
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+#undef WSADuplicateSocket
+inline
+int WSADuplicateSocket(int s, DWORD n, LPWSAPROTOCOL_INFO l)
+{
+#ifdef UNICODE
+    if (::WSADuplicateSocketW(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
+#else
+    if (::WSADuplicateSocketA(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
+#endif
+        errno = WSAGetLastError();
+        return -1;
+    } else
+        return 0;
+}
+
+#undef WSASocket
+inline
+int WSASocket(int a, int t, int p, LPWSAPROTOCOL_INFO i, GROUP g, DWORD f) {
+    SOCKET result;
+#ifdef UNICODE
+    if ((result = ::WSASocketW(a, t, p, i, g, f)) == INVALID_SOCKET) {
+#else
+    if ((result = ::WSASocketA(a, t, p, i, g, f)) == INVALID_SOCKET) {
+#endif
+        if (WSAEMFILE == (errno = WSAGetLastError()))
+            errno = EMFILE;
+        return -1;
+    } else
+        return _open_osfhandle(result, 0);
+}
+
+} /* namespace Squid */
+
+#else /* #ifdef __cplusplus */
+#define connect(s,n,l) \
+ (SOCKET_ERROR == connect(_get_osfhandle(s),n,l) ? \
+ (WSAEMFILE == (errno = WSAGetLastError()) ? errno = EMFILE : -1, -1) : 0)
+#define gethostbyname(n) \
+ (NULL == ((HOSTENT FAR*)(ws32_result = (int)gethostbyname(n))) ? \
+ (errno = WSAGetLastError()), (HOSTENT FAR*)NULL : (HOSTENT FAR*)ws32_result)
+#define gethostname(n,l) \
+ (SOCKET_ERROR == gethostname(n,l) ? \
+ (errno = WSAGetLastError()), -1 : 0)
+#define recv(s,b,l,f) \
+ (SOCKET_ERROR == (ws32_result = recv(_get_osfhandle(s),b,l,f)) ? \
+ (errno = WSAGetLastError()), -1 : ws32_result)
+#define sendto(s,b,l,f,t,tl) \
+ (SOCKET_ERROR == (ws32_result = sendto(_get_osfhandle(s),b,l,f,t,tl)) ? \
+ (errno = WSAGetLastError()), -1 : ws32_result)
+#define select(n,r,w,e,t) \
+ (SOCKET_ERROR == (ws32_result = select(n,r,w,e,t)) ? \
+ (errno = WSAGetLastError()), -1 : ws32_result)
+#define socket(f,t,p) \
+ (INVALID_SOCKET == ((SOCKET)(ws32_result = (int)socket(f,t,p))) ? \
+ ((WSAEMFILE == (errno = WSAGetLastError()) ? errno = EMFILE : -1), -1) : \
+ (SOCKET)_open_osfhandle(ws32_result,0))
+#define write      _write /* Needed in util.c */
+#define open       _open /* Needed in win32lib.c */
+#endif /* #ifdef __cplusplus */
+
+#define RUSAGE_SELF 0 /* calling process */
+#define RUSAGE_CHILDREN -1 /* terminated child processes */
+
+struct rusage {
+    struct timeval ru_utime; /* user time used */
+    struct timeval ru_stime; /* system time used */
+    long ru_maxrss; /* integral max resident set size */
+    long ru_ixrss; /* integral shared text memory size */
+    long ru_idrss; /* integral unshared data size */
+    long ru_isrss; /* integral unshared stack size */
+    long ru_minflt; /* page reclaims */
+    long ru_majflt; /* page faults */
+    long ru_nswap; /* swaps */
+    long ru_inblock; /* block input operations */
+    long ru_oublock; /* block output operations */
+    long ru_msgsnd; /* messages sent */
+    long ru_msgrcv; /* messages received */
+    long ru_nsignals; /* signals received */
+    long ru_nvcsw; /* voluntary context switches */
+    long ru_nivcsw; /* involuntary context switches */
+};
+
+#undef ACL
+
+
+/** \cond AUTODOCS-IGNORE */
+using namespace Squid;
+/** \endcond */
+
+
+/* win32lib.c */
+SQUIDCEXTERN int chroot (const char *);
+SQUIDCEXTERN int ftruncate(int, off_t);
+#ifndef HAVE_GETTIMEOFDAY
+SQUIDCEXTERN int gettimeofday(struct timeval * ,void *);
+#endif
+SQUIDCEXTERN int kill(pid_t, int);
+SQUIDCEXTERN int statfs(const char *, struct statfs *);
+SQUIDCEXTERN int truncate(const char *, off_t);
+SQUIDCEXTERN const char * wsastrerror(int);
+SQUIDCEXTERN struct passwd *getpwnam(char *);
+SQUIDCEXTERN struct group *getgrnam(char *);
+SQUIDCEXTERN uid_t geteuid(void);
+SQUIDCEXTERN uid_t getuid(void);
+SQUIDCEXTERN int setuid(uid_t);
+SQUIDCEXTERN int seteuid(uid_t);
+SQUIDCEXTERN gid_t getgid(void);
+SQUIDCEXTERN gid_t getegid(void);
+SQUIDCEXTERN int setgid(gid_t);
+SQUIDCEXTERN int setegid(gid_t);
+SQUIDCEXTERN const char *WIN32_strerror(int);
+SQUIDCEXTERN void WIN32_maperror(unsigned long);
+
+// Moved in from squid.h and other duplicates.
+// BUT was already included up the top there with a wrapped conditional.
+// that may need checking....
+//#include <io.h>
+
+/* Windows may lack getpagesize() prototype */
+// Moved in from squid.h
+// NP: there may be a header include needed before this to prevent duplicate-definitions
+//     if that is true it will need including here as part of the hack.
+//     if not then this comment can be dropped.
+#if !defined(getpagesize)
+SQUIDCEXTERN size_t getpagesize(void);
+#endif
+
+
+#endif /* _SQUID_WIN32_ */
+#endif /* SQUID_OS_MSWIN_H */

=== added file 'libsquid-compat/os/squid_next.h'
--- libsquid-compat/os/squid_next.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_next.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,53 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_NEXT_H
+#define SQUID_OS_NEXT_H
+
+#ifdef _SQUID_NEXT_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+
+/*
+ * Don't allow inclusion of malloc.h
+ */
+#if defined(HAVE_MALLOC_H)
+#undef HAVE_MALLOC_H
+#endif
+
+/*
+ * S_ISDIR() may not be defined on Next
+ */
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if !defined(S_ISDIR)
+#define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR))
+#endif
+
+/*
+ * WAS: lots of special wrappers labeled only 'protect NEXTSTEP'
+ * I'm assuming its an incomplete definition problem on that OS.
+ * Or a missing safety wrapper by the looks of the _SQUID_NETDB_H_
+ *
+ * Anyway, this file is included before all general non-type headers.
+ * doing the include here for Next and undefining HAVE_NETDB_H will
+ * save us from including it again in general.
+ */
+// All the hacks included this first without safety wrapping, then netdb.h.
+#include <netinet/in_systm.h>
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#undef HAVE_NETDB_H
+#define HAVE_NETDB_H 0
+
+
+#endif /* _SQUID_NEXT_ */
+#endif /* SQUID_OS_NEXT_H */

=== added file 'libsquid-compat/os/squid_openbsd.h'
--- libsquid-compat/os/squid_openbsd.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_openbsd.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,25 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_OPENBSD_H
+#define SQUID_OS_OPENBSD_H
+
+#ifdef _SQUID_OPENBSD_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+/*
+ * Don't allow inclusion of malloc.h
+ */
+#ifdef HAVE_MALLOC_H
+#undef HAVE_MALLOC_H
+#endif
+
+
+#endif /* _SQUID_OPENBSD_ */
+#endif /* SQUID_OS_OPENBSD_H */

=== added file 'libsquid-compat/os/squid_qnx.h'
--- libsquid-compat/os/squid_qnx.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_qnx.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,23 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_QNX_H
+#define SQUID_OS_QNX_H
+
+#ifdef _SQUID_QNX_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+/*
+ * Requires unix.h header file
+ */
+#include <unix.h>
+
+
+#endif /* _SQUID_QNX_ */
+#endif /* SQUID_OS_QNX_H */

=== added file 'libsquid-compat/os/squid_sgi.h'
--- libsquid-compat/os/squid_sgi.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_sgi.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,26 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_SGI_H
+#define SQUID_OS_SGI_H
+
+#if _SQUID_SGI_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+#if !defined(_SVR4_SOURCE)
+#define _SVR4_SOURCE /* for tempnam(3) */
+#endif
+
+#if USE_ASYNC_IO
+#define _ABI_SOURCE
+#endif /* USE_ASYNC_IO */
+
+
+#endif /* _SQUID_SGI_ */
+#endif /* SQUID_OS_SGI_H */

=== added file 'libsquid-compat/os/squid_solaris.h'
--- libsquid-compat/os/squid_solaris.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_solaris.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,49 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_SOLARIS_H
+#define SQUID_OS_SOLARIS_H
+
+#ifdef _SQUID_SOLARIS_
+
+/*
+ * On Solaris 9 x86, gcc may includes a "fixed" set of old system
+ * include files that is incompatible with the updated Solaris
+ * header files.
+ */
+#if defined(i386) || defined(__i386)
+#ifndef HAVE_PAD128_T
+typedef union {
+ long double _q;
+ int32_t _l[4];
+} pad128_t;
+#endif
+#ifndef HAVE_UPAD128_T
+typedef union {
+ long double _q;
+ uint32_t _l[4];
+} upad128_t;
+#endif
+#endif
+
+/**
+ * prototypes for system function missing from system includes
+ */
+SQUIDCEXTERN int getrusage(int, struct rusage *);
+
+
+/**
+ * prototypes for system function missing from system includes
+ * on some Solaris systems.
+ */
+SQUIDCEXTERN int getpagesize(void);
+#if !defined(_XPG4_2) && !(defined(__EXTENSIONS__) || \
+        (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)))
+SQUIDCEXTERN int gethostname(char *, int);
+#endif
+
+
+
+#endif /* _SQUID_SOLARIS_ */
+#endif /* SQUID_OS_SOALRIS_H */

=== added file 'libsquid-compat/os/squid_sunos.h'
--- libsquid-compat/os/squid_sunos.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_sunos.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,25 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_SUNOS_H
+#define SQUID_OS_SUNOS_H
+
+#ifdef _SQUID_SUNOS_
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+
+/*
+ * We assume O_NONBLOCK is broken, or does not exist, on SunOS.
+ */
+#define SQUID_NONBLOCK O_NDELAY
+
+
+
+#endif /* _SQUID_SUNOS_ */
+#endif /* SQUID_OS_SUNOS_H */

=== added file 'libsquid-compat/os/squid_windows.h'
--- libsquid-compat/os/squid_windows.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/os/squid_windows.h 2009-01-21 08:05:22 +0000
@@ -0,0 +1,53 @@
+/*
+ * $Id$
+ *
+ * AUTHOR: Guido Serassio <[hidden email]>
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_OS_WINDOWS_H
+#define SQUID_OS_WINDOWS_H
+
+#ifdef _SQUID_WIN32_
+
+#ifndef ACL
+#define ACL WindowsACL
+#define _MSWIN_ACL_WAS_NOT_DEFINED 1
+#endif
+#include <windows.h>
+#if _MSWIN_ACL_WAS_NOT_DEFINED
+#undef ACL
+#undef _MSWIN_ACL_WAS_NOT_DEFINED
+#endif
+
+#endif /* _SQUID_WIN32_ */
+#endif /* SQUID_OS_WINDOWS_H */

=== added file 'libsquid-compat/osdetect.h'
--- libsquid-compat/osdetect.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/osdetect.h 2009-01-15 10:53:56 +0000
@@ -0,0 +1,92 @@
+#ifndef SQUID_COMPAT_OSDETECT_H
+#define SQUID_COMPAT_OSDETECT_H
+
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+/*
+ * Define the _SQUID_TYPE_ based on a guess of the OS.
+ *
+ * NP: This MUST come first in compat.h with no OS-specific includes
+ *     or other definitions within this if-else structure.
+ */
+
+#if defined(__sun__) || defined(__sun) /* SUN */
+#define _SQUID_SUN_
+#if defined(__SVR4) /* SOLARIS */
+#define _SQUID_SOLARIS_
+#else /* SUNOS */
+#define _SQUID_SUNOS_
+#endif
+
+#elif defined(__hpux) /* HP-UX - SysV-like? */
+#define _SQUID_HPUX_
+#define _SQUID_SYSV_
+
+#elif defined(__osf__) /* OSF/1 */
+#define _SQUID_OSF_
+
+#elif defined(__ultrix) /* Ultrix */
+#define _SQUID_ULTRIX_
+
+#elif defined(_AIX) /* AIX */
+#define _SQUID_AIX_
+
+#elif defined(__linux__) /* Linux */
+#define _SQUID_LINUX_
+
+#elif defined(__FreeBSD__) /* FreeBSD */
+#define _SQUID_FREEBSD_
+
+#elif defined(__sgi__) || defined(sgi) || defined(__sgi) /* SGI */
+#define _SQUID_SGI_
+
+#elif defined(__NeXT__)
+#define _SQUID_NEXT_
+
+#elif defined(__bsdi__)
+#define _SQUID_BSDI_ /* BSD/OS */
+
+#elif defined(__NetBSD__)
+#define _SQUID_NETBSD_
+
+#elif defined(__OpenBSD__)
+#define _SQUID_OPENBSD_
+
+#elif defined(__DragonFly__)
+#define _SQUID_DRAGONFLY_
+
+#elif defined(__CYGWIN32__)  || defined(__CYGWIN__)
+#define _SQUID_CYGWIN_
+#define _SQUID_WIN32_
+
+#elif defined(WIN32) || defined(WINNT) || defined(__WIN32__) || defined(__WIN32)
+#define _SQUID_MSWIN_
+#define _SQUID_WIN32_
+
+#elif defined(__APPLE__)
+#define _SQUID_APPLE_
+
+#elif defined(sony_news) && defined(__svr4)
+#define _SQUID_NEWSOS6_
+
+#elif defined(__QNX__)
+#define _SQUID_QNX_
+
+#elif defined(__EMX__) || defined(OS2) || defined(__OS2__)
+#define _SQUID_OS2_
+/*
+ *  FIXME: the os2 port of bash seems to have problems checking
+ *  the return codes of programs in if statements.  These options
+ *  need to be overridden.
+ */
+
+#endif /* OS automatic detection */
+
+
+
+#endif /* SQUID_COMPAT_OSDETECT_H */

=== added file 'libsquid-compat/squid_fdsetsize.h'
--- libsquid-compat/squid_fdsetsize.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/squid_fdsetsize.h 2009-01-15 10:53:56 +0000
@@ -0,0 +1,90 @@
+#ifndef SQUID_FDSETSIZE_H
+#define SQUID_FDSETSIZE_H
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+/* FD_SETSIZE must be redefined before including sys/types.h */
+#if 0
+/* AYJ: would dearly like to use this to enforce include order
+ but at present some helpers don't follow the squid include methodology.
+ that will need fixing later.
+*/
+#ifdef _SYS_TYPES_H
+#error squid_fdsetsize.h for FDSETSIZE must be included before sys/types.h
+#error Make sure that squid.h or config.h is the first file included by your .cc
+#endif
+#endif /* 0 */
+/*
+ * On some systems, FD_SETSIZE is set to something lower than the
+ * actual number of files which can be opened.  IRIX is one case,
+ * NetBSD is another.  So here we increase FD_SETSIZE to our
+ * configure-discovered maximum *before* any system includes.
+ */
+#define CHANGE_FD_SETSIZE 1
+
+/*
+ * Cannot increase FD_SETSIZE on Linux, but we can increase __FD_SETSIZE
+ * with glibc 2.2 (or later? remains to be seen). We do this by including
+ * bits/types.h which defines __FD_SETSIZE first, then we redefine
+ * __FD_SETSIZE. Ofcourse a user program may NEVER include bits/whatever.h
+ * directly, so this is a dirty hack!
+ */
+#if defined(_SQUID_LINUX_)
+#undef CHANGE_FD_SETSIZE
+#define CHANGE_FD_SETSIZE 0
+#include <features.h>
+#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+#if SQUID_MAXFD > DEFAULT_FD_SETSIZE
+#include <bits/types.h>
+#undef __FD_SETSIZE
+#define __FD_SETSIZE SQUID_MAXFD
+#endif
+#endif
+#endif
+
+/*
+ * Cannot increase FD_SETSIZE on FreeBSD before 2.2.0, causes select(2)
+ * to return EINVAL.
+ * --Marian Durkovic <[hidden email]>
+ * --Peter Wemm <[hidden email]>
+ */
+#if defined(_SQUID_FREEBSD_)
+#include <osreldate.h>
+#if __FreeBSD_version < 220000
+#undef CHANGE_FD_SETSIZE
+#define CHANGE_FD_SETSIZE 0
+#endif
+#endif
+
+/*
+ * Trying to redefine CHANGE_FD_SETSIZE causes a slew of warnings
+ * on Mac OS X Server.
+ */
+#if defined(_SQUID_APPLE_)
+#undef CHANGE_FD_SETSIZE
+#define CHANGE_FD_SETSIZE 0
+#endif
+
+/* Increase FD_SETSIZE if SQUID_MAXFD is bigger */
+#if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE
+#define FD_SETSIZE SQUID_MAXFD
+#endif
+
+
+/*
+ * Trap unintentional use of fd_set. Must not be used outside the
+ * select code as it only supports FD_SETSIZE number of filedescriptors
+ * and Squid may be running with a lot more..
+ * But only for code linked into Squid, not the helpers.. (unlinkd, pinger)
+ */
+#ifdef SQUID_FDSET_NOUSE
+# ifndef SQUID_HELPER
+#  define fd_set ERROR_FD_SET_USED
+# endif
+#endif
+
+#endif /* SQUID_FDSETSIZE_H */

=== added file 'libsquid-compat/squid_stdvarargs.h'
--- libsquid-compat/squid_stdvarargs.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/squid_stdvarargs.h 2009-01-15 10:53:56 +0000
@@ -0,0 +1,38 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef _SQUID_STDVARARGS_H
+#define _SQUID_STDVARARGS_H
+
+/*
+ * va_* variables come from various places on different platforms.
+ * We provide a clean set of wrappers for the variosu operations
+ * Depending on what is available and needed.
+ */
+#if defined(HAVE_STDARG_H)
+#include <stdarg.h>
+#define HAVE_STDARGS            /* let's hope that works everywhere (mj) */
+#define VA_LOCAL_DECL va_list ap;
+#define VA_START(f) va_start(ap, f)
+#define VA_SHIFT(v,t) ;         /* no-op for ANSI */
+#define VA_END va_end(ap)
+#else
+#if defined(HAVE_VARARGS_H)
+#include <varargs.h>
+#undef HAVE_STDARGS
+#define VA_LOCAL_DECL va_list ap;
+#define VA_START(f) va_start(ap)        /* f is ignored! */
+#define VA_SHIFT(v,t) v = va_arg(ap,t)
+#define VA_END va_end(ap)
+#else
+#error XX **NO VARARGS ** XX
+#endif
+#endif
+
+/* Make sure syslog goes after stdarg/varargs */
+#ifdef HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
+
+#endif /* _SQUID_STDVARARGS_H */

=== added file 'libsquid-compat/squid_valgrind.h'
--- libsquid-compat/squid_valgrind.h 1970-01-01 00:00:00 +0000
+++ libsquid-compat/squid_valgrind.h 2009-01-15 10:53:56 +0000
@@ -0,0 +1,40 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef SQUID_VALGRIND_H
+#define SQUID_VALGRIND_H
+
+/****************************************************************************
+ *--------------------------------------------------------------------------*
+ * DO *NOT* MAKE ANY CHANGES below here unless you know what you're doing...*
+ *--------------------------------------------------------------------------*
+ ****************************************************************************/
+
+/*
+ * valgrind debug support
+ */
+#if WITH_VALGRIND
+#include <valgrind/memcheck.h>
+#undef VALGRIND_MAKE_NOACCESS
+#undef VALGRIND_MAKE_WRITABLE
+#undef VALGRIND_MAKE_READABLE
+/* A little glue for older valgrind version prior to 3.2.0 */
+#ifndef VALGRIND_MAKE_MEM_NOACCESS
+#define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS
+#define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE
+#define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE
+#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE VALGRIND_CHECK_WRITABLE
+#endif
+#else
+#define VALGRIND_MAKE_MEM_NOACCESS(a,b) (0)
+#define VALGRIND_MAKE_MEM_UNDEFINED(a,b) (0)
+#define VALGRIND_MAKE_MEM_DEFINED(a,b) (0)
+#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,b) (0)
+#define VALGRIND_CHECK_MEM_IS_DEFINED(a,b) (0)
+#define VALGRIND_MALLOCLIKE_BLOCK(a,b,c,d)
+#define VALGRIND_FREELIKE_BLOCK(a,b)
+#define RUNNING_ON_VALGRIND 0
+#endif /* WITH_VALGRIND */
+
+#endif /* SQUID_CONFIG_H */

=== modified file 'snmplib/Makefile.am'
--- snmplib/Makefile.am 2003-08-16 06:19:55 +0000
+++ snmplib/Makefile.am 2009-01-21 08:05:22 +0000
@@ -10,7 +10,7 @@
  mib.c snmp_api_error.c   \
  snmp_msg.c \
  snmp_pdu.c  snmplib_debug.c
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/libsquid-compat
 
 VERSION = 3.4
 DEFS = -DSQUID_SNMP=1

=== modified file 'src/ICAP/Makefile.am'
--- src/ICAP/Makefile.am 2008-12-10 20:19:50 +0000
+++ src/ICAP/Makefile.am 2009-01-21 08:05:22 +0000
@@ -3,6 +3,7 @@
 CLEANFILES =
 
 INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
  -I$(top_builddir)/include \
  -I$(top_srcdir)/include \
         -I$(top_srcdir)/src

=== modified file 'src/Makefile.am'
--- src/Makefile.am 2009-01-09 13:12:24 +0000
+++ src/Makefile.am 2009-01-21 08:05:22 +0000
@@ -210,9 +210,15 @@
 noinst_LIBRARIES = @DISK_LIBS@
 noinst_LTLIBRARIES = libsquid.la libauth.la
 
-INCLUDES        = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/lib/libTrie/include
-INCLUDES        += -I$(top_builddir)/lib -I$(top_srcdir)/lib
-INCLUDES += @SQUID_CPPUNIT_INC@
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/src \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib/libTrie/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ @SQUID_CPPUNIT_INC@
 
 EXTRA_PROGRAMS = \
  DiskIO/DiskDaemon/diskd \

=== modified file 'src/adaptation/Makefile.am'
--- src/adaptation/Makefile.am 2008-12-10 20:19:50 +0000
+++ src/adaptation/Makefile.am 2009-01-21 08:05:22 +0000
@@ -3,6 +3,7 @@
 CLEANFILES =
 
 INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
  -I$(top_builddir)/include \
  -I$(top_srcdir)/include \
         -I$(top_srcdir)/src

=== modified file 'src/auth/Makefile.am'
--- src/auth/Makefile.am 2009-01-21 03:47:47 +0000
+++ src/auth/Makefile.am 2009-01-21 08:13:42 +0000
@@ -15,7 +15,11 @@
 libntlm_a_SOURCES = ntlm/auth_ntlm.cc ntlm/auth_ntlm.h
 libnegotiate_a_SOURCES = negotiate/auth_negotiate.cc negotiate/auth_negotiate.h negotiate/negotiateScheme.cc negotiate/negotiateScheme.h
 
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
  -I$(top_srcdir)/src
 
 check_PROGRAMS= testHeaders

=== modified file 'src/eCAP/Makefile.am'
--- src/eCAP/Makefile.am 2008-05-08 21:02:24 +0000
+++ src/eCAP/Makefile.am 2009-01-21 08:05:22 +0000
@@ -22,5 +22,9 @@
  \
  Registry.h
 
-INCLUDES = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
         -I$(top_srcdir)/src

=== modified file 'src/fs/Makefile.am'
--- src/fs/Makefile.am 2009-01-21 03:47:47 +0000
+++ src/fs/Makefile.am 2009-01-21 08:13:42 +0000
@@ -28,7 +28,11 @@
  coss/StoreFScoss.h \
  ufs/StoreFSufs.h
 
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
  -I$(top_srcdir)/src
 
 check_PROGRAMS=testHeaders

=== modified file 'src/globals.h'
--- src/globals.h 2009-01-21 03:47:47 +0000
+++ src/globals.h 2009-01-21 08:13:42 +0000
@@ -70,7 +70,6 @@
     extern const char *const version_string; /* VERSION */
 //MOVED:versions.h:APP_FULLNAME    extern const char *const full_appname_string; /* PACKAGE "/" VERSION */
     extern const char *const appname_string; /* PACKAGE */
-    extern const char *const w_space; /* " \t\n\r" */
     extern char const * visible_appname_string; /* NULL */
     extern const char *fdTypeStr[];
     extern const char *hier_strings[];

=== modified file 'src/icmp/Makefile.am'
--- src/icmp/Makefile.am 2009-01-10 03:04:47 +0000
+++ src/icmp/Makefile.am 2009-01-21 08:05:22 +0000
@@ -9,7 +9,13 @@
 DEFS = @DEFS@
 CLEANFILES =
 
-INCLUDES = -I$(top_srcdir)/src @SQUID_CPPUNIT_INC@ -I$(top_srcdir)/include -I$(top_builddir)/lib
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ @SQUID_CPPUNIT_INC@
+
 $(OBJS): $(top_srcdir)/include/version.h $(top_srcdir)/include/autoconf.h
 
 # TODO: get rid of this when config filename is no longer a global constant.

=== modified file 'src/ip/Makefile.am'
--- src/ip/Makefile.am 2009-01-09 13:12:24 +0000
+++ src/ip/Makefile.am 2009-01-21 08:05:22 +0000
@@ -9,7 +9,13 @@
 DEFS = @DEFS@
 CLEANFILES =
 
-INCLUDES = -I$(top_srcdir)/src @SQUID_CPPUNIT_INC@ -I$(top_srcdir)/include -I$(top_builddir)/lib
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/src \
+ @SQUID_CPPUNIT_INC@
+
 $(OBJS): $(top_srcdir)/include/version.h $(top_srcdir)/include/autoconf.h
 
 
@@ -46,6 +52,7 @@
 nodist_testIpAddress_SOURCES= \
  ../tests/testMain.cc
 testIpAddress_LDADD= \
+ $(top_builddir)/libsquid-compat/libsquid-compat.la \
  libip.la \
  -L$(top_builddir)/lib -lmiscutil \
  @SQUID_CPPUNIT_LA@ \

=== modified file 'src/repl/Makefile.am'
--- src/repl/Makefile.am 2009-01-21 03:47:47 +0000
+++ src/repl/Makefile.am 2009-01-21 08:13:42 +0000
@@ -16,7 +16,11 @@
 liblru_a_SOURCES = lru/store_repl_lru.cc
 libheap_a_SOURCES = heap/store_heap_replacement.h heap/store_heap_replacement.cc heap/store_repl_heap.cc
 
-INCLUDES      = -I. -I$(top_builddir)/include -I$(top_srcdir)/include \
+INCLUDES = \
+ -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
  -I$(top_srcdir)/src
 
 check_PROGRAMS= testHeaders

=== modified file 'src/squid.h'
--- src/squid.h 2009-01-07 11:24:40 +0000
+++ src/squid.h 2009-01-21 08:05:22 +0000
@@ -32,11 +32,6 @@
 #ifndef SQUID_H
 #define SQUID_H
 
-/*
- * On linux this must be defined to get PRId64 and friends
- */
-#define __STDC_FORMAT_MACROS
-
 #include "config.h"
 
 #ifdef _SQUID_MSWIN_
@@ -191,26 +186,6 @@
 #endif /* HAVE_POLL_H */
 #endif /* USE_POLL */
 
-/*
- * Filedescriptor limits in the different select loops
- *
- * NP: FreeBSD 7 defines FD_SETSIZE as unsigned but Squid needs
- *     it to be signed to compare it with signed values.
- *     Linux and others including FreeBSD <7, define it as signed.
- *     If this causes any issues please contact [hidden email]
- */
-#if defined(USE_SELECT) || defined(USE_SELECT_WIN32)
-/* Limited by design */
-# define SQUID_MAXFD_LIMIT ((signed int)FD_SETSIZE)
-#elif defined(USE_POLL)
-/* Limited due to delay pools */
-# define SQUID_MAXFD_LIMIT ((signed int)FD_SETSIZE)
-#elif defined(USE_KQUEUE) || defined(USE_EPOLL)
-# define SQUID_FDSET_NOUSE 1
-#else
-# error Unknown select loop model!
-#endif
-
 
 /*
  * Trap unintentional use of fd_set. Must not be used outside the
@@ -224,35 +199,6 @@
 # endif
 #endif
 
-#if defined(HAVE_STDARG_H)
-#include <stdarg.h>
-#define HAVE_STDARGS /* let's hope that works everywhere (mj) */
-#define VA_LOCAL_DECL va_list ap;
-#define VA_START(f) va_start(ap, f)
-#define VA_SHIFT(v,t) ; /* no-op for ANSI */
-#define VA_END va_end(ap)
-#else
-#if defined(HAVE_VARARGS_H)
-#include <varargs.h>
-#undef HAVE_STDARGS
-#define VA_LOCAL_DECL va_list ap;
-#define VA_START(f) va_start(ap) /* f is ignored! */
-#define VA_SHIFT(v,t) v = va_arg(ap,t)
-#define VA_END va_end(ap)
-#else
-#error XX **NO VARARGS ** XX
-#endif
-#endif
-
-/* Make sure syslog goes after stdarg/varargs */
-#ifdef HAVE_SYSLOG_H
-#ifdef _SQUID_AIX_
-#define _XOPEN_EXTENDED_SOURCE
-#define _XOPEN_SOURCE_EXTENDED 1
-#endif
-#include <syslog.h>
-#endif
-
 #if HAVE_MATH_H
 #include <math.h>
 #endif
@@ -266,13 +212,6 @@
 #define MAXPATHLEN SQUID_MAXPATHLEN
 #endif
 
-#if !HAVE_GETRUSAGE
-#if defined(_SQUID_HPUX_)
-#define HAVE_GETRUSAGE 1
-#define getrusage(a, b)  syscall(SYS_GETRUSAGE, a, b)
-#endif
-#endif
-
 #if !HAVE_STRUCT_RUSAGE
 /*
  * If we don't have getrusage() then we create a fake structure
@@ -329,20 +268,6 @@
 #define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR))
 #endif
 
-#ifdef USE_GNUREGEX
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-#include "GNUregex.h"
-#ifdef __cplusplus
-}
-
-#endif
-#elif HAVE_REGEX_H
-#include <regex.h>
-#endif
-
 #include "md5.h"
 
 #if USE_SSL
@@ -392,36 +317,6 @@
 #include "initgroups.h"
 #endif
 
-#ifndef min
-
-template<class A>
-inline A const &
-min(A const & lhs, A const & rhs)
-{
-    if (rhs < lhs)
-        return rhs;
-
-    return lhs;
-}
-
-#endif
-
-#define XMIN(x,y) (min (x,y))
-#ifndef max
-template<class A>
-inline A const &
-max(A const & lhs, A const & rhs)
-{
-    if (rhs > lhs)
-        return rhs;
-
-    return lhs;
-}
-
-#endif
-
-#define XMAX(a,b) (max (a,b))
-
 #include "structs.h"
 #include "protos.h"
 #include "globals.h"

=== modified file 'test-suite/Makefile.am'
--- test-suite/Makefile.am 2009-01-21 03:47:47 +0000
+++ test-suite/Makefile.am 2009-01-21 08:13:42 +0000
@@ -9,9 +9,20 @@
 AM_CFLAGS = @SQUID_CFLAGS@
 AM_CXXFLAGS = @SQUID_CXXFLAGS@
 
-INCLUDES        = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src
+INCLUDES = -I$(top_srcdir)/libsquid-compat \
+ -I. \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/src
+
+LDADD = \
+ -L$(top_builddir)/libsquid-compat/libsquid-compat.la \
+ -L$(top_builddir)/lib -lmiscutil \
+ $(top_builddir)/src/globals.o \
+ $(top_builddir)/src/time.o
 
 EXTRA_PROGRAMS = mem_node_test membanger splay tcp-banger2 rfc1738
+
 EXTRA_DIST = testheaders.sh
 
 ESI_ALL_TESTS = \
@@ -50,7 +61,6 @@
  VirtualDeleteOperator
 
 
-LDADD =$(top_builddir)/src/globals.o $(top_builddir)/src/time.o -L$(top_builddir)/lib -lmiscutil
 tcp_banger2_LDADD = -L$(top_builddir)/lib -lmiscutil
 DEBUG_SOURCE = test_tools.cc
 debug_SOURCES = debug.cc $(DEBUG_SOURCE)

=== modified file 'tools/Makefile.am'
--- tools/Makefile.am 2009-01-09 13:12:24 +0000
+++ tools/Makefile.am 2009-01-21 08:05:22 +0000
@@ -8,6 +8,7 @@
 AUTOMAKE_OPTIONS = subdir-objects
 
 INCLUDES        = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/lib/libTrie/include -I$(top_srcdir)/src
+INCLUDES += -I$(top_srcdir)/libsquid-compat
 INCLUDES += @SQUID_CPPUNIT_INC@
 
 TESTS=$(check_PROGRAMS)

# Begin bundle
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
KcKEgPzAUVg=
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [MERGE] libsquid-compat shuffling pt 1

Henrik Nordström
hnordstrom has voted abstain.
Status is now: Waiting
Comment:
No opinion on this one.

For details, see:
http://bundlebuggy.aaronbentley.com/project/squid/request/%3C4976E2A2.6010004%40treenet.co.nz%3E
Project: Squid
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [MERGE] libsquid-compat shuffling pt 1

Alex Rousskov
In reply to this post by Amos Jeffries
Alex Rousskov has voted resubmit.
Status is now: Resubmit
Comment:
s/libsquid-compat/compat/g

I think we should be including headers as compat/foo/... and not just
foo/...  -I directives need to be adjusted for that to happen. This will
help with future moves of the compat directory and with avoiding file
name clashes.

Why prefix file names with squid_? There should not be conflicts if we
#include headers with compat/os/... path.

Should the compat directory be moved to src/? Or are we going to do that
after the rest of Squid code not in src/ moved to src/?

BTW, is there new code here or just renaming/moving stuff around? In
other words, do we need to review the code?

For details, see:
http://bundlebuggy.aaronbentley.com/project/squid/request/%3C4976E2A2.6010004%40treenet.co.nz%3E
Project: Squid
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [MERGE] libsquid-compat shuffling pt 1

Amos Jeffries
Administrator
Alex Rousskov wrote:
> Alex Rousskov has voted resubmit.
> Status is now: Resubmit
> Comment:
> s/libsquid-compat/compat/g
>
> I think we should be including headers as compat/foo/... and not just
> foo/...  -I directives need to be adjusted for that to happen. This will
> help with future moves of the compat directory and with avoiding file
> name clashes.

We discussed using "compat/" before.
There are about 1150 possible reasons to add "squid-" to the directory name:
http://www.google.co.nz/search?hl=en&q=%2Fcompat%2Fcompat.h

Linking to the full name is a good idea though.

>
> Why prefix file names with squid_? There should not be conflicts if we
> #include headers with compat/os/... path.

That was the previous naming (squid_windows).

I've found a handful of places using just os/freebd.h for example. But
if we use the squid-compat/os/ it seems safe.


>
> Should the compat directory be moved to src/? Or are we going to do that
> after the rest of Squid code not in src/ moved to src/?

Definitely not at this point. I started with it src/compat/ and had to
re-do the location so the helpers, and tools, and legacy bits could use
it. And due to some header clashes as mentioned above.

One day maybe, but I don't think it likely. This is like an OS API layer
used by Squid. Should not be mistaken for part of the squid codebase itself.

>
> BTW, is there new code here or just renaming/moving stuff around? In
> other words, do we need to review the code?

It's all just shuffling in this one. But code dependencies and build
integrity on non-linux have not been verified.

I'd like at lest a build-cycle on any other OS you may have access to.

>
> For details, see:
> http://bundlebuggy.aaronbentley.com/project/squid/request/%3C4976E2A2.6010004%40treenet.co.nz%3E 
>
> Project: Squid

Amos
--
Please be using
   Current Stable Squid 2.7.STABLE6 or 3.0.STABLE13
   Current Beta Squid 3.1.0.5
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [MERGE] libsquid-compat shuffling pt 1

Alex Rousskov
On 02/06/2009 08:02 PM, Amos Jeffries wrote:
> Alex Rousskov wrote:
>> s/libsquid-compat/compat/g
>>
>> I think we should be including headers as compat/foo/... and not just
>> foo/...  -I directives need to be adjusted for that to happen. This
>> will help with future moves of the compat directory and with avoiding
>> file name clashes.
> We discussed using "compat/" before.
Yes. Did we reach an agreement that squid_compat is required?
> There are about 1150 possible reasons to add "squid-" to the directory
> name:
> http://www.google.co.nz/search?hl=en&q=%2Fcompat%2Fcompat.h
Or about 1150 reasons why it is not necessary (since most of those
projects probably work fine and I am sure many of them do not prefix
directories with a project name). Header clashes are most likely the
result of wrong compiler options. Think about it: Millions of projects
are using non-unique header names (even without any directories) and
build fine. The preprocessor is designed to handle conflicts like this
if you give it the right options.

The problem is real only when you start installing headers. Squid does not.
> This is like an OS API layer used by Squid. Should not be mistaken for
> part of the squid codebase itself.
I think this code is a part of our codebase, but let's postpone that
part of the debate.

Thank you,

Alex.
P.S. I commented on the latest submission before I saw this message; sorry.

Loading...