1# Copyright (C) 2011, Antoine Bertin <diaoulael@gmail.com> 2# Copyright (C) 2011-2014, Martin Johansson <martin@fatbob.nu> 3# 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 10# - Redistributions of source code must retain the above copyright notice, 11# this list of conditions and the following disclaimer. 12# - Redistributions in binary form must reproduce the above copyright notice, 13# this list of conditions and the following disclaimer in the documentation 14# and/or other materials provided with the distribution. 15# - Neither the name of the Developers nor the names of its contributors may 16# be used to endorse or promote products derived from this software without 17# specific prior written permission. 18# 19# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR 23# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 26# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 27# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31# Process this file with autoconf to produce a configure script. 32AC_PREREQ([2.63]) 33AC_INIT([umurmur], [0.2.16], [https://github.com/umurmur/umurmur/issues/new], [umurmur], [http://github.com/umurmur/umurmur]) 34AC_CONFIG_SRCDIR([src/client.h]) 35AC_CONFIG_HEADERS([src/config.h:config.h.in]) 36AM_INIT_AUTOMAKE 37AC_CANONICAL_HOST 38AM_SILENT_RULES([yes]) 39 40# Configure options. 41AC_ARG_WITH([ssl], [AC_HELP_STRING([--with-ssl=@<:@LIB@:>@], [SSL library (openssl|polarssl|gnutls|mbedtls) @<:@default=polarssl@:>@])], [], [with_ssl=polarssl]) 42AC_ARG_ENABLE([shmapi], [AC_HELP_STRING([--enable-shmapi], [compile with Sharedmemory API support @<:@default=no@:>@])],[],[enable_shmapi=no] ) 43AC_ARG_ENABLE(polarssl-test-cert, [ --enable-polarssl-test-cert Link to PolarSSL test certificate and key @<:@default=no@:>@], [enable_polarssl_test_cert=yes]) 44AC_ARG_ENABLE(polarssl-havege, [ --enable-polarssl-havege Link to PolarSSL HAVEGE random generator key @<:@default=no@:>@ Default: /dev/urandom], [enable_polarssl_havege=yes]) 45AC_ARG_ENABLE(mbedtls-test-cert, [ --enable-mbedtls-test-cert Link to mbedTLS test certificate and key @<:@default=no@:>@], [enable_mbedtls_test_cert=yes]) 46AC_ARG_ENABLE(mbedtls-havege, [ --enable-mbedtls-havege Link to mbedTLS HAVEGE random generator key @<:@default=no@:>@ Default: /dev/urandom], [enable_mbedtls_havege=yes]) 47 48# Checks for programs. 49AC_PROG_CC 50 51# Checks dependencies. 52AC_CHECK_HEADERS([google/protobuf-c/protobuf-c.h], [], [AC_MSG_ERROR([could not find google/protobuf-c/protobuf-c.h])]) 53AC_CHECK_LIB([protobuf-c], [protobuf_c_message_init], [], [AC_MSG_ERROR([could not find protobuf-c library])]) 54AC_CHECK_HEADERS([libconfig.h], [], [AC_MSG_ERROR([could not find libconfig.h])]) 55AC_CHECK_LIB([config], [config_init], [], [AC_MSG_ERROR([could not find libconfig])]) 56case $host_os in 57 darwin* ) 58 AC_CHECK_FUNC([clock_get_time], [], [AC_MSG_ERROR([could not find clock_get_time()])]) 59 CFLAGS+=" -Wno-deprecated-declarations" 60 ;; 61 * ) 62 AC_CHECK_FUNC([clock_gettime], [], [AC_CHECK_LIB([rt], [clock_gettime], [], [AC_MSG_ERROR([could not find clock_gettime() in librt])])]) 63 ;; 64esac 65AS_IF([test "x$with_ssl" = xpolarssl], [ 66 AC_CHECK_HEADERS([polarssl/ssl.h], [], [AC_MSG_ERROR([could not find polarssl/ssl.h])]) 67 AC_CHECK_HEADERS([polarssl/version.h], [], [AC_MSG_ERROR([could not find polarssl/version.h])]) 68 69 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <polarssl/ssl.h>]], 70 [[#if defined(POLARSSL_ZLIB_SUPPORT) 71 int x; 72 #endif 73 x = 0; 74 return 0;]])], 75 [AC_CHECK_LIB([z], [deflate], [], [AC_MSG_ERROR([could not find zlib])])], 76 []) 77 AC_CHECK_LIB([polarssl], [ssl_init], [], [AC_MSG_ERROR([could not find libpolarssl])]) 78 AC_DEFINE([USE_POLARSSL], [], [Use PolarSSL]) 79 AS_IF([test "x$enable_polarssl_test_cert" = xyes], [ 80 AC_CHECK_LIB([polarssl], [test_srv_crt], [], [AC_MSG_ERROR([could not find test_srv_crt])]) 81 AC_DEFINE([USE_POLARSSL_TESTCERT], [], [Use PolarSSL test certificate]) 82 ]) 83 AS_IF([test "x$enable_polarssl_havege" = xyes], [ 84 AC_CHECK_LIB([polarssl], [havege_init], [], [AC_MSG_ERROR([could not find havege_init])]) 85 AC_DEFINE([USE_POLARSSL_HAVEGE], [], [Use PolarSSL HAVEGE random generator]) 86 ]) 87]) 88AS_IF([test "x$with_ssl" = xmbedtls], [ 89 AC_CHECK_HEADERS([mbedtls/ssl.h], [], [AC_MSG_ERROR([could not find mbedtls/ssl.h])]) 90 AC_CHECK_HEADERS([mbedtls/version.h], [], [AC_MSG_ERROR([could not find mbedtls/version.h])]) 91 92 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mbedtls/ssl.h>]], 93 [[#if defined(MBEDTLS_ZLIB_SUPPORT) 94 int x; 95 #endif 96 x = 0; 97 return 0;]])], 98 [AC_CHECK_LIB([z], [deflate], [], [AC_MSG_ERROR([could not find zlib])])], 99 []) 100 AC_CHECK_LIB([mbedtls], [mbedtls_ssl_init], [], [AC_MSG_ERROR([could not find libmbedtls])], [-lmbedcrypto -lmbedx509]) 101 AC_CHECK_LIB([mbedcrypto], [mbedtls_cipher_setup], [], [AC_MSG_ERROR([could not find libmbedcrypto])], [-lmbedtls -lmbedx509]) 102 AC_CHECK_LIB([mbedx509], [mbedtls_x509_crt_init], [], [AC_MSG_ERROR([could not find libmbedx509])], [-lmbedcrypto -lmbedtls]) 103 AC_DEFINE([USE_MBEDTLS], [], [Use mbedTLS]) 104 AS_IF([test "x$enable_mbedtls_test_cert" = xyes], [ 105 AC_CHECK_LIB([mbedtls], [test_srv_crt], [], [AC_MSG_ERROR([could not find test_srv_crt])]) 106 AC_DEFINE([USE_MBEDTLS_TESTCERT], [], [Use mbedTLS test certificate]) 107 ]) 108 AS_IF([test "x$enable_mbedtls_havege" = xyes], [ 109 AC_CHECK_HEADERS([mbedtls/havege.h], [], [AC_MSG_ERROR([could not find mbedtls/havege.h])]) 110 AC_CHECK_LIB([mbedcrypto], [mbedtls_havege_init], [], [AC_MSG_ERROR([could not find mbedtls_havege_init])]) 111 AC_DEFINE([USE_MBEDTLS_HAVEGE], [], [Use mbedTLS HAVEGE random generator]) 112 ]) 113]) 114AS_IF([test "x$with_ssl" = xopenssl], [ 115 AC_CHECK_HEADERS([openssl/ssl.h], [], [AC_MSG_ERROR([could not find openssl/ssl.h])]) 116 AC_CHECK_LIB([crypto], [CRYPTO_new_ex_data], [], [AC_MSG_ERROR([could not find libcrypto])]) 117 AC_CHECK_LIB([ssl], [SSL_new], [], [AC_MSG_ERROR([could not find libssl])]) 118]) 119AS_IF([test "x$with_ssl" = xgnutls], [ 120 AC_CHECK_HEADERS([gnutls/gnutls.h], [], [AC_MSG_ERROR([could not find gnutls/gnutls.h])]) 121 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([@%:@include <gnutls/gnutls.h>], 122 [ #ifdef GNUTLS_E_PREMATURE_TERMINATION 123 #else 124 #error Unsuitable version of GnuTLS 125 #endif 126 ])], [], [AC_MSG_ERROR([Unsuitable version of GnuTL, minimum required is 3.0])]) 127 AC_CHECK_LIB([gnutls], [gnutls_priority_init], [], [AC_MSG_ERROR([could not find libgnutls])]) 128 AC_CHECK_LIB([nettle], [_nettle_aes_decrypt], [], [AC_MSG_ERROR([could not find libnettle])]) 129 AC_DEFINE([USE_GNUTLS], [], [Use GnuTLS]) 130]) 131 132AM_CONDITIONAL(USE_OPENSSL, test x$with_ssl = xopenssl) 133AM_CONDITIONAL(USE_GNUTLS, test x$with_ssl = xgnutls) 134AM_CONDITIONAL(USE_MBEDTLS, test x$with_ssl = xmbedtls) 135 136AS_IF([test "x$enable_shmapi" != xno], 137 [ 138 AM_CONDITIONAL(USE_SHAREDMEMORY_API, true) 139 AC_DEFINE([USE_SHAREDMEMORY_API],[],[Use sharedmemory API]) 140 AC_CHECK_FUNC([shm_open], [], [AC_CHECK_LIB([rt], [shm_open], [], [AC_MSG_ERROR([could not find shm_open() in librt])])]) 141 ], [ 142 AM_CONDITIONAL(USE_SHAREDMEMORY_API, false) 143]) 144 145AC_DEFINE([DEFAULT_CONFIG], ["/usr/local/etc/umurmur.conf"], [Default config]) 146 147# Checks for header files. 148AC_FUNC_ALLOCA 149AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h limits.h netinet/tcp.h stddef.h stdint.h stdlib.h string.h sys/socket.h sys/time.h syslog.h unistd.h sys/poll.h], [], [AC_MSG_ERROR([missing a required header])]) 150 151# Checks for typedefs, structures, and compiler characteristics. 152AC_HEADER_STDBOOL 153AC_TYPE_UID_T 154AC_C_INLINE 155AC_TYPE_INT32_T 156AC_TYPE_INT64_T 157AC_TYPE_SIZE_T 158AC_TYPE_UINT16_T 159AC_TYPE_UINT32_T 160AC_TYPE_UINT64_T 161AC_TYPE_UINT8_T 162 163# Checks for library functions. 164AC_CHECK_FUNCS([ftruncate gettimeofday inet_ntoa memchr memmove memset socket strdup strrchr uname poll], [], [AC_MSG_ERROR([missing a required func])]) 165 166AC_CONFIG_FILES([Makefile src/Makefile]) 167AC_OUTPUT 168