]> jfr.im git - solanum.git/blob - configure.ac
[svn] - remove the rest of the MAX_CLIENTS stuff. change kqueue implementation accord...
[solanum.git] / configure.ac
1 dnl $Id: configure.ac 3356 2007-04-03 09:31:11Z nenolod $
2 dnl Process this file with autoconf to produce a configure script.
3
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.
7
8 AC_PREREQ(2.57)
9
10 dnl Sneaky way to get an Id tag into the configure script
11 AC_COPYRIGHT([$Id: configure.ac 3356 2007-04-03 09:31:11Z nenolod $])
12
13 AC_INIT([charybdis],[2.2.0])
14
15 AC_CONFIG_HEADER(include/setup.h)
16
17 AC_PREFIX_DEFAULT($HOME/ircd)
18
19 AC_GNU_SOURCE
20
21 OLD_CFLAGS="$CFLAGS"
22 dnl Checks for programs.
23 AC_PROG_CC
24 AC_LANG(C)
25
26 dnl Make sure autoconf doesn't interfere with cflags -jmallett
27 CFLAGS="$OLD_CFLAGS"
28
29 dnl Check for various compilers. -jmallett
30 dnl But if $CC turns out to be gcc, sure as hell it's, well, gcc. -joshk
31
32 if test "$ac_cv_c_compiler_gnu" != yes; then
33
34 SGS=no
35 AC_MSG_CHECKING($CC -version for TenDRA or MIPSpro)
36 case `$CC -version 2>&1` in
37 *TenDRA*)
38 AC_MSG_RESULT([yes, TenDRA])
39 IRC_CFLAGS=""
40 CPPFLAGS="$CPPFLAGS -Ylonglong -Yansi -I/usr/include"
41 SGS=yes
42 TenDRA=yes
43 ;;
44 *MIPSpro*)
45 AC_MSG_RESULT([yes, MIPSpro])
46 MIPSpro=yes
47 SGS=yes
48 ;;
49 *)
50 AC_MSG_RESULT(no)
51 TenDRA=no
52 MIPSpro=no
53 ;;
54 esac
55
56 AC_MSG_CHECKING([$CC -V for Sun Workshop, Forte, HPUX or Tru64 cc])
57 case `$CC -V 2>&1` in
58 *Sun*WorkShop* | *Forte*Developer*)
59 AC_MSG_RESULT(Sun Workshop/Forte)
60 IRC_CFLAGS="-fast -xinline=dlinkAdd,dlinkAddBefore,dlinkAddTail,dlinkDelete,dlink_list_length,dlink_node,dlinkMoveList,_MyMalloc,_MyRealloc,_MyFree,_DupString"
61 SunWorkShop=yes
62 SGS=yes
63 ;;
64 *Tru64*)
65 AC_MSG_RESULT(Tru64 cc)
66 IRC_CFLAGS="-O2"
67 CPPFLAGS="-I/usr/local/include"
68 Tru=yes
69 ;;
70 *HP*ANSI*)
71 AC_MSG_RESULT(HPUX cc)
72 HPUX=yes
73 IRC_CFLAGS="+e"
74 ;;
75 *)
76 AC_MSG_RESULT(no)
77 ;;
78 esac
79
80 fi
81
82 AC_MSG_CHECKING([uname -s for Cygwin, Solaris, AIX or HPUX])
83 OSNAME=`uname -s`
84 case "$OSNAME" in
85 HP-UX*)
86 dnl only do this if we haven't already detected the newer one
87 dnl and we're not already using gcc
88
89 if test "$HPUX" != yes -a "$ac_cv_c_compiler_gnu" = no; then
90 AC_MSG_RESULT(assuming old HPUX with its own cc)
91 IRC_CFLAGS="$IRC_CFLAGS +e"
92 HPUX=yes
93 else
94 AC_MSG_RESULT(already using newer HPUX)
95 fi
96 ;;
97 CYGWIN*)
98 AC_MSG_RESULT(Cygwin)
99 CYGWIN=yes
100 ;;
101 SunOS*)
102 AC_MSG_RESULT(SunOS or Solaris)
103 AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.])
104 SUN=yes
105 ;;
106 AIX*)
107 AC_MSG_RESULT(AIX - Sorry you poor bastard..really we are)
108 IRC_CFLAGS="$IRC_CFLAGS -Wl,-brtl -Wl,-G"
109 ;;
110 *)
111 AC_MSG_RESULT(no)
112 ;;
113 esac
114
115 if test "$ac_cv_c_compiler_gnu" = yes; then
116 AC_MSG_CHECKING(if $CC is Apple GCC)
117
118 case `$CC -v 2>&1 | tail -n 1` in
119 *Apple*)
120 AC_MSG_RESULT(yes)
121 AppleGCC=yes
122 ;;
123 *)
124 AC_MSG_RESULT(no)
125 AppleGCC=no
126 ;;
127 esac
128
129 IRC_CFLAGS="$IRC_CFLAGS -O0 -Wall"
130 fi
131
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"
137 else
138 IRC_CFLAGS="$IRC_CFLAGS -g"
139 fi
140 fi
141
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
145 AC_MSG_RESULT(yes)
146 else
147 AC_MSG_RESULT(no)
148 fi
149
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)
153
154 AC_MSG_CHECKING(how to generate dependency info)
155
156 STDOUT="> .depend"
157
158 if test "$ac_cv_c_compiler_gnu" = yes; then
159 AC_MSG_RESULT(gcc -MM)
160 MKDEP="$CC -MM"
161 elif test ! -z "$MKDEP"; then
162 AC_MSG_RESULT(mkdep)
163
164 dnl Tru64's mkdep is very loud
165 if test -z "$Tru"; then
166 STDOUT=""
167 else
168 STDOUT=" 2> /dev/null"
169 fi
170 elif test "$SunWorkShop" = yes; then
171 AC_MSG_RESULT($CC -xM)
172 MKDEP="$CC -xM"
173 STDOUT="> .depend 2> /dev/null"
174 elif test ! -z "$MAKEDEPEND"; then
175 AC_MSG_RESULT(makedepend)
176 MKDEP="$MAKEDEPEND -f-"
177 else
178 AC_MSG_RESULT([nothing suitable.. forget it!])
179 MKDEP=":"
180 fi
181
182 AC_SUBST(MKDEP)
183 AC_SUBST(STDOUT)
184
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])
189 AC_MSG_RESULT(yes)
190 else
191 AC_DEFINE(PATH_DEVNULL, "devnull.log", [Path to /dev/null])
192 AC_MSG_RESULT(no - using devnull.log)
193 fi
194
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"
200 fi
201
202 AC_ISC_POSIX
203 AC_C_INLINE
204 AC_PROG_GCC_TRADITIONAL
205 AC_PROG_MAKE_SET
206 AC_PROG_INSTALL
207 AC_PATH_PROG(RM, rm)
208 AC_PATH_PROG(CP, cp)
209 AC_PATH_PROG(MV, mv)
210 AC_PATH_PROG(LN, ln)
211 AC_PATH_PROG(SED, sed)
212 AC_PATH_PROG(AR, ar)
213 AC_PATH_PROG(LD, ld)
214 AC_PATH_PROG(RANLIB, ranlib)
215 AC_PATH_PROG(TOUCH, touch)
216
217 AC_PROG_YACC
218
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])
222 fi
223
224 AC_PROG_LEX
225
226 if test "$LEX" = ":"; then
227 AC_MSG_ERROR([could not locate a suitable lexical generator, install flex or lex.])
228 fi
229
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}'
235 fi
236
237 dnl Checks for header files.
238 AC_HEADER_STDC
239
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])
241
242 dnl Stuff that the memory manager (imalloc) depends on
243 dnl ==================================================
244
245 AC_C_CONST
246 if test "$ac_cv_header_machine_endian_h" = "no" ; then
247 AC_C_BIGENDIAN
248 fi
249 AC_TYPE_PID_T
250 AC_TYPE_SIZE_T
251 AC_CHECK_SIZEOF(short)
252 AC_CHECK_SIZEOF(int)
253 AC_CHECK_SIZEOF(long)
254 AC_CHECK_SIZEOF(long long)
255
256 dnl Memory manager
257 dnl ==============
258
259 AC_MSG_CHECKING([the system's memory page size])
260 pagesize="no"
261 AC_TRY_RUN([
262 #include <stdio.h>
263 #if HAVE_UNISTD_H
264 # include <unistd.h>
265 #endif
266
267 int main(void) {
268 FILE *fp = fopen("conftest.malloc", "w");
269
270 if (fp != NULL) {
271 fprintf(fp, "%d\n", getpagesize());
272 fclose(fp);
273 } else
274 exit(1);
275 exit(0);
276 }],[
277 if test -f "conftest.malloc" ; then
278 pagesize=`cat conftest.malloc`
279 fi
280 ])
281 if test "$pagesize" != "no" ; then
282 AC_MSG_RESULT($pagesize)
283 else
284 if test "$ac_cv_sizeof_int" = "4" ; then
285 pagesize=4096
286 else
287 pagesize=8192
288 fi
289 AC_MSG_RESULT([$pagesize (guessing)])
290 fi
291 AC_DEFINE_UNQUOTED(MALLOC_PAGESIZE, $pagesize,
292 [the system's memory page size])
293
294 dnl Networking Functions
295 dnl ====================
296
297 AC_SEARCH_LIBS(socket, socket, , [AC_MSG_ERROR([You have no socket()! Aborting.])])
298
299 dnl SunOS/Solaris required libnsl for inet_ntoa()
300 if test x"$SUN" = xyes; then
301 AC_SEARCH_LIBS(inet_ntoa, nsl,, [AC_MSG_ERROR([libnsl not found! Aborting.])])
302 fi
303
304 AC_CHECK_MEMBER([struct sockaddr.sa_len], [AC_DEFINE(SOCKADDR_IN_HAS_LEN, 1, [Define to 1 if sockaddr has a 'sa_len'
305 member.])],,[[#include <sys/types.h>
306 #include <sys/socket.h>
307 ]])
308
309 AC_CHECK_TYPE(socklen_t, ,
310 [AC_DEFINE([socklen_t], [unsigned int],
311 [If we don't have a real socklen_t, unsigned int is good enough.])],
312 [#include <sys/types.h>
313 #include <sys/socket.h>])
314
315 AC_ARG_ENABLE(ipv6,
316 AC_HELP_STRING([--enable-ipv6],[Enable IPv6 support]),[ipv6=$enableval],[ipv6=no])
317
318 if test $ipv6 != yes; then
319 have_v6="no"
320 else
321 AC_MSG_CHECKING([for core IPv6 support])
322
323 AC_COMPILE_IFELSE(
324 [AC_LANG_PROGRAM(
325 [[#define IN_AUTOCONF
326 #include <sys/types.h>
327 #include <sys/socket.h>
328 #include <netinet/in.h>]],
329 [[struct sockaddr_in6 s;
330 s.sin6_family = 0;]]
331 )],
332 [
333 if test "$CYGWIN" = "yes"; then
334 AC_MSG_RESULT([no, Cygwin's IPv6 is incomplete])
335 have_v6=no
336 else
337 have_v6=yes
338 AC_DEFINE(IPV6, 1, [Define if IPv6 support is present and available.])
339 AC_MSG_RESULT(yes)
340 AC_MSG_CHECKING([for struct in6addr_any])
341 AC_COMPILE_IFELSE(
342 [AC_LANG_PROGRAM(
343 [[#define IN_AUTOCONF
344 #include <sys/types.h>
345 #include <sys/socket.h>
346 #include <netinet/in.h>]],
347 [[struct in6_addr a = in6addr_any;]]
348 )],
349 [AC_MSG_RESULT(yes)],
350 [
351 AC_MSG_RESULT(no)
352 AC_DEFINE(NO_IN6ADDR_ANY, 1, [Define to 1 if your system has no in6addr_any.])
353 inet_misc=1
354 ]
355 )
356 fi
357 ],
358 [AC_MSG_RESULT(no)
359 have_v6="no"])
360 fi
361
362 AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
363
364 CRYPT_LIB=$ac_cv_search_crypt
365
366 if test "$CRYPT_LIB" = "none required"; then
367 unset CRYPT_LIB
368 elif test "$CRYPT_LIB" = no; then
369 unset CRYPT_LIB
370 fi
371
372 AC_SUBST(CRYPT_LIB)
373
374 if test "$ac_cv_header_sys_wait_h" = yes -o "$ac_cv_header_wait_h" = yes; then
375 VICONF=viconf
376 dnl We need one of the above to build viconf. Just a sanity check,
377 dnl we don't want to stop people from building the rest of ircd
378 dnl just because they can't build viconf.
379 else
380 VICONF=""
381 fi
382
383 AC_SUBST(VICONF)
384
385 dnl See whether we can include both string.h and strings.h.
386 AC_CACHE_CHECK([whether string.h and strings.h may both be included],
387 gcc_cv_header_string,
388 [
389 AC_COMPILE_IFELSE(
390 [#include <string.h>
391 #include <strings.h>],
392 [gcc_cv_header_string=yes],
393 [gcc_cv_header_string=no])
394 ])
395
396 if test "$gcc_cv_header_string" = "yes"; then
397 AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h])
398 fi
399
400 AC_C_BIGENDIAN
401
402 dnl Check for stdarg.h - if we can't find it, halt configure
403 AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - ircd-ratbox will not compile without it **])])
404
405 dnl Checks for the existence of strlcat, strlcpy, basename...
406 dnl This more reliable test only works with gcc though.
407
408 if test "$ac_cv_c_compiler_gnu" = yes; then
409
410 AC_MSG_CHECKING(for strlcpy)
411 save_CFLAGS=$CFLAGS
412 CFLAGS="$CFLAGS -Wimplicit -Werror"
413
414 AC_LINK_IFELSE(
415 [AC_LANG_PROGRAM(
416 [[#include <string.h>
417 #include <stdlib.h>]],
418 [[char *a = malloc(6);
419 strlcpy(a, "hello", 6);]]
420 )],
421 [AC_MSG_RESULT(yes)
422 AC_DEFINE(HAVE_STRLCPY, 1, [Define if strlcpy is available (most BSDs.)])],
423 [AC_MSG_RESULT(no)]
424 )
425
426 AC_MSG_CHECKING(for strlcat)
427 AC_LINK_IFELSE(
428 [AC_LANG_PROGRAM(
429 [[#include <string.h>
430 #include <stdlib.h>]],
431 [[char *a = malloc(6);
432 a[0] = '\0';
433 strlcat(a, "hello", 6);]]
434 )],
435 [AC_MSG_RESULT(yes)
436 AC_DEFINE(HAVE_STRLCAT, 1, [Define if strlcat is available (most BSDs.)])],
437 [AC_MSG_RESULT(no)]
438 )
439
440 CFLAGS=$save_CFLAGS
441
442 else
443
444 dnl Better than nothing. The more complicated test above probably fixes powerpc,
445 dnl so who cares.
446
447 AC_CHECK_FUNCS([strlcat strlcpy])
448
449 fi
450
451 AC_CHECK_TYPE([u_int32_t], [],
452 [
453 AC_CHECK_TYPE([uint32_t],
454 [
455 AC_DEFINE(u_int32_t, [uint32_t], [If system does not define u_int32_t, define a reasonable substitute.])
456 ],
457 [
458 AC_MSG_WARN([system has no u_int32_t or uint32_t, default to unsigned long int])
459 AC_DEFINE(u_int32_t, [unsigned long int], [If system does not define u_int32_t, define to unsigned long int here.])
460 ])
461 ])
462
463 AC_CHECK_TYPE([u_int16_t], [],
464 [
465 AC_CHECK_TYPE([uint16_t],
466 [
467 AC_DEFINE(u_int16_t, [uint16_t], [If system does not define u_int16_t, define a usable substitute])
468 ],
469 [
470 AC_MSG_WARN([system has no u_int16_t or uint16_t, default to unsigned short int])
471 AC_DEFINE(u_int16_t, [unsigned short int], [If system does not define u_int16_t, define a usable substitute.])
472 ])
473 ])
474
475 AC_CHECK_TYPE([in_port_t], [],
476 [AC_DEFINE(in_port_t, [u_int16_t], [If system does not define in_port_t, define it to what it should be.])],
477 [[#include <sys/types.h>
478 #include <netinet/in.h>]])
479
480 AC_CHECK_TYPE([sa_family_t], [],
481 [AC_DEFINE(sa_family_t, [u_int16_t], [If system does not define sa_family_t, define it here.])],
482 [[#include <sys/types.h>
483 #include <sys/socket.h>]])
484
485 AC_CHECK_TYPES([uintptr_t])
486
487 dnl check for various functions...
488 AC_CHECK_FUNCS([socketpair vsnprintf mmap gettimeofday strdup strndup ])
489
490 AC_FUNC_ALLOCA
491
492 dnl Specialized functions checks
493 dnl ============================
494
495 dnl check for nanosleep
496 AC_CHECK_FUNC(nanosleep,,[AC_CHECK_LIB(rt,nanosleep,
497 LIBS="${LIBS} -lrt",
498 [AC_CHECK_LIB(posix4,nanosleep, LIBS="${LIBS} -lposix4"
499 )])])
500 if test x$ac_cv_func_nanosleep = xno && test x$ac_cv_lib_posix4_nanosleep = xno && test x$ac_cv_lib_rt_nanosleep = xno
501 then
502 AC_MSG_RESULT("nanosleep not found..using select for delay")
503 else
504 AC_DEFINE([HAVE_NANOSLEEP], 1, [Define if nanosleep exists])
505 fi
506
507 dnl OpenSSL support
508 AC_MSG_CHECKING(for OpenSSL)
509 AC_ARG_ENABLE(openssl,
510 [AC_HELP_STRING([--enable-openssl[=DIR]],[Enable OpenSSL support (DIR optional).])
511 AC_HELP_STRING([--disable-openssl],[Disable OpenSSL support.])],
512 [cf_enable_openssl=$enableval],
513 [cf_enable_openssl="auto"])
514
515 if test "$cf_enable_openssl" != "no" ; then
516 cf_openssl_basedir=""
517 if test "$cf_enable_openssl" != "auto" &&
518 test "$cf_enable_openssl" != "yes" ; then
519 dnl Support for --enable-openssl=/some/place
520 cf_openssl_basedir="`echo ${cf_enable_openssl} | sed 's/\/$//'`"
521 else
522 dnl Do the auto-probe here. Check some common directory paths.
523 for dirs in /usr/local/ssl /usr/pkg /usr/local \
524 /usr/local/openssl ; do
525 if test -f "${dirs}/include/openssl/opensslv.h" ; then
526 cf_openssl_basedir="${dirs}"
527 break
528 fi
529 done
530 unset dirs
531 fi
532 dnl Now check cf_openssl_found to see if we found anything.
533 if test ! -z "$cf_openssl_basedir"; then
534 if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
535 SSL_INCLUDES="-I${cf_openssl_basedir}/include"
536 SSL_LIBS="-L${cf_openssl_basedir}/lib"
537 else
538 dnl OpenSSL wasn't found in the directory specified. Naughty
539 dnl administrator...
540 cf_openssl_basedir=""
541 fi
542 else
543 dnl Check for stock FreeBSD 4.x and 5.x systems, since their files
544 dnl are in /usr/include and /usr/lib. In this case, we don't want to
545 dnl change INCLUDES or LIBS, but still want to enable OpenSSL.
546 dnl We can't do this check above, because some people want two versions
547 dnl of OpenSSL installed (stock FreeBSD 4.x/5.x and /usr/local/ssl)
548 dnl and they want /usr/local/ssl to have preference.
549 if test -f "/usr/include/openssl/opensslv.h" ; then
550 cf_openssl_basedir="/usr"
551 fi
552 fi
553
554 dnl If we have a basedir defined, then everything is okay. Otherwise,
555 dnl we have a problem.
556 if test ! -z "$cf_openssl_basedir"; then
557 AC_MSG_RESULT($cf_openssl_basedir)
558 cf_enable_openssl="yes"
559 else
560 AC_MSG_RESULT([not found. Specify a correct path?])
561 cf_enable_openssl="no"
562 fi
563 unset cf_openssl_basedir
564 else
565 dnl If --disable-openssl was specified
566 AC_MSG_RESULT(disabled)
567 fi
568
569 save_CPPFLAGS="$CPPFLAGS"
570 CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
571 save_LIBS="$LIBS"
572 LIBS="$LIBS $SSL_LIBS"
573 if test "$cf_enable_openssl" != no; then
574 dnl Check OpenSSL version (must be 0.9.6 or above!)
575 AC_MSG_CHECKING(for OpenSSL 0.9.6 or above)
576 AC_RUN_IFELSE(
577 AC_LANG_PROGRAM(
578 [#include <openssl/opensslv.h>
579 #include <stdlib.h>],
580 [[if ( OPENSSL_VERSION_NUMBER >= 0x00906000)
581 exit(0); else exit(1);]]),
582 cf_openssl_version_ok=yes,
583 cf_openssl_version_ok=no,
584 cf_openssl_version_ok=no)
585
586 if test "$cf_openssl_version_ok" = yes; then
587 AC_MSG_RESULT(found)
588
589 dnl Work around pmake/gmake conditional incompatibilities
590 AC_SUBST(ENCSPEED, encspeed)
591
592 dnl Do all the HAVE_LIBCRYPTO magic -- and check for ciphers
593 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
594 AC_CHECK_LIB(crypto, RSA_free)
595 SSL_LIBS="$SSL_LIBS -lcrypto"
596 SSL_SRCS_ENABLE='$(SSL_SRCS)'
597 else
598 AC_MSG_RESULT(no - OpenSSL support disabled)
599 fi
600 fi
601
602 CPPFLAGS="$save_CPPFLAGS"
603 LIBS="$save_LIBS"
604
605 dnl End OpenSSL detection
606
607
608 dnl Specialized functions and libraries
609 dnl ===================================
610
611 AC_ARG_WITH(zlib-path,
612 AC_HELP_STRING([--with-zlib-path=DIR],[Path to libz.so for ziplinks support.]),
613 [LIBS="$LIBS -L$withval"],)
614
615 AC_ARG_ENABLE(zlib,
616 AC_HELP_STRING([--disable-zlib],[Disable ziplinks support]),
617 [zlib=$enableval],[zlib=yes])
618
619 if test "$zlib" = yes; then
620
621 AC_CHECK_HEADER(zlib.h, [
622 AC_CHECK_LIB(z, zlibVersion,
623 [
624 AC_SUBST(ZLIB_LD, -lz)
625 AC_DEFINE(HAVE_LIBZ, 1, [Define to 1 if zlib (-lz) is available.])
626 ], zlib=no)
627 ], zlib=no)
628
629 fi
630
631 dnl IO Loop Selection
632 dnl =================
633
634 AC_ARG_ENABLE(poll, AC_HELP_STRING([--enable-poll],[Force poll() usage.]),
635 [ if test $enableval = yes; then
636 SELECT_TYPE_EXPLICIT="poll"
637 else
638 use_poll=no
639 fi
640 ],)
641
642 AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select],[Force select() usage.]),
643 [ if test $enableval = yes; then
644 SELECT_TYPE_EXPLICIT="select"
645 else
646 use_select=no
647 fi
648 ],)
649
650 AC_ARG_ENABLE(kqueue, AC_HELP_STRING([--enable-kqueue],[Force kqueue() usage.]),
651 [ if test $enableval = yes; then
652 SELECT_TYPE_EXPLICIT="kqueue"
653 else
654 use_kqueue=no
655 fi
656 ],)
657
658 AC_ARG_ENABLE(devpoll,AC_HELP_STRING([--enable-devpoll],[Force usage of /dev/poll.]),
659 [ if test $enableval = yes; then
660 SELECT_TYPE_EXPLICIT="devpoll"
661 dnl These need to be defined or not defined
662 AC_CHECK_HEADERS([sys/devpoll.h devpoll.h])
663 else
664 use_devpoll=no;
665 fi
666 ],)
667
668 AC_ARG_ENABLE(epoll, AC_HELP_STRING([--enable-epoll],[Force sys_epoll usage (Linux only).]),
669 [ if test $enableval = yes; then
670 SELECT_TYPE_EXPLICIT="epoll"
671 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
672 else
673 use_epoll=no
674 fi
675 ],)
676
677 dnl **********************************************************************
678 dnl Check for --with-confdir
679 dnl **********************************************************************
680
681 AC_MSG_CHECKING([whether to modify confdir])
682 AC_ARG_WITH(confdir,
683 AC_HELP_STRING([--with-confdir=DIR],
684 [Directory to install config files.]),
685 [ confdir=`echo $withval | sed 's/\/$//'`
686 AC_MSG_RESULT(yes)
687 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
688 AC_SUBST_DIR([confdir]) ],
689 [ confdir='${prefix}/etc'
690 AC_MSG_RESULT(no)
691 AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
692 AC_SUBST_DIR([confdir])]
693 )
694
695 dnl **********************************************************************
696 dnl Check for --with-logdir
697 dnl **********************************************************************
698
699 AC_MSG_CHECKING([whether to modify logdir])
700 AC_ARG_WITH(logdir,
701 AC_HELP_STRING([--with-logdir=DIR],
702 [Directory where to write logfiles.]),
703 [ logdir=`echo $withval | sed 's/\/$//'`
704 AC_MSG_RESULT(yes)
705 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
706 AC_SUBST_DIR([logdir]) ],
707 [ logdir='${prefix}/logs'
708 AC_MSG_RESULT(no)
709 AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
710 AC_SUBST_DIR([logdir])]
711 )
712
713 dnl **********************************************************************
714 dnl Check for --with-helpdir
715 dnl **********************************************************************
716
717 AC_MSG_CHECKING([whether to modify helpdir])
718 AC_ARG_WITH(helpdir,
719 AC_HELP_STRING([--with-helpdir=DIR],
720 [Directory to install help files.]),
721 [ helpdir=`echo $withval | sed 's/\/$//'`
722 AC_MSG_RESULT(yes)
723 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help files are installed.])
724 AC_SUBST_DIR([helpdir]) ],
725 [ helpdir='${prefix}/help'
726 AC_MSG_RESULT(no)
727 AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help file are installed.])
728 AC_SUBST_DIR([helpdir])]
729 )
730
731 dnl **********************************************************************
732 dnl Check for --with-moduledir
733 dnl **********************************************************************
734
735 AC_MSG_CHECKING([whether to modify moduledir])
736 AC_ARG_WITH(moduledir,
737 AC_HELP_STRING([--with-moduledir=DIR],
738 [Directory to install modules.]),
739 [ moduledir=`echo $withval | sed 's/\/$//'`
740 AC_MSG_RESULT(yes)
741 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
742 AC_SUBST_DIR([moduledir]) ],
743 [ moduledir='${prefix}/modules'
744 AC_MSG_RESULT(no)
745 AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
746 AC_SUBST_DIR([moduledir])]
747 )
748
749 if test ! -z "$SELECT_TYPE_EXPLICIT"; then
750 SELECT_TYPE="$SELECT_TYPE_EXPLICIT";
751 echo "Forcing $SELECT_TYPE to be enabled"
752 else
753
754 if test ! "x$use_select" = "xno"; then
755 AC_CHECK_FUNCS(select, [haveselect=yes], [haveselect=no])
756 if test "x$haveselect" = "xyes" ; then
757 SELECT_TYPE="select"
758 fi
759 fi
760
761 if test ! "x$use_poll" = "xno"; then
762 AC_CHECK_FUNCS(poll, [havepoll=yes], [havepoll=no])
763 if test "x$havepoll" = "xyes" ; then
764 SELECT_TYPE="poll"
765 fi
766 fi
767
768 if test ! "x$use_devpoll" = "xno"; then
769 AC_MSG_CHECKING(for /dev/poll)
770 if test -c "/dev/poll"; then
771 AC_MSG_RESULT(yes)
772 AC_CHECK_HEADERS([devpoll.h sys/devpoll.h])
773 SELECT_TYPE="devpoll"
774 else
775 AC_MSG_RESULT(no)
776 fi
777 fi
778
779 if test ! "x$use_kqueue" = "xno"; then
780 AC_CHECK_FUNCS(kevent, [havekqueue=yes], [havekqueue=no])
781 if test "x$havekqueue" = "xyes" ; then
782 SELECT_TYPE="kqueue"
783 fi
784 fi
785
786 if test ! "x$use_epoll" = "xno"; then
787 AC_CHECK_FUNCS(epoll_ctl, [haveepoll=yes], [haveepoll=no])
788 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
789 if test "x$haveepoll" = "xyes" ; then
790 AC_MSG_CHECKING(for epoll support in kernel)
791 AC_TRY_RUN(
792 #include <stdint.h>
793 #include <sys/param.h>
794 #include <sys/types.h>
795 #include <sys/epoll.h>
796 #include <sys/syscall.h>
797 #include <unistd.h>
798
799 int
800 main(int argc, char **argv)
801 {
802 int epfd;
803
804 epfd = epoll_create(256);
805 exit (epfd == -1 ? 1 : 0);
806 }, [AC_MSG_RESULT(yes)
807 AC_DEFINE(HAVE_EPOLL, 1,
808 [Define if your system supports the epoll system calls])
809 SELECT_TYPE="epoll"],
810 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
811 fi
812 fi
813
814 haveepollsyscall=no
815
816 if test "x$ac_cv_header_sys_epoll_h" = "xyes"; then
817 if test "x$haveepoll" = "xno" ; then
818 AC_MSG_CHECKING(for epoll system call)
819 AC_TRY_RUN(
820 #include <stdint.h>
821 #include <sys/param.h>
822 #include <sys/types.h>
823 #include <sys/epoll.h>
824 #include <sys/syscall.h>
825 #include <unistd.h>
826
827 int
828 epoll_create(int size)
829 {
830 return (syscall(__NR_epoll_create, size));
831 }
832
833 int
834 main(int argc, char **argv)
835 {
836 int epfd;
837
838 epfd = epoll_create(256);
839 exit (epfd == -1 ? 1 : 0);
840 }, [AC_MSG_RESULT(yes)
841 AC_DEFINE(HAVE_EPOLL, 1,
842 [Define if your system supports the epoll system calls])
843 SELECT_TYPE="epoll"],
844 AC_MSG_RESULT(no), AC_MSG_RESULT(no))
845 fi
846 fi
847
848 fi
849
850 fi
851
852 if test -z "$SELECT_TYPE"; then
853 AC_MSG_ERROR([Unable to find a usable IO interface],)
854 fi
855
856 echo "Using $SELECT_TYPE for select loop."
857
858 AC_DEFINE_UNQUOTED(SELECT_TYPE, "$SELECT_TYPE", [This is the type of IO loop we are using])
859 AC_SUBST(SELECT_TYPE)
860
861
862 dnl Debug-related options
863 dnl =====================
864
865 AC_ARG_ENABLE(assert,
866 AC_HELP_STRING([--enable-assert],[Enable assert(). Choose between soft(warnings) and hard(aborts the daemon)]),
867 [assert=$enableval], [assert=no])
868
869 if test "$assert" = no; then
870 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
871 elif test "$assert" = soft; then
872 AC_DEFINE(SOFT_ASSERT, 1, [Define this to enable soft asserts.])
873 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
874 elif test "$assert" = yes; then
875 assert = "hard";
876 fi
877
878 AC_MSG_CHECKING(if you want IO Debugging hooks)
879 AC_ARG_ENABLE(iodebug,
880 AC_HELP_STRING([--enable-iodebug],[Enable IO Debugging hooks]),
881 [iodebug=$enableval], [iodebug=no])
882
883 if test "$iodebug" = yes; then
884 AC_DEFINE(USE_IODEBUG_HOOKS, 1, [Define this to enable IO Debug hooks.])
885 AC_MSG_RESULT(yes)
886 else
887 AC_MSG_RESULT(no)
888 fi
889
890
891 AC_MSG_CHECKING(if you want to do a profile build)
892 AC_ARG_ENABLE(profile,
893 AC_HELP_STRING([--enable-profile],[Enable profiling]),
894 [profile=$enableval], [profile=no])
895
896 if test "$profile" = yes; then
897 if test "$ac_cv_c_compiler_gnu" = yes; then
898 IRC_CFLAGS="$IRC_CFLAGS -pg"
899 AC_MSG_RESULT([yes, adding -pg])
900 AC_DEFINE(CHARYBDIS_PROFILE, 1, [Define this if you are profiling.])
901 else
902 AC_MSG_RESULT([no, profile builds only work with gcc])
903 fi
904 else
905 AC_MSG_RESULT(no)
906 fi
907
908 AC_ARG_ENABLE(balloc,
909 AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
910 [balloc=$enableval], [balloc=yes])
911
912 if test "$balloc" = no; then
913 AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
914 fi
915
916 AC_ARG_ENABLE(ricer-hashing,
917 AC_HELP_STRING([--enable-ricer-hashing],[Enable assembly-based hashing routines.]),
918 [ricer_hashing=$enableval], [ricer_hashing=no])
919
920 FNVHASH_S=""
921
922 if test "$ricer_hashing" = "yes"; then
923 AC_DEFINE([RICER_HASHING], 1, [Define to 1 if you are using the assembly-based hashing routines.])
924 FNVHASH_S="fnvhash.s"
925 fi
926
927 AC_SUBST(FNVHASH_S)
928
929 AC_ARG_ENABLE(small-net,
930 AC_HELP_STRING([--enable-small-net],[Enable small network support.]),
931 [small_net=$enableval], [small_net=no])
932
933 if test "$small_net" = yes; then
934 dnl AC_DEFINE([HASHSIZE], 4096, [Max number of buckets in hash tables.])
935 AC_DEFINE([NICKNAMEHISTORYLENGTH], 1500, [Size of the WHOWAS array.])
936 AC_DEFINE([CHANNEL_HEAP_SIZE], 256, [Size of the channel heap.])
937 AC_DEFINE([BAN_HEAP_SIZE], 128, [Size of the ban heap.])
938 AC_DEFINE([CLIENT_HEAP_SIZE], 256, [Size of the client heap.])
939 AC_DEFINE([LCLIENT_HEAP_SIZE], 128, [Size of the local client heap.])
940 AC_DEFINE([PCLIENT_HEAP_SIZE], 32, [Size of the pre-client heap.])
941 AC_DEFINE([USER_HEAP_SIZE], 128, [Size of the user heap.])
942 AC_DEFINE([DNODE_HEAP_SIZE], 256, [Size of the dlink_node heap.])
943 AC_DEFINE([TOPIC_HEAP_SIZE], 256, [Size of the topic heap.])
944 AC_DEFINE([LINEBUF_HEAP_SIZE], 128, [Size of the linebuf heap.])
945 AC_DEFINE([MEMBER_HEAP_SIZE], 256, [Sizeof member heap.])
946 AC_DEFINE([ND_HEAP_SIZE], 128, [Size of the nick delay heap.])
947 AC_DEFINE([CONFITEM_HEAP_SIZE], 128, [Size of the confitem heap.])
948 AC_DEFINE([MONITOR_HEAP_SIZE], 128, [Size of the monitor heap.])
949 else
950 dnl These settings are for a large network like efnet..they will use lots of memory
951 dnl so enable small net unless you really need this much support
952 AC_DEFINE([NICKNAMEHISTORYLENGTH], 15000, [Size of the WHOWAS array.])
953 AC_DEFINE([CHANNEL_HEAP_SIZE], 8192, [Size of the channel heap.])
954 AC_DEFINE([BAN_HEAP_SIZE], 4096, [Size of the ban heap.])
955 AC_DEFINE([CLIENT_HEAP_SIZE], 8192, [Size of the client heap.])
956 AC_DEFINE([LCLIENT_HEAP_SIZE], 1024, [Size of the local client heap.])
957 AC_DEFINE([PCLIENT_HEAP_SIZE], 256, [Size of the pre-client heap.])
958 AC_DEFINE([USER_HEAP_SIZE], 8192, [Size of the user heap.])
959 AC_DEFINE([DNODE_HEAP_SIZE], 8192, [Size of the dlink_node heap.])
960 AC_DEFINE([TOPIC_HEAP_SIZE], 4096, [Size of the topic heap.])
961 AC_DEFINE([LINEBUF_HEAP_SIZE], 2048, [Size of the linebuf heap.])
962 AC_DEFINE([MEMBER_HEAP_SIZE], 32768, [Sizeof member heap.])
963 AC_DEFINE([ND_HEAP_SIZE], 512, [Size of the nick delay heap.])
964 AC_DEFINE([CONFITEM_HEAP_SIZE], 256, [Size of the confitem heap.])
965 AC_DEFINE([MONITOR_HEAP_SIZE], 1024, [Size of the monitor heap.])
966 fi
967
968 AC_ARG_WITH(nicklen,
969 AC_HELP_STRING([--with-nicklen=LENGTH],[Set the nick length to LENGTH (default 15, max 50)]),
970 [
971 if test $withval -ge 50; then
972 NICKLEN=50
973 AC_MSG_WARN([NICKLEN has a hard limit of 50. Setting NICKLEN=50])
974 else
975 NICKLEN="$withval"
976 fi
977 ], [NICKLEN=15])
978
979 AC_ARG_WITH(topiclen,
980 AC_HELP_STRING([--with-topiclen=NUMBER],[Set the max topic length to NUMBER (default 390, max 390)]),
981 [
982 if test $withval -ge 390; then
983 TOPICLEN=390
984 AC_MSG_WARN([TOPICLEN has a hard limit of 390. Setting TOPICLEN=390])
985 else
986 TOPICLEN=$withval
987 fi
988 ], [TOPICLEN=390])
989
990 AC_DEFINE_UNQUOTED(TOPICLEN, ${TOPICLEN}, [Maximum topic length (<=390)])
991 AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
992
993 AC_ARG_ENABLE(shared-modules,
994 AC_HELP_STRING([--disable-shared-modules],[ Disable shared modules.]),
995 [shared_modules=$enableval], [shared_modules="yes"])
996
997 dnl Some first-stage sanity checks.
998 if test "$shared_modules" = yes; then
999
1000 if test "$CYGWIN" = yes; then
1001 AC_MSG_WARN([disabling shared modules; Cygwin is at present unable to build them.])
1002 shared_modules="no"
1003 fi
1004
1005 dnl TenDRA's cc is called tcc too.
1006 if test "$CC" = tcc -a "$TenDRA" = "no"; then
1007 AC_MSG_WARN([disabling shared modules: Tiny C Compiler can't create PIC])
1008 shared_modules="no"
1009 fi
1010 fi
1011
1012 dnl Second stage: check for functions and headers.
1013 if test "$shared_modules" = yes; then
1014 DYNLINK_C=dynlink.c
1015 AC_CHECK_HEADERS(dlfcn.h)
1016 AC_SEARCH_LIBS(shl_load, dld,
1017 [
1018 AC_DEFINE(HAVE_SHL_LOAD, 1, [Define if the shl_load function is available.])
1019 SUFFIX=".sl"
1020 MOD_TARGET=hpux_shared
1021 SEDOBJ="s/\.o/.sl/g"
1022 ],
1023 dnl !shl_load:
1024 [
1025 dnl standard dlopen
1026 AC_SEARCH_LIBS(dlopen, [dl c_r],
1027 [
1028 AC_DEFINE(HAVE_DLOPEN, 1, [Define if the dlopen function is available.])
1029 SUFFIX=".so"
1030 MOD_TARGET=shared_modules
1031 SEDOBJ="s/\.o/.so/g"
1032 if test "$AppleGCC" = yes; then
1033 AC_CHECK_HEADERS([mach-o/dyld.h])
1034 fi
1035 AC_CHECK_FUNC(dlsym, ,
1036 [
1037 AC_MSG_WARN([dlsym is not available, shared modules disabled])
1038 shared_modules=no
1039 ])
1040 AC_CHECK_FUNCS(dlfunc)
1041 ],
1042 [
1043 shared_modules=no
1044 ])
1045 ])
1046 fi
1047
1048 AC_DEFINE_UNQUOTED(SHARED_SUFFIX, "$SUFFIX", [Suffix for shared libraries on this platform.])
1049
1050 dnl Third stage - wrangling the linker.
1051 if test "$shared_modules" = yes; then
1052 # The GNU linker requires the -export-dynamic option to make
1053 # all symbols visible in the dynamic symbol table.
1054 hold_ldflags=$LDFLAGS
1055 AC_MSG_CHECKING(for the ld -export-dynamic flag)
1056 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic -Werror"
1057 AC_LINK_IFELSE(AC_LANG_PROGRAM([],[int i;]), found=yes, found=no)
1058 LDFLAGS=$hold_ldflags
1059
1060 if expr "`uname -s`" : ^IRIX >/dev/null 2>&1; then
1061 found="no, IRIX ld uses -B,dynamic"
1062 LDFLAGS="${LDFLAGS} -Wl,-B,dynamic"
1063 fi
1064
1065 if expr "`uname -s`" : ^AIX >/dev/null 2>&1; then
1066 found="no, AIX ld uses -G -brtl"
1067 LDFLAGS="${LDFLAGS} -Wl,-G,-brtl"
1068 fi
1069
1070 AC_MSG_RESULT($found)
1071
1072 if test "$found" = yes; then
1073 LDFLAGS="${LDFLAGS} -Wl,-export-dynamic"
1074 fi
1075
1076 AC_MSG_CHECKING(for compiler option to produce PIC)
1077 dnl The order should be here to check for groups of compilers,
1078 dnl then for odd compilers, then if no PICFLAGS were set up,
1079 dnl check for GCC and set defaults, or else error. -jmallett
1080 if test "$SGS" = "yes"; then
1081 AC_MSG_RESULT([SVR4 SGS interfaces: -KPIC -DPIC -G])
1082 PICFLAGS="-KPIC -DPIC -G"
1083 fi
1084
1085 if test "$AppleGCC" = "yes"; then
1086 AC_MSG_RESULT([Darwin Mach-O bundles: -fno-common -bundle -flat_namespace -undefined suppress])
1087 PICFLAGS="-fno-common -bundle -flat_namespace -undefined suppress"
1088 fi
1089 dnl Please note, that on HPUX two different stages of module compilation occurs, since
1090 dnl while compiling modules, the compiler does not allow you to give arguments
1091 dnl to the linker. (I did not design this)
1092 dnl So we need -c in the first stage of module compilation.
1093 dnl In the second stage, we link the modules via ld -b.
1094 dnl Additionally, HPUX does not like -export-dynamic, it likes -E instead.
1095 dnl -TimeMr14C
1096 if test "$HPUX" = "yes" -a "$CC" != gcc; then
1097 AC_MSG_RESULT(HP-UX cc: +z -r -q -n)
1098 PICFLAGS="+z -r -q -n -c"
1099 AC_MSG_CHECKING([if +ESfic is required on this platform])
1100
1101 if expr "`$CC +ESfic 2>&1`" : ".*neither supported.*" >/dev/null; then
1102 AC_MSG_RESULT(no)
1103 else
1104 AC_MSG_RESULT(yes)
1105 PICFLAGS="$PICFLAGS +ESfic"
1106 fi
1107
1108 LDFLAGS="${LDFLAGS} -Wl,-E"
1109 fi
1110 if test "$Tru" = yes -a "$CC" != gcc; then
1111 AC_MSG_RESULT([Tru64: -shared -expect_unresolved '*'])
1112 PICFLAGS="-shared -expect_unresolved '*' "
1113 LDFLAGS="-call_shared"
1114 fi
1115 if test -z "$PICFLAGS"; then
1116 if test "$ac_cv_c_compiler_gnu" = "yes"; then
1117 AC_MSG_RESULT(gcc: -fPIC -DPIC -shared)
1118 PICFLAGS="-fPIC -DPIC -shared"
1119 else
1120 AC_MSG_RESULT(no)
1121 shared_modules=no
1122 fi
1123 fi
1124 fi
1125
1126 # This must be down here, or it will mess up checks like the ones
1127 # for -Wl,-export-dynamic
1128 # -- jilles
1129 AC_ARG_ENABLE(warnings,
1130 AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
1131 [
1132 IRC_CFLAGS="$IRC_CFLAGS -O0"
1133 CFLAGS="$IRC_CFLAGS"
1134
1135 CHARYBDIS_C_GCC_TRY_FLAGS([-Wall], charybdis_cv_c_gcc_w_all)
1136 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpointer-arith], charybdis_cv_c_gcc_w_pointer_arith)
1137 CHARYBDIS_C_GCC_TRY_FLAGS([-Wimplicit -Wnested-externs], charybdis_cv_c_gcc_w_implicit)
1138 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-align], charybdis_cv_c_gcc_w_cast_align)
1139 CHARYBDIS_C_GCC_TRY_FLAGS([-Wcast-qual], charybdis_cv_c_gcc_w_cast_qual)
1140 CHARYBDIS_C_GCC_TRY_FLAGS([-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations], charybdis_cv_c_gcc_prototypes)
1141 CHARYBDIS_C_GCC_TRY_FLAGS([-Wparenthesis], charybdis_cv_c_gcc_parenthesis)
1142 CHARYBDIS_C_GCC_TRY_FLAGS([-W -Wno-unused], charybdis_cv_c_gcc_w)
1143 CHARYBDIS_C_GCC_TRY_FLAGS([-Wextra], charybdis_cv_c_gcc_w_extra)
1144 CHARYBDIS_C_GCC_TRY_FLAGS([-Wshadow], charybdis_cv_c_gcc_w_shadow)
1145 CHARYBDIS_C_GCC_TRY_FLAGS([-Wmissing-noreturn], charybdis_cv_c_gcc_w_missing_noreturn)
1146 CHARYBDIS_C_GCC_TRY_FLAGS([-Wundef], charybdis_cv_c_gcc_w_undef)
1147 CHARYBDIS_C_GCC_TRY_FLAGS([-Wpacked], charybdis_cv_c_gcc_w_packed)
1148 CHARYBDIS_C_GCC_TRY_FLAGS([-Wnested-externs], charybdis_cv_c_gcc_w_nested_externs)
1149 CHARYBDIS_C_GCC_TRY_FLAGS([-Wbad-function-cast], charybdis_cv_c_gcc_w_bad_function_cast)
1150 CHARYBDIS_C_GCC_TRY_FLAGS([-Wunused-function -Wunused-label -Wunused-value -Wunused-variable], charybdis_cv_c_gcc_w_unused)
1151 CHARYBDIS_C_GCC_TRY_FLAGS([-Wredundant-decls], charybdis_cv_c_gcc_w_redundant_decls)
1152 CHARYBDIS_C_GCC_TRY_FLAGS([-Wfloat-equal], charybdis_cv_c_gcc_w_float_equal)
1153 CHARYBDIS_C_GCC_TRY_FLAGS([-Wformat=2], charybdis_cv_c_gcc_w_format)
1154 CHARYBDIS_C_GCC_TRY_FLAGS([-pedantic], charybdis_cv_c_gcc_pedantic)
1155
1156 IRC_CFLAGS="$CFLAGS"
1157 ],[])
1158
1159 if test "$shared_modules" = no; then
1160 DYNLINK_C=""
1161 MOD_TARGET="libmodules.a"
1162 MODULES_LIBS="../modules/libmodules.a"
1163 SEDOBJ=""
1164 AC_DEFINE(STATIC_MODULES, 1, [Define to 1 if dynamic modules can't be used.])
1165 AC_MSG_WARN([shared module support has been disabled!])
1166 fi
1167
1168 dnl Stage 5 - underscores in front of symbol names.
1169 if test "$shared_modules" = yes; then
1170
1171 AC_CHECK_FUNC(nlist,,
1172 AC_CHECK_LIB(dl, nlist, nlist_lib="-ldl",
1173 AC_CHECK_LIB(elf, nlist, nlist_lib="-lelf",)
1174 )
1175 )
1176
1177 dnl We need to find out whether underscores are appended to symbol
1178 dnl names in executable files. First, though, we need to see
1179 dnl where nlist.h is hiding.
1180 AC_CHECK_HEADER(libelf/nlist.h, [ nlist_h="libelf/nlist.h" ], )
1181 AC_CHECK_HEADER(elf/nlist.h, [ nlist_h="elf/nlist.h" ], )
1182 AC_CHECK_HEADER(nlist.h, [ nlist_h="nlist.h" ], )
1183 if test x"$nlist_h" = "x"; then
1184 AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "", [String containing extra underscores prepended to symbols loaded from modules.])
1185 else
1186 AC_MSG_CHECKING(for extra underscores prepended to symbol names)
1187 AC_CACHE_VAL(symbol_underscores,
1188 [
1189 cat << EOF > conftest.c
1190 #include <$nlist_h>
1191 #include <stdio.h>
1192 #include <stdlib.h>
1193 void _modinit(void);
1194 int main(int argc, char *argv[[]]) {
1195 int i;
1196 struct nlist nl[[5]];
1197
1198 /* fill the names in this way, so it'll work almost everywhere */
1199 nl[[0]].n_name = "_modinit";
1200 nl[[1]].n_name = "__modinit";
1201 nl[[2]].n_name = "___modinit";
1202 nl[[3]].n_name = "____modinit";
1203 nl[[0]].n_value = nl[[1]].n_value = nl[[2]].n_value = nl[[3]].n_value = nl[[4]].n_name = NULL;
1204
1205 if(argc < 2 || (nlist(argv[[1]], nl)) == -1) exit(-1);
1206 for(i = 0; i < 4; i++) {
1207 if(nl[[i]].n_value != NULL)
1208 {
1209 int j;
1210 for(j = 0; j < i; j++)
1211 printf("_");
1212 exit(i);
1213 }
1214 }
1215 exit(-1);
1216 }
1217 void _modinit(void) { return; }
1218 EOF
1219 $CC $CPPFLAGS $IRC_CFLAGS -o conftest conftest.c $nlist_lib >/dev/null 2>&1
1220 symbol_underscores=`./conftest conftest`
1221 AC_MSG_RESULT($symbol_underscores)
1222 $RM -f conftest conftest.c
1223 ])
1224 AC_DEFINE_UNQUOTED(SYMBOL_PREFIX, "${symbol_underscores}", [String containing extra underscores prepended to symbols loaded from modules.])
1225 fi
1226 fi
1227
1228 AC_SUBST(MODULES_LIBS)
1229 AC_SUBST(MOD_TARGET)
1230
1231 AC_SUBST(SSL_SRCS_ENABLE)
1232 AC_SUBST(SSL_INCLUDES)
1233 AC_SUBST(SSL_LIBS)
1234
1235 AC_SUBST(LDFLAGS)
1236 AC_SUBST(PICFLAGS)
1237 AC_SUBST(IRC_CFLAGS)
1238 AC_SUBST(SEDOBJ)
1239
1240
1241 if test "$prefix" = "NONE"; then
1242 AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$ac_default_prefix", [Prefix where the ircd is installed.])
1243
1244 else
1245
1246 dnl Don't get bitten by Cygwin's stupidity if the user specified
1247 dnl a custom prefix with a trailing slash
1248
1249 prefix=`echo $prefix | sed 's/\/$//'`
1250 AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$prefix", [Prefix where the ircd is installed.])
1251
1252 fi
1253
1254 AC_CONFIG_FILES( \
1255 Makefile \
1256 libcharybdis/Makefile \
1257 servlink/Makefile \
1258 extensions/Makefile \
1259 unsupported/Makefile \
1260 src/Makefile \
1261 modules/Makefile \
1262 tools/Makefile \
1263 doc/Makefile \
1264 help/Makefile \
1265 )
1266
1267 AC_OUTPUT
1268
1269 if test "$cf_openssl_version_ok" = yes; then
1270 openssl="yes"
1271 else
1272 openssl="no"
1273 fi
1274
1275 if test "$shared_modules" = yes; then
1276 modules=shared
1277 else
1278 modules=static
1279 fi
1280
1281 echo "
1282 Configuration:
1283 Install directory : $prefix
1284
1285 Ziplinks : $zlib
1286 OpenSSL : $openssl
1287 Modules : $modules
1288 IPv6 support : $have_v6
1289 Socket Engine : $SELECT_TYPE
1290 Small network : $small_net
1291 Block allocator : $balloc
1292 ASM hashing code : $ricer_hashing
1293
1294 Nickname length : $NICKLEN
1295 Topic length : $TOPICLEN
1296
1297 Use make to compile Charybdis, then make install to install it.
1298 "