Final bits for 1.0.9
[m6w6/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.9],[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 m4_include([memcached/version.m4])
73
74 AM_CONDITIONAL(BUILDING_LIBMEMCACHED, true)
75 AM_CONDITIONAL(HAVE_LIBMEMCACHED, false)
76 AM_CONDITIONAL(HAVE_LIBDRIZZLE, false)
77 AC_DEFINE([HAVE_LIBMEMCACHED], [1], [Enables libmemcached Support])
78
79 AM_CONDITIONAL(BUILDING_GEARMAN, false)
80
81 AC_SEARCH_LIBS(getopt_long, gnugetopt)
82 AC_SEARCH_LIBS(gethostbyname, nsl)
83
84 case "$target_os" in
85 *linux*)
86 AS_IF([test "x$GCC" = "xyes"],
87 [
88 LDFLAGS="$LDFLAGS -z relro -z now"
89 ])
90 ;;
91 esac
92
93 dnl Specialty checks
94 AX_PTHREAD
95 AX_CXX_CINTTYPES
96 CONFIG_EXTRA
97 DETECT_BYTEORDER
98 SETSOCKOPT_SANITY
99 ENABLE_HSIEH_HASH
100 ENABLE_MURMUR_HASH
101 ENABLE_FNV64_HASH
102 ENABLE_MEMASLAP
103 PROTOCOL_BINARY_TEST
104 ENABLE_DEPRECATED
105
106 AC_CHECK_FUNCS([alarm])
107 AC_CHECK_FUNCS([dup2])
108 AC_CHECK_FUNCS([getline])
109 AC_CHECK_FUNCS([gettimeofday])
110 AC_CHECK_FUNCS([memchr])
111 AC_CHECK_FUNCS([memmove])
112 AC_CHECK_FUNCS([memset])
113 AC_CHECK_FUNCS([pipe2])
114 AC_CHECK_FUNCS([select])
115 AC_CHECK_FUNCS([setenv])
116 AC_CHECK_FUNCS([socket])
117 AC_CHECK_FUNCS([sqrt])
118 AC_CHECK_FUNCS([strcasecmp])
119 AC_CHECK_FUNCS([strchr])
120 AC_CHECK_FUNCS([strdup])
121 AC_CHECK_FUNCS([strerror])
122 AC_CHECK_FUNCS([strtol])
123 AC_CHECK_FUNCS([strtoul])
124 AC_CHECK_FUNCS([strtoull])
125
126 AC_CHECK_HEADERS([arpa/inet.h])
127 AC_CHECK_HEADERS([errno.h])
128 AC_CHECK_HEADERS([execinfo.h])
129 AC_CHECK_HEADERS([fcntl.h])
130 AC_CHECK_HEADERS([inttypes.h])
131 AC_CHECK_HEADERS([libintl.h])
132 AC_CHECK_HEADERS([limits.h])
133 AC_CHECK_HEADERS([malloc.h])
134 AC_CHECK_HEADERS([math.h])
135 AC_CHECK_HEADERS([netdb.h])
136 AC_CHECK_HEADERS([netinet/in.h])
137 AC_CHECK_HEADERS([pthread.h])
138 AC_CHECK_HEADERS([stdarg.h])
139 AC_CHECK_HEADERS([stddef.h])
140 AC_CHECK_HEADERS([stdlib.h])
141 AC_CHECK_HEADERS([sys/time.h])
142 AC_CHECK_HEADERS([unistd.h])
143 AC_CHECK_HEADERS([cxxabi.h],
144 AC_DEFINE([HAVE_CXXABI_H], [1], [Have cxxabi.h]),
145 AC_DEFINE([HAVE_CXXABI_H], [0], [Have cxxabi.h]))
146
147 AC_CHECK_HEADERS([sys/sysctl.h])
148
149 AC_CHECK_HEADER(umem.h, [
150 AC_DEFINE([HAVE_UMEM_H], 1,
151 [Define this if you have umem.h])
152 build_cache=no
153 ], [build_cache=yes])
154
155 AM_CONDITIONAL([BUILD_CACHE], [test "x$build_cache" = "xyes"])
156
157 AX_COMPILER_VENDOR
158
159 AC_FUNC_ALLOCA
160 AC_FUNC_ERROR_AT_LINE
161 AC_FUNC_FORK
162 AC_FUNC_MALLOC
163 AC_FUNC_REALLOC
164 AC_FUNC_STRERROR_R
165 AC_HEADER_STDBOOL
166 AC_TYPE_INT16_T
167 AC_TYPE_INT32_T
168 AC_TYPE_INT64_T
169 AC_TYPE_INT8_T
170 AC_TYPE_OFF_T
171 AC_TYPE_PID_T
172 AC_TYPE_SSIZE_T
173 AC_TYPE_UINT16_T
174 AC_TYPE_UINT32_T
175 AC_TYPE_UINT64_T
176 AC_TYPE_UINT8_T
177
178 AC_C_BIGENDIAN
179 AC_C_CONST
180 AC_C_INLINE
181 AC_C_VOLATILE
182 AC_C_RESTRICT
183
184 AX_CXX_GCC_ABI_DEMANGLE
185
186 AX_SASL_CHECK
187
188 dnl
189 dnl The sasl functions should only be visible if we build with sasl support
190 dnl
191 AS_IF([test "x$ac_enable_sasl" = "xyes"], [
192 [ LIBMEMCACHED_WITH_SASL_SUPPORT="#define LIBMEMCACHED_WITH_SASL_SUPPORT 1" ]
193 ], [
194 [ LIBMEMCACHED_WITH_SASL_SUPPORT="#define LIBMEMCACHED_WITH_SASL_SUPPORT 0" ]
195 ])
196 AC_SUBST(LIBMEMCACHED_WITH_SASL_SUPPORT)
197
198 AX_CHECK_LIBRARY([LIBUUID], [uuid/uuid.h], [uuid],
199 [
200 LIBUUID_LDFLAGS="-luuid"
201 AC_DEFINE([HAVE_LIBUUID], [ 1 ], [Have libuuid])
202 ],
203 [
204 AC_DEFINE([HAVE_LIBUUID], [ 0 ], [Have libuuid])
205 ])
206
207 AC_CHECK_LIB([rt], [clock_gettime],
208 [
209 RT_LIB="-lrt"
210 AC_SUBST(RT_LIB)
211 AC_DEFINE([HAVE_LIBRT], [ 1 ], [Have clock_gettime])
212 ],
213 [
214 AC_DEFINE([HAVE_LIBRT], [ 0 ], [Have clock_gettime])
215 ])
216
217 AC_CHECK_LIB([m], [floor])
218 AC_CHECK_FUNCS([sigignore])
219
220 AC_CHECK_HEADERS([atomic.h])
221 AS_IF([test "x$ac_cv_header_atomic_h" = "xyes"],[
222 AC_CHECK_FUNCS(atomic_add_64)
223 AC_CHECK_FUNCS(atomic_add_32)
224 AS_IF([test "x$ac_cv_func_atomic_add_64" = "xyes" -a "x$ac_cv_func_atomic_add_32" = "xyes"],[
225 AC_DEFINE([USE_ATOMIC_H],
226 [1],
227 [Define to true if you want to use functions from atomic.h])])])
228
229 AC_DEFINE([HAVE_LIBDRIZZLE], [0], [Support for libdrizzle])
230 AC_DEFINE([HAVE_DRIZZLED_BINARY], [0], [Support for DrizzleD])
231 AC_DEFINE([DRIZZLED_BINARY], [0], [Support for DrizzleD])
232 AC_DEFINE([GEARMAND_BLOBSLAP_WORKER], [0], [Support for Gearman Blobslap worker])
233 AC_DEFINE([HAVE_LIBPQ], [0], [Support for Postgres])
234 AC_DEFINE([HAVE_LIBCURL], [0], [Support for libcurl])
235
236 AC_DEFINE([HAVE_MEMCACHED_LIGHT_BINARY], [1], [Support for memcached_light])
237 AC_DEFINE([MEMCACHED_LIGHT_BINARY], ["example/memcached_light"], [Support for memcached_light])
238
239 dnl Check for the requirements for running memcached with less privileges
240 dnl than the default privilege set. On Solaris we need setppriv and priv.h
241 dnl If you want to add support for other platforms you should check for
242 dnl your requirements, define HAVE_DROP_PRIVILEGES, and make sure you add
243 dnl the source file containing the implementation into memcached_SOURCE
244 dnl in Makefile.am
245 AC_CHECK_FUNCS(setppriv, [
246 AC_CHECK_HEADER(priv.h, [
247 AC_DEFINE([HAVE_DROP_PRIVILEGES], 1,
248 [Define this if you have an implementation of drop_privileges()])
249 build_solaris_privs=yes
250 ], [])
251 ],[])
252
253 AC_CHECK_HEADERS_ONCE(winsock2.h poll.h sys/wait.h fnmatch.h)
254 AM_CONDITIONAL(BUILD_POLL, test "x$ac_cv_header_poll_h" = "xno")
255 AM_CONDITIONAL(BUILD_WIN32_WRAPPERS, test "x$ac_cv_header_winsock2_h" = "xyes")
256 AS_IF(test "x$ac_cv_header_winsock2_h" = "xyes",
257 [AM_LDFLAGS="$AM_LDFLAGS -lws2_32"
258 AM_CFLAGS="$AM_CFLAGS $NO_WERROR"
259 AM_CXXFLAGS="$AM_CXXFLAGS $NO_WERROR"
260 ])
261 SOCKET_SEND_FLAGS
262
263 AX_CHECK_LIBRARY([LIBEVENT], [event.h], [event],
264 [
265 LIBEVENT_LDFLAGS="-levent"
266 ],
267 [
268 AC_MSG_WARN([Unable to find libevent])
269 ])
270 AM_CONDITIONAL(HAVE_LIBEVENT, test "x${ax_cv_have_LIBEVENT}" = "xyes")
271
272 dnl Check if we're a little-endian or a big-endian system, needed by hash code
273 AC_DEFUN([AC_C_ENDIAN],
274 [AC_CACHE_CHECK(for endianness, ac_cv_c_endian,
275 [
276 AC_RUN_IFELSE(
277 [AC_LANG_PROGRAM([], [dnl
278 long val = 1;
279 char *c = (char *) &val;
280 exit(*c == 1);
281 ])
282 ],[
283 ac_cv_c_endian=big
284 ],[
285 ac_cv_c_endian=little
286 ])
287 ])
288 if test $ac_cv_c_endian = big; then
289 AC_DEFINE(ENDIAN_BIG, 1, [machine is bigendian])
290 fi
291 if test $ac_cv_c_endian = little; then
292 AC_DEFINE(ENDIAN_LITTLE, 1, [machine is littleendian])
293 fi
294 ])
295
296 AC_C_ENDIAN
297
298 AX_CHECK_SOCK_CLOEXEC([AC_DEFINE([HAVE_SOCK_CLOEXEC], [1], [Check for SOCK_CLOEXEC.])],
299 [AC_DEFINE([HAVE_SOCK_CLOEXEC], [0], [Check for SOCK_CLOEXEC.])])
300
301 AC_CONFIG_FILES([
302 Makefile
303 docs/conf.py
304 libhashkit-1.0/configure.h
305 libmemcached-1.0/configure.h
306 libmemcached-1.2/configure.h
307 libmemcached-2.0/configure.h
308 support/libmemcached.pc
309 support/libmemcached.spec
310 support/libmemcached-fc.spec
311 ])
312 AC_OUTPUT
313
314 echo "---"
315 echo "Configuration summary for $PACKAGE_NAME version $VERSION"
316 echo ""
317 echo " * Installation prefix: $prefix"
318 echo " * System type: $host_vendor-$host_os"
319 echo " * Host CPU: $host_cpu"
320 echo " * C Compiler: $CC_VERSION"
321 echo " * Assertions enabled: $ac_cv_assert"
322 echo " * Debug enabled: $with_debug"
323 echo " * Warnings as failure: $ac_cv_warnings_as_errors"
324 echo " * SASL support: $ac_enable_sasl"
325 echo ""
326 echo "---"
327
328 case "$host_os" in
329 *freebsd*)
330 echo "*****"
331 echo "*"
332 echo "* NOTE: You are on FreeBSD. BSD make will not work."
333 echo "*"
334 echo "* use 'gmake' To build libmemcached"
335 echo "*"
336 echo "*****"
337 ;;
338 esac
339