dnl the most major changes have already been made and it looks like
dnl said functions need to be just about as complex as they already are.
-AC_PREREQ(2.57)
+AC_PREREQ(2.60)
AC_INIT([charybdis], [3.6.0-dev])
+AC_LANG(C)
+AC_USE_SYSTEM_EXTENSIONS
+AC_GNU_SOURCE
+
+AC_PROG_CC_C99
+
+if test x"$ac_cv_prog_cc_c99" = "xno"; then
+ AC_ERROR([charybdis requires a C99 capable compiler])
+fi
+
AC_PREFIX_DEFAULT($HOME/ircd)
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADER(include/setup.h)
+AC_CONFIG_SUBDIRS([librb])
AC_CONFIG_AUX_DIR([libltdl/config])
-AC_CONFIG_MACRO_DIR([libltdl/m4])
-AM_INIT_AUTOMAKE([])
+
+AM_INIT_AUTOMAKE([subdir-objects])
AM_SILENT_RULES([yes])
AM_PROG_AR
LT_INIT([dlopen disable-static])
-
-LT_CONFIG_LTDL_DIR([extra/libltdl])
+LT_CONFIG_LTDL_DIR([libltdl])
LTDL_INIT
build_ltdl=$with_included_ltdl
AM_CONDITIONAL([BUILD_LTDL], [test x"$build_ltdl" = x"yes"])
-AC_PROG_CC_C99([], [AC_MSG_ERROR(charybdis requires a C99 capable compiler)])
-
-AC_GNU_SOURCE
-
-OLD_CFLAGS="$CFLAGS"
-dnl Checks for programs.
-AC_PROG_CC
-AC_LANG(C)
-
-dnl Make sure autoconf doesn't interfere with cflags -jmallett
-CFLAGS="$OLD_CFLAGS"
-
-AC_CONFIG_SUBDIRS(libratbox)
+case "$host_os" in
+*cygwin*)
+ AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
+ AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
+ ;;
+*mingw*)
+ AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
+ AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
+ AC_CHECK_HEADER(winsock2.h, , [AC_MSG_ERROR([** MinGW and no winsock2.h. I give up.])])
+ LIBS="$LIBS -lws2_32 -liphlpapi"
+ is_mingw="yes"
+ ;;
+*)
+ ;;
+esac
+
+AM_CONDITIONAL([MINGW], [test "$is_mingw" = "yes"])
if test "$ac_cv_c_compiler_gnu" = yes; then
- IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall -std=gnu99"
+ IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall"
fi
dnl If we support -g, use it!
AC_ISC_POSIX
AC_C_INLINE
-AC_PROG_GCC_TRADITIONAL
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_PATH_PROG(RM, rm)
dnl Checks for header files.
AC_HEADER_STDC
+AC_HEADER_STDBOOL
AC_CHECK_HEADERS([crypt.h sys/resource.h sys/param.h errno.h sys/syslog.h stddef.h sys/wait.h wait.h sys/epoll.h sys/uio.h machine/endian.h])
dnl Networking Functions
dnl ====================
-AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR([You have no socket()! Aborting.])])
+AC_SEARCH_LIBS(socket, [socket ws2_32], , [AC_MSG_ERROR([You have no socket()! Aborting.])])
dnl SunOS/Solaris required libnsl for inet_ntoa()
if test x"$SUN" = xyes; then
AC_SUBST(CRYPT_LIB)
-if test "$ac_cv_header_sys_wait_h" = yes -o "$ac_cv_header_wait_h" = yes; then
- VICONF=viconf
- dnl We need one of the above to build viconf. Just a sanity check,
- dnl we don't want to stop people from building the rest of ircd
- dnl just because they can't build viconf.
-else
- VICONF=""
-fi
-
-AC_SUBST(VICONF)
-
-dnl See whether we can include both string.h and strings.h.
-AC_CACHE_CHECK([whether string.h and strings.h may both be included],
-gcc_cv_header_string,
-[
- AC_COMPILE_IFELSE(
- [#include <string.h>
- #include <strings.h>],
- [gcc_cv_header_string=yes],
- [gcc_cv_header_string=no])
-])
-
-if test "$gcc_cv_header_string" = "yes"; then
- AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h])
-fi
-
AC_C_BIGENDIAN
dnl Check for stdarg.h - if we can't find it, halt configure
AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - charybdis will not compile without it **])])
-
-dnl Checks for the existence of strlcat, strlcpy, basename...
-dnl This more reliable test only works with gcc though.
-
-if test "$ac_cv_c_compiler_gnu" = yes; then
-
-AC_MSG_CHECKING(for strlcpy)
-save_CFLAGS=$CFLAGS
-CFLAGS="$CFLAGS -Wimplicit -Werror"
-
-AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <string.h>
- #include <stdlib.h>]],
- [[char *a = malloc(6);
- strlcpy(a, "hello", 6);]]
- )],
- [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STRLCPY, 1, [Define if strlcpy is available (most BSDs.)])],
- [AC_MSG_RESULT(no)]
-)
-
-AC_MSG_CHECKING(for strlcat)
-AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <string.h>
- #include <stdlib.h>]],
- [[char *a = malloc(6);
- a[0] = '\0';
- strlcat(a, "hello", 6);]]
- )],
- [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STRLCAT, 1, [Define if strlcat is available (most BSDs.)])],
- [AC_MSG_RESULT(no)]
-)
-
-CFLAGS=$save_CFLAGS
-
-else
-
-dnl Better than nothing. The more complicated test above probably fixes powerpc,
-dnl so who cares.
-
AC_CHECK_FUNCS([strlcat strlcpy])
-fi
-
AC_CHECK_TYPE([u_int32_t], [],
[
AC_CHECK_TYPE([uint32_t],
AC_CHECK_TYPES([uintptr_t])
dnl check for various functions...
-AC_CHECK_FUNCS([socketpair vsnprintf mmap gettimeofday strdup strndup ])
+AC_CHECK_FUNCS([snprintf vsnprintf socketpair mmap gettimeofday strdup strndup ])
AC_FUNC_ALLOCA
dnl Specialized functions checks
dnl ============================
-dnl check for nanosleep
+dnl check for nanosleep
AC_CHECK_FUNC(nanosleep,,[AC_CHECK_LIB(rt,nanosleep,
LIBS="${LIBS} -lrt",
[AC_CHECK_LIB(posix4,nanosleep, LIBS="${LIBS} -lposix4"
)])])
if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_posix4_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno
-then
+then
AC_MSG_RESULT("nanosleep not found..using select for delay")
-else
+else
AC_DEFINE([HAVE_NANOSLEEP], 1, [Define if nanosleep exists])
fi
dnl Check OpenSSL version (must be 0.9.6 or above!)
AC_MSG_CHECKING(for OpenSSL 0.9.6 or above)
AC_RUN_IFELSE(
- AC_LANG_PROGRAM(
+ [AC_LANG_PROGRAM(
[#include <openssl/opensslv.h>
#include <stdlib.h>],
[[if ( OPENSSL_VERSION_NUMBER >= 0x00906000)
- exit(0); else exit(1);]]),
+ exit(0); else exit(1);]])],
cf_openssl_version_ok=yes,
cf_openssl_version_ok=no,
cf_openssl_version_ok=no)
dnl Work around pmake/gmake conditional incompatibilities
AC_SUBST(ENCSPEED, encspeed)
-
+
dnl Do all the HAVE_LIBCRYPTO magic -- and check for ciphers
CPPFLAGS="$CPPFLAGS $SSL_LIBS"
AC_CHECK_LIB(crypto, RSA_free)
AC_SUBST(SQLITE_INCLUDES, "$SQLITE_CFLAGS")
AC_SUBST(SQLITE_OBJ)
-dnl IO Loop Selection
-dnl =================
-
-AC_ARG_ENABLE(ports, AC_HELP_STRING([--enable-ports],[Force solaris I/O ports subsystem usage.]),
-[ if test $enableval = yes; then
- SELECT_TYPE_EXPLICIT="ports"
- else
- use_ports=no
- fi
-],)
-
-AC_ARG_ENABLE(poll, AC_HELP_STRING([--enable-poll],[Force poll() usage.]),
-[ if test $enableval = yes; then
- SELECT_TYPE_EXPLICIT="poll"
- else
- use_poll=no
- fi
-],)
-
-AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select],[Force select() usage.]),
-[ if test $enableval = yes; then
- SELECT_TYPE_EXPLICIT="select"
- else
- use_select=no
- fi
-],)
-
-AC_ARG_ENABLE(kqueue, AC_HELP_STRING([--enable-kqueue],[Force kqueue() usage.]),
-[ if test $enableval = yes; then
- SELECT_TYPE_EXPLICIT="kqueue"
- else
- use_kqueue=no
- fi
-],)
-
-AC_ARG_ENABLE(epoll, AC_HELP_STRING([--enable-epoll],[Force sys_epoll usage (Linux only).]),
-[ if test $enableval = yes; then
- SELECT_TYPE_EXPLICIT="epoll"
- AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
- else
- use_epoll=no
- fi
-],)
-
dnl **********************************************************************
dnl Check for --with-confdir [deprecated, use --sysconfdir instead]
dnl **********************************************************************
dnl **********************************************************************
AC_MSG_CHECKING([whether to modify logdir])
-AC_ARG_WITH(logdir,
+AC_ARG_WITH(logdir,
AC_HELP_STRING([--with-logdir=DIR],
[Directory where to write logfiles.]),
[ logdir=`echo $withval | sed 's/\/$//'`
dnl **********************************************************************
AC_MSG_CHECKING([whether to modify helpdir])
-AC_ARG_WITH(helpdir,
+AC_ARG_WITH(helpdir,
AC_HELP_STRING([--with-helpdir=DIR],
[Directory to install help files.]),
[ helpdir=`echo $withval | sed 's/\/$//'`
dnl **********************************************************************
AC_MSG_CHECKING([whether to modify moduledir])
-AC_ARG_WITH(moduledir,
+AC_ARG_WITH(moduledir,
[AC_HELP_STRING([--with-moduledir=DIR],
[Directory to install modules.])],
[ moduledir=`echo $withval | sed 's/\/$//'`
AC_DEFINE(CUSTOM_BRANDING, 1, [Define if custom branding is enabled.])
fi
-if test ! -z "$SELECT_TYPE_EXPLICIT"; then
- SELECT_TYPE="$SELECT_TYPE_EXPLICIT";
- echo "Forcing $SELECT_TYPE to be enabled"
-else
-
-if test ! "x$use_ports" = "xno"; then
- AC_CHECK_FUNCS(port_getn, [haveports=yes], [haveports=no])
- if test "x$haveports" = "xyes" ; then
- SELECT_TYPE="ports"
- fi
-fi
-
-if test ! "x$use_select" = "xno"; then
- AC_CHECK_FUNCS(select, [haveselect=yes], [haveselect=no])
- if test "x$haveselect" = "xyes" ; then
- SELECT_TYPE="select"
- fi
-fi
-
-if test ! "x$use_poll" = "xno"; then
- AC_CHECK_FUNCS(poll, [havepoll=yes], [havepoll=no])
- if test "x$havepoll" = "xyes" ; then
- SELECT_TYPE="poll"
- fi
-fi
-
-if test ! "x$use_kqueue" = "xno"; then
- AC_CHECK_FUNCS(kevent, [havekqueue=yes], [havekqueue=no])
- if test "x$havekqueue" = "xyes" ; then
- SELECT_TYPE="kqueue"
- fi
-fi
-
-if test ! "x$use_epoll" = "xno"; then
- AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
- if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
- if test "x$haveepoll" = "xyes" ; then
- AC_MSG_CHECKING(for epoll support in kernel)
- AC_TRY_RUN(
-#include <stdint.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/epoll.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-
-int
-main(int argc, char **argv)
-{
- int epfd;
-
- epfd = epoll_create(256);
- return (epfd == -1 ? 1 : 0);
-}, [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_EPOLL, 1,
- [Define if your system supports the epoll system calls])
- SELECT_TYPE="epoll"],
- AC_MSG_RESULT(no), AC_MSG_RESULT(no))
- fi
- fi
-
-haveepollsyscall=no
-
-if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
- if test "x$haveepoll" = "xno" ; then
- AC_MSG_CHECKING(for epoll system call)
- AC_TRY_RUN(
-#include <stdint.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/epoll.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-
-int
-epoll_create(int size)
-{
- return (syscall(__NR_epoll_create, size));
-}
-
-int
-main(int argc, char **argv)
-{
- int epfd;
-
- epfd = epoll_create(256);
- exit (epfd == -1 ? 1 : 0);
-}, [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_EPOLL, 1,
- [Define if your system supports the epoll system calls])
- SELECT_TYPE="epoll"],
- AC_MSG_RESULT(no), AC_MSG_RESULT(no))
- fi
-fi
-
-fi
+dnl **********************************************************************
+dnl Enable oper chghost
+dnl **********************************************************************
-fi
+AC_ARG_ENABLE(oper-chghost,
+AC_HELP_STRING([--enable-oper-chghost],[Enable opers to use the CHGHOST command]),
+[operchghost=$enableval],[operchghost=no])
-if test -z "$SELECT_TYPE"; then
- AC_MSG_ERROR([Unable to find a usable IO interface],)
+if test "$operchghost" = yes; then
+ AC_DEFINE(ENABLE_OPER_CHGHOST, 1, [Define this to enable opers to use the CHGHOST command.])
fi
-echo "Using $SELECT_TYPE for select loop."
-
-AC_DEFINE_UNQUOTED(SELECT_TYPE, "$SELECT_TYPE", [This is the type of IO loop we are using])
-AC_SUBST(SELECT_TYPE)
-
-
dnl Debug-related options
dnl =====================
assert = "hard";
fi
-AC_MSG_CHECKING(if you want IO Debugging hooks)
-AC_ARG_ENABLE(iodebug,
-AC_HELP_STRING([--enable-iodebug],[Enable IO Debugging hooks]),
-[iodebug=$enableval], [iodebug=no])
-
-if test "$iodebug" = yes; then
- AC_DEFINE(USE_IODEBUG_HOOKS, 1, [Define this to enable IO Debug hooks.])
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-
-
AC_MSG_CHECKING(if you want to do a profile build)
AC_ARG_ENABLE(profile,
AC_HELP_STRING([--enable-profile],[Enable profiling]),
AC_MSG_RESULT(no)
fi
-AC_ARG_ENABLE(balloc,
-AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
-[balloc=$enableval], [balloc=yes])
-
-if test "$balloc" = no; then
- AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
-fi
-
-AC_ARG_ENABLE(small-net,
-AC_HELP_STRING([--enable-small-net],[Enable small network support.]),
-[small_net=$enableval], [small_net=no])
-
-if test "$small_net" = yes; then
-dnl AC_DEFINE([HASHSIZE], 4096, [Max number of buckets in hash tables.])
- AC_DEFINE([NICKNAMEHISTORYLENGTH], 1500, [Size of the WHOWAS array.])
- AC_DEFINE([CHANNEL_HEAP_SIZE], 256, [Size of the channel heap.])
- AC_DEFINE([BAN_HEAP_SIZE], 128, [Size of the ban heap.])
- AC_DEFINE([CLIENT_HEAP_SIZE], 256, [Size of the client heap.])
- AC_DEFINE([LCLIENT_HEAP_SIZE], 128, [Size of the local client heap.])
- AC_DEFINE([PCLIENT_HEAP_SIZE], 32, [Size of the pre-client heap.])
- AC_DEFINE([USER_HEAP_SIZE], 128, [Size of the user heap.])
- AC_DEFINE([DNODE_HEAP_SIZE], 256, [Size of the dlink_node heap.])
- AC_DEFINE([TOPIC_HEAP_SIZE], 256, [Size of the topic heap.])
- AC_DEFINE([LINEBUF_HEAP_SIZE], 128, [Size of the linebuf heap.])
- AC_DEFINE([MEMBER_HEAP_SIZE], 256, [Sizeof member heap.])
- AC_DEFINE([ND_HEAP_SIZE], 128, [Size of the nick delay heap.])
- AC_DEFINE([CONFITEM_HEAP_SIZE], 128, [Size of the confitem heap.])
- AC_DEFINE([MONITOR_HEAP_SIZE], 128, [Size of the monitor heap.])
- AC_DEFINE([FD_HEAP_SIZE], 128, [Size of fd heap.])
- AC_DEFINE([AWAY_HEAP_SIZE], 128, [Size of away heap.])
-else
-dnl These settings are for a large network like efnet..they will use lots of memory
-dnl so enable small net unless you really need this much support
- AC_DEFINE([NICKNAMEHISTORYLENGTH], 15000, [Size of the WHOWAS array.])
- AC_DEFINE([CHANNEL_HEAP_SIZE], 8192, [Size of the channel heap.])
- AC_DEFINE([BAN_HEAP_SIZE], 4096, [Size of the ban heap.])
- AC_DEFINE([CLIENT_HEAP_SIZE], 8192, [Size of the client heap.])
- AC_DEFINE([LCLIENT_HEAP_SIZE], 1024, [Size of the local client heap.])
- AC_DEFINE([PCLIENT_HEAP_SIZE], 256, [Size of the pre-client heap.])
- AC_DEFINE([USER_HEAP_SIZE], 8192, [Size of the user heap.])
- AC_DEFINE([DNODE_HEAP_SIZE], 8192, [Size of the dlink_node heap.])
- AC_DEFINE([TOPIC_HEAP_SIZE], 4096, [Size of the topic heap.])
- AC_DEFINE([LINEBUF_HEAP_SIZE], 2048, [Size of the linebuf heap.])
- AC_DEFINE([MEMBER_HEAP_SIZE], 32768, [Sizeof member heap.])
- AC_DEFINE([ND_HEAP_SIZE], 512, [Size of the nick delay heap.])
- AC_DEFINE([CONFITEM_HEAP_SIZE], 256, [Size of the confitem heap.])
- AC_DEFINE([MONITOR_HEAP_SIZE], 1024, [Size of the monitor heap.])
- AC_DEFINE([FD_HEAP_SIZE], 1024, [Size of fd heap.])
- AC_DEFINE([AWAY_HEAP_SIZE], 512, [Size of away heap.])
-fi
+AC_DEFINE([NICKNAMEHISTORYLENGTH], 15000, [Size of the WHOWAS array.])
+AC_DEFINE([CHANNEL_HEAP_SIZE], 8192, [Size of the channel heap.])
+AC_DEFINE([BAN_HEAP_SIZE], 4096, [Size of the ban heap.])
+AC_DEFINE([CLIENT_HEAP_SIZE], 8192, [Size of the client heap.])
+AC_DEFINE([LCLIENT_HEAP_SIZE], 1024, [Size of the local client heap.])
+AC_DEFINE([PCLIENT_HEAP_SIZE], 256, [Size of the pre-client heap.])
+AC_DEFINE([USER_HEAP_SIZE], 8192, [Size of the user heap.])
+AC_DEFINE([DNODE_HEAP_SIZE], 8192, [Size of the dlink_node heap.])
+AC_DEFINE([TOPIC_HEAP_SIZE], 4096, [Size of the topic heap.])
+AC_DEFINE([LINEBUF_HEAP_SIZE], 2048, [Size of the linebuf heap.])
+AC_DEFINE([MEMBER_HEAP_SIZE], 32768, [Sizeof member heap.])
+AC_DEFINE([ND_HEAP_SIZE], 512, [Size of the nick delay heap.])
+AC_DEFINE([CONFITEM_HEAP_SIZE], 256, [Size of the confitem heap.])
+AC_DEFINE([MONITOR_HEAP_SIZE], 1024, [Size of the monitor heap.])
+AC_DEFINE([FD_HEAP_SIZE], 1024, [Size of fd heap.])
+AC_DEFINE([AWAY_HEAP_SIZE], 512, [Size of away heap.])
AC_ARG_WITH(nicklen,
AC_HELP_STRING([--with-nicklen=LENGTH],[Set the upper-bound nick length to LENGTH (default 31, max 50)]),
[
- if ! expr "$withval" + 0 >/dev/null 2>&1; then
+ if ! expr "$withval" + 0 >/dev/null 2>&1; then
AC_ERROR([NICKLEN must be a numeric value])
- fi
+ fi
if test $withval -gt 50; then
NICKLEN=50
AC_MSG_WARN([NICKLEN has a hard limit of 50. Setting NICKLEN=50])
fi
], [NICKLEN=31])
-AC_ARG_WITH(topiclen,
+AC_ARG_WITH(topiclen,
AC_HELP_STRING([--with-topiclen=NUMBER],[Set the max topic length to NUMBER (default 390, max 390)]),
[
- if test $withval -ge 390; then
+ if test $withval -gt 390; then
TOPICLEN=390
AC_MSG_WARN([TOPICLEN has a hard limit of 390. Setting TOPICLEN=390])
else
AC_DEFINE_UNQUOTED(TOPICLEN, ${TOPICLEN}, [Maximum topic length (<=390)])
AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
-# rpath, for finding libratbox.so at run time
+# rpath, for finding librb.so at run time
hold_ldflags=$LDFLAGS
AC_MSG_CHECKING(for the ld -rpath flag)
LDFLAGS="${LDFLAGS} -Wl,-rpath=${libdir}"
-AC_LINK_IFELSE(AC_LANG_PROGRAM([],[int i;]), found=yes, found=no)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([],[int i;])], found=yes, found=no)
LDFLAGS=$hold_ldflags
AC_MSG_RESULT($found)
if test "$found" = yes; then
AC_SUBST(SEDOBJ)
-if test "$prefix" = "NONE"; then
+if test "$prefix" = "NONE"; then
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$ac_default_prefix", [Prefix where the ircd is installed.])
else
prefix=`echo $prefix | sed 's/\/$//'`
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$prefix", [Prefix where the ircd is installed.])
-
+
fi
AC_CONFIG_FILES( \
Ziplinks : $zlib
OpenSSL : $openssl
- Socket Engine : $SELECT_TYPE
- Small network : $small_net
- Block allocator : $balloc
Nickname length : $NICKLEN
Topic length : $TOPICLEN