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