1 dnl $Id: configure.ac 3516 2007-06-10 16:14:03Z jilles $
2 dnl Process this file with autoconf to produce a configure script.
4 dnl TODO: clean up all the OpenSSL and shared module checking stuff;
5 dnl the most major changes have already been made and it looks like
6 dnl said functions need to be just about as complex as they already are.
10 dnl Sneaky way to get an Id tag into the configure script
11 AC_COPYRIGHT([$Id: configure.ac 3516 2007-06-10 16:14:03Z jilles $])
13 AC_INIT([charybdis],[3.0.0-alpha1])
15 AC_CONFIG_HEADER(include/setup.h)
17 AC_PREFIX_DEFAULT($HOME/ircd)
22 dnl Checks for programs.
26 dnl Make sure autoconf doesn't interfere with cflags -jmallett
29 AC_CONFIG_SUBDIRS(libratbox)
31 dnl Check for various compilers. -jmallett
32 dnl But if $CC turns out to be gcc, sure as hell it's, well, gcc. -joshk
34 if test "$ac_cv_c_compiler_gnu" != yes; then
37 AC_MSG_CHECKING($CC -version for TenDRA or MIPSpro)
38 case `$CC -version 2>&1` in
40 AC_MSG_RESULT([yes, TenDRA])
42 CPPFLAGS="$CPPFLAGS -Ylonglong -Yansi -I/usr/include"
47 AC_MSG_RESULT([yes, MIPSpro])
58 AC_MSG_CHECKING([$CC -V for Sun Workshop, Forte, HPUX or Tru64 cc])
60 *Sun*WorkShop* | *Forte*Developer*)
61 AC_MSG_RESULT(Sun Workshop/Forte)
62 IRC_CFLAGS="-fast -xinline=dlinkAdd,dlinkAddBefore,dlinkAddTail,dlinkDelete,dlink_list_length,dlink_node,dlinkMoveList,_MyMalloc,_MyRealloc,_MyFree,_DupString"
67 AC_MSG_RESULT(Tru64 cc)
69 CPPFLAGS="-I/usr/local/include"
73 AC_MSG_RESULT(HPUX cc)
84 AC_MSG_CHECKING([uname -s for Cygwin, Solaris, AIX or HPUX])
88 dnl only do this if we haven't already detected the newer one
89 dnl and we're not already using gcc
91 if test "$HPUX" != yes -a "$ac_cv_c_compiler_gnu" = no; then
92 AC_MSG_RESULT(assuming old HPUX with its own cc)
93 IRC_CFLAGS="$IRC_CFLAGS +e"
96 AC_MSG_RESULT(already using newer HPUX)
100 AC_MSG_RESULT(Cygwin)
104 AC_MSG_RESULT(SunOS or Solaris)
105 AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.])
109 AC_MSG_RESULT(AIX - Sorry you poor bastard..really we are)
110 IRC_CFLAGS="$IRC_CFLAGS -Wl,-brtl -Wl,-G"
117 if test "$ac_cv_c_compiler_gnu" = yes; then
118 AC_MSG_CHECKING(if $CC is Apple GCC)
120 case `$CC -v 2>&1 | tail -n 1` in
131 IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall"
134 dnl If we support -g, use it!
135 if test "$ac_cv_prog_cc_g" = yes; then
136 dnl Tru64 needs -g3 for -O2
137 if test "$Tru" = yes; then
138 IRC_CFLAGS="$IRC_CFLAGS -g3"
140 IRC_CFLAGS="$IRC_CFLAGS -g"
144 dnl SVR4 SGS based on what we know about the compiler -jmallett
145 AC_MSG_CHECKING(if $CC supports the SVR4 SGS interfaces)
146 if test "$SGS" = "yes"; then
152 dnl We prefer gcc -MM because it's a lot less bloated
153 AC_PATH_PROG(MKDEP, mkdep)
154 AC_PATH_PROG(MAKEDEPEND, makedepend)
156 AC_MSG_CHECKING(how to generate dependency info)
160 if test "$ac_cv_c_compiler_gnu" = yes; then
161 AC_MSG_RESULT(gcc -MM)
163 elif test ! -z "$MKDEP"; then
166 dnl Tru64's mkdep is very loud
167 if test -z "$Tru"; then
170 STDOUT=" 2> /dev/null"
172 elif test "$SunWorkShop" = yes; then
173 AC_MSG_RESULT($CC -xM)
175 STDOUT="> .depend 2> /dev/null"
176 elif test ! -z "$MAKEDEPEND"; then
177 AC_MSG_RESULT(makedepend)
178 MKDEP="$MAKEDEPEND -f-"
180 AC_MSG_RESULT([nothing suitable.. forget it!])
187 dnl check for /dev/null so we can use it to hold evil fd's
188 AC_MSG_CHECKING([for /dev/null])
189 if test -c /dev/null ; then
190 AC_DEFINE(PATH_DEVNULL, "/dev/null", [Path to /dev/null])
193 AC_DEFINE(PATH_DEVNULL, "devnull.log", [Path to /dev/null])
194 AC_MSG_RESULT(no - using devnull.log)
197 dnl jdc -- If CFLAGS is defined, best use it everywhere...
198 dnl NOTE: jv says it must be added to the *END*, because things like
199 dnl "gcc -O9 -O2" will result in -O2 getting preference. How stupid.
200 if test ! -z "$CFLAGS"; then
201 IRC_CFLAGS="$IRC_CFLAGS $CFLAGS"
206 AC_PROG_GCC_TRADITIONAL
213 AC_PATH_PROG(SED, sed)
216 AC_PATH_PROG(RANLIB, ranlib)
217 AC_PATH_PROG(TOUCH, touch)
221 dnl AC_PROG_YACC defaults to yacc unconditionally if nothing can be found
222 if test "$YACC" = "yacc" -a -z "`which $YACC 2>/dev/null`"; then
223 AC_MSG_ERROR([could not locate a suitable parser generator; install bison, yacc, or byacc])
228 if test "$LEX" = ":"; then
229 AC_MSG_ERROR([could not locate a suitable lexical generator, install flex or lex.])
232 dnl use directory structure of cached as default (hack)
233 if test "$libexecdir" = '${exec_prefix}/libexec' &&
234 test "$localstatedir" = '${prefix}/var'; then
235 libexecdir='${bindir}'
236 localstatedir='${prefix}'
239 dnl Checks for header files.
242 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])
244 dnl Stuff that the memory manager (imalloc) depends on
245 dnl ==================================================
248 if test "$ac_cv_header_machine_endian_h" = "no" ; then
253 AC_CHECK_SIZEOF(short)
255 AC_CHECK_SIZEOF(long)
256 AC_CHECK_SIZEOF(long long)
261 AC_MSG_CHECKING([the system's memory page size])
270 FILE *fp = fopen("conftest.malloc", "w");
273 fprintf(fp, "%d\n", getpagesize());
279 if test -f "conftest.malloc" ; then
280 pagesize=`cat conftest.malloc`
283 if test "$pagesize" != "no" ; then
284 AC_MSG_RESULT($pagesize)
286 if test "$ac_cv_sizeof_int" = "4" ; then
291 AC_MSG_RESULT([$pagesize (guessing)])
293 AC_DEFINE_UNQUOTED(MALLOC_PAGESIZE, $pagesize,
294 [the system's memory page size])
296 dnl Networking Functions
297 dnl ====================
299 AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR([You have no socket()! Aborting.])])
301 dnl SunOS/Solaris required libnsl for inet_ntoa()
302 if test x"$SUN" = xyes; then
303 AC_SEARCH_LIBS(inet_ntoa, nsl,, [AC_MSG_ERROR([libnsl not found! Aborting.])])
306 AC_CHECK_MEMBER([struct sockaddr.sa_len], [AC_DEFINE(SOCKADDR_IN_HAS_LEN, 1, [Define to 1 if sockaddr has a 'sa_len'
307 member.])],,[[#include <sys/types.h>
308 #include <sys/socket.h>
311 AC_CHECK_TYPE(socklen_t, ,
312 [AC_DEFINE([socklen_t], [unsigned int],
313 [If we don't have a real socklen_t, unsigned int is good enough.])],
314 [#include <sys/types.h>
315 #include <sys/socket.h>])
318 AC_HELP_STRING([--enable-ipv6],[Enable IPv6 support]),[ipv6=$enableval],[ipv6=no])
320 AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
322 CRYPT_LIB=$ac_cv_search_crypt
324 if test "$CRYPT_LIB" = "none required"; then
326 elif test "$CRYPT_LIB" = no; then
332 if test "$ac_cv_header_sys_wait_h" = yes -o "$ac_cv_header_wait_h" = yes; then
334 dnl We need one of the above to build viconf. Just a sanity check,
335 dnl we don't want to stop people from building the rest of ircd
336 dnl just because they can't build viconf.
343 dnl See whether we can include both string.h and strings.h.
344 AC_CACHE_CHECK([whether string.h and strings.h may both be included],
345 gcc_cv_header_string,
349 #include <strings.h>],
350 [gcc_cv_header_string=yes],
351 [gcc_cv_header_string=no])
354 if test "$gcc_cv_header_string" = "yes"; then
355 AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h])
360 dnl Check for stdarg.h - if we can't find it, halt configure
361 AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - ircd-ratbox will not compile without it **])])
363 dnl Checks for the existence of strlcat, strlcpy, basename...
364 dnl This more reliable test only works with gcc though.
366 if test "$ac_cv_c_compiler_gnu" = yes; then
368 AC_MSG_CHECKING(for strlcpy)
370 CFLAGS="$CFLAGS -Wimplicit -Werror"
374 [[#include <string.h>
375 #include <stdlib.h>]],
376 [[char *a = malloc(6);
377 strlcpy(a, "hello", 6);]]
380 AC_DEFINE(HAVE_STRLCPY, 1, [Define if strlcpy is available (most BSDs.)])],
384 AC_MSG_CHECKING(for strlcat)
387 [[#include <string.h>
388 #include <stdlib.h>]],
389 [[char *a = malloc(6);
391 strlcat(a, "hello", 6);]]
394 AC_DEFINE(HAVE_STRLCAT, 1, [Define if strlcat is available (most BSDs.)])],
402 dnl Better than nothing. The more complicated test above probably fixes powerpc,
405 AC_CHECK_FUNCS([strlcat strlcpy])
409 AC_CHECK_TYPE([u_int32_t], [],
411 AC_CHECK_TYPE([uint32_t],
413 AC_DEFINE(u_int32_t, [uint32_t], [If system does not define u_int32_t, define a reasonable substitute.])
416 AC_MSG_WARN([system has no u_int32_t or uint32_t, default to unsigned long int])
417 AC_DEFINE(u_int32_t, [unsigned long int], [If system does not define u_int32_t, define to unsigned long int here.])
421 AC_CHECK_TYPE([u_int16_t], [],
423 AC_CHECK_TYPE([uint16_t],
425 AC_DEFINE(u_int16_t, [uint16_t], [If system does not define u_int16_t, define a usable substitute])
428 AC_MSG_WARN([system has no u_int16_t or uint16_t, default to unsigned short int])
429 AC_DEFINE(u_int16_t, [unsigned short int], [If system does not define u_int16_t, define a usable substitute.])
433 AC_CHECK_TYPE([in_port_t], [],
434 [AC_DEFINE(in_port_t, [u_int16_t], [If system does not define in_port_t, define it to what it should be.])],
435 [[#include <sys/types.h>
436 #include <netinet/in.h>]])
438 AC_CHECK_TYPE([sa_family_t], [],
439 [AC_DEFINE(sa_family_t, [u_int16_t], [If system does not define sa_family_t, define it here.])],
440 [[#include <sys/types.h>
441 #include <sys/socket.h>]])
443 AC_CHECK_TYPES([uintptr_t])
445 dnl check for various functions...
446 AC_CHECK_FUNCS([socketpair vsnprintf mmap gettimeofday strdup strndup ])
450 dnl Specialized functions checks
451 dnl ============================
453 dnl check for nanosleep
454 AC_CHECK_FUNC(nanosleep,,[AC_CHECK_LIB(rt,nanosleep,
456 [AC_CHECK_LIB(posix4,nanosleep, LIBS="${LIBS} -lposix4"
458 if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_posix4_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno
460 AC_MSG_RESULT("nanosleep not found..using select for delay")
462 AC_DEFINE([HAVE_NANOSLEEP], 1, [Define if nanosleep exists])
466 AC_MSG_CHECKING(for OpenSSL)
467 AC_ARG_ENABLE(openssl,
468 [AC_HELP_STRING([--enable-openssl[=DIR]],[Enable OpenSSL support (DIR optional).])
469 AC_HELP_STRING([--disable-openssl],[Disable OpenSSL support.])],
470 [cf_enable_openssl=$enableval],
471 [cf_enable_openssl="auto"])
473 if test "$cf_enable_openssl" != "no" ; then
474 cf_openssl_basedir=""
475 if test "$cf_enable_openssl" != "auto" &&
476 test "$cf_enable_openssl" != "yes" ; then
477 dnl Support for --enable-openssl=/some/place
478 cf_openssl_basedir="`echo ${cf_enable_openssl} | sed 's/\/$//'`"
480 dnl Do the auto-probe here. Check some common directory paths.
481 for dirs in /usr/local/ssl /usr/pkg /usr/local \
482 /usr/local/openssl ; do
483 if test -f "${dirs}/include/openssl/opensslv.h" ; then
484 cf_openssl_basedir="${dirs}"
490 dnl Now check cf_openssl_found to see if we found anything.
491 if test ! -z "$cf_openssl_basedir"; then
492 if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
493 SSL_INCLUDES="-I${cf_openssl_basedir}/include"
494 SSL_LIBS="-L${cf_openssl_basedir}/lib"
496 dnl OpenSSL wasn't found in the directory specified. Naughty
498 cf_openssl_basedir=""
501 dnl Check for stock FreeBSD 4.x and 5.x systems, since their files
502 dnl are in /usr/include and /usr/lib. In this case, we don't want to
503 dnl change INCLUDES or LIBS, but still want to enable OpenSSL.
504 dnl We can't do this check above, because some people want two versions
505 dnl of OpenSSL installed (stock FreeBSD 4.x/5.x and /usr/local/ssl)
506 dnl and they want /usr/local/ssl to have preference.
507 if test -f "/usr/include/openssl/opensslv.h" ; then
508 cf_openssl_basedir="/usr"
512 dnl If we have a basedir defined, then everything is okay. Otherwise,
513 dnl we have a problem.
514 if test ! -z "$cf_openssl_basedir"; then
515 AC_MSG_RESULT($cf_openssl_basedir)
516 cf_enable_openssl="yes"
518 AC_MSG_RESULT([not found. Specify a correct path?])
519 cf_enable_openssl="no"
521 unset cf_openssl_basedir
523 dnl If --disable-openssl was specified
524 AC_MSG_RESULT(disabled)
527 save_CPPFLAGS="$CPPFLAGS"
528 CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
530 LIBS="$LIBS $SSL_LIBS"
531 if test "$cf_enable_openssl" != no; then
532 dnl Check OpenSSL version (must be 0.9.6 or above!)
533 AC_MSG_CHECKING(for OpenSSL 0.9.6 or above)
536 [#include <openssl/opensslv.h>
537 #include <stdlib.h>],
538 [[if ( OPENSSL_VERSION_NUMBER >= 0x00906000)
539 exit(0); else exit(1);]]),
540 cf_openssl_version_ok=yes,
541 cf_openssl_version_ok=no,
542 cf_openssl_version_ok=no)
544 if test "$cf_openssl_version_ok" = yes; then
547 dnl Work around pmake/gmake conditional incompatibilities
548 AC_SUBST(ENCSPEED, encspeed)
550 dnl Do all the HAVE_LIBCRYPTO magic -- and check for ciphers
551 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
552 AC_CHECK_LIB(crypto, RSA_free)
553 SSL_LIBS="$SSL_LIBS -lcrypto"
554 SSL_SRCS_ENABLE='$(SSL_SRCS)'
556 AC_MSG_RESULT(no - OpenSSL support disabled)
560 CPPFLAGS="$save_CPPFLAGS"
563 dnl End OpenSSL detection
566 dnl Specialized functions and libraries
567 dnl ===================================
569 AC_ARG_WITH(zlib-path,
570 AC_HELP_STRING([--with-zlib-path=DIR],[Path to libz.so for ziplinks support.]),
571 [LIBS="$LIBS -L$withval"],)
574 AC_HELP_STRING([--disable-zlib],[Disable ziplinks support]),
575 [zlib=$enableval],[zlib=yes])
577 if test "$zlib" = yes; then
579 AC_CHECK_HEADER(zlib.h, [
580 AC_CHECK_LIB(z, zlibVersion,
582 AC_SUBST(ZLIB_LD, -lz)
583 AC_DEFINE(HAVE_LIBZ, 1, [Define to 1 if zlib (-lz) is available.])
589 dnl IO Loop Selection
590 dnl =================
592 AC_ARG_ENABLE(ports, AC_HELP_STRING([--enable-ports],[Force solaris I/O ports subsystem usage.]),
593 [ if test $enableval = yes; then
594 SELECT_TYPE_EXPLICIT="ports"
600 AC_ARG_ENABLE(poll, AC_HELP_STRING([--enable-poll],[Force poll() usage.]),
601 [ if test $enableval = yes; then
602 SELECT_TYPE_EXPLICIT="poll"
608 AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select],[Force select() usage.]),
609 [ if test $enableval = yes; then
610 SELECT_TYPE_EXPLICIT="select"
616 AC_ARG_ENABLE(kqueue, AC_HELP_STRING([--enable-kqueue],[Force kqueue() usage.]),
617 [ if test $enableval = yes; then
618 SELECT_TYPE_EXPLICIT="kqueue"
624 AC_ARG_ENABLE(epoll, AC_HELP_STRING([--enable-epoll],[Force sys_epoll usage (Linux only).]),
625 [ if test $enableval = yes; then
626 SELECT_TYPE_EXPLICIT="epoll"
627 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
633 dnl **********************************************************************
634 dnl Check for --with-confdir
635 dnl **********************************************************************
637 AC_MSG_CHECKING([whether to modify confdir])
639 AC_HELP_STRING([--with-confdir=DIR],
640 [Directory to install config files.]),
641 [ confdir=`echo $withval | sed 's/\/$//'`
643 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
644 AC_SUBST_DIR([confdir]) ],
645 [ confdir='${prefix}/etc'
647 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
648 AC_SUBST_DIR([confdir])]
651 dnl **********************************************************************
652 dnl Check for --with-logdir
653 dnl **********************************************************************
655 AC_MSG_CHECKING([whether to modify logdir])
657 AC_HELP_STRING([--with-logdir=DIR],
658 [Directory where to write logfiles.]),
659 [ logdir=`echo $withval | sed 's/\/$//'`
661 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
662 AC_SUBST_DIR([logdir]) ],
663 [ logdir='${prefix}/logs'
665 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
666 AC_SUBST_DIR([logdir])]
669 dnl **********************************************************************
670 dnl Check for --with-helpdir
671 dnl **********************************************************************
673 AC_MSG_CHECKING([whether to modify helpdir])
675 AC_HELP_STRING([--with-helpdir=DIR],
676 [Directory to install help files.]),
677 [ helpdir=`echo $withval | sed 's/\/$//'`
679 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help files are installed.])
680 AC_SUBST_DIR([helpdir]) ],
681 [ helpdir='${prefix}/help'
683 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help file are installed.])
684 AC_SUBST_DIR([helpdir])]
687 dnl **********************************************************************
688 dnl Check for --with-moduledir
689 dnl **********************************************************************
691 AC_MSG_CHECKING([whether to modify moduledir])
692 AC_ARG_WITH(moduledir,
693 AC_HELP_STRING([--with-moduledir=DIR],
694 [Directory to install modules.]),
695 [ moduledir=`echo $withval | sed 's/\/$//'`
697 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
698 AC_SUBST_DIR([moduledir]) ],
699 [ moduledir='${prefix}/modules'
701 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
702 AC_SUBST_DIR([moduledir])]
705 if test ! -z "$SELECT_TYPE_EXPLICIT"; then
706 SELECT_TYPE="$SELECT_TYPE_EXPLICIT";
707 echo "Forcing $SELECT_TYPE to be enabled"
710 if test ! "x$use_ports" = "xno"; then
711 AC_CHECK_FUNCS(port_getn, [haveports=yes], [haveports=no])
712 if test "x$haveports" = "xyes" ; then
717 if test ! "x$use_select" = "xno"; then
718 AC_CHECK_FUNCS(select, [haveselect=yes], [haveselect=no])
719 if test "x$haveselect" = "xyes" ; then
724 if test ! "x$use_poll" = "xno"; then
725 AC_CHECK_FUNCS(poll, [havepoll=yes], [havepoll=no])
726 if test "x$havepoll" = "xyes" ; then
731 if test ! "x$use_kqueue" = "xno"; then
732 AC_CHECK_FUNCS(kevent, [havekqueue=yes], [havekqueue=no])
733 if test "x$havekqueue" = "xyes" ; then
738 if test ! "x$use_epoll" = "xno"; then
739 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
740 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
741 if test "x$haveepoll" = "xyes" ; then
742 AC_MSG_CHECKING(for epoll support in kernel)
745 #include <sys/param.h>
746 #include <sys/types.h>
747 #include <sys/epoll.h>
748 #include <sys/syscall.h>
752 main(int argc, char **argv)
756 epfd = epoll_create(256);
757 return (epfd == -1 ? 1 : 0);
758 }, [AC_MSG_RESULT(yes)
759 AC_DEFINE(HAVE_EPOLL, 1,
760 [Define if your system supports the epoll system calls])
761 SELECT_TYPE="epoll"],
762 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
768 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
769 if test "x$haveepoll" = "xno" ; then
770 AC_MSG_CHECKING(for epoll system call)
773 #include <sys/param.h>
774 #include <sys/types.h>
775 #include <sys/epoll.h>
776 #include <sys/syscall.h>
780 epoll_create(int size)
782 return (syscall(__NR_epoll_create, size));
786 main(int argc, char **argv)
790 epfd = epoll_create(256);
791 exit (epfd == -1 ? 1 : 0);
792 }, [AC_MSG_RESULT(yes)
793 AC_DEFINE(HAVE_EPOLL, 1,
794 [Define if your system supports the epoll system calls])
795 SELECT_TYPE="epoll"],
796 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
804 if test -z "$SELECT_TYPE"; then
805 AC_MSG_ERROR([Unable to find a usable IO interface],)
808 echo "Using $SELECT_TYPE for select loop."
810 AC_DEFINE_UNQUOTED(SELECT_TYPE, "$SELECT_TYPE", [This is the type of IO loop we are using])
811 AC_SUBST(SELECT_TYPE)
814 dnl Debug-related options
815 dnl =====================
817 AC_ARG_ENABLE(assert,
818 AC_HELP_STRING([--enable-assert],[Enable assert(). Choose between soft(warnings) and hard(aborts the daemon)]),
819 [assert=$enableval], [assert=no])
821 if test "$assert" = no; then
822 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
823 elif test "$assert" = soft; then
824 AC_DEFINE(SOFT_ASSERT, 1, [Define this to enable soft asserts.])
825 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
826 elif test "$assert" = yes; then
830 AC_MSG_CHECKING(if you want IO Debugging hooks)
831 AC_ARG_ENABLE(iodebug,
832 AC_HELP_STRING([--enable-iodebug],[Enable IO Debugging hooks]),
833 [iodebug=$enableval], [iodebug=no])
835 if test "$iodebug" = yes; then
836 AC_DEFINE(USE_IODEBUG_HOOKS, 1, [Define this to enable IO Debug hooks.])
843 AC_MSG_CHECKING(if you want to do a profile build)
844 AC_ARG_ENABLE(profile,
845 AC_HELP_STRING([--enable-profile],[Enable profiling]),
846 [profile=$enableval], [profile=no])
848 if test "$profile" = yes; then
849 if test "$ac_cv_c_compiler_gnu" = yes; then
850 IRC_CFLAGS="$IRC_CFLAGS -pg"
851 AC_MSG_RESULT([yes, adding -pg])
852 AC_DEFINE(CHARYBDIS_PROFILE, 1, [Define this if you are profiling.])
854 AC_MSG_RESULT([no, profile builds only work with gcc])
860 AC_ARG_ENABLE(balloc,
861 AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
862 [balloc=$enableval], [balloc=yes])
864 if test "$balloc" = no; then
865 AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
868 AC_ARG_ENABLE(small-net,
869 AC_HELP_STRING([--enable-small-net],[Enable small network support.]),
870 [small_net=$enableval], [small_net=no])
872 if test "$small_net" = yes; then
873 dnl AC_DEFINE([HASHSIZE], 4096, [Max number of buckets in hash tables.])
874 AC_DEFINE([NICKNAMEHISTORYLENGTH], 1500, [Size of the WHOWAS array.])
875 AC_DEFINE([CHANNEL_HEAP_SIZE], 256, [Size of the channel heap.])
876 AC_DEFINE([BAN_HEAP_SIZE], 128, [Size of the ban heap.])
877 AC_DEFINE([CLIENT_HEAP_SIZE], 256, [Size of the client heap.])
878 AC_DEFINE([LCLIENT_HEAP_SIZE], 128, [Size of the local client heap.])
879 AC_DEFINE([PCLIENT_HEAP_SIZE], 32, [Size of the pre-client heap.])
880 AC_DEFINE([USER_HEAP_SIZE], 128, [Size of the user heap.])
881 AC_DEFINE([DNODE_HEAP_SIZE], 256, [Size of the dlink_node heap.])
882 AC_DEFINE([TOPIC_HEAP_SIZE], 256, [Size of the topic heap.])
883 AC_DEFINE([LINEBUF_HEAP_SIZE], 128, [Size of the linebuf heap.])
884 AC_DEFINE([MEMBER_HEAP_SIZE], 256, [Sizeof member heap.])
885 AC_DEFINE([ND_HEAP_SIZE], 128, [Size of the nick delay heap.])
886 AC_DEFINE([CONFITEM_HEAP_SIZE], 128, [Size of the confitem heap.])
887 AC_DEFINE([MONITOR_HEAP_SIZE], 128, [Size of the monitor heap.])
888 AC_DEFINE([FD_HEAP_SIZE], 128, [Size of fd heap.])
889 AC_DEFINE([AWAY_HEAP_SIZE], 128, [Size of away heap.])
891 dnl These settings are for a large network like efnet..they will use lots of memory
892 dnl so enable small net unless you really need this much support
893 AC_DEFINE([NICKNAMEHISTORYLENGTH], 15000, [Size of the WHOWAS array.])
894 AC_DEFINE([CHANNEL_HEAP_SIZE], 8192, [Size of the channel heap.])
895 AC_DEFINE([BAN_HEAP_SIZE], 4096, [Size of the ban heap.])
896 AC_DEFINE([CLIENT_HEAP_SIZE], 8192, [Size of the client heap.])
897 AC_DEFINE([LCLIENT_HEAP_SIZE], 1024, [Size of the local client heap.])
898 AC_DEFINE([PCLIENT_HEAP_SIZE], 256, [Size of the pre-client heap.])
899 AC_DEFINE([USER_HEAP_SIZE], 8192, [Size of the user heap.])
900 AC_DEFINE([DNODE_HEAP_SIZE], 8192, [Size of the dlink_node heap.])
901 AC_DEFINE([TOPIC_HEAP_SIZE], 4096, [Size of the topic heap.])
902 AC_DEFINE([LINEBUF_HEAP_SIZE], 2048, [Size of the linebuf heap.])
903 AC_DEFINE([MEMBER_HEAP_SIZE], 32768, [Sizeof member heap.])
904 AC_DEFINE([ND_HEAP_SIZE], 512, [Size of the nick delay heap.])
905 AC_DEFINE([CONFITEM_HEAP_SIZE], 256, [Size of the confitem heap.])
906 AC_DEFINE([MONITOR_HEAP_SIZE], 1024, [Size of the monitor heap.])
907 AC_DEFINE([FD_HEAP_SIZE], 1024, [Size of fd heap.])
908 AC_DEFINE([AWAY_HEAP_SIZE], 512, [Size of away heap.])
912 AC_HELP_STRING([--with-nicklen=LENGTH],[Set the nick length to LENGTH (default 15, max 50)]),
914 if test $withval -ge 50; then
916 AC_MSG_WARN([NICKLEN has a hard limit of 50. Setting NICKLEN=50])
922 AC_ARG_WITH(topiclen,
923 AC_HELP_STRING([--with-topiclen=NUMBER],[Set the max topic length to NUMBER (default 390, max 390)]),
925 if test $withval -ge 390; then
927 AC_MSG_WARN([TOPICLEN has a hard limit of 390. Setting TOPICLEN=390])
933 AC_DEFINE_UNQUOTED(TOPICLEN, ${TOPICLEN}, [Maximum topic length (<=390)])
934 AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
937 dnl Some first-stage sanity checks.
938 if test "$shared_modules" = yes; then
940 if test "$CYGWIN" = yes; then
941 AC_MSG_WARN([disabling shared modules; Cygwin is at present unable to build them.])
945 dnl TenDRA's cc is called tcc too.
946 if test "$CC" = tcc -a "$TenDRA" = "no"; then
947 AC_MSG_WARN([disabling shared modules: Tiny C Compiler can't create PIC])
952 dnl Second stage: check for functions and headers.
953 if test "$shared_modules" = yes; then
955 AC_CHECK_HEADERS(dlfcn.h)
956 AC_SEARCH_LIBS(shl_load, dld,
958 AC_DEFINE(HAVE_SHL_LOAD, 1, [Define if the shl_load function is available.])
960 MOD_TARGET=hpux_shared
966 AC_SEARCH_LIBS(dlopen, [dl c_r],
968 AC_DEFINE(HAVE_DLOPEN, 1, [Define if the dlopen function is available.])
970 MOD_TARGET=shared_modules
972 if test "$AppleGCC" = yes; then
973 AC_CHECK_HEADERS([mach-o/dyld.h])
975 AC_CHECK_FUNC(dlsym, ,
977 AC_MSG_WARN([dlsym is not available, shared modules disabled])
980 AC_CHECK_FUNCS(dlfunc)
988 AC_DEFINE_UNQUOTED(SHARED_SUFFIX, "$SUFFIX", [Suffix for shared libraries on this platform.])
990 dnl Third stage - wrangling the linker.
991 if test "$shared_modules" = yes; then
992 # The GNU linker requires the -export-dynamic option to make
993 # all symbols visible in the dynamic symbol table.
994 hold_ldflags=$LDFLAGS
995 AC_MSG_CHECKING(for the ld -export-dynamic flag)
996 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic -Werror"
997 AC_LINK_IFELSE(AC_LANG_PROGRAM([],[int i;]), found=yes, found=no)
998 LDFLAGS=$hold_ldflags
1000 if expr "`uname -s`" : ^IRIX >/dev/null 2>&1; then
1001 found="no, IRIX ld uses -B,dynamic"
1002 LDFLAGS="${LDFLAGS} -Wl,-B,dynamic"
1005 if expr "`uname -s`" : ^AIX >/dev/null 2>&1; then
1006 found="no, AIX ld uses -G -brtl"
1007 LDFLAGS="${LDFLAGS} -Wl,-G,-brtl"
1010 AC_MSG_RESULT($found)
1012 if test "$found" = yes; then
1013 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
1016 AC_MSG_CHECKING(for compiler option to produce PIC)
1017 dnl The order should be here to check for groups of compilers,
1018 dnl then for odd compilers, then if no PICFLAGS were set up,
1019 dnl check for GCC and set defaults, or else error. -jmallett
1020 if test "$SGS" = "yes"; then
1021 AC_MSG_RESULT([SVR4 SGS interfaces: -KPIC -DPIC -G])
1022 PICFLAGS="-KPIC -DPIC -G"
1025 if test "$AppleGCC" = "yes"; then
1026 AC_MSG_RESULT([Darwin Mach-O bundles: -fno-common -bundle -flat_namespace -undefined suppress])
1027 PICFLAGS="-fno-common -bundle -flat_namespace -undefined suppress"
1029 dnl Please note, that on HPUX two different stages of module compilation occurs, since
1030 dnl while compiling modules, the compiler does not allow you to give arguments
1031 dnl to the linker. (I did not design this)
1032 dnl So we need -c in the first stage of module compilation.
1033 dnl In the second stage, we link the modules via ld -b.
1034 dnl Additionally, HPUX does not like -export-dynamic, it likes -E instead.
1036 if test "$HPUX" = "yes" -a "$CC" != gcc; then
1037 AC_MSG_RESULT(HP-UX cc: +z -r -q -n)
1038 PICFLAGS="+z -r -q -n -c"
1039 AC_MSG_CHECKING([if +ESfic is required on this platform])
1041 if expr "`$CC +ESfic 2>&1`" : ".*neither supported.*" >/dev/null; then
1045 PICFLAGS="$PICFLAGS +ESfic"
1048 LDFLAGS="${LDFLAGS} -Wl,-E"
1050 if test "$Tru" = yes -a "$CC" != gcc; then
1051 AC_MSG_RESULT([Tru64: -shared -expect_unresolved '*'])
1052 PICFLAGS="-shared -expect_unresolved '*' "
1053 LDFLAGS="-call_shared"
1055 if test -z "$PICFLAGS"; then
1056 if test "$ac_cv_c_compiler_gnu" = "yes"; then
1057 AC_MSG_RESULT(gcc: -fPIC -DPIC -shared)
1058 PICFLAGS="-fPIC -DPIC -shared"
1066 # This must be down here, or it will mess up checks like the ones
1067 # for -Wl,-export-dynamic
1069 AC_ARG_ENABLE(warnings,
1070 AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
1072 IRC_CFLAGS="$IRC_CFLAGS -O0"
1073 CFLAGS="$IRC_CFLAGS"
1075 CHARYBDIS_C_GCC_TRY_FLAGS([-Wall], charybdis_cv_c_gcc_w_all)
1076 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpointer-arith], charybdis_cv_c_gcc_w_pointer_arith)
1077 CHARYBDIS_C_GCC_TRY_FLAGS([-Wimplicit -Wnested-externs], charybdis_cv_c_gcc_w_implicit)
1078 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-align], charybdis_cv_c_gcc_w_cast_align)
1079 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-qual], charybdis_cv_c_gcc_w_cast_qual)
1080 CHARYBDIS_C_GCC_TRY_FLAGS([-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations], charybdis_cv_c_gcc_prototypes)
1081 CHARYBDIS_C_GCC_TRY_FLAGS([-Wparenthesis], charybdis_cv_c_gcc_parenthesis)
1082 CHARYBDIS_C_GCC_TRY_FLAGS([-W -Wno-unused], charybdis_cv_c_gcc_w)
1083 CHARYBDIS_C_GCC_TRY_FLAGS([-Wextra], charybdis_cv_c_gcc_w_extra)
1084 CHARYBDIS_C_GCC_TRY_FLAGS([-Wshadow], charybdis_cv_c_gcc_w_shadow)
1085 CHARYBDIS_C_GCC_TRY_FLAGS([-Wmissing-noreturn], charybdis_cv_c_gcc_w_missing_noreturn)
1086 CHARYBDIS_C_GCC_TRY_FLAGS([-Wundef], charybdis_cv_c_gcc_w_undef)
1087 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpacked], charybdis_cv_c_gcc_w_packed)
1088 CHARYBDIS_C_GCC_TRY_FLAGS([-Wnested-externs], charybdis_cv_c_gcc_w_nested_externs)
1089 CHARYBDIS_C_GCC_TRY_FLAGS([-Wbad-function-cast], charybdis_cv_c_gcc_w_bad_function_cast)
1090 CHARYBDIS_C_GCC_TRY_FLAGS([-Wunused-function -Wunused-label -Wunused-value -Wunused-variable], charybdis_cv_c_gcc_w_unused)
1091 CHARYBDIS_C_GCC_TRY_FLAGS([-Wredundant-decls], charybdis_cv_c_gcc_w_redundant_decls)
1092 CHARYBDIS_C_GCC_TRY_FLAGS([-Wfloat-equal], charybdis_cv_c_gcc_w_float_equal)
1093 CHARYBDIS_C_GCC_TRY_FLAGS([-Wformat=2], charybdis_cv_c_gcc_w_format)
1094 CHARYBDIS_C_GCC_TRY_FLAGS([-pedantic], charybdis_cv_c_gcc_pedantic)
1096 IRC_CFLAGS="$CFLAGS"
1099 if test "$shared_modules" = no; then
1101 MOD_TARGET="libmodules.a"
1102 MODULES_LIBS="../modules/libmodules.a"
1104 AC_DEFINE(STATIC_MODULES, 1, [Define to 1 if dynamic modules can't be used.])
1105 AC_MSG_WARN([shared module support has been disabled!])
1108 dnl Stage 5 - underscores in front of symbol names.
1109 if test "$shared_modules" = yes; then
1111 AC_CHECK_FUNC(nlist,,
1112 AC_CHECK_LIB(dl, nlist, nlist_lib="-ldl",
1113 AC_CHECK_LIB(elf, nlist, nlist_lib="-lelf",)
1117 dnl We need to find out whether underscores are appended to symbol
1118 dnl names in executable files. First, though, we need to see
1119 dnl where nlist.h is hiding.
1120 AC_CHECK_HEADER(libelf/nlist.h, [ nlist_h="libelf/nlist.h" ], )
1121 AC_CHECK_HEADER(elf/nlist.h, [ nlist_h="elf/nlist.h" ], )
1122 AC_CHECK_HEADER(nlist.h, [ nlist_h="nlist.h" ], )
1123 if test x"$nlist_h" = "x"; then
1124 AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "", [String containing extra underscores prepended to symbols loaded from modules.])
1126 AC_MSG_CHECKING(for extra underscores prepended to symbol names)
1127 AC_CACHE_VAL(symbol_underscores,
1129 cat << EOF > conftest.c
1133 void _modinit(void);
1134 int main(int argc, char *argv[[]]) {
1136 struct nlist nl[[5]];
1138 /* fill the names in this way, so it'll work almost everywhere */
1139 nl[[0]].n_name = "_modinit";
1140 nl[[1]].n_name = "__modinit";
1141 nl[[2]].n_name = "___modinit";
1142 nl[[3]].n_name = "____modinit";
1143 nl[[0]].n_value = nl[[1]].n_value = nl[[2]].n_value = nl[[3]].n_value = nl[[4]].n_name = NULL;
1145 if(argc < 2 || (nlist(argv[[1]], nl)) == -1) exit(-1);
1146 for(i = 0; i < 4; i++) {
1147 if(nl[[i]].n_value != NULL)
1150 for(j = 0; j < i; j++)
1157 void _modinit(void) { return; }
1159 $CC $CPPFLAGS $IRC_CFLAGS -o conftest conftest.c $nlist_lib >/dev/null 2>&1
1160 symbol_underscores=`./conftest conftest`
1161 AC_MSG_RESULT($symbol_underscores)
1162 $RM -f conftest conftest.c
1164 AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "${symbol_underscores}", [String containing extra underscores prepended to symbols loaded from modules.])
1168 AC_SUBST(MODULES_LIBS)
1169 AC_SUBST(MOD_TARGET)
1171 AC_SUBST(SSL_SRCS_ENABLE)
1172 AC_SUBST(SSL_INCLUDES)
1177 AC_SUBST(IRC_CFLAGS)
1181 if test "$prefix" = "NONE"; then
1182 AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$ac_default_prefix", [Prefix where the ircd is installed.])
1186 dnl Don't get bitten by Cygwin's stupidity if the user specified
1187 dnl a custom prefix with a trailing slash
1189 prefix=`echo $prefix | sed 's/\/$//'`
1190 AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$prefix", [Prefix where the ircd is installed.])
1197 extensions/Makefile \
1198 unsupported/Makefile \
1208 if test "$cf_openssl_version_ok" = yes; then
1214 if test "$shared_modules" = yes; then
1222 Install directory : $prefix
1226 Socket Engine : $SELECT_TYPE
1227 Small network : $small_net
1228 Block allocator : $balloc
1230 Nickname length : $NICKLEN
1231 Topic length : $TOPICLEN
1233 Use (g)make to compile Charybdis, then (g)make install to install it.