From: Amos Jeffries Date: Tue, 1 Sep 2009 11:22:39 +0000 (+1200) Subject: DiskIO detection fixes and auto-enable X-Git-Tag: SQUID_3_2_0_1~753 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f62a607f283013e3f134230170c0ae53cf9267b1;p=thirdparty%2Fsquid.git DiskIO detection fixes and auto-enable --- f62a607f283013e3f134230170c0ae53cf9267b1 diff --cc configure.in index dc6030343c,b58dd17e42..5e2bd1a3e0 --- a/configure.in +++ b/configure.in @@@ -433,6 -420,242 +420,242 @@@ if test "$with_dl" = "yes"; the AC_MSG_NOTICE([With dl]) fi + 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([--with-pthreads],[Use POSIX Threads])) ++ 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. diff --cc doc/release-notes/release-3.1.sgml index eebf54d64c,3bf9a8f1c0..5b3e2f9a9a --- a/doc/release-notes/release-3.1.sgml +++ b/doc/release-notes/release-3.1.sgml @@@ -1521,6 -1521,10 +1521,14 @@@ This section gives an account of those

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. + --with-aio +

Deprecated. POSIX AIO is now auto-detected and enabled. + Use --without-aio to disable, but only if you really have to. + ++ --with-pthreads ++

Deprecated. pthreads library is now auto-detected and enabled. ++ Use --without-pthreads to disable, but only if you really have to. ++