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([ircd-seven],[1.0.93])
15 AC_CONFIG_HEADER(include/setup.h)
17 AC_DEFINE([CHARYBDIS_VERSION], ["3.4-dev"], [Version of charybdis on which this release is based])
19 AC_PREFIX_DEFAULT($HOME/ircd)
24 dnl Checks for programs.
28 dnl Make sure autoconf doesn't interfere with cflags -jmallett
31 AC_CONFIG_SUBDIRS(libratbox)
33 dnl Check for various compilers. -jmallett
34 dnl But if $CC turns out to be gcc, sure as hell it's, well, gcc. -joshk
36 if test "$ac_cv_c_compiler_gnu" != yes; then
39 AC_MSG_CHECKING($CC -version for TenDRA or MIPSpro)
40 case `$CC -version 2>&1` in
42 AC_MSG_RESULT([yes, TenDRA])
44 CPPFLAGS="$CPPFLAGS -Ylonglong -Yansi -I/usr/include"
49 AC_MSG_RESULT([yes, MIPSpro])
60 AC_MSG_CHECKING([$CC -V for Sun Workshop, Forte, HPUX or Tru64 cc])
62 *Sun*WorkShop* | *Forte*Developer*)
63 AC_MSG_RESULT(Sun Workshop/Forte)
64 IRC_CFLAGS="-fast -xinline=dlinkAdd,dlinkAddBefore,dlinkAddTail,dlinkDelete,dlink_list_length,dlink_node,dlinkMoveList,_MyMalloc,_MyRealloc,_MyFree,_DupString"
69 AC_MSG_RESULT(Tru64 cc)
71 CPPFLAGS="-I/usr/local/include"
75 AC_MSG_RESULT(HPUX cc)
86 AC_MSG_CHECKING([uname -s for Solaris, AIX or HPUX])
90 dnl only do this if we haven't already detected the newer one
91 dnl and we're not already using gcc
93 if test "$HPUX" != yes -a "$ac_cv_c_compiler_gnu" = no; then
94 AC_MSG_RESULT(assuming old HPUX with its own cc)
95 IRC_CFLAGS="$IRC_CFLAGS +e"
98 AC_MSG_RESULT(already using newer HPUX)
102 AC_MSG_RESULT(SunOS or Solaris)
103 AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.])
107 AC_MSG_RESULT(AIX - Sorry you poor bastard..really we are)
108 IRC_CFLAGS="$IRC_CFLAGS -Wl,-brtl -Wl,-G"
115 if test "$ac_cv_c_compiler_gnu" = yes; then
116 AC_MSG_CHECKING(if $CC is Apple GCC)
118 case `$CC -v 2>&1 | tail -n 1` in
129 IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall -std=gnu99"
132 dnl If we support -g, use it!
133 if test "$ac_cv_prog_cc_g" = yes; then
134 dnl Tru64 needs -g3 for -O2
135 if test "$Tru" = yes; then
136 IRC_CFLAGS="$IRC_CFLAGS -g3"
138 IRC_CFLAGS="$IRC_CFLAGS -g"
142 dnl SVR4 SGS based on what we know about the compiler -jmallett
143 AC_MSG_CHECKING(if $CC supports the SVR4 SGS interfaces)
144 if test "$SGS" = "yes"; then
150 dnl We prefer gcc -MM because it's a lot less bloated
151 AC_PATH_PROG(MKDEP, mkdep)
152 AC_PATH_PROG(MAKEDEPEND, makedepend)
154 AC_MSG_CHECKING(how to generate dependency info)
158 if test "$ac_cv_c_compiler_gnu" = yes; then
159 AC_MSG_RESULT(gcc -MM)
161 elif test ! -z "$MKDEP"; then
164 dnl Tru64's mkdep is very loud
165 if test -z "$Tru"; then
168 STDOUT=" 2> /dev/null"
170 elif test "$SunWorkShop" = yes; then
171 AC_MSG_RESULT($CC -xM)
173 STDOUT="> .depend 2> /dev/null"
174 elif test ! -z "$MAKEDEPEND"; then
175 AC_MSG_RESULT(makedepend)
176 MKDEP="$MAKEDEPEND -f-"
178 AC_MSG_RESULT([nothing suitable.. forget it!])
185 dnl check for /dev/null so we can use it to hold evil fd's
186 AC_MSG_CHECKING([for /dev/null])
187 if test -c /dev/null ; then
188 AC_DEFINE(PATH_DEVNULL, "/dev/null", [Path to /dev/null])
191 AC_DEFINE(PATH_DEVNULL, "devnull.log", [Path to /dev/null])
192 AC_MSG_RESULT(no - using devnull.log)
195 dnl jdc -- If CFLAGS is defined, best use it everywhere...
196 dnl NOTE: jv says it must be added to the *END*, because things like
197 dnl "gcc -O9 -O2" will result in -O2 getting preference. How stupid.
198 if test ! -z "$CFLAGS"; then
199 IRC_CFLAGS="$IRC_CFLAGS $CFLAGS"
204 AC_PROG_GCC_TRADITIONAL
211 AC_PATH_PROG(SED, sed)
214 AC_PATH_PROG(RANLIB, ranlib)
215 AC_PATH_PROG(TOUCH, touch)
219 dnl AC_PROG_YACC defaults to yacc unconditionally if nothing can be found
220 if test "$YACC" = "yacc" -a -z "`which $YACC 2>/dev/null`"; then
221 AC_MSG_ERROR([could not locate a suitable parser generator; install bison, yacc, or byacc])
226 if test "$LEX" = ":"; then
227 AC_MSG_ERROR([could not locate a suitable lexical generator, install flex or lex.])
230 dnl use directory structure of cached as default (hack)
231 if test "$libexecdir" = '${exec_prefix}/libexec' &&
232 test "$localstatedir" = '${prefix}/var'; then
233 libexecdir='${bindir}'
234 localstatedir='${prefix}'
237 dnl Checks for header files.
240 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])
242 dnl Stuff that the memory manager (imalloc) depends on
243 dnl ==================================================
246 if test "$ac_cv_header_machine_endian_h" = "no" ; then
251 AC_CHECK_SIZEOF(short)
253 AC_CHECK_SIZEOF(long)
254 AC_CHECK_SIZEOF(long long)
256 dnl Networking Functions
257 dnl ====================
259 AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR([You have no socket()! Aborting.])])
261 dnl SunOS/Solaris required libnsl for inet_ntoa()
262 if test x"$SUN" = xyes; then
263 AC_SEARCH_LIBS(inet_ntoa, nsl,, [AC_MSG_ERROR([libnsl not found! Aborting.])])
266 AC_CHECK_TYPE(socklen_t, ,
267 [AC_DEFINE([socklen_t], [unsigned int],
268 [If we don't have a real socklen_t, unsigned int is good enough.])],
269 [#include <sys/types.h>
270 #include <sys/socket.h>])
273 AC_HELP_STRING([--enable-ipv6],[Enable IPv6 support]),[ipv6=$enableval],[ipv6=no])
275 AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
277 CRYPT_LIB=$ac_cv_search_crypt
279 if test "$CRYPT_LIB" = "none required"; then
281 elif test "$CRYPT_LIB" = no; then
287 if test "$ac_cv_header_sys_wait_h" = yes -o "$ac_cv_header_wait_h" = yes; then
289 dnl We need one of the above to build viconf. Just a sanity check,
290 dnl we don't want to stop people from building the rest of ircd
291 dnl just because they can't build viconf.
298 dnl See whether we can include both string.h and strings.h.
299 AC_CACHE_CHECK([whether string.h and strings.h may both be included],
300 gcc_cv_header_string,
304 #include <strings.h>],
305 [gcc_cv_header_string=yes],
306 [gcc_cv_header_string=no])
309 if test "$gcc_cv_header_string" = "yes"; then
310 AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h])
315 dnl Check for stdarg.h - if we can't find it, halt configure
316 AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - charybdis will not compile without it **])])
318 dnl Checks for the existence of strlcat, strlcpy, basename...
319 dnl This more reliable test only works with gcc though.
321 if test "$ac_cv_c_compiler_gnu" = yes; then
323 AC_MSG_CHECKING(for strlcpy)
325 CFLAGS="$CFLAGS -Wimplicit -Werror"
329 [[#include <string.h>
330 #include <stdlib.h>]],
331 [[char *a = malloc(6);
332 strlcpy(a, "hello", 6);]]
335 AC_DEFINE(HAVE_STRLCPY, 1, [Define if strlcpy is available (most BSDs.)])],
339 AC_MSG_CHECKING(for strlcat)
342 [[#include <string.h>
343 #include <stdlib.h>]],
344 [[char *a = malloc(6);
346 strlcat(a, "hello", 6);]]
349 AC_DEFINE(HAVE_STRLCAT, 1, [Define if strlcat is available (most BSDs.)])],
357 dnl Better than nothing. The more complicated test above probably fixes powerpc,
360 AC_CHECK_FUNCS([strlcat strlcpy])
364 AC_CHECK_TYPE([u_int32_t], [],
366 AC_CHECK_TYPE([uint32_t],
368 AC_DEFINE(u_int32_t, [uint32_t], [If system does not define u_int32_t, define a reasonable substitute.])
371 AC_MSG_WARN([system has no u_int32_t or uint32_t, default to unsigned long int])
372 AC_DEFINE(u_int32_t, [unsigned long int], [If system does not define u_int32_t, define to unsigned long int here.])
376 AC_CHECK_TYPE([u_int16_t], [],
378 AC_CHECK_TYPE([uint16_t],
380 AC_DEFINE(u_int16_t, [uint16_t], [If system does not define u_int16_t, define a usable substitute])
383 AC_MSG_WARN([system has no u_int16_t or uint16_t, default to unsigned short int])
384 AC_DEFINE(u_int16_t, [unsigned short int], [If system does not define u_int16_t, define a usable substitute.])
388 AC_CHECK_TYPE([in_port_t], [],
389 [AC_DEFINE(in_port_t, [u_int16_t], [If system does not define in_port_t, define it to what it should be.])],
390 [[#include <sys/types.h>
391 #include <netinet/in.h>]])
393 AC_CHECK_TYPE([sa_family_t], [],
394 [AC_DEFINE(sa_family_t, [u_int16_t], [If system does not define sa_family_t, define it here.])],
395 [[#include <sys/types.h>
396 #include <sys/socket.h>]])
398 AC_CHECK_TYPES([uintptr_t])
400 dnl check for various functions...
401 AC_CHECK_FUNCS([socketpair vsnprintf mmap gettimeofday strdup strndup ])
405 dnl Specialized functions checks
406 dnl ============================
408 dnl check for nanosleep
409 AC_CHECK_FUNC(nanosleep,,[AC_CHECK_LIB(rt,nanosleep,
411 [AC_CHECK_LIB(posix4,nanosleep, LIBS="${LIBS} -lposix4"
413 if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_posix4_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno
415 AC_MSG_RESULT("nanosleep not found..using select for delay")
417 AC_DEFINE([HAVE_NANOSLEEP], 1, [Define if nanosleep exists])
421 AC_MSG_CHECKING(for OpenSSL)
422 AC_ARG_ENABLE(openssl,
423 [AC_HELP_STRING([--enable-openssl[=DIR]],[Enable OpenSSL support (DIR optional).])
424 AC_HELP_STRING([--disable-openssl],[Disable OpenSSL support.])],
425 [cf_enable_openssl=$enableval],
426 [cf_enable_openssl="auto"])
428 if test "$cf_enable_openssl" != "no" ; then
429 cf_openssl_basedir=""
430 if test "$cf_enable_openssl" != "auto" &&
431 test "$cf_enable_openssl" != "yes" ; then
432 dnl Support for --enable-openssl=/some/place
433 cf_openssl_basedir="`echo ${cf_enable_openssl} | sed 's/\/$//'`"
435 dnl Do the auto-probe here. Check some common directory paths.
436 for dirs in /usr/local/ssl /usr/pkg /usr/local \
437 /usr/local/openssl ; do
438 if test -f "${dirs}/include/openssl/opensslv.h" ; then
439 cf_openssl_basedir="${dirs}"
445 dnl Now check cf_openssl_found to see if we found anything.
446 if test ! -z "$cf_openssl_basedir"; then
447 if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
448 SSL_INCLUDES="-I${cf_openssl_basedir}/include"
449 SSL_LIBS="-L${cf_openssl_basedir}/lib"
451 dnl OpenSSL wasn't found in the directory specified. Naughty
453 cf_openssl_basedir=""
456 dnl Check for stock FreeBSD 4.x and 5.x systems, since their files
457 dnl are in /usr/include and /usr/lib. In this case, we don't want to
458 dnl change INCLUDES or LIBS, but still want to enable OpenSSL.
459 dnl We can't do this check above, because some people want two versions
460 dnl of OpenSSL installed (stock FreeBSD 4.x/5.x and /usr/local/ssl)
461 dnl and they want /usr/local/ssl to have preference.
462 if test -f "/usr/include/openssl/opensslv.h" ; then
463 cf_openssl_basedir="/usr"
467 dnl If we have a basedir defined, then everything is okay. Otherwise,
468 dnl we have a problem.
469 if test ! -z "$cf_openssl_basedir"; then
470 AC_MSG_RESULT($cf_openssl_basedir)
471 cf_enable_openssl="yes"
473 AC_MSG_RESULT([not found. Specify a correct path?])
474 cf_enable_openssl="no"
476 unset cf_openssl_basedir
478 dnl If --disable-openssl was specified
479 AC_MSG_RESULT(disabled)
482 save_CPPFLAGS="$CPPFLAGS"
483 CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
485 LIBS="$LIBS $SSL_LIBS"
486 if test "$cf_enable_openssl" != no; then
487 dnl Check OpenSSL version (must be 0.9.6 or above!)
488 AC_MSG_CHECKING(for OpenSSL 0.9.6 or above)
491 [#include <openssl/opensslv.h>
492 #include <stdlib.h>],
493 [[if ( OPENSSL_VERSION_NUMBER >= 0x00906000)
494 exit(0); else exit(1);]]),
495 cf_openssl_version_ok=yes,
496 cf_openssl_version_ok=no,
497 cf_openssl_version_ok=no)
499 if test "$cf_openssl_version_ok" = yes; then
502 dnl Work around pmake/gmake conditional incompatibilities
503 AC_SUBST(ENCSPEED, encspeed)
505 dnl Do all the HAVE_LIBCRYPTO magic -- and check for ciphers
506 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
507 AC_CHECK_LIB(crypto, RSA_free)
508 SSL_LIBS="$SSL_LIBS -lcrypto"
509 SSL_SRCS_ENABLE='$(SSL_SRCS)'
511 AC_MSG_RESULT(no - OpenSSL support disabled)
515 CPPFLAGS="$save_CPPFLAGS"
518 dnl End OpenSSL detection
521 dnl Specialized functions and libraries
522 dnl ===================================
524 AC_ARG_WITH(zlib-path,
525 AC_HELP_STRING([--with-zlib-path=DIR],[Path to libz.so for ziplinks support.]),
526 [LIBS="$LIBS -L$withval"],)
529 AC_HELP_STRING([--disable-zlib],[Disable ziplinks support]),
530 [zlib=$enableval],[zlib=yes])
532 if test "$zlib" = yes; then
534 AC_CHECK_HEADER(zlib.h, [
535 AC_CHECK_LIB(z, zlibVersion,
537 AC_SUBST(ZLIB_LD, -lz)
538 AC_DEFINE(HAVE_LIBZ, 1, [Define to 1 if zlib (-lz) is available.])
544 dnl IO Loop Selection
545 dnl =================
547 AC_ARG_ENABLE(ports, AC_HELP_STRING([--enable-ports],[Force solaris I/O ports subsystem usage.]),
548 [ if test $enableval = yes; then
549 SELECT_TYPE_EXPLICIT="ports"
555 AC_ARG_ENABLE(poll, AC_HELP_STRING([--enable-poll],[Force poll() usage.]),
556 [ if test $enableval = yes; then
557 SELECT_TYPE_EXPLICIT="poll"
563 AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select],[Force select() usage.]),
564 [ if test $enableval = yes; then
565 SELECT_TYPE_EXPLICIT="select"
571 AC_ARG_ENABLE(kqueue, AC_HELP_STRING([--enable-kqueue],[Force kqueue() usage.]),
572 [ if test $enableval = yes; then
573 SELECT_TYPE_EXPLICIT="kqueue"
579 AC_ARG_ENABLE(epoll, AC_HELP_STRING([--enable-epoll],[Force sys_epoll usage (Linux only).]),
580 [ if test $enableval = yes; then
581 SELECT_TYPE_EXPLICIT="epoll"
582 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
588 dnl **********************************************************************
589 dnl Check for --with-confdir
590 dnl **********************************************************************
592 AC_MSG_CHECKING([whether to modify confdir])
594 AC_HELP_STRING([--with-confdir=DIR],
595 [Directory to install config files.]),
596 [ confdir=`echo $withval | sed 's/\/$//'`
598 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
599 AC_SUBST_DIR([confdir]) ],
600 [ confdir='${prefix}/etc'
602 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
603 AC_SUBST_DIR([confdir])]
606 dnl **********************************************************************
607 dnl Check for --with-logdir
608 dnl **********************************************************************
610 AC_MSG_CHECKING([whether to modify logdir])
612 AC_HELP_STRING([--with-logdir=DIR],
613 [Directory where to write logfiles.]),
614 [ logdir=`echo $withval | sed 's/\/$//'`
616 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
617 AC_SUBST_DIR([logdir]) ],
618 [ logdir='${prefix}/logs'
620 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
621 AC_SUBST_DIR([logdir])]
624 dnl **********************************************************************
625 dnl Check for --with-helpdir
626 dnl **********************************************************************
628 AC_MSG_CHECKING([whether to modify helpdir])
630 AC_HELP_STRING([--with-helpdir=DIR],
631 [Directory to install help files.]),
632 [ helpdir=`echo $withval | sed 's/\/$//'`
634 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help files are installed.])
635 AC_SUBST_DIR([helpdir]) ],
636 [ helpdir='${prefix}/help'
638 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help file are installed.])
639 AC_SUBST_DIR([helpdir])]
642 dnl **********************************************************************
643 dnl Check for --with-moduledir
644 dnl **********************************************************************
646 AC_MSG_CHECKING([whether to modify moduledir])
647 AC_ARG_WITH(moduledir,
648 AC_HELP_STRING([--with-moduledir=DIR],
649 [Directory to install modules.]),
650 [ moduledir=`echo $withval | sed 's/\/$//'`
652 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
653 AC_SUBST_DIR([moduledir]) ],
654 [ moduledir='${prefix}/modules'
656 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
657 AC_SUBST_DIR([moduledir])]
660 if test ! -z "$SELECT_TYPE_EXPLICIT"; then
661 SELECT_TYPE="$SELECT_TYPE_EXPLICIT";
662 echo "Forcing $SELECT_TYPE to be enabled"
665 if test ! "x$use_ports" = "xno"; then
666 AC_CHECK_FUNCS(port_getn, [haveports=yes], [haveports=no])
667 if test "x$haveports" = "xyes" ; then
672 if test ! "x$use_select" = "xno"; then
673 AC_CHECK_FUNCS(select, [haveselect=yes], [haveselect=no])
674 if test "x$haveselect" = "xyes" ; then
679 if test ! "x$use_poll" = "xno"; then
680 AC_CHECK_FUNCS(poll, [havepoll=yes], [havepoll=no])
681 if test "x$havepoll" = "xyes" ; then
686 if test ! "x$use_kqueue" = "xno"; then
687 AC_CHECK_FUNCS(kevent, [havekqueue=yes], [havekqueue=no])
688 if test "x$havekqueue" = "xyes" ; then
693 if test ! "x$use_epoll" = "xno"; then
694 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
695 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
696 if test "x$haveepoll" = "xyes" ; then
697 AC_MSG_CHECKING(for epoll support in kernel)
700 #include <sys/param.h>
701 #include <sys/types.h>
702 #include <sys/epoll.h>
703 #include <sys/syscall.h>
707 main(int argc, char **argv)
711 epfd = epoll_create(256);
712 return (epfd == -1 ? 1 : 0);
713 }, [AC_MSG_RESULT(yes)
714 AC_DEFINE(HAVE_EPOLL, 1,
715 [Define if your system supports the epoll system calls])
716 SELECT_TYPE="epoll"],
717 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
723 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
724 if test "x$haveepoll" = "xno" ; then
725 AC_MSG_CHECKING(for epoll system call)
728 #include <sys/param.h>
729 #include <sys/types.h>
730 #include <sys/epoll.h>
731 #include <sys/syscall.h>
735 epoll_create(int size)
737 return (syscall(__NR_epoll_create, size));
741 main(int argc, char **argv)
745 epfd = epoll_create(256);
746 exit (epfd == -1 ? 1 : 0);
747 }, [AC_MSG_RESULT(yes)
748 AC_DEFINE(HAVE_EPOLL, 1,
749 [Define if your system supports the epoll system calls])
750 SELECT_TYPE="epoll"],
751 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
759 if test -z "$SELECT_TYPE"; then
760 AC_MSG_ERROR([Unable to find a usable IO interface],)
763 echo "Using $SELECT_TYPE for select loop."
765 AC_DEFINE_UNQUOTED(SELECT_TYPE, "$SELECT_TYPE", [This is the type of IO loop we are using])
766 AC_SUBST(SELECT_TYPE)
769 dnl Debug-related options
770 dnl =====================
772 AC_ARG_ENABLE(assert,
773 AC_HELP_STRING([--enable-assert],[Enable assert(). Choose between soft(warnings) and hard(aborts the daemon)]),
774 [assert=$enableval], [assert=no])
776 if test "$assert" = no; then
777 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
778 elif test "$assert" = soft; then
779 AC_DEFINE(SOFT_ASSERT, 1, [Define this to enable soft asserts.])
780 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
781 elif test "$assert" = yes; then
785 AC_MSG_CHECKING(if you want IO Debugging hooks)
786 AC_ARG_ENABLE(iodebug,
787 AC_HELP_STRING([--enable-iodebug],[Enable IO Debugging hooks]),
788 [iodebug=$enableval], [iodebug=no])
790 if test "$iodebug" = yes; then
791 AC_DEFINE(USE_IODEBUG_HOOKS, 1, [Define this to enable IO Debug hooks.])
798 AC_MSG_CHECKING(if you want to do a profile build)
799 AC_ARG_ENABLE(profile,
800 AC_HELP_STRING([--enable-profile],[Enable profiling]),
801 [profile=$enableval], [profile=no])
803 if test "$profile" = yes; then
804 if test "$ac_cv_c_compiler_gnu" = yes; then
805 IRC_CFLAGS="$IRC_CFLAGS -pg"
806 AC_MSG_RESULT([yes, adding -pg])
807 AC_DEFINE(CHARYBDIS_PROFILE, 1, [Define this if you are profiling.])
809 AC_MSG_RESULT([no, profile builds only work with gcc])
815 AC_ARG_ENABLE(balloc,
816 AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
817 [balloc=$enableval], [balloc=yes])
819 if test "$balloc" = no; then
820 AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
823 AC_ARG_ENABLE(small-net,
824 AC_HELP_STRING([--enable-small-net],[Enable small network support.]),
825 [small_net=$enableval], [small_net=no])
827 if test "$small_net" = yes; then
828 dnl AC_DEFINE([HASHSIZE], 4096, [Max number of buckets in hash tables.])
829 AC_DEFINE([NICKNAMEHISTORYLENGTH], 1500, [Size of the WHOWAS array.])
830 AC_DEFINE([CHANNEL_HEAP_SIZE], 256, [Size of the channel heap.])
831 AC_DEFINE([BAN_HEAP_SIZE], 128, [Size of the ban heap.])
832 AC_DEFINE([CLIENT_HEAP_SIZE], 256, [Size of the client heap.])
833 AC_DEFINE([LCLIENT_HEAP_SIZE], 128, [Size of the local client heap.])
834 AC_DEFINE([PCLIENT_HEAP_SIZE], 32, [Size of the pre-client heap.])
835 AC_DEFINE([USER_HEAP_SIZE], 128, [Size of the user heap.])
836 AC_DEFINE([DNODE_HEAP_SIZE], 256, [Size of the dlink_node heap.])
837 AC_DEFINE([TOPIC_HEAP_SIZE], 256, [Size of the topic heap.])
838 AC_DEFINE([LINEBUF_HEAP_SIZE], 128, [Size of the linebuf heap.])
839 AC_DEFINE([MEMBER_HEAP_SIZE], 256, [Sizeof member heap.])
840 AC_DEFINE([ND_HEAP_SIZE], 128, [Size of the nick delay heap.])
841 AC_DEFINE([CONFITEM_HEAP_SIZE], 128, [Size of the confitem heap.])
842 AC_DEFINE([MONITOR_HEAP_SIZE], 128, [Size of the monitor heap.])
843 AC_DEFINE([FD_HEAP_SIZE], 128, [Size of fd heap.])
844 AC_DEFINE([AWAY_HEAP_SIZE], 128, [Size of away heap.])
846 dnl These settings are for a large network like efnet..they will use lots of memory
847 dnl so enable small net unless you really need this much support
848 AC_DEFINE([NICKNAMEHISTORYLENGTH], 15000, [Size of the WHOWAS array.])
849 AC_DEFINE([CHANNEL_HEAP_SIZE], 8192, [Size of the channel heap.])
850 AC_DEFINE([BAN_HEAP_SIZE], 4096, [Size of the ban heap.])
851 AC_DEFINE([CLIENT_HEAP_SIZE], 8192, [Size of the client heap.])
852 AC_DEFINE([LCLIENT_HEAP_SIZE], 1024, [Size of the local client heap.])
853 AC_DEFINE([PCLIENT_HEAP_SIZE], 256, [Size of the pre-client heap.])
854 AC_DEFINE([USER_HEAP_SIZE], 8192, [Size of the user heap.])
855 AC_DEFINE([DNODE_HEAP_SIZE], 8192, [Size of the dlink_node heap.])
856 AC_DEFINE([TOPIC_HEAP_SIZE], 4096, [Size of the topic heap.])
857 AC_DEFINE([LINEBUF_HEAP_SIZE], 2048, [Size of the linebuf heap.])
858 AC_DEFINE([MEMBER_HEAP_SIZE], 32768, [Sizeof member heap.])
859 AC_DEFINE([ND_HEAP_SIZE], 512, [Size of the nick delay heap.])
860 AC_DEFINE([CONFITEM_HEAP_SIZE], 256, [Size of the confitem heap.])
861 AC_DEFINE([MONITOR_HEAP_SIZE], 1024, [Size of the monitor heap.])
862 AC_DEFINE([FD_HEAP_SIZE], 1024, [Size of fd heap.])
863 AC_DEFINE([AWAY_HEAP_SIZE], 512, [Size of away heap.])
867 AC_HELP_STRING([--with-nicklen=LENGTH],[Set the nick length to LENGTH (default 15, max 50)]),
869 if ! expr "$withval" + 0 >/dev/null 2>&1; then
870 AC_ERROR([NICKLEN must be a numeric value])
872 if test $withval -ge 50; then
874 AC_MSG_WARN([NICKLEN has a hard limit of 50. Setting NICKLEN=50])
880 AC_ARG_WITH(topiclen,
881 AC_HELP_STRING([--with-topiclen=NUMBER],[Set the max topic length to NUMBER (default 390, max 390)]),
883 if test $withval -ge 390; then
885 AC_MSG_WARN([TOPICLEN has a hard limit of 390. Setting TOPICLEN=390])
891 AC_DEFINE_UNQUOTED(TOPICLEN, ${TOPICLEN}, [Maximum topic length (<=390)])
892 AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
895 dnl Some first-stage sanity checks.
896 if test "$shared_modules" = yes; then
897 dnl TenDRA's cc is called tcc too.
898 if test "$CC" = tcc -a "$TenDRA" = "no"; then
899 AC_MSG_WARN([disabling shared modules: Tiny C Compiler can't create PIC])
904 dnl Second stage: check for functions and headers.
905 if test "$shared_modules" = yes; then
907 AC_CHECK_HEADERS(dlfcn.h)
908 AC_SEARCH_LIBS(shl_load, dld,
910 AC_DEFINE(HAVE_SHL_LOAD, 1, [Define if the shl_load function is available.])
912 MOD_TARGET=hpux_shared
918 AC_SEARCH_LIBS(dlopen, [dl c_r],
920 AC_DEFINE(HAVE_DLOPEN, 1, [Define if the dlopen function is available.])
922 MOD_TARGET=shared_modules
924 if test "$AppleGCC" = yes; then
925 AC_CHECK_HEADERS([mach-o/dyld.h])
927 AC_CHECK_FUNC(dlsym, ,
929 AC_MSG_WARN([dlsym is not available, shared modules disabled])
932 AC_CHECK_FUNCS(dlfunc)
940 AC_DEFINE_UNQUOTED(SHARED_SUFFIX, "$SUFFIX", [Suffix for shared libraries on this platform.])
942 dnl Third stage - wrangling the linker.
943 if test "$shared_modules" = yes; then
944 # The GNU linker requires the -export-dynamic option to make
945 # all symbols visible in the dynamic symbol table.
946 hold_ldflags=$LDFLAGS
947 AC_MSG_CHECKING(for the ld -export-dynamic flag)
948 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic -Werror"
949 AC_LINK_IFELSE(AC_LANG_PROGRAM([],[;]), found=yes, found=no)
950 LDFLAGS=$hold_ldflags
952 if expr "`uname -s`" : ^IRIX >/dev/null 2>&1; then
953 found="no, IRIX ld uses -B,dynamic"
954 LDFLAGS="${LDFLAGS} -Wl,-B,dynamic"
957 if expr "`uname -s`" : ^AIX >/dev/null 2>&1; then
958 found="no, AIX ld uses -G -brtl"
959 LDFLAGS="${LDFLAGS} -Wl,-G,-brtl"
962 AC_MSG_RESULT($found)
964 if test "$found" = yes; then
965 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
968 AC_MSG_CHECKING(for compiler option to produce PIC)
969 dnl The order should be here to check for groups of compilers,
970 dnl then for odd compilers, then if no PICFLAGS were set up,
971 dnl check for GCC and set defaults, or else error. -jmallett
972 if test "$SGS" = "yes"; then
973 AC_MSG_RESULT([SVR4 SGS interfaces: -KPIC -DPIC -G])
974 PICFLAGS="-KPIC -DPIC -G"
977 if test "$AppleGCC" = "yes"; then
978 AC_MSG_RESULT([Darwin Mach-O bundles: -fno-common -bundle -flat_namespace -undefined suppress])
979 PICFLAGS="-fno-common -bundle -flat_namespace -undefined suppress"
981 dnl Please note, that on HPUX two different stages of module compilation occurs, since
982 dnl while compiling modules, the compiler does not allow you to give arguments
983 dnl to the linker. (I did not design this)
984 dnl So we need -c in the first stage of module compilation.
985 dnl In the second stage, we link the modules via ld -b.
986 dnl Additionally, HPUX does not like -export-dynamic, it likes -E instead.
988 if test "$HPUX" = "yes" -a "$CC" != gcc; then
989 AC_MSG_RESULT(HP-UX cc: +z -r -q -n)
990 PICFLAGS="+z -r -q -n -c"
991 AC_MSG_CHECKING([if +ESfic is required on this platform])
993 if expr "`$CC +ESfic 2>&1`" : ".*neither supported.*" >/dev/null; then
997 PICFLAGS="$PICFLAGS +ESfic"
1000 LDFLAGS="${LDFLAGS} -Wl,-E"
1002 if test "$Tru" = yes -a "$CC" != gcc; then
1003 AC_MSG_RESULT([Tru64: -shared -expect_unresolved '*'])
1004 PICFLAGS="-shared -expect_unresolved '*' "
1005 LDFLAGS="-call_shared"
1007 if test -z "$PICFLAGS"; then
1008 if test "$ac_cv_c_compiler_gnu" = "yes"; then
1009 AC_MSG_RESULT(gcc: -fPIC -DPIC -shared)
1010 PICFLAGS="-fPIC -DPIC -shared"
1018 # rpath, for finding libratbox.so at run time
1019 hold_ldflags=$LDFLAGS
1020 AC_MSG_CHECKING(for the ld -rpath flag)
1021 LDFLAGS="${LDFLAGS} -Wl,-rpath=${libdir}"
1022 AC_LINK_IFELSE(AC_LANG_PROGRAM([],[int i;]), found=yes, found=no)
1023 LDFLAGS=$hold_ldflags
1024 AC_MSG_RESULT($found)
1025 if test "$found" = yes; then
1026 LDFLAGS="${LDFLAGS} -Wl,-rpath=\${libdir}"
1029 # This must be down here, or it will mess up checks like the ones
1030 # for -Wl,-export-dynamic
1033 AC_ARG_ENABLE(warnings,
1034 AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
1036 IRC_CFLAGS="$IRC_CFLAGS -O0"
1037 CFLAGS="$IRC_CFLAGS"
1039 CHARYBDIS_C_GCC_TRY_FLAGS([-Wall], charybdis_cv_c_gcc_w_all)
1040 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpointer-arith], charybdis_cv_c_gcc_w_pointer_arith)
1041 CHARYBDIS_C_GCC_TRY_FLAGS([-Wimplicit -Wnested-externs], charybdis_cv_c_gcc_w_implicit)
1042 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-align], charybdis_cv_c_gcc_w_cast_align)
1043 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-qual], charybdis_cv_c_gcc_w_cast_qual)
1044 CHARYBDIS_C_GCC_TRY_FLAGS([-Wwrite-strings], charybdis_cv_c_gcc_w_write_strings)
1045 CHARYBDIS_C_GCC_TRY_FLAGS([-Werror-implicit-function-declaration], charybdis_cv_c_gcc_w_error_implicit_function_declaration)
1046 CHARYBDIS_C_GCC_TRY_FLAGS([-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations], charybdis_cv_c_gcc_prototypes)
1047 CHARYBDIS_C_GCC_TRY_FLAGS([-Wparenthesis], charybdis_cv_c_gcc_parenthesis)
1048 CHARYBDIS_C_GCC_TRY_FLAGS([-W -Wno-unused], charybdis_cv_c_gcc_w)
1049 CHARYBDIS_C_GCC_TRY_FLAGS([-Wextra], charybdis_cv_c_gcc_w_extra)
1050 CHARYBDIS_C_GCC_TRY_FLAGS([-Wshadow], charybdis_cv_c_gcc_w_shadow)
1051 CHARYBDIS_C_GCC_TRY_FLAGS([-Wmissing-noreturn], charybdis_cv_c_gcc_w_missing_noreturn)
1052 CHARYBDIS_C_GCC_TRY_FLAGS([-Wundef], charybdis_cv_c_gcc_w_undef)
1053 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpacked], charybdis_cv_c_gcc_w_packed)
1054 CHARYBDIS_C_GCC_TRY_FLAGS([-Wnested-externs], charybdis_cv_c_gcc_w_nested_externs)
1055 CHARYBDIS_C_GCC_TRY_FLAGS([-Wunused-function -Wunused-label -Wunused-value -Wunused-variable], charybdis_cv_c_gcc_w_unused)
1056 CHARYBDIS_C_GCC_TRY_FLAGS([-Wredundant-decls], charybdis_cv_c_gcc_w_redundant_decls)
1057 CHARYBDIS_C_GCC_TRY_FLAGS([-Wfloat-equal], charybdis_cv_c_gcc_w_float_equal)
1058 CHARYBDIS_C_GCC_TRY_FLAGS([-Wformat -Wformat-y2k -Wno-format-security], charybdis_cv_c_gcc_w_format)
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.])
1164 extensions/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 ircd-seven, then (g)make install to install it.