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.3.0])
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([-Wunused-function -Wunused-label -Wunused-value -Wunused-variable], charybdis_cv_c_gcc_w_unused)
1054
CHARYBDIS_C_GCC_TRY_FLAGS([-Wredundant-decls], charybdis_cv_c_gcc_w_redundant_decls)
1055
CHARYBDIS_C_GCC_TRY_FLAGS([-Wfloat-equal], charybdis_cv_c_gcc_w_float_equal)
1056
CHARYBDIS_C_GCC_TRY_FLAGS([-Wformat -Wformat-y2k -Wno-format-security], charybdis_cv_c_gcc_w_format)
1058
IRC_CFLAGS="$CFLAGS"
1061
if test "$shared_modules" = no; then
1063
MOD_TARGET="libmodules.a"
1064
MODULES_LIBS="../modules/libmodules.a"
1066
AC_DEFINE(STATIC_MODULES, 1, [Define to 1 if dynamic modules can't be used.])
1067
AC_MSG_WARN([shared module support has been disabled!])
1070
dnl Stage 5 - underscores in front of symbol names.
1071
if test "$shared_modules" = yes; then
1073
AC_CHECK_FUNC(nlist,,
1074
AC_CHECK_LIB(dl, nlist, nlist_lib="-ldl",
1075
AC_CHECK_LIB(elf, nlist, nlist_lib="-lelf",)
1079
dnl We need to find out whether underscores are appended to symbol
1080
dnl names in executable files. First, though, we need to see
1081
dnl where nlist.h is hiding.
1082
AC_CHECK_HEADER(libelf/nlist.h, [ nlist_h="libelf/nlist.h" ], )
1083
AC_CHECK_HEADER(elf/nlist.h, [ nlist_h="elf/nlist.h" ], )
1084
AC_CHECK_HEADER(nlist.h, [ nlist_h="nlist.h" ], )
1085
if test x"$nlist_h" = "x"; then
1086
AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "", [String containing extra underscores prepended to symbols loaded from modules.])
1088
AC_MSG_CHECKING(for extra underscores prepended to symbol names)
1089
AC_CACHE_VAL(symbol_underscores,
1091
cat << EOF > conftest.c
1095
void _modinit(void);
1096
int main(int argc, char *argv[[]]) {
1098
struct nlist nl[[5]];
1100
/* fill the names in this way, so it'll work almost everywhere */
1101
nl[[0]].n_name = "_modinit";
1102
nl[[1]].n_name = "__modinit";
1103
nl[[2]].n_name = "___modinit";
1104
nl[[3]].n_name = "____modinit";
1105
nl[[0]].n_value = nl[[1]].n_value = nl[[2]].n_value = nl[[3]].n_value = nl[[4]].n_name = NULL;
1107
if(argc < 2 || (nlist(argv[[1]], nl)) == -1) exit(-1);
1108
for(i = 0; i < 4; i++) {
1109
if(nl[[i]].n_value != NULL)
1112
for(j = 0; j < i; j++)
1119
void _modinit(void) { return; }
1121
$CC $CPPFLAGS $IRC_CFLAGS -o conftest conftest.c $nlist_lib >/dev/null 2>&1
1122
symbol_underscores=`./conftest conftest`
1123
AC_MSG_RESULT($symbol_underscores)
1124
$RM -f conftest conftest.c
1126
AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "${symbol_underscores}", [String containing extra underscores prepended to symbols loaded from modules.])
1130
IRC_CFLAGS="$IRC_CFLAGS $CWARNS"
1132
AC_SUBST(MODULES_LIBS)
1133
AC_SUBST(MOD_TARGET)
1135
AC_SUBST(SSL_SRCS_ENABLE)
1136
AC_SUBST(SSL_INCLUDES)
1141
AC_SUBST(IRC_CFLAGS)
1145
if test "$prefix" = "NONE"; then
1146
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$ac_default_prefix", [Prefix where the ircd is installed.])
1150
dnl Don't get bitten by Cygwin's stupidity if the user specified
1151
dnl a custom prefix with a trailing slash
1153
prefix=`echo $prefix | sed 's/\/$//'`
1154
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$prefix", [Prefix where the ircd is installed.])
1162
extensions/Makefile \
1172
if test "$cf_openssl_version_ok" = yes; then
1178
if test "$shared_modules" = yes; then
1186
Install directory : $prefix
1190
Socket Engine : $SELECT_TYPE
1191
Small network : $small_net
1192
Block allocator : $balloc
1194
Nickname length : $NICKLEN
1195
Topic length : $TOPICLEN
1197
Use (g)make to compile Charybdis, then (g)make install to install it.