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.1])
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 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(SunOS or Solaris)
101 AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.])
105 AC_MSG_RESULT(AIX - Sorry you poor bastard..really we are)
106 IRC_CFLAGS="$IRC_CFLAGS -Wl,-brtl -Wl,-G"
113 if test "$ac_cv_c_compiler_gnu" = yes; then
114 AC_MSG_CHECKING(if $CC is Apple GCC)
116 case `$CC -v 2>&1 | tail -n 1` in
127 IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall -std=gnu99"
130 dnl If we support -g, use it!
131 if test "$ac_cv_prog_cc_g" = yes; then
132 dnl Tru64 needs -g3 for -O2
133 if test "$Tru" = yes; then
134 IRC_CFLAGS="$IRC_CFLAGS -g3"
136 IRC_CFLAGS="$IRC_CFLAGS -g"
140 dnl SVR4 SGS based on what we know about the compiler -jmallett
141 AC_MSG_CHECKING(if $CC supports the SVR4 SGS interfaces)
142 if test "$SGS" = "yes"; then
148 dnl We prefer gcc -MM because it's a lot less bloated
149 AC_PATH_PROG(MKDEP, mkdep)
150 AC_PATH_PROG(MAKEDEPEND, makedepend)
152 AC_MSG_CHECKING(how to generate dependency info)
156 if test "$ac_cv_c_compiler_gnu" = yes; then
157 AC_MSG_RESULT(gcc -MM)
159 elif test ! -z "$MKDEP"; then
162 dnl Tru64's mkdep is very loud
163 if test -z "$Tru"; then
166 STDOUT=" 2> /dev/null"
168 elif test "$SunWorkShop" = yes; then
169 AC_MSG_RESULT($CC -xM)
171 STDOUT="> .depend 2> /dev/null"
172 elif test ! -z "$MAKEDEPEND"; then
173 AC_MSG_RESULT(makedepend)
174 MKDEP="$MAKEDEPEND -f-"
176 AC_MSG_RESULT([nothing suitable.. forget it!])
183 dnl check for /dev/null so we can use it to hold evil fd's
184 AC_MSG_CHECKING([for /dev/null])
185 if test -c /dev/null ; then
186 AC_DEFINE(PATH_DEVNULL, "/dev/null", [Path to /dev/null])
189 AC_DEFINE(PATH_DEVNULL, "devnull.log", [Path to /dev/null])
190 AC_MSG_RESULT(no - using devnull.log)
193 dnl jdc -- If CFLAGS is defined, best use it everywhere...
194 dnl NOTE: jv says it must be added to the *END*, because things like
195 dnl "gcc -O9 -O2" will result in -O2 getting preference. How stupid.
196 if test ! -z "$CFLAGS"; then
197 IRC_CFLAGS="$IRC_CFLAGS $CFLAGS"
202 AC_PROG_GCC_TRADITIONAL
209 AC_PATH_PROG(SED, sed)
212 AC_PATH_PROG(RANLIB, ranlib)
213 AC_PATH_PROG(TOUCH, touch)
217 dnl AC_PROG_YACC defaults to yacc unconditionally if nothing can be found
218 if test "$YACC" = "yacc" -a -z "`which $YACC 2>/dev/null`"; then
219 AC_MSG_ERROR([could not locate a suitable parser generator; install bison, yacc, or byacc])
224 if test "$LEX" = ":"; then
225 AC_MSG_ERROR([could not locate a suitable lexical generator, install flex or lex.])
228 dnl use directory structure of cached as default (hack)
229 if test "$libexecdir" = '${exec_prefix}/libexec' &&
230 test "$localstatedir" = '${prefix}/var'; then
231 libexecdir='${bindir}'
232 localstatedir='${prefix}'
235 dnl Checks for header files.
238 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])
240 dnl Stuff that the memory manager (imalloc) depends on
241 dnl ==================================================
244 if test "$ac_cv_header_machine_endian_h" = "no" ; then
249 AC_CHECK_SIZEOF(short)
251 AC_CHECK_SIZEOF(long)
252 AC_CHECK_SIZEOF(long long)
254 dnl Networking Functions
255 dnl ====================
257 AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR([You have no socket()! Aborting.])])
259 dnl SunOS/Solaris required libnsl for inet_ntoa()
260 if test x"$SUN" = xyes; then
261 AC_SEARCH_LIBS(inet_ntoa, nsl,, [AC_MSG_ERROR([libnsl not found! Aborting.])])
264 AC_CHECK_TYPE(socklen_t, ,
265 [AC_DEFINE([socklen_t], [unsigned int],
266 [If we don't have a real socklen_t, unsigned int is good enough.])],
267 [#include <sys/types.h>
268 #include <sys/socket.h>])
271 AC_HELP_STRING([--enable-ipv6],[Enable IPv6 support]),[ipv6=$enableval],[ipv6=no])
273 AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
275 CRYPT_LIB=$ac_cv_search_crypt
277 if test "$CRYPT_LIB" = "none required"; then
279 elif test "$CRYPT_LIB" = no; then
285 if test "$ac_cv_header_sys_wait_h" = yes -o "$ac_cv_header_wait_h" = yes; then
287 dnl We need one of the above to build viconf. Just a sanity check,
288 dnl we don't want to stop people from building the rest of ircd
289 dnl just because they can't build viconf.
296 dnl See whether we can include both string.h and strings.h.
297 AC_CACHE_CHECK([whether string.h and strings.h may both be included],
298 gcc_cv_header_string,
302 #include <strings.h>],
303 [gcc_cv_header_string=yes],
304 [gcc_cv_header_string=no])
307 if test "$gcc_cv_header_string" = "yes"; then
308 AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h])
313 dnl Check for stdarg.h - if we can't find it, halt configure
314 AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - charybdis will not compile without it **])])
316 dnl Checks for the existence of strlcat, strlcpy, basename...
317 dnl This more reliable test only works with gcc though.
319 if test "$ac_cv_c_compiler_gnu" = yes; then
321 AC_MSG_CHECKING(for strlcpy)
323 CFLAGS="$CFLAGS -Wimplicit -Werror"
327 [[#include <string.h>
328 #include <stdlib.h>]],
329 [[char *a = malloc(6);
330 strlcpy(a, "hello", 6);]]
333 AC_DEFINE(HAVE_STRLCPY, 1, [Define if strlcpy is available (most BSDs.)])],
337 AC_MSG_CHECKING(for strlcat)
340 [[#include <string.h>
341 #include <stdlib.h>]],
342 [[char *a = malloc(6);
344 strlcat(a, "hello", 6);]]
347 AC_DEFINE(HAVE_STRLCAT, 1, [Define if strlcat is available (most BSDs.)])],
355 dnl Better than nothing. The more complicated test above probably fixes powerpc,
358 AC_CHECK_FUNCS([strlcat strlcpy])
362 AC_CHECK_TYPE([u_int32_t], [],
364 AC_CHECK_TYPE([uint32_t],
366 AC_DEFINE(u_int32_t, [uint32_t], [If system does not define u_int32_t, define a reasonable substitute.])
369 AC_MSG_WARN([system has no u_int32_t or uint32_t, default to unsigned long int])
370 AC_DEFINE(u_int32_t, [unsigned long int], [If system does not define u_int32_t, define to unsigned long int here.])
374 AC_CHECK_TYPE([u_int16_t], [],
376 AC_CHECK_TYPE([uint16_t],
378 AC_DEFINE(u_int16_t, [uint16_t], [If system does not define u_int16_t, define a usable substitute])
381 AC_MSG_WARN([system has no u_int16_t or uint16_t, default to unsigned short int])
382 AC_DEFINE(u_int16_t, [unsigned short int], [If system does not define u_int16_t, define a usable substitute.])
386 AC_CHECK_TYPE([in_port_t], [],
387 [AC_DEFINE(in_port_t, [u_int16_t], [If system does not define in_port_t, define it to what it should be.])],
388 [[#include <sys/types.h>
389 #include <netinet/in.h>]])
391 AC_CHECK_TYPE([sa_family_t], [],
392 [AC_DEFINE(sa_family_t, [u_int16_t], [If system does not define sa_family_t, define it here.])],
393 [[#include <sys/types.h>
394 #include <sys/socket.h>]])
396 AC_CHECK_TYPES([uintptr_t])
398 dnl check for various functions...
399 AC_CHECK_FUNCS([socketpair vsnprintf mmap gettimeofday strdup strndup ])
403 dnl Specialized functions checks
404 dnl ============================
406 dnl check for nanosleep
407 AC_CHECK_FUNC(nanosleep,,[AC_CHECK_LIB(rt,nanosleep,
409 [AC_CHECK_LIB(posix4,nanosleep, LIBS="${LIBS} -lposix4"
411 if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_posix4_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno
413 AC_MSG_RESULT("nanosleep not found..using select for delay")
415 AC_DEFINE([HAVE_NANOSLEEP], 1, [Define if nanosleep exists])
419 AC_MSG_CHECKING(for OpenSSL)
420 AC_ARG_ENABLE(openssl,
421 [AC_HELP_STRING([--enable-openssl[=DIR]],[Enable OpenSSL support (DIR optional).])
422 AC_HELP_STRING([--disable-openssl],[Disable OpenSSL support.])],
423 [cf_enable_openssl=$enableval],
424 [cf_enable_openssl="auto"])
426 if test "$cf_enable_openssl" != "no" ; then
427 cf_openssl_basedir=""
428 if test "$cf_enable_openssl" != "auto" &&
429 test "$cf_enable_openssl" != "yes" ; then
430 dnl Support for --enable-openssl=/some/place
431 cf_openssl_basedir="`echo ${cf_enable_openssl} | sed 's/\/$//'`"
433 dnl Do the auto-probe here. Check some common directory paths.
434 for dirs in /usr/local/ssl /usr/pkg /usr/local \
435 /usr/local/openssl ; do
436 if test -f "${dirs}/include/openssl/opensslv.h" ; then
437 cf_openssl_basedir="${dirs}"
443 dnl Now check cf_openssl_found to see if we found anything.
444 if test ! -z "$cf_openssl_basedir"; then
445 if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
446 SSL_INCLUDES="-I${cf_openssl_basedir}/include"
447 SSL_LIBS="-L${cf_openssl_basedir}/lib"
449 dnl OpenSSL wasn't found in the directory specified. Naughty
451 cf_openssl_basedir=""
454 dnl Check for stock FreeBSD 4.x and 5.x systems, since their files
455 dnl are in /usr/include and /usr/lib. In this case, we don't want to
456 dnl change INCLUDES or LIBS, but still want to enable OpenSSL.
457 dnl We can't do this check above, because some people want two versions
458 dnl of OpenSSL installed (stock FreeBSD 4.x/5.x and /usr/local/ssl)
459 dnl and they want /usr/local/ssl to have preference.
460 if test -f "/usr/include/openssl/opensslv.h" ; then
461 cf_openssl_basedir="/usr"
465 dnl If we have a basedir defined, then everything is okay. Otherwise,
466 dnl we have a problem.
467 if test ! -z "$cf_openssl_basedir"; then
468 AC_MSG_RESULT($cf_openssl_basedir)
469 cf_enable_openssl="yes"
471 AC_MSG_RESULT([not found. Specify a correct path?])
472 cf_enable_openssl="no"
474 unset cf_openssl_basedir
476 dnl If --disable-openssl was specified
477 AC_MSG_RESULT(disabled)
480 save_CPPFLAGS="$CPPFLAGS"
481 CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
483 LIBS="$LIBS $SSL_LIBS"
484 if test "$cf_enable_openssl" != no; then
485 dnl Check OpenSSL version (must be 0.9.6 or above!)
486 AC_MSG_CHECKING(for OpenSSL 0.9.6 or above)
489 [#include <openssl/opensslv.h>
490 #include <stdlib.h>],
491 [[if ( OPENSSL_VERSION_NUMBER >= 0x00906000)
492 exit(0); else exit(1);]]),
493 cf_openssl_version_ok=yes,
494 cf_openssl_version_ok=no,
495 cf_openssl_version_ok=no)
497 if test "$cf_openssl_version_ok" = yes; then
500 dnl Work around pmake/gmake conditional incompatibilities
501 AC_SUBST(ENCSPEED, encspeed)
503 dnl Do all the HAVE_LIBCRYPTO magic -- and check for ciphers
504 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
505 AC_CHECK_LIB(crypto, RSA_free)
506 SSL_LIBS="$SSL_LIBS -lcrypto"
507 SSL_SRCS_ENABLE='$(SSL_SRCS)'
509 AC_MSG_RESULT(no - OpenSSL support disabled)
513 CPPFLAGS="$save_CPPFLAGS"
516 dnl End OpenSSL detection
519 dnl Specialized functions and libraries
520 dnl ===================================
522 AC_ARG_WITH(zlib-path,
523 AC_HELP_STRING([--with-zlib-path=DIR],[Path to libz.so for ziplinks support.]),
524 [LIBS="$LIBS -L$withval"],)
527 AC_HELP_STRING([--disable-zlib],[Disable ziplinks support]),
528 [zlib=$enableval],[zlib=yes])
530 if test "$zlib" = yes; then
532 AC_CHECK_HEADER(zlib.h, [
533 AC_CHECK_LIB(z, zlibVersion,
535 AC_SUBST(ZLIB_LD, -lz)
536 AC_DEFINE(HAVE_LIBZ, 1, [Define to 1 if zlib (-lz) is available.])
542 dnl IO Loop Selection
543 dnl =================
545 AC_ARG_ENABLE(ports, AC_HELP_STRING([--enable-ports],[Force solaris I/O ports subsystem usage.]),
546 [ if test $enableval = yes; then
547 SELECT_TYPE_EXPLICIT="ports"
553 AC_ARG_ENABLE(poll, AC_HELP_STRING([--enable-poll],[Force poll() usage.]),
554 [ if test $enableval = yes; then
555 SELECT_TYPE_EXPLICIT="poll"
561 AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select],[Force select() usage.]),
562 [ if test $enableval = yes; then
563 SELECT_TYPE_EXPLICIT="select"
569 AC_ARG_ENABLE(kqueue, AC_HELP_STRING([--enable-kqueue],[Force kqueue() usage.]),
570 [ if test $enableval = yes; then
571 SELECT_TYPE_EXPLICIT="kqueue"
577 AC_ARG_ENABLE(epoll, AC_HELP_STRING([--enable-epoll],[Force sys_epoll usage (Linux only).]),
578 [ if test $enableval = yes; then
579 SELECT_TYPE_EXPLICIT="epoll"
580 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
586 dnl **********************************************************************
587 dnl Check for --with-confdir
588 dnl **********************************************************************
590 AC_MSG_CHECKING([whether to modify confdir])
592 AC_HELP_STRING([--with-confdir=DIR],
593 [Directory to install config files.]),
594 [ confdir=`echo $withval | sed 's/\/$//'`
596 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
597 AC_SUBST_DIR([confdir]) ],
598 [ confdir='${prefix}/etc'
600 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
601 AC_SUBST_DIR([confdir])]
604 dnl **********************************************************************
605 dnl Check for --with-logdir
606 dnl **********************************************************************
608 AC_MSG_CHECKING([whether to modify logdir])
610 AC_HELP_STRING([--with-logdir=DIR],
611 [Directory where to write logfiles.]),
612 [ logdir=`echo $withval | sed 's/\/$//'`
614 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
615 AC_SUBST_DIR([logdir]) ],
616 [ logdir='${prefix}/logs'
618 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
619 AC_SUBST_DIR([logdir])]
622 dnl **********************************************************************
623 dnl Check for --with-helpdir
624 dnl **********************************************************************
626 AC_MSG_CHECKING([whether to modify helpdir])
628 AC_HELP_STRING([--with-helpdir=DIR],
629 [Directory to install help files.]),
630 [ helpdir=`echo $withval | sed 's/\/$//'`
632 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help files are installed.])
633 AC_SUBST_DIR([helpdir]) ],
634 [ helpdir='${prefix}/help'
636 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help file are installed.])
637 AC_SUBST_DIR([helpdir])]
640 dnl **********************************************************************
641 dnl Check for --with-moduledir
642 dnl **********************************************************************
644 AC_MSG_CHECKING([whether to modify moduledir])
645 AC_ARG_WITH(moduledir,
646 AC_HELP_STRING([--with-moduledir=DIR],
647 [Directory to install modules.]),
648 [ moduledir=`echo $withval | sed 's/\/$//'`
650 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
651 AC_SUBST_DIR([moduledir]) ],
652 [ moduledir='${prefix}/modules'
654 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
655 AC_SUBST_DIR([moduledir])]
658 if test ! -z "$SELECT_TYPE_EXPLICIT"; then
659 SELECT_TYPE="$SELECT_TYPE_EXPLICIT";
660 echo "Forcing $SELECT_TYPE to be enabled"
663 if test ! "x$use_ports" = "xno"; then
664 AC_CHECK_FUNCS(port_getn, [haveports=yes], [haveports=no])
665 if test "x$haveports" = "xyes" ; then
670 if test ! "x$use_select" = "xno"; then
671 AC_CHECK_FUNCS(select, [haveselect=yes], [haveselect=no])
672 if test "x$haveselect" = "xyes" ; then
677 if test ! "x$use_poll" = "xno"; then
678 AC_CHECK_FUNCS(poll, [havepoll=yes], [havepoll=no])
679 if test "x$havepoll" = "xyes" ; then
684 if test ! "x$use_kqueue" = "xno"; then
685 AC_CHECK_FUNCS(kevent, [havekqueue=yes], [havekqueue=no])
686 if test "x$havekqueue" = "xyes" ; then
691 if test ! "x$use_epoll" = "xno"; then
692 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
693 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
694 if test "x$haveepoll" = "xyes" ; then
695 AC_MSG_CHECKING(for epoll support in kernel)
698 #include <sys/param.h>
699 #include <sys/types.h>
700 #include <sys/epoll.h>
701 #include <sys/syscall.h>
705 main(int argc, char **argv)
709 epfd = epoll_create(256);
710 return (epfd == -1 ? 1 : 0);
711 }, [AC_MSG_RESULT(yes)
712 AC_DEFINE(HAVE_EPOLL, 1,
713 [Define if your system supports the epoll system calls])
714 SELECT_TYPE="epoll"],
715 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
721 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
722 if test "x$haveepoll" = "xno" ; then
723 AC_MSG_CHECKING(for epoll system call)
726 #include <sys/param.h>
727 #include <sys/types.h>
728 #include <sys/epoll.h>
729 #include <sys/syscall.h>
733 epoll_create(int size)
735 return (syscall(__NR_epoll_create, size));
739 main(int argc, char **argv)
743 epfd = epoll_create(256);
744 exit (epfd == -1 ? 1 : 0);
745 }, [AC_MSG_RESULT(yes)
746 AC_DEFINE(HAVE_EPOLL, 1,
747 [Define if your system supports the epoll system calls])
748 SELECT_TYPE="epoll"],
749 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
757 if test -z "$SELECT_TYPE"; then
758 AC_MSG_ERROR([Unable to find a usable IO interface],)
761 echo "Using $SELECT_TYPE for select loop."
763 AC_DEFINE_UNQUOTED(SELECT_TYPE, "$SELECT_TYPE", [This is the type of IO loop we are using])
764 AC_SUBST(SELECT_TYPE)
767 dnl Debug-related options
768 dnl =====================
770 AC_ARG_ENABLE(assert,
771 AC_HELP_STRING([--enable-assert],[Enable assert(). Choose between soft(warnings) and hard(aborts the daemon)]),
772 [assert=$enableval], [assert=no])
774 if test "$assert" = no; then
775 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
776 elif test "$assert" = soft; then
777 AC_DEFINE(SOFT_ASSERT, 1, [Define this to enable soft asserts.])
778 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
779 elif test "$assert" = yes; then
783 AC_MSG_CHECKING(if you want IO Debugging hooks)
784 AC_ARG_ENABLE(iodebug,
785 AC_HELP_STRING([--enable-iodebug],[Enable IO Debugging hooks]),
786 [iodebug=$enableval], [iodebug=no])
788 if test "$iodebug" = yes; then
789 AC_DEFINE(USE_IODEBUG_HOOKS, 1, [Define this to enable IO Debug hooks.])
796 AC_MSG_CHECKING(if you want to do a profile build)
797 AC_ARG_ENABLE(profile,
798 AC_HELP_STRING([--enable-profile],[Enable profiling]),
799 [profile=$enableval], [profile=no])
801 if test "$profile" = yes; then
802 if test "$ac_cv_c_compiler_gnu" = yes; then
803 IRC_CFLAGS="$IRC_CFLAGS -pg"
804 AC_MSG_RESULT([yes, adding -pg])
805 AC_DEFINE(CHARYBDIS_PROFILE, 1, [Define this if you are profiling.])
807 AC_MSG_RESULT([no, profile builds only work with gcc])
813 AC_ARG_ENABLE(balloc,
814 AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
815 [balloc=$enableval], [balloc=yes])
817 if test "$balloc" = no; then
818 AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
821 AC_ARG_ENABLE(small-net,
822 AC_HELP_STRING([--enable-small-net],[Enable small network support.]),
823 [small_net=$enableval], [small_net=no])
825 if test "$small_net" = yes; then
826 dnl AC_DEFINE([HASHSIZE], 4096, [Max number of buckets in hash tables.])
827 AC_DEFINE([NICKNAMEHISTORYLENGTH], 1500, [Size of the WHOWAS array.])
828 AC_DEFINE([CHANNEL_HEAP_SIZE], 256, [Size of the channel heap.])
829 AC_DEFINE([BAN_HEAP_SIZE], 128, [Size of the ban heap.])
830 AC_DEFINE([CLIENT_HEAP_SIZE], 256, [Size of the client heap.])
831 AC_DEFINE([LCLIENT_HEAP_SIZE], 128, [Size of the local client heap.])
832 AC_DEFINE([PCLIENT_HEAP_SIZE], 32, [Size of the pre-client heap.])
833 AC_DEFINE([USER_HEAP_SIZE], 128, [Size of the user heap.])
834 AC_DEFINE([DNODE_HEAP_SIZE], 256, [Size of the dlink_node heap.])
835 AC_DEFINE([TOPIC_HEAP_SIZE], 256, [Size of the topic heap.])
836 AC_DEFINE([LINEBUF_HEAP_SIZE], 128, [Size of the linebuf heap.])
837 AC_DEFINE([MEMBER_HEAP_SIZE], 256, [Sizeof member heap.])
838 AC_DEFINE([ND_HEAP_SIZE], 128, [Size of the nick delay heap.])
839 AC_DEFINE([CONFITEM_HEAP_SIZE], 128, [Size of the confitem heap.])
840 AC_DEFINE([MONITOR_HEAP_SIZE], 128, [Size of the monitor heap.])
841 AC_DEFINE([FD_HEAP_SIZE], 128, [Size of fd heap.])
842 AC_DEFINE([AWAY_HEAP_SIZE], 128, [Size of away heap.])
844 dnl These settings are for a large network like efnet..they will use lots of memory
845 dnl so enable small net unless you really need this much support
846 AC_DEFINE([NICKNAMEHISTORYLENGTH], 15000, [Size of the WHOWAS array.])
847 AC_DEFINE([CHANNEL_HEAP_SIZE], 8192, [Size of the channel heap.])
848 AC_DEFINE([BAN_HEAP_SIZE], 4096, [Size of the ban heap.])
849 AC_DEFINE([CLIENT_HEAP_SIZE], 8192, [Size of the client heap.])
850 AC_DEFINE([LCLIENT_HEAP_SIZE], 1024, [Size of the local client heap.])
851 AC_DEFINE([PCLIENT_HEAP_SIZE], 256, [Size of the pre-client heap.])
852 AC_DEFINE([USER_HEAP_SIZE], 8192, [Size of the user heap.])
853 AC_DEFINE([DNODE_HEAP_SIZE], 8192, [Size of the dlink_node heap.])
854 AC_DEFINE([TOPIC_HEAP_SIZE], 4096, [Size of the topic heap.])
855 AC_DEFINE([LINEBUF_HEAP_SIZE], 2048, [Size of the linebuf heap.])
856 AC_DEFINE([MEMBER_HEAP_SIZE], 32768, [Sizeof member heap.])
857 AC_DEFINE([ND_HEAP_SIZE], 512, [Size of the nick delay heap.])
858 AC_DEFINE([CONFITEM_HEAP_SIZE], 256, [Size of the confitem heap.])
859 AC_DEFINE([MONITOR_HEAP_SIZE], 1024, [Size of the monitor heap.])
860 AC_DEFINE([FD_HEAP_SIZE], 1024, [Size of fd heap.])
861 AC_DEFINE([AWAY_HEAP_SIZE], 512, [Size of away heap.])
865 AC_HELP_STRING([--with-nicklen=LENGTH],[Set the nick length to LENGTH (default 15, max 50)]),
867 if ! expr "$withval" + 0 >/dev/null 2>&1; then
868 AC_ERROR([NICKLEN must be a numeric value])
870 if test $withval -ge 50; then
872 AC_MSG_WARN([NICKLEN has a hard limit of 50. Setting NICKLEN=50])
878 AC_ARG_WITH(topiclen,
879 AC_HELP_STRING([--with-topiclen=NUMBER],[Set the max topic length to NUMBER (default 390, max 390)]),
881 if test $withval -ge 390; then
883 AC_MSG_WARN([TOPICLEN has a hard limit of 390. Setting TOPICLEN=390])
889 AC_DEFINE_UNQUOTED(TOPICLEN, ${TOPICLEN}, [Maximum topic length (<=390)])
890 AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
893 dnl Some first-stage sanity checks.
894 if test "$shared_modules" = yes; then
895 dnl TenDRA's cc is called tcc too.
896 if test "$CC" = tcc -a "$TenDRA" = "no"; then
897 AC_MSG_WARN([disabling shared modules: Tiny C Compiler can't create PIC])
902 dnl Second stage: check for functions and headers.
903 if test "$shared_modules" = yes; then
905 AC_CHECK_HEADERS(dlfcn.h)
906 AC_SEARCH_LIBS(shl_load, dld,
908 AC_DEFINE(HAVE_SHL_LOAD, 1, [Define if the shl_load function is available.])
910 MOD_TARGET=hpux_shared
916 AC_SEARCH_LIBS(dlopen, [dl c_r],
918 AC_DEFINE(HAVE_DLOPEN, 1, [Define if the dlopen function is available.])
920 MOD_TARGET=shared_modules
922 if test "$AppleGCC" = yes; then
923 AC_CHECK_HEADERS([mach-o/dyld.h])
925 AC_CHECK_FUNC(dlsym, ,
927 AC_MSG_WARN([dlsym is not available, shared modules disabled])
930 AC_CHECK_FUNCS(dlfunc)
938 AC_DEFINE_UNQUOTED(SHARED_SUFFIX, "$SUFFIX", [Suffix for shared libraries on this platform.])
940 dnl Third stage - wrangling the linker.
941 if test "$shared_modules" = yes; then
942 # The GNU linker requires the -export-dynamic option to make
943 # all symbols visible in the dynamic symbol table.
944 hold_ldflags=$LDFLAGS
945 AC_MSG_CHECKING(for the ld -export-dynamic flag)
946 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic -Werror"
947 AC_LINK_IFELSE(AC_LANG_PROGRAM([],[int i;]), found=yes, found=no)
948 LDFLAGS=$hold_ldflags
950 if expr "`uname -s`" : ^IRIX >/dev/null 2>&1; then
951 found="no, IRIX ld uses -B,dynamic"
952 LDFLAGS="${LDFLAGS} -Wl,-B,dynamic"
955 if expr "`uname -s`" : ^AIX >/dev/null 2>&1; then
956 found="no, AIX ld uses -G -brtl"
957 LDFLAGS="${LDFLAGS} -Wl,-G,-brtl"
960 AC_MSG_RESULT($found)
962 if test "$found" = yes; then
963 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
966 AC_MSG_CHECKING(for compiler option to produce PIC)
967 dnl The order should be here to check for groups of compilers,
968 dnl then for odd compilers, then if no PICFLAGS were set up,
969 dnl check for GCC and set defaults, or else error. -jmallett
970 if test "$SGS" = "yes"; then
971 AC_MSG_RESULT([SVR4 SGS interfaces: -KPIC -DPIC -G])
972 PICFLAGS="-KPIC -DPIC -G"
975 if test "$AppleGCC" = "yes"; then
976 AC_MSG_RESULT([Darwin Mach-O bundles: -fno-common -bundle -flat_namespace -undefined suppress])
977 PICFLAGS="-fno-common -bundle -flat_namespace -undefined suppress"
979 dnl Please note, that on HPUX two different stages of module compilation occurs, since
980 dnl while compiling modules, the compiler does not allow you to give arguments
981 dnl to the linker. (I did not design this)
982 dnl So we need -c in the first stage of module compilation.
983 dnl In the second stage, we link the modules via ld -b.
984 dnl Additionally, HPUX does not like -export-dynamic, it likes -E instead.
986 if test "$HPUX" = "yes" -a "$CC" != gcc; then
987 AC_MSG_RESULT(HP-UX cc: +z -r -q -n)
988 PICFLAGS="+z -r -q -n -c"
989 AC_MSG_CHECKING([if +ESfic is required on this platform])
991 if expr "`$CC +ESfic 2>&1`" : ".*neither supported.*" >/dev/null; then
995 PICFLAGS="$PICFLAGS +ESfic"
998 LDFLAGS="${LDFLAGS} -Wl,-E"
1000 if test "$Tru" = yes -a "$CC" != gcc; then
1001 AC_MSG_RESULT([Tru64: -shared -expect_unresolved '*'])
1002 PICFLAGS="-shared -expect_unresolved '*' "
1003 LDFLAGS="-call_shared"
1005 if test -z "$PICFLAGS"; then
1006 if test "$ac_cv_c_compiler_gnu" = "yes"; then
1007 AC_MSG_RESULT(gcc: -fPIC -DPIC -shared)
1008 PICFLAGS="-fPIC -DPIC -shared"
1016 # rpath, for finding libratbox.so at run time
1017 hold_ldflags=$LDFLAGS
1018 AC_MSG_CHECKING(for the ld -rpath flag)
1019 LDFLAGS="${LDFLAGS} -Wl,-rpath=${libdir}"
1020 AC_LINK_IFELSE(AC_LANG_PROGRAM([],[int i;]), found=yes, found=no)
1021 LDFLAGS=$hold_ldflags
1022 AC_MSG_RESULT($found)
1023 if test "$found" = yes; then
1024 LDFLAGS="${LDFLAGS} -Wl,-rpath=\${libdir}"
1027 # This must be down here, or it will mess up checks like the ones
1028 # for -Wl,-export-dynamic
1031 AC_ARG_ENABLE(warnings,
1032 AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
1034 IRC_CFLAGS="$IRC_CFLAGS -O0"
1035 CFLAGS="$IRC_CFLAGS"
1037 CHARYBDIS_C_GCC_TRY_FLAGS([-Wall], charybdis_cv_c_gcc_w_all)
1038 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpointer-arith], charybdis_cv_c_gcc_w_pointer_arith)
1039 CHARYBDIS_C_GCC_TRY_FLAGS([-Wimplicit -Wnested-externs], charybdis_cv_c_gcc_w_implicit)
1040 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-align], charybdis_cv_c_gcc_w_cast_align)
1041 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-qual], charybdis_cv_c_gcc_w_cast_qual)
1042 CHARYBDIS_C_GCC_TRY_FLAGS([-Wwrite-strings], charybdis_cv_c_gcc_w_write_strings)
1043 CHARYBDIS_C_GCC_TRY_FLAGS([-Werror-implicit-function-declaration], charybdis_cv_c_gcc_w_error_implicit_function_declaration)
1044 CHARYBDIS_C_GCC_TRY_FLAGS([-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations], charybdis_cv_c_gcc_prototypes)
1045 CHARYBDIS_C_GCC_TRY_FLAGS([-Wparenthesis], charybdis_cv_c_gcc_parenthesis)
1046 CHARYBDIS_C_GCC_TRY_FLAGS([-W -Wno-unused], charybdis_cv_c_gcc_w)
1047 CHARYBDIS_C_GCC_TRY_FLAGS([-Wextra], charybdis_cv_c_gcc_w_extra)
1048 CHARYBDIS_C_GCC_TRY_FLAGS([-Wshadow], charybdis_cv_c_gcc_w_shadow)
1049 CHARYBDIS_C_GCC_TRY_FLAGS([-Wmissing-noreturn], charybdis_cv_c_gcc_w_missing_noreturn)
1050 CHARYBDIS_C_GCC_TRY_FLAGS([-Wundef], charybdis_cv_c_gcc_w_undef)
1051 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpacked], charybdis_cv_c_gcc_w_packed)
1052 CHARYBDIS_C_GCC_TRY_FLAGS([-Wnested-externs], charybdis_cv_c_gcc_w_nested_externs)
1053 CHARYBDIS_C_GCC_TRY_FLAGS([-Wbad-function-cast], charybdis_cv_c_gcc_w_bad_function_cast)
1054 CHARYBDIS_C_GCC_TRY_FLAGS([-Wunused-function -Wunused-label -Wunused-value -Wunused-variable], charybdis_cv_c_gcc_w_unused)
1055 CHARYBDIS_C_GCC_TRY_FLAGS([-Wredundant-decls], charybdis_cv_c_gcc_w_redundant_decls)
1056 CHARYBDIS_C_GCC_TRY_FLAGS([-Wfloat-equal], charybdis_cv_c_gcc_w_float_equal)
1057 CHARYBDIS_C_GCC_TRY_FLAGS([-Wformat -Wformat-y2k -Wformat-security], charybdis_cv_c_gcc_w_format)
1058 CHARYBDIS_C_GCC_TRY_FLAGS([-pedantic], charybdis_cv_c_gcc_pedantic)
1060 IRC_CFLAGS="$CFLAGS"
1063 if test "$shared_modules" = no; then
1065 MOD_TARGET="libmodules.a"
1066 MODULES_LIBS="../modules/libmodules.a"
1068 AC_DEFINE(STATIC_MODULES, 1, [Define to 1 if dynamic modules can't be used.])
1069 AC_MSG_WARN([shared module support has been disabled!])
1072 dnl Stage 5 - underscores in front of symbol names.
1073 if test "$shared_modules" = yes; then
1075 AC_CHECK_FUNC(nlist,,
1076 AC_CHECK_LIB(dl, nlist, nlist_lib="-ldl",
1077 AC_CHECK_LIB(elf, nlist, nlist_lib="-lelf",)
1081 dnl We need to find out whether underscores are appended to symbol
1082 dnl names in executable files. First, though, we need to see
1083 dnl where nlist.h is hiding.
1084 AC_CHECK_HEADER(libelf/nlist.h, [ nlist_h="libelf/nlist.h" ], )
1085 AC_CHECK_HEADER(elf/nlist.h, [ nlist_h="elf/nlist.h" ], )
1086 AC_CHECK_HEADER(nlist.h, [ nlist_h="nlist.h" ], )
1087 if test x"$nlist_h" = "x"; then
1088 AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "", [String containing extra underscores prepended to symbols loaded from modules.])
1090 AC_MSG_CHECKING(for extra underscores prepended to symbol names)
1091 AC_CACHE_VAL(symbol_underscores,
1093 cat << EOF > conftest.c
1097 void _modinit(void);
1098 int main(int argc, char *argv[[]]) {
1100 struct nlist nl[[5]];
1102 /* fill the names in this way, so it'll work almost everywhere */
1103 nl[[0]].n_name = "_modinit";
1104 nl[[1]].n_name = "__modinit";
1105 nl[[2]].n_name = "___modinit";
1106 nl[[3]].n_name = "____modinit";
1107 nl[[0]].n_value = nl[[1]].n_value = nl[[2]].n_value = nl[[3]].n_value = nl[[4]].n_name = NULL;
1109 if(argc < 2 || (nlist(argv[[1]], nl)) == -1) exit(-1);
1110 for(i = 0; i < 4; i++) {
1111 if(nl[[i]].n_value != NULL)
1114 for(j = 0; j < i; j++)
1121 void _modinit(void) { return; }
1123 $CC $CPPFLAGS $IRC_CFLAGS -o conftest conftest.c $nlist_lib >/dev/null 2>&1
1124 symbol_underscores=`./conftest conftest`
1125 AC_MSG_RESULT($symbol_underscores)
1126 $RM -f conftest conftest.c
1128 AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "${symbol_underscores}", [String containing extra underscores prepended to symbols loaded from modules.])
1132 IRC_CFLAGS="$IRC_CFLAGS $CWARNS"
1134 AC_SUBST(MODULES_LIBS)
1135 AC_SUBST(MOD_TARGET)
1137 AC_SUBST(SSL_SRCS_ENABLE)
1138 AC_SUBST(SSL_INCLUDES)
1143 AC_SUBST(IRC_CFLAGS)
1147 if test "$prefix" = "NONE"; then
1148 AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$ac_default_prefix", [Prefix where the ircd is installed.])
1152 dnl Don't get bitten by Cygwin's stupidity if the user specified
1153 dnl a custom prefix with a trailing slash
1155 prefix=`echo $prefix | sed 's/\/$//'`
1156 AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$prefix", [Prefix where the ircd is installed.])
1163 extensions/Makefile \
1164 unsupported/Makefile \
1174 if test "$cf_openssl_version_ok" = yes; then
1180 if test "$shared_modules" = yes; then
1188 Install directory : $prefix
1192 Socket Engine : $SELECT_TYPE
1193 Small network : $small_net
1194 Block allocator : $balloc
1196 Nickname length : $NICKLEN
1197 Topic length : $TOPICLEN
1199 Use (g)make to compile Charybdis, then (g)make install to install it.