Updated to latest memcached
[awesomized/libmemcached] / configure.ac
1 #!/usr/bin/env bash
2 # LibmemcacheD
3 # Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/
4 # Copyright (C) 2006-2010 Brian Aker, Monty Taylor, Trond Norbye
5 # All rights reserved.
6 #
7 # Use and distribution licensed under the BSD license. See
8 # the COPYING file in this directory for full text.
9
10 AC_INIT([libmemcached],[1.0.10],[http://libmemcached.org/])
11
12 AC_CONFIG_AUX_DIR(config)
13
14 AC_CANONICAL_TARGET
15
16 AM_INIT_AUTOMAKE
17
18 AC_CANONICAL_HOST
19 AC_CANONICAL_BUILD
20
21 AC_PREREQ([2.61])
22
23 AC_CONFIG_MACRO_DIR(m4)
24
25 AC_CONFIG_HEADERS([config.h:config.in])dnl Keep filename to 8.3 for MS-DOS.
26
27 AC_CONFIG_SRCDIR([libmemcached/memcached.cc])
28
29 PANDORA_CANONICAL_TARGET(no-vc-changelog)
30 AC_CHECK_PROGS([YACC], ['bison'], [:])
31 AC_CHECK_PROGS([LEX], ['flex'], [:])
32
33 #shared library versioning
34 MEMCACHED_UTIL_LIBRARY_VERSION=2:0:0
35 MEMCACHED_PROTOCAL_LIBRARY_VERSION=0:0:0
36 MEMCACHED_LIBRARY_VERSION=11:0:0
37 # | | |
38 # +------+ | +---+
39 # | | |
40 # current:revision:age
41 # | | |
42 # | | +- increment if interfaces have been added
43 # | | set to zero if interfaces have been removed or changed
44 # | +- increment if source code has changed
45 # | set to zero if current is incremented
46 # +- increment if interfaces have been added, removed or changed
47 AC_SUBST(MEMCACHED_UTIL_LIBRARY_VERSION)
48 AC_SUBST(MEMCACHED_PROTOCAL_LIBRARY_VERSION)
49 AC_SUBST(MEMCACHED_LIBRARY_VERSION)
50
51
52 HASHKIT_LIBRARY_VERSION=2:0:0
53 AC_SUBST(HASHKIT_LIBRARY_VERSION)
54
55 LT_PREREQ([2.2])
56 LT_INIT()
57 LT_LANG([C++])
58 LT_LANG([C])
59 gl_VISIBILITY
60
61 AX_CXX_HEADER_STDCXX_98
62 if test "$ax_cv_cxx_stdcxx_98" = no; then
63 AC_MSG_ERROR([Your system lacks a new enough C++ compiler])
64 fi
65
66 # Adding support for libtest
67 m4_include([libtest/yatl.m4])
68
69 m4_include([m4/memcached_sasl.m4])
70 m4_include([m4/gearmand.m4])
71 m4_include([m4/libgearman.m4])
72
73 AM_CONDITIONAL(BUILDING_LIBMEMCACHED, true)
74 AM_CONDITIONAL(HAVE_LIBMEMCACHED, false)
75 AM_CONDITIONAL(HAVE_LIBDRIZZLE, false)
76 AC_DEFINE([HAVE_LIBMEMCACHED], [1], [Enables libmemcached Support])
77
78 AM_CONDITIONAL(BUILDING_GEARMAN, false)
79
80 AC_SEARCH_LIBS(getopt_long, gnugetopt)
81 AC_SEARCH_LIBS(gethostbyname, nsl)
82
83 case "$target_os" in
84 *linux*)
85 AS_IF([test "x$GCC" = "xyes"],
86 [
87 LDFLAGS="$LDFLAGS -z relro -z now"
88 ])
89 ;;
90 esac
91
92 dnl Specialty checks
93 AX_PTHREAD
94 AX_CXX_CINTTYPES
95 CONFIG_EXTRA
96 DETECT_BYTEORDER
97 SETSOCKOPT_SANITY
98 ENABLE_HSIEH_HASH
99 ENABLE_MURMUR_HASH
100 ENABLE_FNV64_HASH
101 ENABLE_MEMASLAP
102 PROTOCOL_BINARY_TEST
103 ENABLE_DEPRECATED
104
105 AC_CHECK_FUNCS([alarm])
106 AC_CHECK_FUNCS([dup2])
107 AC_CHECK_FUNCS([getline])
108 AC_CHECK_FUNCS([gettimeofday])
109 AC_CHECK_FUNCS([memchr])
110 AC_CHECK_FUNCS([memmove])
111 AC_CHECK_FUNCS([memset])
112 AC_CHECK_FUNCS([pipe2])
113 AC_CHECK_FUNCS([select])
114 AC_CHECK_FUNCS([setenv])
115 AC_CHECK_FUNCS([socket])
116 AC_CHECK_FUNCS([sqrt])
117 AC_CHECK_FUNCS([strcasecmp])
118 AC_CHECK_FUNCS([strchr])
119 AC_CHECK_FUNCS([strdup])
120 AC_CHECK_FUNCS([strerror])
121 AC_CHECK_FUNCS([strtol])
122 AC_CHECK_FUNCS([strtoul])
123 AC_CHECK_FUNCS([strtoull])
124
125 AC_CHECK_HEADERS([arpa/inet.h])
126 AC_CHECK_HEADERS([errno.h])
127 AC_CHECK_HEADERS([execinfo.h])
128 AC_CHECK_HEADERS([fcntl.h])
129 AC_CHECK_HEADERS([inttypes.h])
130 AC_CHECK_HEADERS([libintl.h])
131 AC_CHECK_HEADERS([limits.h])
132 AC_CHECK_HEADERS([malloc.h])
133 AC_CHECK_HEADERS([math.h])
134 AC_CHECK_HEADERS([netdb.h])
135 AC_CHECK_HEADERS([netinet/in.h])
136 AC_CHECK_HEADERS([pthread.h])
137 AC_CHECK_HEADERS([stdarg.h])
138 AC_CHECK_HEADERS([stddef.h])
139 AC_CHECK_HEADERS([stdlib.h])
140 AC_CHECK_HEADERS([sys/time.h])
141 AC_CHECK_HEADERS([unistd.h])
142 AC_CHECK_HEADERS([cxxabi.h],
143 AC_DEFINE([HAVE_CXXABI_H], [1], [Have cxxabi.h]),
144 AC_DEFINE([HAVE_CXXABI_H], [0], [Have cxxabi.h]))
145
146 AC_CHECK_HEADERS([sys/sysctl.h])
147
148 AC_CHECK_HEADER(umem.h, [
149 AC_DEFINE([HAVE_UMEM_H], 1,
150 [Define this if you have umem.h])
151 build_cache=no
152 ], [build_cache=yes])
153
154 AM_CONDITIONAL([BUILD_CACHE], [test "x$build_cache" = "xyes"])
155
156 AX_COMPILER_VENDOR
157
158 AC_FUNC_ALLOCA
159 AC_FUNC_ERROR_AT_LINE
160 AC_FUNC_FORK
161 AC_FUNC_MALLOC
162 AC_FUNC_REALLOC
163 AC_FUNC_STRERROR_R
164 AC_HEADER_STDBOOL
165 AC_TYPE_INT16_T
166 AC_TYPE_INT32_T
167 AC_TYPE_INT64_T
168 AC_TYPE_INT8_T
169 AC_TYPE_OFF_T
170 AC_TYPE_PID_T
171 AC_TYPE_SSIZE_T
172 AC_TYPE_UINT16_T
173 AC_TYPE_UINT32_T
174 AC_TYPE_UINT64_T
175 AC_TYPE_UINT8_T
176
177 AC_C_BIGENDIAN
178 AC_C_CONST
179 AC_C_INLINE
180 AC_C_VOLATILE
181 AC_C_RESTRICT
182
183 AX_CXX_GCC_ABI_DEMANGLE
184
185 AX_SASL_CHECK
186
187 dnl
188 dnl The sasl functions should only be visible if we build with sasl support
189 dnl
190 AS_IF([test "x$ac_enable_sasl" = "xyes"], [
191 [ LIBMEMCACHED_WITH_SASL_SUPPORT="#define LIBMEMCACHED_WITH_SASL_SUPPORT 1" ]
192 ], [
193 [ LIBMEMCACHED_WITH_SASL_SUPPORT="#define LIBMEMCACHED_WITH_SASL_SUPPORT 0" ]
194 ])
195 AC_SUBST(LIBMEMCACHED_WITH_SASL_SUPPORT)
196
197 AX_CHECK_LIBRARY([LIBUUID], [uuid/uuid.h], [uuid],
198 [
199 LIBUUID_LDFLAGS="-luuid"
200 AC_DEFINE([HAVE_LIBUUID], [ 1 ], [Have libuuid])
201 ],
202 [
203 AC_DEFINE([HAVE_LIBUUID], [ 0 ], [Have libuuid])
204 ])
205
206 AC_CHECK_LIB([rt], [clock_gettime],
207 [
208 RT_LIB="-lrt"
209 AC_SUBST(RT_LIB)
210 AC_DEFINE([HAVE_LIBRT], [ 1 ], [Have clock_gettime])
211 ],
212 [
213 AC_DEFINE([HAVE_LIBRT], [ 0 ], [Have clock_gettime])
214 ])
215
216 AC_CHECK_LIB([m], [floor])
217 AC_CHECK_FUNCS([sigignore])
218
219 AC_CHECK_HEADERS([atomic.h])
220 AS_IF([test "x$ac_cv_header_atomic_h" = "xyes"],[
221 AC_CHECK_FUNCS(atomic_add_64)
222 AC_CHECK_FUNCS(atomic_add_32)
223 AS_IF([test "x$ac_cv_func_atomic_add_64" = "xyes" -a "x$ac_cv_func_atomic_add_32" = "xyes"],[
224 AC_DEFINE([USE_ATOMIC_H],
225 [1],
226 [Define to true if you want to use functions from atomic.h])])])
227
228 AC_DEFINE([HAVE_LIBDRIZZLE], [0], [Support for libdrizzle])
229 AC_DEFINE([HAVE_DRIZZLED_BINARY], [0], [Support for DrizzleD])
230 AC_DEFINE([DRIZZLED_BINARY], [0], [Support for DrizzleD])
231 AC_DEFINE([GEARMAND_BLOBSLAP_WORKER], [0], [Support for Gearman Blobslap worker])
232 AC_DEFINE([HAVE_LIBPQ], [0], [Support for Postgres])
233 AC_DEFINE([HAVE_LIBCURL], [0], [Support for libcurl])
234
235 AC_DEFINE([HAVE_MEMCACHED_LIGHT_BINARY], [1], [Support for memcached_light])
236 AC_DEFINE([MEMCACHED_LIGHT_BINARY], ["example/memcached_light"], [Support for memcached_light])
237
238 dnl Check for the requirements for running memcached with less privileges
239 dnl than the default privilege set. On Solaris we need setppriv and priv.h
240 dnl If you want to add support for other platforms you should check for
241 dnl your requirements, define HAVE_DROP_PRIVILEGES, and make sure you add
242 dnl the source file containing the implementation into memcached_SOURCE
243 dnl in Makefile.am
244 AC_CHECK_FUNCS(setppriv, [
245 AC_CHECK_HEADER(priv.h, [
246 AC_DEFINE([HAVE_DROP_PRIVILEGES], 1,
247 [Define this if you have an implementation of drop_privileges()])
248 build_solaris_privs=yes
249 ], [])
250 ],[])
251
252 AC_CHECK_HEADERS_ONCE(winsock2.h poll.h sys/wait.h fnmatch.h)
253 AM_CONDITIONAL(BUILD_POLL, test "x$ac_cv_header_poll_h" = "xno")
254 AM_CONDITIONAL(BUILD_WIN32_WRAPPERS, test "x$ac_cv_header_winsock2_h" = "xyes")
255 AS_IF(test "x$ac_cv_header_winsock2_h" = "xyes",
256 [AM_LDFLAGS="$AM_LDFLAGS -lws2_32"
257 AM_CFLAGS="$AM_CFLAGS $NO_WERROR"
258 AM_CXXFLAGS="$AM_CXXFLAGS $NO_WERROR"
259 ])
260 SOCKET_SEND_FLAGS
261
262 AX_CHECK_LIBRARY([LIBEVENT], [event.h], [event],
263 [
264 LIBEVENT_LDFLAGS="-levent"
265 ],
266 [
267 AC_MSG_WARN([Unable to find libevent])
268 ])
269 AM_CONDITIONAL(HAVE_LIBEVENT, test "x${ax_cv_have_LIBEVENT}" = "xyes")
270
271 dnl Check if we're a little-endian or a big-endian system, needed by hash code
272 AC_DEFUN([AC_C_ENDIAN],
273 [AC_CACHE_CHECK(for endianness, ac_cv_c_endian,
274 [
275 AC_RUN_IFELSE(
276 [AC_LANG_PROGRAM([], [dnl
277 long val = 1;
278 char *c = (char *) &val;
279 exit(*c == 1);
280 ])
281 ],[
282 ac_cv_c_endian=big
283 ],[
284 ac_cv_c_endian=little
285 ])
286 ])
287 if test $ac_cv_c_endian = big; then
288 AC_DEFINE(ENDIAN_BIG, 1, [machine is bigendian])
289 fi
290 if test $ac_cv_c_endian = little; then
291 AC_DEFINE(ENDIAN_LITTLE, 1, [machine is littleendian])
292 fi
293 ])
294
295 AX_CHECK_SOCK_CLOEXEC([AC_DEFINE([HAVE_SOCK_CLOEXEC], [1], [Check for SOCK_CLOEXEC.])],
296 [AC_DEFINE([HAVE_SOCK_CLOEXEC], [0], [Check for SOCK_CLOEXEC.])])
297
298 AX_APPEND_COMPILE_FLAGS([-Werror -Wall])
299 AX_APPEND_COMPILE_FLAGS([-Werror -Wextra])
300 AX_APPEND_COMPILE_FLAGS([-Werror -Wmaybe-uninitialized])
301 AX_APPEND_COMPILE_FLAGS([-Werror -Wsign-compare])
302 AX_APPEND_COMPILE_FLAGS([-Werror -Wunused-result])
303 AX_APPEND_COMPILE_FLAGS([-Werror -Wunused-variable])
304 AX_APPEND_COMPILE_FLAGS([-Werror -floop-parallelize-all])
305 AX_APPEND_COMPILE_FLAGS([-Werror -fstack-protector-all])
306 AX_APPEND_COMPILE_FLAGS([-Werror -ggdb])
307
308 AC_CONFIG_FILES([
309 Makefile
310 docs/conf.py
311 libhashkit-1.0/configure.h
312 libmemcached-1.0/configure.h
313 libmemcached-1.2/configure.h
314 libmemcached-2.0/configure.h
315 support/libmemcached.pc
316 support/libmemcached.spec
317 support/libmemcached-fc.spec
318 ])
319 AC_OUTPUT
320
321 echo "---"
322 echo "Configuration summary for $PACKAGE_NAME version $VERSION"
323 echo ""
324 echo " * Installation prefix: $prefix"
325 echo " * System type: $host_vendor-$host_os"
326 echo " * Host CPU: $host_cpu"
327 echo " * C Compiler: $CC_VERSION"
328 echo " * Assertions enabled: $ac_cv_assert"
329 echo " * Debug enabled: $with_debug"
330 echo " * Warnings as failure: $ac_cv_warnings_as_errors"
331 echo " * SASL support: $ac_enable_sasl"
332 echo ""
333 echo "---"
334
335 case "$host_os" in
336 *freebsd*)
337 echo "*****"
338 echo "*"
339 echo "* NOTE: You are on FreeBSD. BSD make will not work."
340 echo "*"
341 echo "* use 'gmake' To build libmemcached"
342 echo "*"
343 echo "*****"
344 ;;
345 esac
346