File 10845.patch of Package squid-beta

---------------------
PatchSet 10845 
Date: 2007/06/10 12:07:28
Author: hno
Branch: HEAD
Tag: (none) 
Log:
Clean up configure magics selecting which comm loop to use, promote epoll to stable

This is basically a copy from Squid-2, making configure a bit smarter
in selecting which comm loop to use, and automatically enabling epoll
if it seems usable.

kqueue is still not activated automatically even if defected as the
comm_kqueue implementation is still experimental and known to have issues

Members: 
	configure.in:1.456->1.457 

Index: squid3/configure.in
===================================================================
RCS file: /cvsroot/squid/squid3/configure.in,v
retrieving revision 1.456
retrieving revision 1.457
diff -u -r1.456 -r1.457
--- squid3/configure.in	2 Jun 2007 23:46:00 -0000	1.456
+++ squid3/configure.in	10 Jun 2007 12:07:28 -0000	1.457
@@ -1060,6 +1060,7 @@
   yes)
     echo "Forcing poll() to be enabled"
     ac_cv_func_poll='yes'
+    SELECT_TYPE="poll"
     ;;
   no)
     echo "Forcing poll() to be disabled"
@@ -1078,6 +1079,7 @@
   yes)
     echo "Forcing select() to be enabled"
     ac_cv_func_select='yes'
+    SELECT_TYPE="select"
     ;;
   no)
     echo "Forcing select() to be disabled"
@@ -1096,6 +1098,7 @@
   yes)
     echo "Forcing kqueue() to be enabled"
     ac_cv_func_kqueue='yes'
+    SELECT_TYPE="kqueue"
     ;;
   no)
     echo "Forcing kqueue() to be disabled"
@@ -1113,11 +1116,12 @@
   case "$enableval" in
   yes)
     echo "Forcing epoll() to be enabled"
-    ac_cv_func_epoll='yes'
+    ac_cv_func_epoll_ctl='yes'
+    SELECT_TYPE="epoll"
     ;;
   no)
     echo "Forcing epoll() to be disabled"
-    ac_cv_func_epoll='no'
+    ac_cv_func_epoll_ctl='no'
   ;;
 esac
 ])
@@ -2569,6 +2573,7 @@
 	gettimeofday \
 	htobe16 \
 	htole16 \
+	kqueue\
 	lrand48 \
 	mallinfo \
 	mallocblksize \
@@ -2612,32 +2617,64 @@
 	vsnprintf \
 )
 
+# Check for libepoll
+EPOLL_LIB=
+AC_CHECK_LIB(epoll, epoll_ctl, [EPOLL_LIBS="-lepoll"])
+AC_SUBST(EPOLL_LIBS)
+
+# Check for epoll_ctl, may need -lepoll
+SAVED_LIBS="$LIBS"
+LIBS="$LIBS $LIB_EPOLL"
+AC_CHECK_FUNCS(epoll_ctl)
+LIBS="$SAVED_LIBS"
+
+dnl Verify that epoll really works
+if test $ac_cv_func_epoll_ctl = yes; then
+  AC_CACHE_CHECK(if epoll works, ac_cv_epoll_works,
+    AC_TRY_RUN([
+#include <sys/epoll.h>
+#include <stdlib.h>
+#include <stdio.h>
+int main(int argc, char **argv)
+{
+    int fd = epoll_create(256);
+    if (fd < 0) {
+	perror("epoll_create:");
+	exit(1);
+    }
+    exit(0);
+}
+    ], [ac_cv_epoll_works=yes], [ac_cv_epoll_works=no]))
+  if test ac_cv_epoll_works = no && test ac_force_epoll = yes; then
+	echo "Error - no epoll found";
+	echo "Try running 'sh ./scripts/get_epoll-lib.sh'";
+	echo "then run configure again";
+	exit -1
+  fi
+fi
+
 dnl Magic which checks whether we are forcing a type of comm loop we
 dnl are actually going to (ab)use
  
 dnl Actually do the define magic now
 dnl mostly ripped from squid-commloops, thanks to adrian and benno
 
-if test "$ac_cv_func_kqueue" = "yes" ; then
-	SELECT_TYPE="kqueue"
-	AC_DEFINE(USE_KQUEUE,1,[Use kqueue() for the IO loop])
-elif test "$ac_cv_func_epoll" = "yes" ; then
+if test -n "$SELECT_TYPE"; then
+	: # Already decided above. Nothing to do here
+elif test "$ac_cv_epoll_works" = "yes" ; then
 	SELECT_TYPE="epoll"
-	AC_DEFINE(USE_EPOLL,1,[Use epoll() for the IO loop])
-	AC_CHECK_LIB(epoll, epoll_create, [EPOLL_LIBS="-lepoll"])
-	AC_SUBST(EPOLL_LIBS)
+#comm_kqueue a bit broken. Don't enable automatically
+#elif test "$ac_cv_func_kqueue" = "yes" ; then
+#	SELECT_TYPE="kqueue"
 elif test "$ac_cv_func_poll" = "yes" ; then
         SELECT_TYPE="poll"
-        AC_DEFINE(USE_POLL,1,[Use poll() for the IO loop])
 elif test "$ac_cv_func_select" = "yes" ; then
 	case "$host_os" in
 	mingw|mingw32)
 	        SELECT_TYPE="select_win32"
-	        AC_DEFINE(USE_SELECT_WIN32,1,[Use Winsock select() for the IO loop])
 		;;
 	*)
 	        SELECT_TYPE="select"
-	        AC_DEFINE(USE_SELECT,1,[Use select() for the IO loop])
 		;;
 	esac
 else
@@ -2646,7 +2683,34 @@
         SELECT_TYPE="select"
         AC_DEFINE(USE_SELECT,1)
 fi
-echo "Using ${SELECT_TYPE} for select loop."
+
+echo "Using ${SELECT_TYPE} for the IO loop."
+
+AM_CONDITIONAL([USE_POLL], [test $SELECT_TYPE = poll])
+AM_CONDITIONAL([USE_EPOLL], [test $SELECT_TYPE = epoll])
+AM_CONDITIONAL([USE_SELECT], [test $SELECT_TYPE = select])
+AM_CONDITIONAL([USE_SELECT_SIMPLE], [test $SELECT_TYPE = select_simple])
+AM_CONDITIONAL([USE_SELECT_WIN32], [test $SELECT_TYPE = select_win32])
+AM_CONDITIONAL([USE_KQUEUE], [test $SELECT_TYPE = kqueue])
+AM_CONDITIONAL([USE_DEVPOLL], [test $SELECT_TYPE = devpoll])
+
+case $SELECT_TYPE in
+epoll)
+	AC_DEFINE(USE_EPOLL,1,[Use epoll() for the IO loop])
+	;;
+poll)
+        AC_DEFINE(USE_POLL,1,[Use poll() for the IO loop])
+	;;
+kqueue)
+	AC_DEFINE(USE_KQUEUE,1,[Use kqueue() for the IO loop])
+	;;
+select_win32)
+	AC_DEFINE(USE_SELECT_WIN32,1,[Use Winsock select() for the IO loop])
+	;;
+select)
+	AC_DEFINE(USE_SELECT,1,[Use select() for the IO loop])
+	;;
+esac
 
 
 dnl Yay!  Another Linux brokenness.  Its not good enough