]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
DiskIO detection fixes and auto-enable
authorAmos Jeffries <squid3@treenet.co.nz>
Tue, 1 Sep 2009 11:22:39 +0000 (23:22 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Tue, 1 Sep 2009 11:22:39 +0000 (23:22 +1200)
1  2 
configure.in
doc/release-notes/release-3.1.sgml

diff --cc configure.in
index dc6030343c80ed92801661f90419a4a55d7318cd,b58dd17e421cd836161cf50ed10ab4df9806942b..5e2bd1a3e067473b974256250a9f4dc8173b000e
@@@ -433,6 -420,242 +420,242 @@@ if test "$with_dl" = "yes"; the
    AC_MSG_NOTICE([With dl])
  fi
  
 -      AC_ARG_WITH(pthreads,AS_HELP_STRING([--with-pthreads],[Use POSIX Threads]))
+ AC_ARG_ENABLE(disk-io,
+   AS_HELP_STRING([--enable-disk-io="list of modules"],[Build support for the list of disk I/O modules.
+                   Set without a value or omitted, all available modules will be built.
+                   See src/DiskIO for a list of available modules, or
+                   Programmers Guide section on DiskIO
+                   for details on how to build your custom disk module]),
+ [ case $enableval in
+   yes)
+       for dir in $srcdir/src/DiskIO/*; do
+           module="`basename $dir`"
+           if test -d "$dir" && test "$module" != CVS; then
+               AC_MSG_NOTICE([Autodetected $module DiskIO module])
+               MAYBE_DISK_MODULES="$MAYBE_DISK_MODULES $module"
+           fi
+       done
+       AC_DEFINE(USE_DISKIO,1,[DiskIO modules are expected to be available.])
+       ;;
+   no)
+       AC_DEFINE(USE_DISKIO,0,[DiskIO modules are expected to be available.])
+       ;;
+   *)
+       MAYBE_DISK_MODULES=" `echo $enableval| sed -e 's/,/ /g;s/  */ /g'` "
+       AC_DEFINE(USE_DISKIO,1,[DiskIO modules are expected to be available.])
+       ;;
+   esac
+ ],
+ [ if test -z "$MAYBE_DISK_MODULES"; then
+   AC_MSG_NOTICE([Enabling all available DiskIO modules (default)...])
+   for dir in $srcdir/src/DiskIO/*; do
+     module="`basename $dir`"
+     if test -d "$dir" && test "$module" != CVS; then
+       AC_MSG_NOTICE([Autodetected $module DiskIO module])
+       MAYBE_DISK_MODULES="$MAYBE_DISK_MODULES $module"
+     fi
+   done
+   AC_DEFINE(USE_DISKIO,1,[DiskIO modules are expected to be available.])
+ fi ])
+ dnl Some autoconf.h defines we might enable later...
+ AC_DEFINE(USE_DISKIO_AIO, 0, [Whether POSIX AIO support is needed. Automatic])
+ AC_DEFINE(USE_DISKIO_DISKTHREADS, 0, [Whether pthreads support is needed. Automatic])
+ USE_AIOPS_WIN32=0
+ use_aio=
+ use_diskthreads=
+ dnl Setup the module paths etc.
+ FOUND_DISKIO_AIO=
+ FOUND_DISKIO_BLOCKING=
+ FOUND_DISKIO_DISKDAEMON=
+ FOUND_DISKIO_DISKTHREADS=
+ DISK_LIBS=
+ DISK_MODULES=
+ DISK_LINKOBJS=
+ for module in $MAYBE_DISK_MODULES none; do
+   if test "$module" = "none"; then
+       continue
+   fi
+   if ! test -d $srcdir/src/DiskIO/$module; then
+     AC_MSG_ERROR(disk-io $module does not exist)
+   fi
+   case "$module" in
+     DiskDaemon)
+       if test "$FOUND_DISKIO_DISKDAEMON" = "yes" ; then
+         AC_MSG_ERROR([DiskIO DiskDaemon module listed twice.])
+       fi
+       FOUND_DISKIO_DISKDAEMON="yes"
+       AC_MSG_NOTICE([Enabling DiskDaemon DiskIO module])
+       DISK_LIBS="$DISK_LIBS libDiskDaemon.a"
+       DISK_MODULES="$DISK_MODULES DiskDaemon"
+       DISK_PROGRAMS="$DISK_PROGRAMS DiskIO/DiskDaemon/diskd"
+       DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/DiskDaemon/DiskDaemonDiskIOModule.o"
+       ;;
+     DiskThreads)
+       if test "$FOUND_DISKIO_DISKTHREADS" = "yes" ; then
+         AC_MSG_ERROR([DiskIO DiskThreads  module listed twice.])
+       fi
+       FOUND_DISKIO_DISKTHREADS="yes"
+       use_diskthreads="yes"
+       LIBPTHREADS=
+       SAVE_SQUID_CFLAGS="$SQUID_CFLAGS"
+       SAVE_SQUID_CXXFLAGS="$SQUID_CXXFLAGS"
++      AC_ARG_WITH(pthreads,AS_HELP_STRING([--without-pthreads],[Disable POSIX Threads]))
+       if test "$with_pthreads" != "no"; then
+               dnl TODO: this needs to be extended to handle more systems and better
+               dnl REF: http://www.openldap.org/lists/openldap-bugs/200006/msg00070.html
+               dnl REF: http://autoconf-archive.cryp.to/acx_pthread.html
+               case "$host" in
+               mingw|mingw32)
+                       USE_AIOPS_WIN32=1
+                       AC_MSG_NOTICE([Windows threads support automatically enabled])
+                       ;;
+               i386-unknown-freebsd*)
+                       SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
+                       SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
+                       if test "$GCC" = "yes" ; then
+                               if test -z "$PRESET_LDFLAGS"; then
+                                       LDFLAGS="$LDFLAGS -pthread"
+                               fi
+                       fi
+                       ;;
+               *-solaris2.*)
+                   if test "$GCC" = "yes" ; then
+                       SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT -pthreads"
+                       SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT -pthreads"
+                       AC_CHECK_LIB(pthread, main,[LIBPTHREADS="-lpthread"],
+                         [ AC_MSG_NOTICE(pthread library required but cannot be found.)
+                           use_diskthreads="no"
+                         ])
+                   else
+                       dnl test for -lpthread first. libc version is a stub apparently on Solaris.
+                       SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT -lpthread"
+                       SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT -lpthread"
+                       AC_CHECK_LIB(pthread, main,[LIBPTHREADS="-lpthread"],
+                         [ SQUID_CFLAGS="$SAVE_SQUID_CFLAGS -D_REENTRANT -lpthread -mt"
+                           SQUID_CXXFLAGS="$SAVE_SQUID_CXXFLAGS -D_REENTRANT -lpthread -mt"
+                               AC_CHECK_LIB(pthread, main,[LIBPTHREADS="-lpthread"],
+                             [ AC_MSG_NOTICE(pthread library required but cannot be found.)
+                               use_diskthreads="no"
+                             ])
+                         ])
+                       fi
+                       ;;
+               *)
+                       SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
+                       SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
+                       AC_CHECK_LIB(pthread, main,[DISK_LIBS="$DISK_LIBS -lpthread"],
+                               [ AC_MSG_NOTICE(pthread library required but cannot be found.)
+                                 use_diskthreads="no"
+                               ])
+                       ;;
+               esac
+       else
+               AC_MSG_NOTICE([Native pthreads support manually disabled.])
+               use_diskthreads="no"
+       fi
+       if test "$use_diskthreads" = "yes" ; then
+         AC_DEFINE(USE_DISKIO_DISKTHREADS, 1, [Whether pthreads support is needed. Automatic])
+         AC_MSG_NOTICE([Enabling DiskThreads DiskIO module])
+         DISK_LIBS="$DISK_LIBS $LIBPTHREADS libDiskThreads.a"
+         DISK_MODULES="$DISK_MODULES DiskThreads"
+         DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/DiskThreads/DiskThreadsDiskIOModule.o"
+       else
+         AC_DEFINE(USE_DISKIO_DISKTHREADS, 0, [Whether pthreads support is needed. Automatic])
+         AC_MSG_NOTICE([Native pthreads support disabled. DiskThreads module automaticaly disabled.])
+         SQUID_CFLAGS="$SAVE_SQUID_CFLAGS"
+         SQUID_CXXFLAGS="$SAVE_SQUID_CXXFLAGS"
+       fi
+       ;;
+     AIO)
+       if test "$FOUND_DISKIO_AIO" = "yes" ; then
+         AC_MSG_ERROR([DiskIO AIO module listed twice.])
+       fi
+       FOUND_DISKIO_AIO="yes"
+       dnl Check for POSIX AIO availability
+       use_aio="yes"
+       LIBAIO=
+       AC_ARG_WITH(aio, AS_HELP_STRING([--without-aio],[Do not use POSIX AIO. Default: auto-detect]))
+       if test "$with_aio" != "no"; then
+           have_aio_header=no
+           AC_CHECK_HEADERS(aio.h,[have_aio_header=yes])
+           dnl On some systems POSIX AIO functions are in librt
+           dnl On some systems POSIX AIO functions are in libaio
+           AC_CHECK_LIB(rt,aio_read,[LIBAIO="-lrt"],AC_CHECK_LIB(aio,aio_read,[LIBAIO="-laio"],[]))
+         dnl Enable AIO if the library and headers are found
+         if test "$LIBAIO" != "" && test "$have_aio_header" = "yes"; then
+           AC_MSG_NOTICE([Native POSIX AIO support detected.])
+           use_aio="yes"
+         else
+           dnl Windows does things differently. We provide wrappers.
+           dnl TODO: Windows really needs its own DiskIO module or its Overlaped IO
+           case "$host_os" in
+             mingw|mingw32)
+               use_aio="yes"
+               AC_MSG_NOTICE([Windows being built. Maybe-enable POSIX AIO.])
+             ;;
+             *)
+               AC_MSG_NOTICE([Native POSIX AIO support not detected. AIO automatically disabled.])
+               use_aio="no"
+             ;;
+           esac
+         fi
+       else
+         AC_MSG_NOTICE([POSIX AIO support manually disabled.])
+         use_aio="no"
+       fi
+       dnl Use the POSIX AIO pieces if we actually need them.
+       if test "$use_aio" = "yes" ; then
+         AC_DEFINE(USE_DISKIO_AIO, 1, [Whether POSIX AIO support is needed. Automatic])
+         DISK_MODULES="$DISK_MODULES AIO"
+         DISK_LIBS="$DISK_LIBS $LIBAIO libAIO.a"
+         DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/AIO/AIODiskIOModule.o"
+         case "$host_os" in
+           mingw|mingw32)
+               USE_AIO_WIN32=1
+               AC_MSG_NOTICE([Replacing AIO DiskIO module with: Windows overlapped I/O support])
+               ;;
+           *)
+               AC_MSG_NOTICE([Enabling AIO DiskIO module])
+               ;;
+         esac
+       else
+         AC_MSG_NOTICE([AIO DiskIO Module disabled. Missing POSIX AIO support.])
+       fi
+       ;;
+     Blocking)
+       if test "$FOUND_DISKIO_BLOCKING" = "yes" ; then
+         AC_MSG_ERROR([DiskIO Blocking module listed twice.])
+       fi
+       FOUND_DISKIO_BLOCKING="yes"
+       AC_MSG_NOTICE([Enabling Blocking DiskIO module])
+       DISK_LIBS="$DISK_LIBS libBlocking.a"
+       DISK_MODULES="$DISK_MODULES Blocking"
+       DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/Blocking/BlockingDiskIOModule.o"
+       ;;
+     *)
+       AC_MSG_NOTICE([Enabling $module DiskIO module])
+       DISK_LIBS="$DISK_LIBS lib${module}.a"
+       DISK_MODULES="$DISK_MODULES ${module}"
+       DISK_LINKOBJS="$DISK_LINKOBJS DiskIO/${module}/${module}DiskIOModule.o"
+       ;;
+     esac
+ done
+ AC_MSG_NOTICE([IO Modules built: $DISK_MODULES])
+ AC_SUBST(DISK_MODULES)
+ AC_SUBST(DISK_LIBS)
+ AC_SUBST(DISK_PROGRAMS)
+ AC_SUBST(DISK_LINKOBJS)
+ AM_CONDITIONAL([USE_AIOPS_WIN32], [test "$USE_AIOPS_WIN32" = 1])
+ AM_CONDITIONAL([USE_AIO_WIN32], [test "$USE_AIO_WIN32" = 1])
+ dnl Check what Storage formats are wanted.
+ dnl This version will error out with a message saying why if a required DiskIO is missing.
  AC_ARG_ENABLE(storeio,
    AS_HELP_STRING([--enable-storeio="list of modules"],[Build support for the list of store I/O modules.
                    The default is only to build the "ufs" module.
index eebf54d64c190f1656c98c34a9e925cb0ef4fa3f,3bf9a8f1c09e9ced953e476af978bf6bd0e8d3ef..5b3e2f9a9a312fae05446ef6b5de9d3f5ca95fe3
@@@ -1521,6 -1521,10 +1521,14 @@@ This section gives an account of those 
        <p>Better support for Linux using the external DNS helper.
             The helper will now compile and work with dns_nameservers on more variants of Linux than previously.
  
+       <tag>--with-aio</tag>
+       <p>Deprecated. POSIX AIO is now auto-detected and enabled.
+          Use --without-aio to disable, but only if you really have to.
++      <tag>--with-pthreads</tag>
++      <p>Deprecated. pthreads library is now auto-detected and enabled.
++         Use --without-pthreads to disable, but only if you really have to.
++
  </descrip>
  </p>