[IRC-Dev CVS] [CVS] Module ircd-ircdev: Change committed
Brought to you by:
zolty
From: Toni G. <zo...@us...> - 2003-11-01 17:19:48
|
CVSROOT : /cvsroot/irc-dev Module : ircd-ircdev Commit time: 2003-11-01 17:19:46 UTC Modified files: .cvsignore ChangeLog ChangeLog.es aclocal.m4 config.h.in configure configure.in include/channel.h include/patchlevel.h ircd/IPcheck.c ircd/Makefile.in ircd/channel.c ircd/gline.c ircd/ircd_events.c ircd/m_whois.c Added files: TODO TODO.es ircd/.cvsignore ircd/engine_epoll.c Log message: Author: zoltan <zo...@ir...> Log message: 2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha3 * Implementacion del engine de epoll(). * Actualizacion al u2.10.11.05 de Undernet. ---------------------- diff included ---------------------- Index: ircd-ircdev/.cvsignore diff -u ircd-ircdev/.cvsignore:1.1.1.1 ircd-ircdev/.cvsignore:1.2 --- ircd-ircdev/.cvsignore:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/.cvsignore Sat Nov 1 09:19:35 2003 @@ -5,3 +5,4 @@ stamp-h config.status config.cache +autom4te.cache Index: ircd-ircdev/ChangeLog diff -u ircd-ircdev/ChangeLog:1.3 ircd-ircdev/ChangeLog:1.4 --- ircd-ircdev/ChangeLog:1.3 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/ChangeLog Sat Nov 1 09:19:35 2003 @@ -1,10 +1,14 @@ # # ChangeLog for ircd-ircdev # -# $Id: ChangeLog,v 1.3 2003/11/01 15:26:45 zolty Exp $ +# $Id: ChangeLog,v 1.4 2003/11/01 17:19:35 zolty Exp $ # # Insert new changes at beginning of the change list. # +2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha3 + * Implementation epoll() engine. + * Upgrade to Undernet u2.10.11.05. + 2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha2 * New format ircd.conf. Index: ircd-ircdev/ChangeLog.es diff -u ircd-ircdev/ChangeLog.es:1.3 ircd-ircdev/ChangeLog.es:1.4 --- ircd-ircdev/ChangeLog.es:1.3 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/ChangeLog.es Sat Nov 1 09:19:35 2003 @@ -1,12 +1,16 @@ # # Log de Cambios para ircd-ircdev # -# $Id: ChangeLog.es,v 1.3 2003/11/01 15:26:45 zolty Exp $ +# $Id: ChangeLog.es,v 1.4 2003/11/01 17:19:35 zolty Exp $ # # Insertar los nuevos cambios al principio de esta lista de cambios. # +2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha3 + * Implementacion del engine de epoll(). + * Actualizacion al u2.10.11.05 de Undernet. + 2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha2 - * Nuevo formato del ircd.conf + * Nuevo formato del ircd.conf. 2003-10-07 Toni Garcia <zo...@ir...> 1.0.alpha1 * Limpieza en el 005. Index: ircd-ircdev/TODO diff -u /dev/null ircd-ircdev/TODO:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/TODO Sat Nov 1 09:19:35 2003 @@ -0,0 +1,8 @@ +# +# TODO for ircd-ircdev +# +# $Id: TODO,v 1.1 2003/11/01 17:19:35 zolty Exp $ +# +# Insert new entraces at beginning of the TODO list. +# + Index: ircd-ircdev/TODO.es diff -u /dev/null ircd-ircdev/TODO.es:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/TODO.es Sat Nov 1 09:19:35 2003 @@ -0,0 +1,12 @@ +# +# TODO para ircd-ircdev +# +# $Id: TODO.es,v 1.1 2003/11/01 17:19:35 zolty Exp $ +# +# Insertar las nuevas entradas al principio de la lista TODO. +# + +1/Nov/2003 +Bug en el configure al elegir entre poll() y epoll() en linux que tienen fuentes pero no estan activados. + +Bug en las U-lines (uworld y jupes) Index: ircd-ircdev/aclocal.m4 diff -u ircd-ircdev/aclocal.m4:1.1.1.1 ircd-ircdev/aclocal.m4:1.2 --- ircd-ircdev/aclocal.m4:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/aclocal.m4 Sat Nov 1 09:19:35 2003 @@ -1,4 +1,4 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4 +dnl aclocal.m4 generated automatically by aclocal 1.4-p4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation @@ -225,6 +225,825 @@ AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, , AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))) ]) + +# lib-prefix.m4 serial 3 (gettext-0.12.2) +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +# lib-link.m4 serial 4 (gettext-0.12) +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +# lib-ld.m4 serial 2 (gettext-0.12) +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + acl_cv_prog_gnu_ld=yes +else + acl_cv_prog_gnu_ld=no +fi]) +with_gnu_ld=$acl_cv_prog_gnu_ld +]) + +dnl From libtool-1.4. Sets the variable LD. +AC_DEFUN([AC_LIB_PROG_LD], +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) # serial 1 Index: ircd-ircdev/config.h.in diff -u ircd-ircdev/config.h.in:1.1.1.1 ircd-ircdev/config.h.in:1.2 --- ircd-ircdev/config.h.in:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/config.h.in Sat Nov 1 09:19:35 2003 @@ -1,4 +1,4 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ +/* config.h.in. Generated from configure.in by autoheader. */ #ifndef INCLUDED_config_h #define INCLUDED_config_h /* @@ -19,34 +19,11 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: config.h.in,v 1.1.1.1 2003/09/08 10:34:25 zolty Exp $ + * $Id: config.h.in,v 1.2 2003/11/01 17:19:35 zolty Exp $ */ -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef gid_t - -/* Define if system calls automatically restart after interruption - by a signal. */ -#undef HAVE_RESTARTABLE_SYSCALLS - -/* Define to `unsigned' if <sys/types.h> doesn't define. */ -#undef size_t - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if you can safely include both <sys/time.h> and <time.h>. */ -#undef TIME_WITH_SYS_TIME - -/* Define if your <sys/time.h> declares struct tm. */ -#undef TM_IN_SYS_TIME - -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef uid_t - -/* Define if your processor stores words with the most significant - byte first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define if you have the setrlimit function */ +#undef HAVE_SETRLIMIT /* Define one of these, depending on wether you have * POSIX, BSD or SYSV non-blocking stuff @@ -69,79 +46,207 @@ #undef u_int16_t #undef u_int32_t -/* The number of bytes in a int. */ -#undef SIZEOF_INT +/* Define to force the poll() function to be used */ +#undef USE_POLL +/* Define to enable the /dev/poll engine */ +#undef USE_DEVPOLL +/* Define to enable the kqueue engine */ +#undef USE_KQUEUE -/* The number of bytes in a long. */ -#undef SIZEOF_LONG +/* Define to enable various debugging code in the server; DO NOT USE + * THIS ON PRODUCTION SERVERS ON PAIN OF DELINKING! + */ +#undef DEBUGMODE -/* The number of bytes in a short. */ -#undef SIZEOF_SHORT +/* Define this to DISable various assertion checking statements */ +#undef NDEBUG -/* The number of bytes in a void *. */ -#undef SIZEOF_VOID_P +/* Define to force certain critical functions to be inlined */ +#undef FORCEINLINE + +/* Define to be the local domain name for some statics gathering */ +#undef DOMAINNAME + +/* Define to be the name of the executable to be executed on /restart */ +#undef SPATH -/* Define if you have the getrusage function. */ +/* Define to be the path to the data directory */ +#undef DPATH + +/* Define to be the name of the configuration file */ +#undef CPATH + +/* Define to be the name of the debugging log file */ +#undef LPATH + +/* Define to be the maximum number of network connections */ +#undef MAXCONNECTIONS + + +/* Configuration file name */ +#undef CPATH + +/* Enable debugging code */ +#undef DEBUGMODE + +/* Domain name to be used for some statistics gathering */ +#undef DOMAINNAME + +/* Path to data directory */ +#undef DPATH + +/* Force inlining for a few critical functions */ +#undef FORCEINLINE + +/* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE -/* Define if you have the kqueue function. */ +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `kqueue' function. */ #undef HAVE_KQUEUE -/* Define if you have the setrlimit function. */ -#undef HAVE_SETRLIMIT +/* Define to 1 if you have the `nsl' library (-lnsl). */ +#undef HAVE_LIBNSL -/* Define if you have the times function. */ -#undef HAVE_TIMES +/* Define to 1 if you have the `resolv' library (-lresolv). */ +#undef HAVE_LIBRESOLV + +/* Define to 1 if you have the `socket' library (-lsocket). */ +#undef HAVE_LIBSOCKET -/* Define if you have the <poll.h> header file. */ +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the <poll.h> header file. */ #undef HAVE_POLL_H -/* Define if you have the <sys/devpoll.h> header file. */ +/* Define to 1 if system calls automatically restart after interruption by a + signal. */ +#undef HAVE_RESTARTABLE_SYSCALLS + +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/devpoll.h> header file. */ #undef HAVE_SYS_DEVPOLL_H -/* Define if you have the <sys/event.h> header file. */ +/* Define to 1 if you have the <sys/epoll.h> header file. */ +#undef HAVE_SYS_EPOLL_H + +/* Define to 1 if you have the <sys/event.h> header file. */ #undef HAVE_SYS_EVENT_H -/* Define if you have the nsl library (-lnsl). */ -#undef HAVE_LIBNSL +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H -/* Define if you have the socket library (-lsocket). */ -#undef HAVE_LIBSOCKET +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H -/* Specify whether or not to use poll() */ -#undef USE_POLL +/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H -/* Enable debugging code */ -#undef DEBUGMODE +/* Define to 1 if you have the `times' function. */ +#undef HAVE_TIMES + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Path to debugging log file */ +#undef LPATH + +/* Maximum number of network connections */ +#undef MAXCONNECTIONS /* Disable assertions */ #undef NDEBUG -/* Force inlining for a few critical functions */ -#undef FORCEINLINE +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of a `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of a `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of a `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Path to executable for restarts */ +#undef SPATH + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#undef TIME_WITH_SYS_TIME + +/* Define to 1 if your <sys/time.h> declares `struct tm'. */ +#undef TM_IN_SYS_TIME /* Define to enable the /dev/poll engine */ #undef USE_DEVPOLL +/* Define to enable the epoll engine */ +#undef USE_EPOLL + /* Define to enable the kqueue engine */ #undef USE_KQUEUE -/* Domain name to be used for some statistics gathering */ -#undef DOMAINNAME +/* Specify whether or not to use poll() */ +#undef USE_POLL -/* Path to executable for restarts */ -#undef SPATH +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN -/* Path to data directory */ -#undef DPATH +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef gid_t -/* Configuration file name */ -#undef CPATH +/* Define to `short' if <sys/types.h> does not define. */ +#undef int16_t -/* Path to debugging log file */ -#undef LPATH +/* Define to `long' if <sys/types.h> does not define. */ +#undef int32_t -/* Maximum number of network connections */ -#undef MAXCONNECTIONS +/* Define to `unsigned' if <sys/types.h> does not define. */ +#undef size_t + +/* Define to `unsigned short' if <sys/types.h> does not define. */ +#undef u_int16_t + +/* Define to `unsigned long' if <sys/types.h> does not define. */ +#undef u_int32_t +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef uid_t #endif /* INCLUDED_config_h */ Index: ircd-ircdev/configure diff -u ircd-ircdev/configure:1.2 ircd-ircdev/configure:1.3 --- ircd-ircdev/configure:1.2 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/configure Sat Nov 1 09:19:35 2003 @@ -855,6 +855,7 @@ --disable-inlines Disable inlining for a few critical functions --disable-devpoll Disable the /dev/poll-based engine --disable-kqueue Disable the kqueue-based engine + --disable-epoll Disable the epoll-based engine Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -3641,7 +3642,8 @@ -for ac_header in poll.h sys/devpoll.h sys/event.h + +for ac_header in poll.h sys/devpoll.h sys/event.h sys/epoll.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then @@ -7201,6 +7203,11 @@ echo "$as_me:$LINENO: result: Linux ($host) found." >&5 echo "${ECHO_T}Linux ($host) found." >&6 unet_poll_syscall=yes +# if test x"$ac_cv_header_sys_epoll_h" = xyes; then +# unet_poll_syscall=no +# else +# unet_poll_syscall=yes +# fi OSDEP_C=os_linux.c ;; @@ -7518,6 +7525,37 @@ ENGINE_C="engine_kqueue.c $ENGINE_C" fi +echo "$as_me:$LINENO: checking whether to enable the epoll event engine" >&5 +echo $ECHO_N "checking whether to enable the epoll event engine... $ECHO_C" >&6 +# Check whether --enable-epoll or --disable-epoll was given. +if test "${enable_epoll+set}" = set; then + enableval="$enable_epoll" + unet_cv_enable_epoll=$enable_epoll +else + if test "${unet_cv_enable_epoll+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + unet_cv_enable_epoll=yes +fi + +fi; + +if test x"$ac_cv_header_sys_epoll_h" = xno -o x"$ac_cv_func_epoll" = xno; then + unet_cv_enable_epoll=no +fi + +echo "$as_me:$LINENO: result: $unet_cv_enable_epoll" >&5 +echo "${ECHO_T}$unet_cv_enable_epoll" >&6 + +if test x"$unet_cv_enable_epoll" != no; then + +cat >>confdefs.h <<\_ACEOF +#define USE_EPOLL +_ACEOF + + ENGINE_C="engine_epoll.c $ENGINE_C" + fi + echo "$as_me:$LINENO: checking what name to give the symlink" >&5 echo $ECHO_N "checking what name to give the symlink... $ECHO_C" >&6 @@ -9115,5 +9153,6 @@ echo " Maximum connections: $unet_cv_with_maxcon" echo "" echo " poll() engine: $unet_cv_enable_poll" +echo " epoll() engine: $unet_cv_enable_epoll" echo " kqueue() engine: $unet_cv_enable_kqueue" echo " /dev/poll engine: $unet_cv_enable_devpoll" Index: ircd-ircdev/configure.in diff -u ircd-ircdev/configure.in:1.2 ircd-ircdev/configure.in:1.3 --- ircd-ircdev/configure.in:1.2 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/configure.in Sat Nov 1 09:19:35 2003 @@ -19,7 +19,7 @@ dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. dnl -dnl $Id: configure.in,v 1.2 2003/11/01 15:26:45 zolty Exp $ +dnl $Id: configure.in,v 1.3 2003/11/01 17:19:35 zolty Exp $ dnl Make sure we are in the correct directory (someone could have run dnl 'configure' with a wrong '--srcdir'). @@ -113,7 +113,7 @@ dnl Checks for header files. AC_HEADER_STDC -AC_CHECK_HEADERS(poll.h sys/devpoll.h sys/event.h) +AC_CHECK_HEADERS(poll.h sys/devpoll.h sys/event.h sys/epoll.h) dnl Checks for typedefs, structures, and compiler characteristics dnl AC_C_CONST @@ -154,6 +154,11 @@ *-linux*) AC_MSG_RESULT([Linux ($host) found.]) unet_poll_syscall=yes +# if test x"$ac_cv_header_sys_epoll_h" = xyes; then +# unet_poll_syscall=no +# else +# unet_poll_syscall=yes +# fi OSDEP_C=os_linux.c ;; @@ -362,6 +367,25 @@ ENGINE_C="engine_kqueue.c $ENGINE_C" fi +dnl --disable-epoll check +AC_MSG_CHECKING([whether to enable the epoll event engine]) +AC_ARG_ENABLE([epoll], +[ --disable-epoll Disable the epoll-based engine], +[unet_cv_enable_epoll=$enable_epoll], +[AC_CACHE_VAL(unet_cv_enable_epoll, +[unet_cv_enable_epoll=yes])]) + +if test x"$ac_cv_header_sys_epoll_h" = xno -o x"$ac_cv_func_epoll" = xno; then + unet_cv_enable_epoll=no +fi + +AC_MSG_RESULT([$unet_cv_enable_epoll]) + +if test x"$unet_cv_enable_epoll" != no; then + AC_DEFINE([USE_EPOLL], , [Define to enable the epoll engine]) + ENGINE_C="engine_epoll.c $ENGINE_C" + fi + dnl --with-symlink lets us set the name of the symlink; defaults to "ircd" AC_MSG_CHECKING([what name to give the symlink]) AC_ARG_WITH([symlink], @@ -683,5 +707,6 @@ echo " Maximum connections: $unet_cv_with_maxcon" echo "" echo " poll() engine: $unet_cv_enable_poll" +echo " epoll() engine: $unet_cv_enable_epoll" echo " kqueue() engine: $unet_cv_enable_kqueue" echo " /dev/poll engine: $unet_cv_enable_devpoll" Index: ircd-ircdev/include/channel.h diff -u ircd-ircdev/include/channel.h:1.1.1.1 ircd-ircdev/include/channel.h:1.2 --- ircd-ircdev/include/channel.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/channel.h Sat Nov 1 09:19:35 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: channel.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: channel.h,v 1.2 2003/11/01 17:19:35 zolty Exp $ */ #ifndef INCLUDED_channel_h #define INCLUDED_channel_h @@ -66,6 +66,7 @@ #define CHFL_BANVALID 0x0800 /* CHFL_BANNED bit is valid */ #define CHFL_BANNED 0x1000 /* Channel member is banned */ #define CHFL_SILENCE_IPMASK 0x2000 /* silence mask is an IP-number mask */ +#define CHFL_USER_PARTING 0x4000 /* User is already parting that channel */ #define CHFL_OVERLAP (CHFL_CHANOP | CHFL_VOICE) #define CHFL_BANVALIDMASK (CHFL_BANVALID | CHFL_BANNED) @@ -180,6 +181,7 @@ #define IsServOpOk(x) ((x)->status & CHFL_SERVOPOK) #define IsBurstJoined(x) ((x)->status & CHFL_BURST_JOINED) #define IsVoicedOrOpped(x) ((x)->status & CHFL_VOICED_OR_OPPED) +#define IsUserParting(x) ((x)->status & CHFL_USER_PARTING) #define SetBanned(x) ((x)->status |= CHFL_BANNED) #define SetBanValid(x) ((x)->status |= CHFL_BANVALID) @@ -187,6 +189,7 @@ #define SetServOpOk(x) ((x)->status |= CHFL_SERVOPOK) #define SetBurstJoined(x) ((x)->status |= CHFL_BURST_JOINED) #define SetZombie(x) ((x)->status |= CHFL_ZOMBIE) +#define SetUserParting(x) ((x)->status |= CHFL_USER_PARTING) #define ClearBanned(x) ((x)->status &= ~CHFL_BANNED) #define ClearBanValid(x) ((x)->status &= ~CHFL_BANVALID) Index: ircd-ircdev/include/patchlevel.h diff -u ircd-ircdev/include/patchlevel.h:1.3 ircd-ircdev/include/patchlevel.h:1.4 --- ircd-ircdev/include/patchlevel.h:1.3 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/include/patchlevel.h Sat Nov 1 09:19:35 2003 @@ -15,10 +15,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: patchlevel.h,v 1.3 2003/11/01 15:26:45 zolty Exp $ + * $Id: patchlevel.h,v 1.4 2003/11/01 17:19:35 zolty Exp $ * */ -#define PATCHLEVEL ".alpha2" +#define PATCHLEVEL ".alpha3" #define RELEASE "1.0" Index: ircd-ircdev/ircd/.cvsignore diff -u /dev/null ircd-ircdev/ircd/.cvsignore:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/ircd/.cvsignore Sat Nov 1 09:19:36 2003 @@ -0,0 +1,6 @@ + chkconf + table_gen + chattr.tab.c +lex.yy.c +y.tab.c +y.tab.h Index: ircd-ircdev/ircd/IPcheck.c diff -u ircd-ircdev/ircd/IPcheck.c:1.1.1.1 ircd-ircdev/ircd/IPcheck.c:1.2 --- ircd-ircdev/ircd/IPcheck.c:1.1.1.1 Mon Sep 8 03:34:28 2003 +++ ircd-ircdev/ircd/IPcheck.c Sat Nov 1 09:19:36 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: IPcheck.c,v 1.1.1.1 2003/09/08 10:34:28 zolty Exp $ + * $Id: IPcheck.c,v 1.2 2003/11/01 17:19:36 zolty Exp $ * * * This file should be edited in a window with a width of 141 characters @@ -397,7 +397,7 @@ /* * If this was the last one, set `last_connect' to disconnect time (used for expiration) */ - assert(entry->connected>0); + /* assert(entry->connected>0); */ if (0 == --entry->connected) { if (CONNECTED_SINCE(entry->last_connect) > IPCHECK_CLONE_LIMIT * IPCHECK_CLONE_PERIOD) { /* Index: ircd-ircdev/ircd/Makefile.in diff -u ircd-ircdev/ircd/Makefile.in:1.3 ircd-ircdev/ircd/Makefile.in:1.4 --- ircd-ircdev/ircd/Makefile.in:1.3 Sat Nov 1 07:26:46 2003 +++ ircd-ircdev/ircd/Makefile.in Sat Nov 1 09:19:36 2003 @@ -75,6 +75,7 @@ ENGINE_SRC = \ engine_devpoll.c \ + engine_epoll.c \ engine_poll.c \ engine_kqueue.c \ engine_select.c Index: ircd-ircdev/ircd/channel.c diff -u ircd-ircdev/ircd/channel.c:1.1.1.1 ircd-ircdev/ircd/channel.c:1.2 --- ircd-ircdev/ircd/channel.c:1.1.1.1 Mon Sep 8 03:34:28 2003 +++ ircd-ircdev/ircd/channel.c Sat Nov 1 09:19:36 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: channel.c,v 1.1.1.1 2003/09/08 10:34:28 zolty Exp $ + * $Id: channel.c,v 1.2 2003/11/01 17:19:36 zolty Exp $ */ #include "config.h" @@ -2024,7 +2024,7 @@ /* clean up the key string */ s = t_str; while (*++s > ' ' && *s != ':' && --t_len) - ; + s++; *s = '\0'; if (!*t_str) { /* warn if empty */ @@ -2685,6 +2685,11 @@ if (jbuf->jb_type == JOINBUF_TYPE_PART || jbuf->jb_type == JOINBUF_TYPE_PARTALL) { + struct Membership *member = find_member_link(chan, jbuf->jb_source); + if (IsUserParting(member)) + return; + SetUserParting(member); + /* Send notification to channel */ if (!(flags & CHFL_ZOMBIE)) sendcmdto_channel_butserv_butone(jbuf->jb_source, CMD_PART, chan, NULL, Index: ircd-ircdev/ircd/engine_epoll.c diff -u /dev/null ircd-ircdev/ircd/engine_epoll.c:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/ircd/engine_epoll.c Sat Nov 1 09:19:36 2003 @@ -0,0 +1,285 @@ +/* + * IRC - Internet Relay Chat, ircd/engine_epoll.c + * Copyright (C) 2003 Michael Poole <md...@tr...> + * + * 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: engine_epoll.c,v 1.1 2003/11/01 17:19:36 zolty Exp $ + */ +#include "config.h" + +#include "ircd.h" +#include "ircd_events.h" +#include "ircd_alloc.h" +#include "ircd_features.h" +#include "ircd_log.h" +#include "s_debug.h" + +#include <assert.h> +#include <errno.h> +#include <sys/epoll.h> +#include <sys/socket.h> +#include <time.h> +#include <linux/unistd.h> + +/* The GNU C library may have a valid header but stub implementations + * of the epoll system calls. If so, provide our own. */ +#if defined(__stub_epoll_create) || defined(__stub___epoll_create) + +/* Oh, did we mention that some glibc releases do not even define the + * syscall numbers? */ +#if !defined(__NR_epoll_create) +#if defined(__i386__) +#define __NR_epoll_create 254 +#define __NR_epoll_ctl 255 +#define __NR_epoll_wait 256 +#elif defined(__ia64__) +#define __NR_epoll_create 1243 +#define __NR_epoll_ctl 1244 +#define __NR_epoll_wait 1245 +#elif defined(__x86_64__) +#define __NR_epoll_create 214 +#define __NR_epoll_ctl 233 +#define __NR_epoll_wait 232 +#else /* cpu types */ +#error No system call numbers defined for epoll family. +#endif /* cpu types */ +#endif /* !defined(__NR_epoll_create) */ + +_syscall1(int, epoll_create, int, size) +_syscall4(int, epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event *, event) +_syscall4(int, epoll_wait, int, epfd, struct epoll_event *, pevents, int, maxevents, int, timeout) + +#endif /* epoll_create defined as stub */ + +#define EPOLL_ERROR_THRESHOLD 20 /* after 20 epoll errors, restart */ +#define ERROR_EXPIRE_TIME 3600 /* expire errors after an hour */ + +static int epoll_fd; +static int errors; +static struct Timer clear_error; + +/* decrements the error count once per hour */ +static void +error_clear(struct Event *ev) +{ + if (!--errors) + timer_del(ev_timer(ev)); +} + +/* initialize the epoll engine */ +static int +engine_init(int max_sockets) +{ + if ((epoll_fd = epoll_create(max_sockets)) < 0) { + log_write(LS_SYSTEM, L_WARNING, 0, + "epoll() engine cannot initialize: %m"); + return 0; + } + return 1; +} + +static void +set_events(struct Socket *sock, enum SocketState state, unsigned int events, struct epoll_event *evt) +{ + assert(0 != sock); + assert(0 <= s_fd(sock)); + + evt->data.ptr = sock; + + switch (state) { + case SS_CONNECTING: + evt->events = EPOLLOUT; + break; + + case SS_LISTENING: + case SS_NOTSOCK: + evt->events = EPOLLIN; + break; + + case SS_CONNECTED: + case SS_DATAGRAM: + case SS_CONNECTDG: + switch (events & SOCK_EVENT_MASK) { + case 0: + evt->events = 0; + break; + case SOCK_EVENT_READABLE: + evt->events = EPOLLIN; + break; + case SOCK_EVENT_WRITABLE: + evt->events = EPOLLOUT; + break; + case SOCK_EVENT_READABLE|SOCK_EVENT_WRITABLE: + evt->events = EPOLLIN|EPOLLOUT; + break; + } + break; + } +} + +static int +engine_add(struct Socket *sock) +{ + struct epoll_event evt; + + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Adding socket %d [%p], state %s, to engine", + s_fd(sock), sock, state_to_name(s_state(sock)))); + set_events(sock, s_state(sock), s_events(sock), &evt); + if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, s_fd(sock), &evt) < 0) { + event_generate(ET_ERROR, sock, errno); + return 0; + } + return 1; +} + +static void +engine_set_state(struct Socket *sock, enum SocketState new_state) +{ + struct epoll_event evt; + + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Changing state for socket %p to %s", + sock, state_to_name(new_state))); + set_events(sock, new_state, s_events(sock), &evt); + if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, s_fd(sock), &evt) < 0) + event_generate(ET_ERROR, sock, errno); +} + +static void +engine_set_events(struct Socket *sock, unsigned new_events) +{ + struct epoll_event evt; + + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Changing event mask for socket %p to [%s]", + sock, sock_flags(new_events))); + set_events(sock, s_state(sock), new_events, &evt); + if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, s_fd(sock), &evt) < 0) + event_generate(ET_ERROR, sock, errno); +} + +static void +engine_delete(struct Socket *sock) +{ + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Deleting socket %d [%p], state %s", + s_fd(sock), sock, state_to_name(s_state(sock)))); + if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, s_fd(sock), NULL) < 0) + ... [truncated message content] |