-dnl $Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $
+dnl $Id: configure.ac 26260 2008-12-10 04:08:39Z androsyn $
dnl Process this file with autoconf to produce a configure script.
dnl TODO: clean up all the OpenSSL and shared module checking stuff;
dnl the most major changes have already been made and it looks like
dnl said functions need to be just about as complex as they already are.
-AC_PREREQ(2.60)
+AC_PREREQ(2.63)
AUTOMAKE_OPTIONS = 1.10
dnl Sneaky way to get an Id tag into the configure script
-AC_COPYRIGHT([$Id: configure.ac 23020 2006-09-01 18:20:19Z androsyn $])
+AC_COPYRIGHT([$Id: configure.ac 26260 2008-12-10 04:08:39Z androsyn $])
AC_INIT([libratbox],[devel])
-AM_INIT_AUTOMAKE(AC_PACKAGE_TARNAME, AC_PACKAGE_VERSION, -)
+AM_INIT_AUTOMAKE([subdir-objects])
+AM_SILENT_RULES([yes])
AM_CONFIG_HEADER(include/libratbox_config.h)
AC_ISC_POSIX
AC_C_INLINE
AC_C_CONST
+AC_C_BIGENDIAN
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_PATH_PROG(AUTOMAKE, automake)
AC_PATH_PROG(CP, cp)
AC_PATH_PROG(MV, mv)
AC_PATH_PROG(LN, ln)
-AC_PATH_PROG(AR, ar)
-AC_PATH_PROG(LD, ld)
-AC_PATH_PROG(RANLIB, ranlib)
AC_PATH_PROG(TOUCH, touch)
AC_LANG(C)
LIBTOOL="$LIBTOOL --silent"
-AC_CONFIG_SUBDIRS(libltdl)
-
-
case "$host_os" in
*cygwin*)
AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
AC_CHECK_HEADER(windows.h, , [AC_MSG_ERROR([** MinGW and no windows.h. I give up.])])
AC_CHECK_HEADER(winsock2.h, , [AC_MSG_ERROR([** MinGW and no winsock2.h. I give up.])])
+ AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, [Have WINSOCK2_H])
+ AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, [Have WINSOCK_H])
LIBS="$LIBS -lws2_32 -liphlpapi"
is_mingw="yes"
;;
CPPFLAGS="$CFLAGS -D_ALL_SOURCE -D_XOPEN_SOURCE=500"
;;
*solaris*)
- CPPFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS"
+ CPPFLAGS="$CFLAGS -D_POSIX_PTHREAD_SEMANTICS -D_XPG4_2"
;;
*)
;;
# backwards support for IRC_CFLAGS
-CFLAGS="$IRC_CFLAGS $CFLAGS -O0 -Wall"
+CFLAGS="$IRC_CFLAGS $CFLAGS -Wall"
dnl use directory structure of cached as default (hack)
if test "$libexecdir" = '${exec_prefix}/libexec' &&
localstatedir='${prefix}'
fi
-AC_TYPE_INT8_T
-AC_TYPE_INT16_T
-AC_TYPE_INT32_T
-AC_TYPE_INT64_T
-AC_TYPE_UINT8_T
-AC_TYPE_UINT16_T
-AC_TYPE_UINT32_T
-AC_TYPE_UINT64_T
-
-RB_TYPE_INTPTR_T
-RB_TYPE_INTMAX_T
-RB_TYPE_UINTMAX_T
-RB_TYPE_UINTPTR_T
-
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
dnl Checks for header files.
AC_HEADER_STDC
-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])
+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 linux/tcp.h])
AC_HEADER_TIME
dnl Networking Functions
#endif
]])
-AC_CHECK_TYPE(socklen_t, ,
-[AC_DEFINE([socklen_t], [unsigned int],
-[If we don't have a real socklen_t, unsigned int is good enough.])],
-[
+AC_CHECK_TYPE([socklen_t], rb_cv_socklen_t=socklen_t,[
+ AC_MSG_CHECKING([for socklen_t equivalent])
+ AC_CACHE_VAL([rb_cv_socklen_t],
+ [
+ # Systems have either "struct sockaddr *" or
+ # "void *" as the second argument to getpeername
+ rb_cv_socklen_t=
+ for arg2 in "struct sockaddr" void; do
+ for t in int size_t unsigned long "unsigned long"; do
+ AC_TRY_COMPILE([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
-
+int getpeername (int, $arg2 *, $t *);
+],[
+$t len;
+getpeername(0,0,&len);
+],[
+ rb_cv_socklen_t="$t"
+ break
])
+ done
+ done
+
+ if test "x$rb_cv_socklen_t" = x; then
+ AC_MSG_WARN([Cannot find a type to use in place of socklen_t using int])
+ rb_cv_socklen_t=int
+ fi
+ ])
+ AC_MSG_RESULT($rb_cv_socklen_t)],
+ [#include <sys/types.h>
+#include <sys/socket.h>])
+
+rb_socklen_t=$rb_cv_socklen_t
+
+
+
+
AC_ARG_ENABLE(ipv6,AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support]),[ipv6=$enableval],[ipv6=yes])
])
-save_LIBS=$LIBS
-AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
-LIBS=$save_LIBS
-
-CRYPT_LIB=$ac_cv_search_crypt
-
-if test "$CRYPT_LIB" = "none required"; then
- unset CRYPT_LIB
-elif test "$CRYPT_LIB" = no; then
- need_crypt=yes;
- AC_DEFINE(NEED_CRYPT, 1, [Define if your system needs crypt.])
- unset CRYPT_LIB
-fi
-
-AM_CONDITIONAL([NEED_CRYPT], [test x"$need_crypt" == "xyes"])
-
-
-AC_SUBST(CRYPT_LIB)
-
dnl Check for stdarg.h - if we cant find it, halt configure
AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - libratbox will not compile without it **])])
dnl check for various functions...
-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])
+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])
AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP, 1, [Define if you have nanosleep]))
AC_SEARCH_LIBS(timer_create, rt, AC_DEFINE(HAVE_TIMER_CREATE, 1, [Define if you have timer_create]))
RB_CHECK_TIMER_CREATE
+RB_CHECK_TIMERFD_CREATE
AC_FUNC_ALLOCA
AC_FUNC_VFORK
AC_DEFINE(HAVE_WIN32, [1], [Define to 1 if you are on windows])
fi
-dnl GnuTLS support
-AC_MSG_CHECKING(for GnuTLS)
-AC_ARG_ENABLE(gnutls,
-[AC_HELP_STRING([--enable-gnutls],[Enable GnuTLS support.])
-AC_HELP_STRING([--disable-gnutls],[Disable GnuTLS support.])],
-[cf_enable_gnutls=$enableval],
-[cf_enable_gnutls="auto"])
-
-if test "$cf_enable_gnutls" != no; then
- PKG_CHECK_MODULES(GNUTLS, [gnutls], [
- CPPFLAGS="$CPPFLAGS $GNUTLS_CFLAGS"
- LIBS="$LIBS $GNUTLS_LIBS"
- cf_enable_gnutls="yes"
- ], [cf_enable_gnutls="no"])
-fi
-
-if test "$cf_enable_gnutls" != no; then
- AC_DEFINE(HAVE_GNUTLS, 1, [Has GNUTLS])
-fi
dnl OpenSSL support
AC_MSG_CHECKING(for OpenSSL)
[cf_enable_openssl=$enableval],
[cf_enable_openssl="auto"])
-dnl Prefer GnuTLS over OpenSSL due to licensing issues, this could use improvement
-if test "$cf_enable_gnutls" = "yes" -a "$cf_enable_openssl" = "auto"; then
- cf_enable_openssl="no"
-fi
-
if test "$cf_enable_openssl" != "no" ; then
cf_openssl_basedir=""
if test "$cf_enable_openssl" != "auto" &&
dnl Now check cf_openssl_found to see if we found anything.
if test ! -z "$cf_openssl_basedir"; then
if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
- SSL_INCLUDES="-I${cf_openssl_basedir}/include"
+ SSL_CFLAGS="-I${cf_openssl_basedir}/include"
SSL_LIBS="-L${cf_openssl_basedir}/lib"
else
dnl OpenSSL wasn't found in the directory specified. Naughty
fi
save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
+CPPFLAGS="$CPPFLAGS $SSL_CFLAGS"
save_LIBS="$LIBS"
LIBS="$LIBS $SSL_LIBS"
if test "$cf_enable_openssl" != no; then
dnl Check OpenSSL version (must be 0.9.7 or above!)
AC_MSG_CHECKING(for OpenSSL 0.9.7 or above)
AC_RUN_IFELSE(
- AC_LANG_PROGRAM(
+ [AC_LANG_PROGRAM(
[#include <openssl/opensslv.h>
#include <stdlib.h>],
[[if (OPENSSL_VERSION_NUMBER >= 0x00907000)
- exit(0); else exit(1);]]),
+ exit(0); else exit(1);]])],
cf_enable_openssl=yes,
cf_enable_openssl=no,
cf_enable_openssl=no)
[cf_enable_openssl=no])
fi
-
if test "$cf_enable_openssl" != no; then
CPPFLAGS="$CPPFLAGS $SSL_LIBS"
AC_CHECK_LIB(ssl, SSL_read,
- [SSL_LIBS="-lssl -lcrypto"],
+ [SSL_LIBS="$SSL_LIBS -lssl -lcrypto"],
[cf_enable_openssl=no], [-lcrypto])
fi
-if test "$cf_enable_openssl" != no; then
+
+dnl mbedTLS support
+AC_ARG_ENABLE(mbedtls,
+[AC_HELP_STRING([--enable-mbedtls], [Enable mbedTLS support.])
+AC_HELP_STRING([--disable-mbedtls], [Disable mbedTLS support.])],
+[cf_enable_mbedtls=$enableval],
+[cf_enable_mbedtls="auto"])
+
+if test "$cf_enable_mbedtls" != no; then
+ save_CPPFLAGS="$CPPFLAGS"
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $MBEDTLS_LIBS"
+ AC_CHECK_LIB(mbedtls, mbedtls_ssl_init, [
+ MBEDTLS_LIBS="$MBEDTLS_LIBS -lmbedtls -lmbedcrypto -lmbedx509"
+ cf_enable_mbedtls=yes
+ ], [cf_enable_mbedtls=no], [-lmbedcrypto -lmbedx509])
+fi
+
+dnl GnuTLS support
+AC_MSG_CHECKING(for GnuTLS)
+AC_ARG_ENABLE(gnutls,
+[AC_HELP_STRING([--enable-gnutls],[Enable GnuTLS support.])
+AC_HELP_STRING([--disable-gnutls],[Disable GnuTLS support.])],
+[cf_enable_gnutls=$enableval],
+[cf_enable_gnutls="auto"])
+
+if test "$cf_enable_gnutls" != no; then
+ PKG_CHECK_MODULES(GNUTLS, [gnutls], [
+ cf_enable_gnutls="yes"
+ ], [cf_enable_gnutls="no"])
+fi
+
+dnl mbed TLS is given highest preference when no specified TLS library is provided
+if test "$cf_enable_openssl" = "auto" -a "$cf_enable_mbedtls" = "yes"; then
+ cf_enable_openssl="no"
+fi
+
+if test "$cf_enable_gnutls" = "auto" -a "$cf_enable_openssl" = "yes" -a "$cf_enable_mbedtls" = "yes"; then
+ cf_enable_gnutls="no"
+fi
+
+if test x"$cf_enable_openssl" != xno; then
AC_DEFINE(HAVE_OPENSSL,1,[Has OpenSSL])
+ GNUTLS_CFLAGS=""
+ GNUTLS_LIBS=""
+ MBEDTLS_LIBS=""
+ MBEDTLS_CFLAGS=""
+ SSL_TYPE="openssl"
+elif test x"$cf_enable_mbedtls" != xno; then
+ AC_DEFINE(HAVE_MBEDTLS, 1, [Has mbedTLS])
+ SSL_LIBS=""
+ SSL_CFLAGS=""
+ GNUTLS_CFLAGS=""
+ GNUTLS_LIBS=""
+ SSL_TYPE="mbedtls"
+elif test x"$cf_enable_gnutls" != xno; then
+ AC_DEFINE(HAVE_GNUTLS, 1, [Has GnuTLS])
+ SSL_LIBS=""
+ SSL_CFLAGS=""
+ MBEDTLS_LIBS=""
+ MBEDTLS_CFLAGS=""
+ SSL_TYPE="gnutls"
fi
+
+
CPPFLAGS="$save_CPPFLAGS"
LIBS="$save_LIBS"
AC_MSG_RESULT(no)
fi
-AC_ARG_ENABLE(balloc,
-AC_HELP_STRING([--disable-balloc],[Disable the block allocator.]),
-[balloc=$enableval], [balloc=yes])
-
-if test "$balloc" = no; then
- AC_DEFINE([NOBALLOC], 1, [Define to 1 if you wish to disable the block allocator.])
-fi
-
AC_ARG_ENABLE(warnings,
AC_HELP_STRING([--enable-warnings],[Enable all sorts of warnings for debugging.]),
[CFLAGS="$CFLAGS -Wall -Werror -Wcast-qual -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -W -Wno-unused -Wunused-function -Wunused-variable"],[])
AC_SUBST(PICFLAGS)
AC_SUBST(CFLAGS)
AC_SUBST(SEDOBJ)
-AC_SUBST(SSL_INCLUDES)
+AC_SUBST(SSL_CFLAGS)
AC_SUBST(SSL_LIBS)
-
+AC_SUBST(GNUTLS_CFLAGS)
+AC_SUBST(GNUTLS_LIBS)
+AC_SUBST(MBEDTLS_CFLAGS)
+AC_SUBST(MBEDTLS_LIBS)
if test "$prefix" = "NONE"; then
AC_DEFINE_UNQUOTED(RB_PREFIX, "$ac_default_prefix", [Prefix where libratbox is installed.])
AC_SUBST(RB_PREFIX)
-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
-do
- var="\$ac_cv_c_${dtype}"
- t_type=$(eval echo $var);
- if test "x$t_type" = "xyes"; then
- eval rb_$dtype="\"$dtype\""
- else
- eval rb_$dtype="\"$t_type\""
- fi
-done
-
AC_CONFIG_COMMANDS([include/librb-config.h],
[
outfile=include/librb-config.h.tmp
echo '#include <errno.h>' >> $outfile
fi
+echo "typedef $rb_socklen_t rb_socklen_t;" >> $outfile
+
+
if test "x$rb_sockaddr_sa_len" = "xyes"; then
echo '#define RB_SOCKADDR_HAS_SA_LEN 1' >> $outfile
fi
-echo "typedef $rb_uint64_t rb_uint64_t;" >> $outfile
-echo "typedef $rb_uint32_t rb_uint32_t;" >> $outfile
-echo "typedef $rb_uint16_t rb_uint16_t;" >> $outfile
-echo "typedef $rb_uint8_t rb_uint8_t;" >> $outfile
-echo "typedef $rb_int64_t rb_int64_t;" >> $outfile
-echo "typedef $rb_int32_t rb_int32_t;" >> $outfile
-echo "typedef $rb_int16_t rb_int16_t;" >> $outfile
-echo "typedef $rb_int8_t rb_int8_t;" >> $outfile
-echo "typedef $rb_intmax_t rb_intmax_t;" >> $outfile
-echo "typedef $rb_intptr_t rb_intptr_t;" >> $outfile
-echo "typedef $rb_uintmax_t rb_uintmax_t;" >> $outfile
-echo "typedef $rb_uintptr_t rb_uintptr_t;" >> $outfile
-echo "typedef $rb_socklen_t rb_socklen_t;" >> $outfile
-
if test "x$rb_sockaddr_storage" = "xyes"; then
echo '#define rb_sockaddr_storage sockaddr_storage' >> $outfile
else
- echo 'struct rb_sockaddr_storage { rb_uint8_t _padding[128]; };' >> $outfile
+ echo 'struct rb_sockaddr_storage { uint8_t _padding[[128]]; };' >> $outfile
fi
cat >> $outfile <<\_______EOF
fi
],[
- rb_uint64_t="$rb_uint64_t"
- rb_uint32_t="$rb_uint32_t"
- rb_uint16_t="$rb_uint16_t"
- rb_uint8_t="$rb_uint8_t"
- rb_int64_t="$rb_int64_t"
- rb_int32_t="$rb_int32_t"
- rb_int16_t="$rb_int16_t"
- rb_int8_t="$rb_int8_t"
- rb_intmax_t="$rb_intmax_t"
- rb_intptr_t="$rb_intptr_t"
- rb_uintmax_t="$rb_uintmax_t"
- rb_uintptr_t="$rb_uintptr_t"
if test x$ac_cv_header_stdc = xyes; then
rb_header_stdc=yes
fi
if test x$ac_cv_header_winsock2_h = xyes; then
rb_winsock2_h=yes
fi
- if test x$ac_cv_type_socklen_t = xyes; then
- rb_socklen_t="socklen_t"
- else
- rb_socklen_t="unsigned int"
- fi
+
+ rb_socklen_t=$rb_socklen_t
+
if test "x$rb_have_sockaddr_storage" = "xyes"; then
rb_sockaddr_storage="yes"
else
)
-AC_CONFIG_FILES([
- src/Makefile
- Makefile
+
+AC_CONFIG_FILES( \
+ src/Makefile \
+ Makefile \
libratbox.pc
-])
+)
AC_OUTPUT
echo "IPv6 support ................... $have_v6"
echo "Assert debugging ............... $assert"
-echo "Block allocator ................ $balloc"
-echo "OpenSSL ........................ $cf_enable_openssl"
-echo "GnuTLS ......................... $cf_enable_gnutls"
+echo "SSL Type........................ $SSL_TYPE"
echo