Merge pull request #70 from andres-erbsen/patch-1
[umurmur.git] / configure.ac
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.
32 AC_PREREQ([2.63])
33 AC_INIT([umurmur], [0.2.16], [https://github.com/umurmur/umurmur/issues/new], [umurmur], [http://github.com/umurmur/umurmur])
34 AC_CONFIG_SRCDIR([src/client.h])
35 AC_CONFIG_HEADERS([src/config.h:config.h.in])
36 AM_INIT_AUTOMAKE
37 AC_CANONICAL_HOST
38 AM_SILENT_RULES([yes])
39
40 # Configure options.
41 AC_ARG_WITH([ssl], [AC_HELP_STRING([--with-ssl=@<:@LIB@:>@], [SSL library (openssl|polarssl|gnutls) @<:@default=polarssl@:>@])], [], [with_ssl=polarssl])
42 AC_ARG_ENABLE([shmapi], [AC_HELP_STRING([--enable-shmapi], [compile with Sharedmemory API support @<:@default=no@:>@])],[],[enable_shmapi=no] )
43 AC_ARG_ENABLE(polarssl-test-cert, [  --enable-polarssl-test-cert  Link to PolarSSL test certificate and key @<:@default=no@:>@], [enable_polarssl_test_cert=yes])
44 AC_ARG_ENABLE(polarssl-havege, [  --enable-polarssl-havege  Link to PolarSSL HAVEGE random generator key @<:@default=no@:>@ Default: /dev/urandom], [enable_polarssl_havege=yes])
45
46 # Checks for programs.
47 AC_PROG_CC
48
49 # Checks dependencies.
50 AC_CHECK_HEADERS([google/protobuf-c/protobuf-c.h], [], [AC_MSG_ERROR([could not find google/protobuf-c/protobuf-c.h])])
51 AC_CHECK_LIB([protobuf-c], [protobuf_c_message_init], [], [AC_MSG_ERROR([could not find protobuf-c library])])
52 AC_CHECK_HEADERS([libconfig.h], [], [AC_MSG_ERROR([could not find libconfig.h])])
53 AC_CHECK_LIB([config], [config_init], [], [AC_MSG_ERROR([could not find libconfig])])
54 case $host_os in
55   darwin* )
56     AC_CHECK_FUNC([clock_get_time], [], [AC_MSG_ERROR([could not find clock_get_time()])])
57     CFLAGS+=" -Wno-deprecated-declarations"
58     ;;
59   * )
60     AC_CHECK_FUNC([clock_gettime], [], [AC_CHECK_LIB([rt], [clock_gettime], [], [AC_MSG_ERROR([could not find clock_gettime() in librt])])])
61     ;;
62 esac
63 AS_IF([test "x$with_ssl" = xpolarssl], [
64         AC_CHECK_HEADERS([polarssl/ssl.h], [], [AC_MSG_ERROR([could not find polarssl/ssl.h])])
65         AC_CHECK_HEADERS([polarssl/version.h], [], [AC_MSG_ERROR([could not find polarssl/version.h])])
66
67         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <polarssl/ssl.h>]],
68                 [[#if defined(POLARSSL_ZLIB_SUPPORT)
69                 int x;
70                 #endif
71                 x = 0;
72                 return 0;]])],
73                 [AC_CHECK_LIB([z], [deflate], [], [AC_MSG_ERROR([could not find zlib])])],
74                 [])
75         AC_CHECK_LIB([polarssl], [ssl_init], [], [AC_MSG_ERROR([could not find libpolarssl])])
76         AC_DEFINE([USE_POLARSSL], [], [Use PolarSSL])
77     AS_IF([test "x$enable_polarssl_test_cert" = xyes], [
78             AC_CHECK_LIB([polarssl], [test_srv_crt], [], [AC_MSG_ERROR([could not find test_srv_crt])])
79             AC_DEFINE([USE_POLARSSL_TESTCERT], [], [Use PolarSSL test certificate])
80     ])
81     AS_IF([test "x$enable_polarssl_havege" = xyes], [
82             AC_CHECK_LIB([polarssl], [havege_init], [], [AC_MSG_ERROR([could not find havege_init])])
83             AC_DEFINE([USE_POLARSSL_HAVEGE], [], [Use PolarSSL HAVEGE random generator])
84     ])
85 ])
86 AS_IF([test "x$with_ssl" = xopenssl], [
87         AC_CHECK_HEADERS([openssl/ssl.h], [], [AC_MSG_ERROR([could not find openssl/ssl.h])])
88         AC_CHECK_LIB([crypto], [BN_init], [], [AC_MSG_ERROR([could not find libcrypto])])
89         AC_CHECK_LIB([ssl], [SSL_library_init], [], [AC_MSG_ERROR([could not find libssl])])
90 ])
91 AS_IF([test "x$with_ssl" = xgnutls], [
92         AC_CHECK_HEADERS([gnutls/gnutls.h], [], [AC_MSG_ERROR([could not find gnutls/gnutls.h])])
93   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([@%:@include <gnutls/gnutls.h>],
94                     [ #ifdef GNUTLS_E_PREMATURE_TERMINATION
95                       #else
96                       #error Unsuitable version of GnuTLS
97                       #endif
98                       ])], [], [AC_MSG_ERROR([Unsuitable version of GnuTL, minimum required is 3.0])])
99         AC_CHECK_LIB([gnutls], [gnutls_priority_init], [], [AC_MSG_ERROR([could not find libgnutls])])
100         AC_CHECK_LIB([nettle], [_nettle_aes_decrypt], [], [AC_MSG_ERROR([could not find libnettle])])
101         AC_DEFINE([USE_GNUTLS], [], [Use GnuTLS])
102 ])
103
104 AM_CONDITIONAL(USE_OPENSSL, test x$with_ssl = xopenssl)
105 AM_CONDITIONAL(USE_GNUTLS, test x$with_ssl = xgnutls)
106
107 AS_IF([test "x$enable_shmapi" != xno],
108         [
109         AM_CONDITIONAL(USE_SHAREDMEMORY_API, true)
110         AC_DEFINE([USE_SHAREDMEMORY_API],[],[Use sharedmemory API])
111     AC_CHECK_FUNC([shm_open], [], [AC_CHECK_LIB([rt], [shm_open], [], [AC_MSG_ERROR([could not find shm_open() in librt])])])
112         ], [
113         AM_CONDITIONAL(USE_SHAREDMEMORY_API, false)
114 ])
115
116 AC_DEFINE([DEFAULT_CONFIG], ["/etc/umurmur.conf"], [Default config])
117
118 # Checks for header files.
119 AC_FUNC_ALLOCA
120 AC_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])])
121
122 # Checks for typedefs, structures, and compiler characteristics.
123 AC_HEADER_STDBOOL
124 AC_TYPE_UID_T
125 AC_C_INLINE
126 AC_TYPE_INT32_T
127 AC_TYPE_INT64_T
128 AC_TYPE_SIZE_T
129 AC_TYPE_UINT16_T
130 AC_TYPE_UINT32_T
131 AC_TYPE_UINT64_T
132 AC_TYPE_UINT8_T
133
134 # Checks for library functions.
135 AC_CHECK_FUNCS([ftruncate gettimeofday inet_ntoa memchr memmove memset socket strdup strrchr uname poll], [], [AC_MSG_ERROR([missing a required func])])
136
137 AC_CONFIG_FILES([Makefile src/Makefile])
138 AC_OUTPUT