1 dnl $Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $
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.
9 AUTOMAKE_OPTIONS = 1.10
10 dnl Sneaky way to get an Id tag into the configure script
11 AC_COPYRIGHT([$Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $])
12 AC_INIT([libratbox],[devel])
13 AM_INIT_AUTOMAKE(AC_PACKAGE_TARNAME, AC_PACKAGE_VERSION, -)
15 AM_CONFIG_HEADER(include/libratbox_config.h)
17 AC_PREFIX_DEFAULT(/usr/local/libratbox)
20 dnl Checks for programs.
23 if test x"$ac_cv_prog_cc_c99" = "xno"; then
24 AC_ERROR([ircd-ratbox requires a C99 capable compiler])
45 AC_PATH_PROG(AUTOMAKE, automake)
46 AC_PATH_PROG(ACLOCAL, aclocal)
47 AC_PATH_PROG(AUTOHEADER, autoheader)
55 AC_PATH_PROG(RANLIB, ranlib)
56 AC_PATH_PROG(TOUCH, touch)
61 LIBTOOL="$LIBTOOL --silent"
63 AC_CONFIG_SUBDIRS(libltdl)
68 AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
69 AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
72 AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
73 AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
74 AC_CHECK_HEADER(windows.h, , [AC_MSG_ERROR([** MinGW and no windows.h. I give up.])])
75 AC_CHECK_HEADER(winsock2.h, , [AC_MSG_ERROR([** MinGW and no winsock2.h. I give up.])])
76 LIBS="$LIBS -lws2_32 -liphlpapi"
80 CPPFLAGS="$CFLAGS -D_ALL_SOURCE -D_XOPEN_SOURCE=500"
83 CPPFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
89 AM_CONDITIONAL([MINGW], [test "$is_mingw" = "yes"])
92 # backwards support for IRC_CFLAGS
93 CFLAGS="$IRC_CFLAGS $CFLAGS -O0 -Wall"
95 dnl use directory structure of cached as default (hack)
96 if test "$libexecdir" = '${exec_prefix}/libexec' &&
97 test "$localstatedir" = '${prefix}/var'; then
98 libexecdir='${bindir}'
99 localstatedir='${prefix}'
122 dnl Checks for header files.
125 AC_CHECK_HEADERS([crypt.h unistd.h sys/socket.h sys/stat.h sys/time.h time.h netinet/in.h arpa/inet.h errno.h sys/uio.h spawn.h sys/poll.h sys/epoll.h sys/select.h sys/devpoll.h sys/event.h port.h signal.h sys/signalfd.h])
128 dnl Networking Functions
129 dnl ====================
131 AC_SEARCH_LIBS(socket, [socket],,)
134 AC_CHECK_MEMBER([struct sockaddr.sa_len], [AC_DEFINE(SOCKADDR_IN_HAS_LEN, 1, [Define to 1 if sockaddr has a 'sa_len'
136 #ifdef HAVE_SYS_TYPES_H
137 #include <sys/types.h>
139 #ifdef HAVE_SYS_SOCKET_H
140 #include <sys/socket.h>
142 #ifdef HAVE_WINSOCK2_H
143 #include <winsock2.h>
147 AC_CHECK_TYPE(socklen_t, ,
148 [AC_DEFINE([socklen_t], [unsigned int],
149 [If we don't have a real socklen_t, unsigned int is good enough.])],
151 #ifdef HAVE_SYS_TYPES_H
152 #include <sys/types.h>
154 #ifdef HAVE_SYS_SOCKET_H
155 #include <sys/socket.h>
157 #ifdef HAVE_WINSOCK2_H
158 #include <winsock2.h>
163 AC_ARG_ENABLE(ipv6,AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support]),[ipv6=$enableval],[ipv6=yes])
165 if test x$ipv6 != xyes; then
171 AC_MSG_NOTICE([Disabling IPv6 support: PF_INET6 not found])
175 if test "X$have_v6" = "Xyes"; then
176 RB_TYPE_STRUCT_SOCKADDR_IN6([], [
177 AC_MSG_NOTICE([Disabling IPv6 support: struct sockaddr_in6 not found])
184 AC_CHECK_TYPES([struct sockaddr_storage],[
185 rb_have_sockaddr_storage=yes
187 #include <sys/types.h>
188 #include <sys/socket.h>
193 AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
196 CRYPT_LIB=$ac_cv_search_crypt
198 if test "$CRYPT_LIB" = "none required"; then
200 elif test "$CRYPT_LIB" = no; then
202 AC_DEFINE(NEED_CRYPT, 1, [Define if your system needs crypt.])
206 AM_CONDITIONAL([NEED_CRYPT], [test x"$need_crypt" == "xyes"])
211 dnl Check for stdarg.h - if we cant find it, halt configure
212 AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - libratbox will not compile without it **])])
214 AC_CHECK_TYPE([sa_family_t], [],
215 [AC_DEFINE(sa_family_t, [u_int16_t], [If system does not define sa_family_t, define it here.])],
216 [[#include <sys/types.h>
217 #include <sys/socket.h>]])
220 dnl check for various functions...
221 AC_CHECK_FUNCS([socketpair gettimeofday writev sendmsg gmtime_r strtok_r usleep posix_spawn strlcpy strlcat strnlen fstat signalfd select poll kevent port_create epoll_ctl])
223 AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP, 1, [Define if you have nanosleep]))
224 AC_SEARCH_LIBS(timer_create, rt, AC_DEFINE(HAVE_TIMER_CREATE, 1, [Define if you have timer_create]))
225 RB_CHECK_TIMER_CREATE
231 AC_MSG_CHECKING(for /dev/poll)
232 if test -c "/dev/poll"; then
234 AC_DEFINE(HAVE_DEVPOLL, [1], [Define to 1 if you have devpoll])
240 if test "$is_mingw" = "yes"; then
241 AC_DEFINE(HAVE_WIN32, [1], [Define to 1 if you are on windows])
246 AC_MSG_CHECKING(for OpenSSL)
247 AC_ARG_ENABLE(openssl,
248 [AC_HELP_STRING([--enable-openssl[=DIR]],[Enable OpenSSL support (DIR optional).])
249 AC_HELP_STRING([--disable-openssl],[Disable OpenSSL support.])],
250 [cf_enable_openssl=$enableval],
251 [cf_enable_openssl="auto"])
253 if test "$cf_enable_openssl" != "no" ; then
254 cf_openssl_basedir=""
255 if test "$cf_enable_openssl" != "auto" &&
256 test "$cf_enable_openssl" != "yes" ; then
257 dnl Support for --enable-openssl=/some/place
258 cf_openssl_basedir="`echo ${cf_enable_openssl} | sed 's/\/$//'`"
260 dnl Do the auto-probe here. Check some common directory paths.
261 for dirs in /usr/local/ssl /usr/pkg /usr/local \
262 /usr/local/openssl ; do
263 if test -f "${dirs}/include/openssl/opensslv.h" ; then
264 cf_openssl_basedir="${dirs}"
270 dnl Now check cf_openssl_found to see if we found anything.
271 if test ! -z "$cf_openssl_basedir"; then
272 if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
273 SSL_INCLUDES="-I${cf_openssl_basedir}/include"
274 SSL_LIBS="-L${cf_openssl_basedir}/lib"
276 dnl OpenSSL wasn't found in the directory specified. Naughty
278 cf_openssl_basedir=""
281 dnl Check for stock FreeBSD 4.x and 5.x systems, since their files
282 dnl are in /usr/include and /usr/lib. In this case, we don't want to
283 dnl change INCLUDES or LIBS, but still want to enable OpenSSL.
284 dnl We can't do this check above, because some people want two versions
285 dnl of OpenSSL installed (stock FreeBSD 4.x/5.x and /usr/local/ssl)
286 dnl and they want /usr/local/ssl to have preference.
287 if test -f "/usr/include/openssl/opensslv.h" ; then
288 cf_openssl_basedir="/usr"
292 dnl If we have a basedir defined, then everything is okay. Otherwise,
293 dnl we have a problem.
294 if test ! -z "$cf_openssl_basedir"; then
295 AC_MSG_RESULT($cf_openssl_basedir)
296 cf_enable_openssl="yes"
298 AC_MSG_RESULT([not found. Specify a correct path?])
299 cf_enable_openssl="no"
301 unset cf_openssl_basedir
303 dnl If --disable-openssl was specified
304 AC_MSG_RESULT(disabled)
307 save_CPPFLAGS="$CPPFLAGS"
308 CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
310 LIBS="$LIBS $SSL_LIBS"
311 if test "$cf_enable_openssl" != no; then
312 dnl Check OpenSSL version (must be 0.9.7 or above!)
313 AC_MSG_CHECKING(for OpenSSL 0.9.7 or above)
316 [#include <openssl/opensslv.h>
317 #include <stdlib.h>],
318 [[if (OPENSSL_VERSION_NUMBER >= 0x00907000)
319 exit(0); else exit(1);]]),
320 cf_enable_openssl=yes,
321 cf_enable_openssl=no,
322 cf_enable_openssl=no)
324 if test "$cf_enable_openssl" != no; then
327 AC_MSG_RESULT(no - OpenSSL support disabled)
333 if test "$cf_enable_openssl" != no; then
334 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
335 AC_CHECK_LIB(crypto, RAND_status,
336 [cf_enable_openssl=yes],
337 [cf_enable_openssl=no])
341 if test "$cf_enable_openssl" != no; then
342 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
343 AC_CHECK_LIB(ssl, SSL_read,
344 [SSL_LIBS="-lssl -lcrypto"],
345 [cf_enable_openssl=no], [-lcrypto])
348 if test "$cf_enable_openssl" != no; then
349 AC_DEFINE(HAVE_OPENSSL,1,[Has OpenSSL])
353 CPPFLAGS="$save_CPPFLAGS"
356 dnl End OpenSSL detection
361 dnl Debug-related options
362 dnl =====================
364 AC_ARG_ENABLE(assert,
365 AC_HELP_STRING([--enable-assert],[Enable assert(). Choose between soft(warnings) and hard(aborts the daemon)]),
366 [assert=$enableval], [assert=no])
368 if test "$assert" = no; then
369 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
370 elif test "$assert" = soft; then
371 AC_DEFINE(SOFT_ASSERT, 1, [Define this to enable soft asserts.])
372 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
373 elif test "$assert" = yes; then
377 AC_MSG_CHECKING(if you want to do a profile build)
378 AC_ARG_ENABLE(profile,
379 AC_HELP_STRING([--enable-profile],[Enable profiling]),
380 [profile=$enableval], [profile=no])
382 if test "$profile" = yes; then
383 if test "$ac_cv_c_compiler_gnu" = yes; then
384 CFLAGS="$CFLAGS -pg -static"
385 AC_MSG_RESULT([yes, adding -pg -static])
386 AC_DEFINE(RATBOX_PROFILE, 1, [Defined to mark profiling is enabled])
388 AC_MSG_RESULT([no, profile builds only work with gcc])
394 AC_ARG_ENABLE(balloc,
395 AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
396 [balloc=$enableval], [balloc=yes])
398 if test "$balloc" = no; then
399 AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
402 AC_ARG_ENABLE(warnings,
403 AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
404 [CFLAGS="$CFLAGS -Wall -Werror -Wcast-qual -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -W -Wno-unused -Wunused-function -Wunused-variable"],[])
410 AC_SUBST(SSL_INCLUDES)
414 if test "$prefix" = "NONE"; then
415 AC_DEFINE_UNQUOTED(RB_PREFIX, "$ac_default_prefix", [Prefix where libratbox is installed.])
419 dnl Don't get bitten by Cygwin's stupidity if the user specified
420 dnl a custom prefix with a trailing slash
422 prefix=`echo $prefix | sed 's/\/$//'`
423 AC_DEFINE_UNQUOTED(RB_PREFIX, "$prefix", [Prefix where libratbox is installed.])
429 for dtype in uint64_t uint32_t uint16_t uint8_t int64_t int32_t int16_t int8_t intmax_t intptr_t uintmax_t uintptr_t
431 var="\$ac_cv_c_${dtype}"
432 t_type=$(eval echo $var);
433 if test "x$t_type" = "xyes"; then
434 eval rb_$dtype="\"$dtype\""
436 eval rb_$dtype="\"$t_type\""
440 AC_CONFIG_COMMANDS([include/librb-config.h],
442 outfile=include/librb-config.h.tmp
443 cat > $outfile <<\_______EOF
445 * librb-config.h: libratbox config file. Please modify configure.ac
448 #ifndef __LIBRB_CONFIG_H
449 #define __LIBRB_CONFIG_H
453 if test "x$rb_have_ipv6" = "xyes"; then
454 echo "#define RB_IPV6 1" >> $outfile
457 if test "x$rb_windows_h" = "xyes"; then
458 echo '#define WIN32_LEAN_AND_MEAN 1' >> $outfile
459 echo '#include <windows.h>' >> $outfile
460 echo '#include <winsock2.h>' >> $outfile
461 echo '#include <iphlpapi.h>' >> $outfile
464 if test "x$rb_alloca_h" = "xyes"; then
465 echo '#define RB_HAVE_ALLOCA_H 1' >> $outfile
468 if test "x$rb_header_stdc" = "xyes"; then
469 echo '#include <stdlib.h>' >> $outfile
470 echo '#include <stddef.h>' >> $outfile
471 elif test "x$rb_header_stdlib" = "xyes"; then
472 echo '#include <stdlib.h>' >> $outfile
475 if test "x$rb_header_string_h" = "xyes"; then
476 echo '#include <string.h>' >> $outfile
479 if test "x$rb_stdint_h" = "xyes"; then
480 echo '#include <stdint.h>' >> $outfile
483 if test "x$rb_inttypes_h" = "xyes"; then
484 echo '#include <inttypes.h>' >> $outfile
487 if test "x$rb_sys_types_h" = "xyes"; then
488 echo '#include <sys/types.h>' >> $outfile
490 if test "x$rb_sys_time_h" = "xyes"; then
491 echo '#include <sys/time.h>' >> $outfile
493 if test "x$rb_sys_stat_h" = "xyes"; then
494 echo '#include <sys/stat.h>' >> $outfile
496 if test "x$rb_time_h" = "xyes"; then
497 echo '#include <time.h>' >> $outfile
500 if test "x$rb_sys_socket_h" = "xyes"; then
501 echo '#include <sys/socket.h>' >> $outfile
504 if test "x$rb_netinet_in_h" = "xyes"; then
505 echo '#include <netinet/in.h>' >> $outfile
508 if test "x$rb_arpa_inet_h" = "xyes"; then
509 echo '#include <arpa/inet.h>' >> $outfile
512 if test "x$rb_unistd_h" = "xyes"; then
513 echo '#include <unistd.h>' >> $outfile
516 if test "x$rb_crypt_h" = "xyes"; then
517 echo '#include <crypt.h>' >> $outfile
520 if test "x$rb_errno_h" = "xyes"; then
521 echo '#include <errno.h>' >> $outfile
524 if test "x$rb_sockaddr_sa_len" = "xyes"; then
525 echo '#define RB_SOCKADDR_HAS_SA_LEN 1' >> $outfile
528 echo "typedef $rb_uint64_t rb_uint64_t;" >> $outfile
529 echo "typedef $rb_uint32_t rb_uint32_t;" >> $outfile
530 echo "typedef $rb_uint16_t rb_uint16_t;" >> $outfile
531 echo "typedef $rb_uint8_t rb_uint8_t;" >> $outfile
532 echo "typedef $rb_int64_t rb_int64_t;" >> $outfile
533 echo "typedef $rb_int32_t rb_int32_t;" >> $outfile
534 echo "typedef $rb_int16_t rb_int16_t;" >> $outfile
535 echo "typedef $rb_int8_t rb_int8_t;" >> $outfile
536 echo "typedef $rb_intmax_t rb_intmax_t;" >> $outfile
537 echo "typedef $rb_intptr_t rb_intptr_t;" >> $outfile
538 echo "typedef $rb_uintmax_t rb_uintmax_t;" >> $outfile
539 echo "typedef $rb_uintptr_t rb_uintptr_t;" >> $outfile
540 echo "typedef $rb_socklen_t rb_socklen_t;" >> $outfile
542 if test "x$rb_sockaddr_storage" = "xyes"; then
543 echo '#define rb_sockaddr_storage sockaddr_storage' >> $outfile
545 echo 'struct rb_sockaddr_storage { rb_uint8_t _padding[128]; };' >> $outfile
548 cat >> $outfile <<\_______EOF
549 #endif /* __LIBRB_CONFIG_H */
552 if cmp -s $outfile include/librb-config.h; then
553 AC_MSG_NOTICE([include/librb-config.h is unchanged])
556 ${rb_mv} $outfile include/librb-config.h
560 rb_uint64_t="$rb_uint64_t"
561 rb_uint32_t="$rb_uint32_t"
562 rb_uint16_t="$rb_uint16_t"
563 rb_uint8_t="$rb_uint8_t"
564 rb_int64_t="$rb_int64_t"
565 rb_int32_t="$rb_int32_t"
566 rb_int16_t="$rb_int16_t"
567 rb_int8_t="$rb_int8_t"
568 rb_intmax_t="$rb_intmax_t"
569 rb_intptr_t="$rb_intptr_t"
570 rb_uintmax_t="$rb_uintmax_t"
571 rb_uintptr_t="$rb_uintptr_t"
572 if test x$ac_cv_header_stdc = xyes; then
575 if test x$ac_cv_header_stdlib_h = xyes; then
576 rb_header_stdlib_h=yes
578 if test x$ac_cv_header_string_h = xyes; then
579 rb_header_string_h=yes
581 if test x$ac_cv_header_memory_h = xyes; then
582 rb_header_memory_h=yes
584 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
585 rb_alloca_h="$ac_cv_working_alloca_h"
587 rb_alloc_h="$ac_cv_header_alloca_h"
589 if test x$ac_cv_member_struct_sockaddr_sa_len = xyes; then
590 rb_sockaddr_sa_len=yes
592 if test x$ac_cv_header_sys_socket_h = xyes; then
595 if test x$ac_cv_header_sys_types_h = xyes; then
598 if test x$ac_cv_header_sys_stat_h = xyes; then
601 if test x$ac_cv_header_sys_time_h = xyes; then
604 if test x$ac_cv_header_time = xyes; then
608 if test x$ac_cv_header_stdint_h = xyes; then
611 if test x$ac_cv_header_inttypes_h = xyes; then
614 if test x$ac_cv_header_netinet_in_h = xyes; then
618 if test x$ac_cv_header_crypt_h = xyes; then
621 if test x$ac_cv_header_errno_h = xyes; then
624 if test x$ac_cv_header_unistd_h = xyes; then
627 if test x$ac_cv_header_windows_h = xyes; then
630 if test x$ac_cv_header_winsock2_h = xyes; then
633 if test x$ac_cv_type_socklen_t = xyes; then
634 rb_socklen_t="socklen_t"
636 rb_socklen_t="unsigned int"
638 if test "x$rb_have_sockaddr_storage" = "xyes"; then
639 rb_sockaddr_storage="yes"
641 rb_sockaddr_storage="no"
644 rb_have_ipv6="$have_v6"
662 dnl Make it look sexay!
665 echo "Compiling $PACKAGE_NAME $PACKAGE_VERSION"
668 echo "Installing into: $prefix"
670 echo "IPv6 support ................... $have_v6"
671 echo "Assert debugging ............... $assert"
672 echo "Block allocator ................ $balloc"
673 echo "OpenSSL ........................ $cf_enable_openssl"