-dnl $Id: configure.ac 3364 2007-04-03 09:50:56Z nenolod $
+dnl $Id: configure.ac 3516 2007-06-10 16:14:03Z jilles $
dnl Process this file with autoconf to produce a configure script.
dnl TODO: clean up all the OpenSSL and shared module checking stuff;
AC_PREREQ(2.57)
dnl Sneaky way to get an Id tag into the configure script
-AC_COPYRIGHT([$Id: configure.ac 3364 2007-04-03 09:50:56Z nenolod $])
+AC_COPYRIGHT([$Id: configure.ac 3516 2007-06-10 16:14:03Z jilles $])
-AC_INIT([charybdis],[2.2.0])
+AC_INIT([charybdis],[3.1])
AC_CONFIG_HEADER(include/setup.h)
dnl Make sure autoconf doesn't interfere with cflags -jmallett
CFLAGS="$OLD_CFLAGS"
+AC_CONFIG_SUBDIRS(libratbox)
+
dnl Check for various compilers. -jmallett
dnl But if $CC turns out to be gcc, sure as hell it's, well, gcc. -joshk
fi
-AC_MSG_CHECKING([uname -s for Cygwin, Solaris, AIX or HPUX])
+AC_MSG_CHECKING([uname -s for Solaris, AIX or HPUX])
OSNAME=`uname -s`
case "$OSNAME" in
HP-UX*)
AC_MSG_RESULT(already using newer HPUX)
fi
;;
- CYGWIN*)
- AC_MSG_RESULT(Cygwin)
- CYGWIN=yes
- ;;
SunOS*)
AC_MSG_RESULT(SunOS or Solaris)
AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.])
;;
esac
- IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall"
+ IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall -std=gnu99"
fi
dnl If we support -g, use it!
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)
-dnl Memory manager
-dnl ==============
-
-AC_MSG_CHECKING([the system's memory page size])
-pagesize="no"
-AC_TRY_RUN([
-#include <stdio.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-int main(void) {
- FILE *fp = fopen("conftest.malloc", "w");
-
- if (fp != NULL) {
- fprintf(fp, "%d\n", getpagesize());
- fclose(fp);
- } else
- exit(1);
- exit(0);
-}],[
-if test -f "conftest.malloc" ; then
- pagesize=`cat conftest.malloc`
-fi
-])
-if test "$pagesize" != "no" ; then
- AC_MSG_RESULT($pagesize)
-else
- if test "$ac_cv_sizeof_int" = "4" ; then
- pagesize=4096
- else
- pagesize=8192
- fi
- AC_MSG_RESULT([$pagesize (guessing)])
-fi
-AC_DEFINE_UNQUOTED(MALLOC_PAGESIZE, $pagesize,
- [the system's memory page size])
-
dnl Networking Functions
dnl ====================
AC_SEARCH_LIBS(inet_ntoa, nsl,, [AC_MSG_ERROR([libnsl not found! Aborting.])])
fi
-AC_CHECK_MEMBER([struct sockaddr.sa_len], [AC_DEFINE(SOCKADDR_IN_HAS_LEN, 1, [Define to 1 if sockaddr has a 'sa_len'
-member.])],,[[#include <sys/types.h>
-#include <sys/socket.h>
-]])
-
AC_CHECK_TYPE(socklen_t, ,
[AC_DEFINE([socklen_t], [unsigned int],
[If we don't have a real socklen_t, unsigned int is good enough.])],
AC_ARG_ENABLE(ipv6,
AC_HELP_STRING([--enable-ipv6],[Enable IPv6 support]),[ipv6=$enableval],[ipv6=no])
-if test $ipv6 != yes; then
- have_v6="no"
-else
-AC_MSG_CHECKING([for core IPv6 support])
-
-AC_COMPILE_IFELSE(
-[AC_LANG_PROGRAM(
- [[#define IN_AUTOCONF
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>]],
- [[struct sockaddr_in6 s;
- s.sin6_family = 0;]]
- )],
-[
- if test "$CYGWIN" = "yes"; then
- AC_MSG_RESULT([no, Cygwin's IPv6 is incomplete])
- have_v6=no
- else
- have_v6=yes
- AC_DEFINE(IPV6, 1, [Define if IPv6 support is present and available.])
- AC_MSG_RESULT(yes)
- AC_MSG_CHECKING([for struct in6addr_any])
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM(
- [[#define IN_AUTOCONF
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>]],
- [[struct in6_addr a = in6addr_any;]]
- )],
- [AC_MSG_RESULT(yes)],
- [
- AC_MSG_RESULT(no)
- AC_DEFINE(NO_IN6ADDR_ANY, 1, [Define to 1 if your system has no in6addr_any.])
- inet_misc=1
- ]
- )
- fi
-],
-[AC_MSG_RESULT(no)
-have_v6="no"])
-fi
-
AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
CRYPT_LIB=$ac_cv_search_crypt
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 - ircd-ratbox will not compile without it **])])
+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.
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"
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
int epfd;
epfd = epoll_create(256);
- exit (epfd == -1 ? 1 : 0);
+ return (epfd == -1 ? 1 : 0);
}, [AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_EPOLL, 1,
[Define if your system supports the epoll system calls])
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([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_ARG_WITH(nicklen,
AC_DEFINE_UNQUOTED(TOPICLEN, ${TOPICLEN}, [Maximum topic length (<=390)])
AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
-AC_ARG_ENABLE(shared-modules,
-AC_HELP_STRING([--disable-shared-modules],[ Disable shared modules.]),
-[shared_modules=$enableval], [shared_modules="yes"])
-
+shared_modules="yes"
dnl Some first-stage sanity checks.
if test "$shared_modules" = yes; then
-
- if test "$CYGWIN" = yes; then
- AC_MSG_WARN([disabling shared modules; Cygwin is at present unable to build them.])
- shared_modules="no"
- fi
-
dnl TenDRA's cc is called tcc too.
if test "$CC" = tcc -a "$TenDRA" = "no"; then
AC_MSG_WARN([disabling shared modules: Tiny C Compiler can't create PIC])
fi
fi
+# rpath, for finding libratbox.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)
+LDFLAGS=$hold_ldflags
+AC_MSG_RESULT($found)
+if test "$found" = yes; then
+ LDFLAGS="${LDFLAGS} -Wl,-rpath=\${libdir}"
+fi
+
# This must be down here, or it will mess up checks like the ones
# for -Wl,-export-dynamic
# -- jilles
+CWARNS=""
AC_ARG_ENABLE(warnings,
AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
[
CHARYBDIS_C_GCC_TRY_FLAGS([-Wimplicit -Wnested-externs], charybdis_cv_c_gcc_w_implicit)
CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-align], charybdis_cv_c_gcc_w_cast_align)
CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-qual], charybdis_cv_c_gcc_w_cast_qual)
+CHARYBDIS_C_GCC_TRY_FLAGS([-Wwrite-strings], charybdis_cv_c_gcc_w_write_strings)
+CHARYBDIS_C_GCC_TRY_FLAGS([-Werror-implicit-function-declaration], charybdis_cv_c_gcc_w_error_implicit_function_declaration)
CHARYBDIS_C_GCC_TRY_FLAGS([-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations], charybdis_cv_c_gcc_prototypes)
CHARYBDIS_C_GCC_TRY_FLAGS([-Wparenthesis], charybdis_cv_c_gcc_parenthesis)
CHARYBDIS_C_GCC_TRY_FLAGS([-W -Wno-unused], charybdis_cv_c_gcc_w)
CHARYBDIS_C_GCC_TRY_FLAGS([-Wunused-function -Wunused-label -Wunused-value -Wunused-variable], charybdis_cv_c_gcc_w_unused)
CHARYBDIS_C_GCC_TRY_FLAGS([-Wredundant-decls], charybdis_cv_c_gcc_w_redundant_decls)
CHARYBDIS_C_GCC_TRY_FLAGS([-Wfloat-equal], charybdis_cv_c_gcc_w_float_equal)
-CHARYBDIS_C_GCC_TRY_FLAGS([-Wformat=2], charybdis_cv_c_gcc_w_format)
+CHARYBDIS_C_GCC_TRY_FLAGS([-Wformat -Wformat-y2k -Wformat-security], charybdis_cv_c_gcc_w_format)
CHARYBDIS_C_GCC_TRY_FLAGS([-pedantic], charybdis_cv_c_gcc_pedantic)
IRC_CFLAGS="$CFLAGS"
fi
fi
+IRC_CFLAGS="$IRC_CFLAGS $CWARNS"
+
AC_SUBST(MODULES_LIBS)
AC_SUBST(MOD_TARGET)
AC_CONFIG_FILES( \
Makefile \
- libcharybdis/Makefile \
- servlink/Makefile \
+ ssld/Makefile \
extensions/Makefile \
unsupported/Makefile \
src/Makefile \
Ziplinks : $zlib
OpenSSL : $openssl
- Modules : $modules
- IPv6 support : $have_v6
Socket Engine : $SELECT_TYPE
Small network : $small_net
Block allocator : $balloc
- ASM hashing code : $ricer_hashing
Nickname length : $NICKLEN
Topic length : $TOPICLEN
-Use make to compile Charybdis, then make install to install it.
+Use (g)make to compile Charybdis, then (g)make install to install it.
"