1 dnl $Id: configure.ac 26260 2008-12-10 04:08:39Z 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 26260 2008-12-10 04:08:39Z 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)
53 AC_PATH_PROG(TOUCH, touch)
58 LIBTOOL="$LIBTOOL --silent"
62 AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
63 AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
66 AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
67 AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
68 AC_CHECK_HEADER(windows.h, , [AC_MSG_ERROR([** MinGW and no windows.h. I give up.])])
69 AC_CHECK_HEADER(winsock2.h, , [AC_MSG_ERROR([** MinGW and no winsock2.h. I give up.])])
70 AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, [Have WINSOCK2_H])
71 AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, [Have WINSOCK_H])
72 LIBS="$LIBS -lws2_32 -liphlpapi"
76 CPPFLAGS="$CFLAGS -D_ALL_SOURCE -D_XOPEN_SOURCE=500"
79 CPPFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS -D_XPG4_2"
85 AM_CONDITIONAL([MINGW], [test "$is_mingw" = "yes"])
88 # backwards support for IRC_CFLAGS
89 CFLAGS="$IRC_CFLAGS $CFLAGS -Wall"
91 dnl use directory structure of cached as default (hack)
92 if test "$libexecdir" = '${exec_prefix}/libexec' &&
93 test "$localstatedir" = '${prefix}/var'; then
94 libexecdir='${bindir}'
95 localstatedir='${prefix}'
104 dnl Checks for header files.
107 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 sys/timerfd.h])
110 dnl Networking Functions
111 dnl ====================
113 AC_SEARCH_LIBS(socket, [socket],,)
116 AC_CHECK_MEMBER([struct sockaddr.sa_len], [AC_DEFINE(SOCKADDR_IN_HAS_LEN, 1, [Define to 1 if sockaddr has a 'sa_len'
118 #ifdef HAVE_SYS_TYPES_H
119 #include <sys/types.h>
121 #ifdef HAVE_SYS_SOCKET_H
122 #include <sys/socket.h>
124 #ifdef HAVE_WINSOCK2_H
125 #include <winsock2.h>
129 AC_CHECK_TYPE([socklen_t], rb_cv_socklen_t=socklen_t,[
130 AC_MSG_CHECKING([for socklen_t equivalent])
131 AC_CACHE_VAL([rb_cv_socklen_t],
133 # Systems have either "struct sockaddr *" or
134 # "void *" as the second argument to getpeername
136 for arg2 in "struct sockaddr" void; do
137 for t in int size_t unsigned long "unsigned long"; do
139 #ifdef HAVE_SYS_TYPES_H
140 #include <sys/types.h>
142 #ifdef HAVE_SYS_SOCKET_H
143 #include <sys/socket.h>
145 #ifdef HAVE_WINSOCK2_H
146 #include <winsock2.h>
148 int getpeername (int, $arg2 *, $t *);
151 getpeername(0,0,&len);
159 if test "x$rb_cv_socklen_t" = x; then
160 AC_MSG_WARN([Cannot find a type to use in place of socklen_t using int])
164 AC_MSG_RESULT($rb_cv_socklen_t)],
165 [#include <sys/types.h>
166 #include <sys/socket.h>])
168 rb_socklen_t=$rb_cv_socklen_t
174 AC_ARG_ENABLE(ipv6,AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support]),[ipv6=$enableval],[ipv6=yes])
176 if test x$ipv6 != xyes; then
182 AC_MSG_NOTICE([Disabling IPv6 support: PF_INET6 not found])
186 if test "X$have_v6" = "Xyes"; then
187 RB_TYPE_STRUCT_SOCKADDR_IN6([], [
188 AC_MSG_NOTICE([Disabling IPv6 support: struct sockaddr_in6 not found])
195 AC_CHECK_TYPES([struct sockaddr_storage],[
196 rb_have_sockaddr_storage=yes
198 #include <sys/types.h>
199 #include <sys/socket.h>
204 AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
207 CRYPT_LIB=$ac_cv_search_crypt
209 if test "$CRYPT_LIB" = "none required"; then
211 elif test "$CRYPT_LIB" = no; then
213 AC_DEFINE(NEED_CRYPT, 1, [Define if your system needs crypt.])
217 AM_CONDITIONAL([NEED_CRYPT], [test x"$need_crypt" = "xyes"])
222 dnl Check for stdarg.h - if we cant find it, halt configure
223 AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - libratbox will not compile without it **])])
225 AC_CHECK_TYPE([sa_family_t], [],
226 [AC_DEFINE(sa_family_t, [u_int16_t], [If system does not define sa_family_t, define it here.])],
227 [[#include <sys/types.h>
228 #include <sys/socket.h>]])
231 dnl check for various functions...
232 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 arc4random getrusage timerfd_create])
234 AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP, 1, [Define if you have nanosleep]))
235 AC_SEARCH_LIBS(timer_create, rt, AC_DEFINE(HAVE_TIMER_CREATE, 1, [Define if you have timer_create]))
236 RB_CHECK_TIMER_CREATE
237 RB_CHECK_TIMERFD_CREATE
243 AC_MSG_CHECKING(for /dev/poll)
244 if test -c "/dev/poll"; then
246 AC_DEFINE(HAVE_DEVPOLL, [1], [Define to 1 if you have devpoll])
252 if test "$is_mingw" = "yes"; then
253 AC_DEFINE(HAVE_WIN32, [1], [Define to 1 if you are on windows])
258 AC_MSG_CHECKING(for OpenSSL)
259 AC_ARG_ENABLE(openssl,
260 [AC_HELP_STRING([--enable-openssl[=DIR]],[Enable OpenSSL support (DIR optional).])
261 AC_HELP_STRING([--disable-openssl],[Disable OpenSSL support.])],
262 [cf_enable_openssl=$enableval],
263 [cf_enable_openssl="auto"])
265 if test "$cf_enable_openssl" != "no" ; then
266 cf_openssl_basedir=""
267 if test "$cf_enable_openssl" != "auto" &&
268 test "$cf_enable_openssl" != "yes" ; then
269 dnl Support for --enable-openssl=/some/place
270 cf_openssl_basedir="`echo ${cf_enable_openssl} | sed 's/\/$//'`"
272 dnl Do the auto-probe here. Check some common directory paths.
273 for dirs in /usr/local/ssl /usr/pkg /usr/local \
274 /usr/local/openssl ; do
275 if test -f "${dirs}/include/openssl/opensslv.h" ; then
276 cf_openssl_basedir="${dirs}"
282 dnl Now check cf_openssl_found to see if we found anything.
283 if test ! -z "$cf_openssl_basedir"; then
284 if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
285 SSL_CFLAGS="-I${cf_openssl_basedir}/include"
286 SSL_LIBS="-L${cf_openssl_basedir}/lib"
288 dnl OpenSSL wasn't found in the directory specified. Naughty
290 cf_openssl_basedir=""
293 dnl Check for stock FreeBSD 4.x and 5.x systems, since their files
294 dnl are in /usr/include and /usr/lib. In this case, we don't want to
295 dnl change INCLUDES or LIBS, but still want to enable OpenSSL.
296 dnl We can't do this check above, because some people want two versions
297 dnl of OpenSSL installed (stock FreeBSD 4.x/5.x and /usr/local/ssl)
298 dnl and they want /usr/local/ssl to have preference.
299 if test -f "/usr/include/openssl/opensslv.h" ; then
300 cf_openssl_basedir="/usr"
304 dnl If we have a basedir defined, then everything is okay. Otherwise,
305 dnl we have a problem.
306 if test ! -z "$cf_openssl_basedir"; then
307 AC_MSG_RESULT($cf_openssl_basedir)
308 cf_enable_openssl="yes"
310 AC_MSG_RESULT([not found. Specify a correct path?])
311 cf_enable_openssl="no"
313 unset cf_openssl_basedir
315 dnl If --disable-openssl was specified
316 AC_MSG_RESULT(disabled)
319 save_CPPFLAGS="$CPPFLAGS"
320 CPPFLAGS="$CPPFLAGS $SSL_CFLAGS"
322 LIBS="$LIBS $SSL_LIBS"
323 if test "$cf_enable_openssl" != no; then
324 dnl Check OpenSSL version (must be 0.9.7 or above!)
325 AC_MSG_CHECKING(for OpenSSL 0.9.7 or above)
328 [#include <openssl/opensslv.h>
329 #include <stdlib.h>],
330 [[if (OPENSSL_VERSION_NUMBER >= 0x00907000)
331 exit(0); else exit(1);]]),
332 cf_enable_openssl=yes,
333 cf_enable_openssl=no,
334 cf_enable_openssl=no)
336 if test "$cf_enable_openssl" != no; then
339 AC_MSG_RESULT(no - OpenSSL support disabled)
345 if test "$cf_enable_openssl" != no; then
346 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
347 AC_CHECK_LIB(crypto, RAND_status,
348 [cf_enable_openssl=yes],
349 [cf_enable_openssl=no])
352 if test "$cf_enable_openssl" != no; then
353 CPPFLAGS="$CPPFLAGS $SSL_LIBS"
354 AC_CHECK_LIB(ssl, SSL_read,
355 [SSL_LIBS="$SSL_LIBS -lssl -lcrypto"],
356 [cf_enable_openssl=no], [-lcrypto])
362 AC_MSG_CHECKING(for GnuTLS)
363 AC_ARG_ENABLE(gnutls,
364 [AC_HELP_STRING([--enable-gnutls],[Enable GnuTLS support.])
365 AC_HELP_STRING([--disable-gnutls],[Disable GnuTLS support.])],
366 [cf_enable_gnutls=$enableval],
367 [cf_enable_gnutls="auto"])
369 if test "$cf_enable_gnutls" != no; then
370 PKG_CHECK_MODULES(GNUTLS, [gnutls], [
371 cf_enable_gnutls="yes"
372 ], [cf_enable_gnutls="no"])
375 if test "$cf_enable_gnutls" = "auto" -a "$cf_enable_openssl" = "yes"; then
376 cf_enable_gnutls="no"
379 if test x"$cf_enable_openssl" != xno; then
380 AC_DEFINE(HAVE_OPENSSL,1,[Has OpenSSL])
384 elif test x"$cf_enable_gnutls" != xno; then
385 AC_DEFINE(HAVE_GNUTLS, 1, [Has GnuTLS])
394 CPPFLAGS="$save_CPPFLAGS"
397 dnl End OpenSSL detection
402 dnl Debug-related options
403 dnl =====================
405 AC_ARG_ENABLE(assert,
406 AC_HELP_STRING([--enable-assert],[Enable assert(). Choose between soft(warnings) and hard(aborts the daemon)]),
407 [assert=$enableval], [assert=no])
409 if test "$assert" = no; then
410 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
411 elif test "$assert" = soft; then
412 AC_DEFINE(SOFT_ASSERT, 1, [Define this to enable soft asserts.])
413 AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
414 elif test "$assert" = yes; then
418 AC_MSG_CHECKING(if you want to do a profile build)
419 AC_ARG_ENABLE(profile,
420 AC_HELP_STRING([--enable-profile],[Enable profiling]),
421 [profile=$enableval], [profile=no])
423 if test "$profile" = yes; then
424 if test "$ac_cv_c_compiler_gnu" = yes; then
425 CFLAGS="$CFLAGS -pg -static"
426 AC_MSG_RESULT([yes, adding -pg -static])
427 AC_DEFINE(RATBOX_PROFILE, 1, [Defined to mark profiling is enabled])
429 AC_MSG_RESULT([no, profile builds only work with gcc])
435 AC_ARG_ENABLE(balloc,
436 AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
437 [balloc=$enableval], [balloc=yes])
439 if test "$balloc" = no; then
440 AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
443 AC_ARG_ENABLE(warnings,
444 AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
445 [CFLAGS="$CFLAGS -Wall -Werror -Wcast-qual -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -W -Wno-unused -Wunused-function -Wunused-variable"],[])
453 AC_SUBST(GNUTLS_CFLAGS)
454 AC_SUBST(GNUTLS_LIBS)
456 if test "$prefix" = "NONE"; then
457 AC_DEFINE_UNQUOTED(RB_PREFIX, "$ac_default_prefix", [Prefix where libratbox is installed.])
461 dnl Don't get bitten by Cygwin's stupidity if the user specified
462 dnl a custom prefix with a trailing slash
464 prefix=`echo $prefix | sed 's/\/$//'`
465 AC_DEFINE_UNQUOTED(RB_PREFIX, "$prefix", [Prefix where libratbox is installed.])
471 AC_CONFIG_COMMANDS([include/librb-config.h],
473 outfile=include/librb-config.h.tmp
474 cat > $outfile <<\_______EOF
476 * librb-config.h: libratbox config file. Please modify configure.ac
479 #ifndef __LIBRB_CONFIG_H
480 #define __LIBRB_CONFIG_H
484 if test "x$rb_have_ipv6" = "xyes"; then
485 echo "#define RB_IPV6 1" >> $outfile
488 if test "x$rb_windows_h" = "xyes"; then
489 echo '#define WIN32_LEAN_AND_MEAN 1' >> $outfile
490 echo '#include <windows.h>' >> $outfile
491 echo '#include <winsock2.h>' >> $outfile
492 echo '#include <iphlpapi.h>' >> $outfile
495 if test "x$rb_alloca_h" = "xyes"; then
496 echo '#define RB_HAVE_ALLOCA_H 1' >> $outfile
499 if test "x$rb_header_stdc" = "xyes"; then
500 echo '#include <stdlib.h>' >> $outfile
501 echo '#include <stddef.h>' >> $outfile
502 elif test "x$rb_header_stdlib" = "xyes"; then
503 echo '#include <stdlib.h>' >> $outfile
506 if test "x$rb_header_string_h" = "xyes"; then
507 echo '#include <string.h>' >> $outfile
510 if test "x$rb_stdint_h" = "xyes"; then
511 echo '#include <stdint.h>' >> $outfile
514 if test "x$rb_inttypes_h" = "xyes"; then
515 echo '#include <inttypes.h>' >> $outfile
518 if test "x$rb_sys_types_h" = "xyes"; then
519 echo '#include <sys/types.h>' >> $outfile
521 if test "x$rb_sys_time_h" = "xyes"; then
522 echo '#include <sys/time.h>' >> $outfile
524 if test "x$rb_sys_stat_h" = "xyes"; then
525 echo '#include <sys/stat.h>' >> $outfile
527 if test "x$rb_time_h" = "xyes"; then
528 echo '#include <time.h>' >> $outfile
531 if test "x$rb_sys_socket_h" = "xyes"; then
532 echo '#include <sys/socket.h>' >> $outfile
535 if test "x$rb_netinet_in_h" = "xyes"; then
536 echo '#include <netinet/in.h>' >> $outfile
539 if test "x$rb_arpa_inet_h" = "xyes"; then
540 echo '#include <arpa/inet.h>' >> $outfile
543 if test "x$rb_unistd_h" = "xyes"; then
544 echo '#include <unistd.h>' >> $outfile
547 if test "x$rb_crypt_h" = "xyes"; then
548 echo '#include <crypt.h>' >> $outfile
551 if test "x$rb_errno_h" = "xyes"; then
552 echo '#include <errno.h>' >> $outfile
555 echo "typedef $rb_socklen_t rb_socklen_t;" >> $outfile
558 if test "x$rb_sockaddr_sa_len" = "xyes"; then
559 echo '#define RB_SOCKADDR_HAS_SA_LEN 1' >> $outfile
562 if test "x$rb_sockaddr_storage" = "xyes"; then
563 echo '#define rb_sockaddr_storage sockaddr_storage' >> $outfile
565 echo 'struct rb_sockaddr_storage { uint8_t _padding[[128]]; };' >> $outfile
568 cat >> $outfile <<\_______EOF
569 #endif /* __LIBRB_CONFIG_H */
572 if cmp -s $outfile include/librb-config.h; then
573 AC_MSG_NOTICE([include/librb-config.h is unchanged])
576 ${rb_mv} $outfile include/librb-config.h
580 if test x$ac_cv_header_stdc = xyes; then
583 if test x$ac_cv_header_stdlib_h = xyes; then
584 rb_header_stdlib_h=yes
586 if test x$ac_cv_header_string_h = xyes; then
587 rb_header_string_h=yes
589 if test x$ac_cv_header_memory_h = xyes; then
590 rb_header_memory_h=yes
592 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
593 rb_alloca_h="$ac_cv_working_alloca_h"
595 rb_alloc_h="$ac_cv_header_alloca_h"
597 if test x$ac_cv_member_struct_sockaddr_sa_len = xyes; then
598 rb_sockaddr_sa_len=yes
600 if test x$ac_cv_header_sys_socket_h = xyes; then
603 if test x$ac_cv_header_sys_types_h = xyes; then
606 if test x$ac_cv_header_sys_stat_h = xyes; then
609 if test x$ac_cv_header_sys_time_h = xyes; then
612 if test x$ac_cv_header_time = xyes; then
616 if test x$ac_cv_header_stdint_h = xyes; then
619 if test x$ac_cv_header_inttypes_h = xyes; then
622 if test x$ac_cv_header_netinet_in_h = xyes; then
626 if test x$ac_cv_header_crypt_h = xyes; then
629 if test x$ac_cv_header_errno_h = xyes; then
632 if test x$ac_cv_header_unistd_h = xyes; then
635 if test x$ac_cv_header_windows_h = xyes; then
638 if test x$ac_cv_header_winsock2_h = xyes; then
642 rb_socklen_t=$rb_socklen_t
644 if test "x$rb_have_sockaddr_storage" = "xyes"; then
645 rb_sockaddr_storage="yes"
647 rb_sockaddr_storage="no"
650 rb_have_ipv6="$have_v6"
669 dnl Make it look sexay!
672 echo "Compiling $PACKAGE_NAME $PACKAGE_VERSION"
675 echo "Installing into: $prefix"
677 echo "IPv6 support ................... $have_v6"
678 echo "Assert debugging ............... $assert"
679 echo "Block allocator ................ $balloc"
680 echo "SSL Type........................ $SSL_TYPE"