configure.ac 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. # Gearman server and library
  2. # Copyright (C) 2008 Brian Aker, Eric Day
  3. # All rights reserved.
  4. #
  5. # Use and distribution licensed under the BSD license. See
  6. # the COPYING file in this directory for full text.
  7. AC_PREREQ(2.59)
  8. AC_INIT(gearmand, [0.8], [https://launchpad.net/gearmand])
  9. AC_CONFIG_SRCDIR(libgearman/gearman.c)
  10. AC_CONFIG_AUX_DIR(config)
  11. AC_CONFIG_HEADERS([config.h])
  12. GEARMAN_LIBRARY_VERSION=1:2:0
  13. # | | |
  14. # +------+ | +---+
  15. # | | |
  16. # current:revision:age
  17. # | | |
  18. # | | +- increment if interfaces have been added
  19. # | | set to zero if interfaces have been removed
  20. # | | or changed
  21. # | +- increment if source code has changed
  22. # | set to zero if current is incremented
  23. # +- increment if interfaces have been added, removed or changed
  24. AC_SUBST(GEARMAN_LIBRARY_VERSION)
  25. # Setting CFLAGS here prevents AC_CANONICAL_TARGET from injecting them
  26. SAVE_CFLAGS=${CFLAGS}
  27. SAVE_CXXFLAGS=${CXXFLAGS}
  28. CFLAGS=
  29. CXXFLAGS=
  30. AC_CANONICAL_TARGET
  31. CFLAGS=${SAVE_CFLAGS}
  32. CXXFLAGS=${SAVE_CXXFLAGS}
  33. AM_INIT_AUTOMAKE([-Wall -Werror nostdinc subdir-objects])
  34. if test "x${enable_dependency_tracking}" = "x"
  35. then
  36. enable_dependency_tracking=yes
  37. fi
  38. if test -d "${srcdir}/.bzr"
  39. then
  40. building_from_bzr=yes
  41. else
  42. building_from_bzr=no
  43. fi
  44. AC_PROG_CC
  45. AC_PROG_CC_C99
  46. AM_PROG_CC_STDC
  47. AC_PROG_CXX
  48. ACX_USE_SYSTEM_EXTENSIONS
  49. AC_PROG_CPP
  50. AM_PROG_CC_C_O
  51. AC_C_BIGENDIAN
  52. AC_C_CONST
  53. AC_HEADER_TIME
  54. AC_TYPE_SIZE_T
  55. AC_TYPE_SSIZE_T
  56. AC_FUNC_MALLOC
  57. AC_FUNC_REALLOC
  58. AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
  59. # We use libtool
  60. AC_PROG_LIBTOOL
  61. AC_MSG_CHECKING("C Compiler version")
  62. if test "$GCC" = "yes"
  63. then
  64. CC_VERSION=`$CC --version | sed 1q`
  65. elif test "$SUNCC" = "yes"
  66. then
  67. CC_VERSION=`$CC -V 2>&1 | sed 1q`
  68. else
  69. CC_VERSION=""
  70. fi
  71. AC_MSG_RESULT("$CC_VERSION")
  72. AC_SUBST(CC_VERSION)
  73. # libgearman versioning when linked with GNU ld.
  74. if test "$lt_cv_prog_gnu_ld" = "yes"
  75. then
  76. LD_VERSION_SCRIPT="-Wl,--version-script=\$(top_srcdir)/libgearman/libgearman.ver"
  77. fi
  78. AC_SUBST(LD_VERSION_SCRIPT)
  79. # Use the C99 enabling flag found earlier
  80. AS_IF([test "$ac_cv_prog_cc_c99" != "no"],
  81. [CFLAGS="$ac_cv_prog_cc_c99 ${CFLAGS}"])
  82. # Build optimized or debug version ?
  83. # First check for gcc and g++
  84. if test "$GCC" = "yes"
  85. then
  86. CFLAGS="-ggdb3 ${CFLAGS}"
  87. CXXFLAGS="-ggdb3 ${CXXFLAGS}"
  88. DEBUG_CFLAGS="-O0"
  89. DEBUG_CXXFLAGS="-O0"
  90. OPTIMIZE_CFLAGS="-O3"
  91. OPTIMIZE_CXXFLAGS="-O3"
  92. fi
  93. if test "x$SUNCC" = "xyes"
  94. then
  95. CFLAGS="-g -mt ${CFLAGS}"
  96. CXXFLAGS="-g -mt -xlang=c99 ${CXXFLAGS}"
  97. OPTIMIZE_FLAGS="-xO4 -xlibmil -xdepend -xbuiltin -lmopt"
  98. OPTIMIZE_CFLAGS="${OPTIMIZE_FLAGS} -Xa -xstrconst"
  99. OPTIMIZE_CXXFLAGS="${OPTIMIZE_FLAGS}"
  100. fi
  101. ENABLE_64BIT
  102. AC_LIB_PREFIX
  103. #--------------------------------------------------------------------
  104. # Check for libpthread
  105. #--------------------------------------------------------------------
  106. ACX_PTHREAD(,AC_MSG_ERROR(could not find libpthread))
  107. LIBS="${PTHREAD_LIBS} ${LIBS}"
  108. CFLAGS="${PTHREAD_CFLAGS} ${CFLAGS}"
  109. CC="$PTHREAD_CC"
  110. #--------------------------------------------------------------------
  111. # Check for libevent
  112. #--------------------------------------------------------------------
  113. AC_LIB_HAVE_LINKFLAGS(event,,
  114. [
  115. #include <sys/types.h>
  116. #include <sys/time.h>
  117. #include <stdlib.h>
  118. #include <event.h>
  119. ],[
  120. struct bufferevent bev;
  121. bufferevent_settimeout(&bev, 1, 1);
  122. event_init();
  123. event_loop(EVLOOP_ONCE);
  124. ])
  125. AS_IF([test x$ac_cv_libevent = xno],
  126. AC_MSG_ERROR([A recent version of libevent is required to build gearmand. On Debian this can be found in libevent-dev. On RedHat its in libevent-devel. You can also install the latest from source at http://www.monkey.org/~provos/libevent.]))
  127. save_LIBS="${LIBS}"
  128. LIBS="${LIBS} ${LTLIBEVENT}"
  129. AC_CHECK_FUNCS(event_base_new)
  130. AC_CHECK_FUNCS(event_base_free)
  131. AC_CHECK_FUNCS(event_base_get_method)
  132. LIBS="$save_LIBS"
  133. #--------------------------------------------------------------------
  134. # Check for libuuid
  135. #--------------------------------------------------------------------
  136. AC_CHECK_HEADERS(uuid/uuid.h)
  137. if test "x$ac_cv_header_uuid_uuid_h" = "xno"
  138. then
  139. AC_MSG_ERROR([Couldn't find uuid/uuid.h. On Debian this can be found in uuid-dev. On Redhat this can be found in e2fsprogs-devel.])
  140. fi
  141. AC_LIB_HAVE_LINKFLAGS(uuid,,
  142. [
  143. #include <uuid/uuid.h>
  144. ],
  145. [
  146. uuid_t uout;
  147. uuid_generate(uout);
  148. ])
  149. #--------------------------------------------------------------------
  150. # Check for tcmalloc
  151. #--------------------------------------------------------------------
  152. AC_ARG_ENABLE([tcmalloc],
  153. [AS_HELP_STRING([--enable-tcmalloc],
  154. [Enable linking with tcmalloc @<:@default=off@:>@])],
  155. [ac_enable_tcmalloc="$enableval"],
  156. [ac_enable_tcmalloc="no"])
  157. if test "x$ac_enable_tcmalloc" != "xno"
  158. then
  159. AC_CHECK_LIB(tcmalloc,malloc,[],[])
  160. fi
  161. if test "x$ac_cv_lib_tcmalloc_malloc" != "xyes"
  162. then
  163. AC_CHECK_LIB(mtmalloc,malloc,[],[])
  164. fi
  165. #--------------------------------------------------------------------
  166. # Check for libdrizzle
  167. #--------------------------------------------------------------------
  168. AC_LIB_HAVE_LINKFLAGS(drizzle,,
  169. [
  170. #include <libdrizzle/drizzle_client.h>
  171. ],
  172. [
  173. drizzle_st drizzle;
  174. drizzle_version();
  175. ])
  176. AM_CONDITIONAL(HAVE_LIBDRIZZLE, test x$ac_cv_libdrizzle = xyes)
  177. #--------------------------------------------------------------------
  178. # Check for libmemcached
  179. #--------------------------------------------------------------------
  180. AC_LIB_HAVE_LINKFLAGS(memcached,,
  181. [
  182. #include <libmemcached/memcached.h>
  183. ],
  184. [
  185. memcached_st memc;
  186. memcached_dump_func *df;
  187. memcached_version();
  188. ])
  189. AM_CONDITIONAL(HAVE_LIBMEMCACHED, test x$ac_cv_libmemcached = xyes)
  190. AC_CHECK_HEADERS(assert.h errno.h fcntl.h getopt.h netinet/tcp.h pwd.h signal.h)
  191. AC_CHECK_HEADERS(stdarg.h stddef.h stdio.h stdlib.h string.h)
  192. AC_CHECK_HEADERS(sys/resource.h sys/stat.h)
  193. AC_CHECK_HEADERS(sys/socket.h sys/types.h sys/utsname.h unistd.h strings.h)
  194. dnl TODO: Remove this define once we are using 2.61 across the board.
  195. # AX_HEADER_ASSERT
  196. # ----------------
  197. # Check whether to enable assertions.
  198. AC_DEFUN([AX_HEADER_ASSERT],
  199. [
  200. AC_MSG_CHECKING([whether to enable assertions])
  201. AC_ARG_ENABLE([assert],
  202. [AS_HELP_STRING([--disable-assert],
  203. [Turn off assertions])],
  204. [ac_cv_assert="no"],
  205. [ac_cv_assert="yes"])
  206. AC_MSG_RESULT([$ac_cv_assert])
  207. ])
  208. AX_HEADER_ASSERT
  209. AC_ARG_WITH([debug],
  210. [AS_HELP_STRING([--with-debug],
  211. [Add debug code/turns off optimizations (yes|no) @<:@default=no@:>@])],
  212. [with_debug=$withval],
  213. [with_debug=no])
  214. if test "$with_debug" = "yes"
  215. then
  216. # Debugging. No optimization.
  217. CFLAGS="${DEBUG_CFLAGS} -DDEBUG ${CFLAGS}"
  218. else
  219. # Optimized version. No debug
  220. CFLAGS="${OPTIMIZE_CFLAGS} ${CFLAGS}"
  221. fi
  222. AC_ARG_ENABLE([profiling],
  223. [AS_HELP_STRING([--enable-profiling],
  224. [Toggle profiling @<:@default=off@:>@])],
  225. [ac_profiling="$enableval"],
  226. [ac_profiling="no"])
  227. AC_ARG_ENABLE([coverage],
  228. [AS_HELP_STRING([--enable-coverage],
  229. [Toggle coverage @<:@default=off@:>@])],
  230. [ac_coverage="$enableval"],
  231. [ac_coverage="no"])
  232. if test "$GCC" = "yes"
  233. then
  234. W_STRICT_ALIASING="-Wno-strict-aliasing"
  235. AS_IF([test "$ac_profiling" = "yes"],
  236. [CC_PROFILING="-pg"])
  237. AS_IF([test "$ac_coverage" = "yes"],
  238. [CC_COVERAGE="-fprofile-arcs -ftest-coverage"])
  239. AS_IF([test "$building_from_bzr" = "yes"],
  240. [W_FAIL="-Werror"])
  241. BASE_WARNINGS="-pedantic -W -Wall -Wextra ${W_FAIL} -Wundef -Wshadow -Wmissing-declarations ${W_STRICT_ALIASING} -fdiagnostics-show-option"
  242. CC_WARNINGS="${BASE_WARNINGS} -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wswitch-default -Wswitch-enum -Wcast-align -Wconversion"
  243. CXX_WARNINGS="${BASE_WARNINGS} -Woverloaded-virtual -Wnon-virtual-dtor -Wctor-dtor-privacy -Wold-style-cast -Weffc++ -Wno-long-long -Wconversion"
  244. AC_CACHE_CHECK([whether it is safe to use -Wconversion with htons],
  245. [ac_cv_safe_to_use_Wconversion_],
  246. [save_CFLAGS="$CFLAGS"
  247. CFLAGS="-Werror -Wno-conversion ${CFLAGS}"
  248. AC_COMPILE_IFELSE(
  249. [AC_LANG_PROGRAM(
  250. [[
  251. #include <netinet/in.h>
  252. ]],[[
  253. uint16_t x= htons(80);
  254. ]])],
  255. [ac_cv_safe_to_use_Wconversion_=yes],
  256. [ac_cv_safe_to_use_Wconversion_=no])
  257. CFLAGS="$save_CFLAGS"])
  258. AS_IF([test "$ac_cv_safe_to_use_Wconversion_" = "no"],
  259. [
  260. NO_CONVERSION="-Wno-conversion"
  261. ])
  262. AC_CACHE_CHECK([whether it is safe to use -Wlogical-op],
  263. [ac_cv_safe_to_use_Wlogical_op_],
  264. [save_CFLAGS="$CFLAGS"
  265. CFLAGS="-Wlogical-op"
  266. AC_COMPILE_IFELSE([
  267. AC_LANG_PROGRAM(
  268. [[
  269. #include <stdio>
  270. ]], [[]])
  271. ],
  272. [ac_cv_safe_to_use_Wlogical_op_=yes],
  273. [ac_cv_safe_to_use_Wlogical_op_=no])
  274. CFLAGS="$save_CFLAGS"])
  275. AS_IF([test "$ac_cv_safe_to_use_Wlogical_op_" = "yes"],
  276. [CC_WARNINGS="${CC_WARNINGS} -Wlogical-op"])
  277. AC_CACHE_CHECK([whether it is safe to use -Wredundant-decls from C++],
  278. [ac_cv_safe_to_use_Wredundant_decls_],
  279. [AC_LANG_PUSH(C++)
  280. save_CXXFLAGS="${CXXFLAGS}"
  281. CXXFLAGS="${CXXFLAGS} ${W_FAIL} -Wredundant-decls"
  282. AC_COMPILE_IFELSE(
  283. [AC_LANG_PROGRAM([
  284. template <typename E> struct C { void foo(); };
  285. template <typename E> void C<E>::foo() { }
  286. template <> void C<int>::foo();
  287. AC_INCLUDES_DEFAULT])],
  288. [ac_cv_safe_to_use_Wredundant_decls_=yes],
  289. [ac_cv_safe_to_use_Wredundant_decls_=no])
  290. CXXFLAGS="${save_CXXFLAGS}"
  291. AC_LANG_POP()])
  292. AS_IF([test "$ac_cv_safe_to_use_Wredundant_decls_" = "yes"],
  293. [CXX_WARNINGS="${CXX_WARNINGS} -Wredundant-decls"],
  294. [CXX_WARNINGS="${CXX_WARNINGS} -Wno-redundant-decls"])
  295. NO_REDUNDANT_DECLS="-Wno-redundant-decls"
  296. fi
  297. if test "$SUNCC" = "yes"
  298. then
  299. AS_IF([test "$ac_profiling" = "yes"],
  300. [CC_PROFILING="-xinstrument=datarace"])
  301. AS_IF([test "$building_from_bzr" = "yes"],
  302. [W_FAIL="-errwarn=%all"])
  303. AC_CACHE_CHECK([whether E_PASTE_RESULT_NOT_TOKEN is usable],
  304. [ac_cv_paste_result],
  305. [
  306. save_CFLAGS="${CFLAGS}"
  307. CFLAGS="-errwarn=%all -erroff=E_PASTE_RESULT_NOT_TOKEN ${CFLAGS}"
  308. AC_COMPILE_IFELSE(
  309. [AC_LANG_PROGRAM([
  310. AC_INCLUDES_DEFAULT
  311. ],[
  312. int x= 0;])],
  313. [ac_cv_paste_result=yes],
  314. [ac_cv_paste_result=no])
  315. CFLAGS="${save_CFLAGS}"
  316. ])
  317. AS_IF([test $ac_cv_paste_result = yes],
  318. [W_PASTE_RESULT=",E_PASTE_RESULT_NOT_TOKEN"])
  319. CC_WARNINGS="-v -errtags=yes ${W_FAIL} -erroff=E_INTEGER_OVERFLOW_DETECTED${W_PASTE_RESULT}"
  320. CXX_WARNINGS="+w +w2 -xwe -xport64 -errtags=yes ${W_FAIL}"
  321. fi
  322. AC_SUBST(NO_CONVERSION)
  323. AC_SUBST(NO_REDUNDANT_DECLS)
  324. AM_CPPFLAGS="-I\$(top_srcdir) -I\$(top_builddir) ${CPPFLAGS}"
  325. AM_CFLAGS="${CC_WARNINGS} ${CC_PROFILING} ${CC_COVERAGE} ${CFLAGS}"
  326. AM_CXXFLAGS="${CXX_WARNING} ${CC_PROFILING} ${CC_COVERAGE} ${CXXFLAGS}"
  327. AC_SUBST([AM_CPPFLAGS])
  328. AC_SUBST([AM_CFLAGS])
  329. AC_SUBST([AM_CXXFLAGS])
  330. dnl We've collected the flags in AM_*FLAGS now, so blank these.
  331. CFLAGS=""
  332. CXXFLAGS=""
  333. CPPFLAGS=""
  334. AC_CHECK_PROGS([DOXYGEN], [doxygen])
  335. AC_CHECK_PROGS([PERL], [perl])
  336. AC_CONFIG_FILES(Makefile
  337. libgearman/Makefile
  338. gearmand/Makefile
  339. bin/Makefile
  340. tests/Makefile
  341. examples/Makefile
  342. scripts/Makefile
  343. support/Makefile
  344. benchmark/Makefile
  345. scripts/gearmand-init
  346. scripts/gearmand.xml
  347. scripts/gearmand
  348. scripts/smf_install.sh
  349. support/gearmand.pc
  350. support/gearmand.spec)
  351. AC_OUTPUT
  352. echo "---"
  353. echo "Configuration summary for $PACKAGE_NAME version $VERSION"
  354. echo ""
  355. echo " * Installation prefix: $prefix"
  356. echo " * System type: $host_vendor-$host_os"
  357. echo " * Host CPU: $host_cpu"
  358. echo " * C Compiler: $CC_VERSION"
  359. echo " * Assertions enabled: $ac_cv_assert"
  360. echo " * Debug enabled: $with_debug"
  361. echo " * Warnings as failure: $building_from_bzr"
  362. echo ""
  363. echo "---"