configure.ac 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  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. DEBUG_CFLAGS="-O0"
  88. OPTIMIZE_CFLAGS="-O3"
  89. fi
  90. if test "x$SUNCC" = "xyes"
  91. then
  92. CFLAGS="-g -mt $CFLAGS"
  93. CXXFLAGS="-g -mt -xlang=c99 $CXXFLAGS"
  94. OPTIMIZE_CFLAGS="-xO4 -xlibmil -xdepend -Xa -xstrconst"
  95. fi
  96. ENABLE_64BIT
  97. AC_LIB_PREFIX
  98. #--------------------------------------------------------------------
  99. # Check for libpthread
  100. #--------------------------------------------------------------------
  101. ACX_PTHREAD(,AC_MSG_ERROR(could not find libpthread))
  102. LIBS="${PTHREAD_LIBS} ${LIBS}"
  103. CFLAGS="${PTHREAD_CFLAGS} ${CFLAGS}"
  104. CC="$PTHREAD_CC"
  105. #--------------------------------------------------------------------
  106. # Check for libevent
  107. #--------------------------------------------------------------------
  108. AC_LIB_HAVE_LINKFLAGS(event,,
  109. [
  110. #include <sys/types.h>
  111. #include <sys/time.h>
  112. #include <stdlib.h>
  113. #include <event.h>
  114. ],[
  115. struct bufferevent bev;
  116. bufferevent_settimeout(&bev, 1, 1);
  117. event_init();
  118. event_loop(EVLOOP_ONCE);
  119. ])
  120. AS_IF([test x$ac_cv_libevent = xno],
  121. 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.]))
  122. save_LIBS="${LIBS}"
  123. LIBS="${LIBS} ${LTLIBEVENT}"
  124. AC_CHECK_FUNCS(event_base_new)
  125. AC_CHECK_FUNCS(event_base_free)
  126. AC_CHECK_FUNCS(event_base_get_method)
  127. LIBS="$save_LIBS"
  128. #--------------------------------------------------------------------
  129. # Check for libuuid
  130. #--------------------------------------------------------------------
  131. AC_CHECK_HEADERS(uuid/uuid.h)
  132. if test "x$ac_cv_header_uuid_uuid_h" = "xno"
  133. then
  134. 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.])
  135. fi
  136. AC_LIB_HAVE_LINKFLAGS(uuid,,
  137. [
  138. #include <uuid/uuid.h>
  139. ],
  140. [
  141. uuid_t uout;
  142. uuid_generate(uout);
  143. ])
  144. #--------------------------------------------------------------------
  145. # Check for tcmalloc
  146. #--------------------------------------------------------------------
  147. AC_ARG_ENABLE([tcmalloc],
  148. [AS_HELP_STRING([--enable-tcmalloc],
  149. [Enable linking with tcmalloc @<:@default=off@:>@])],
  150. [ac_enable_tcmalloc="$enableval"],
  151. [ac_enable_tcmalloc="no"])
  152. if test "x$ac_enable_tcmalloc" != "xno"
  153. then
  154. AC_CHECK_LIB(tcmalloc,malloc,[],[])
  155. fi
  156. if test "x$ac_cv_lib_tcmalloc_malloc" != "xyes"
  157. then
  158. AC_CHECK_LIB(mtmalloc,malloc,[],[])
  159. fi
  160. #--------------------------------------------------------------------
  161. # Check for libdrizzle
  162. #--------------------------------------------------------------------
  163. AC_LIB_HAVE_LINKFLAGS(drizzle,,
  164. [
  165. #include <libdrizzle/drizzle_client.h>
  166. ],
  167. [
  168. drizzle_st drizzle;
  169. drizzle_version();
  170. ])
  171. AM_CONDITIONAL(HAVE_LIBDRIZZLE, test x$ac_cv_libdrizzle = xyes)
  172. #--------------------------------------------------------------------
  173. # Check for libmemcached
  174. #--------------------------------------------------------------------
  175. AC_LIB_HAVE_LINKFLAGS(memcached,,
  176. [
  177. #include <libmemcached/memcached.h>
  178. ],
  179. [
  180. memcached_st memc;
  181. memcached_dump_func *df;
  182. memcached_version();
  183. ])
  184. AM_CONDITIONAL(HAVE_LIBMEMCACHED, test x$ac_cv_libmemcached = xyes)
  185. AC_CHECK_HEADERS(assert.h errno.h fcntl.h getopt.h netinet/tcp.h pwd.h signal.h)
  186. AC_CHECK_HEADERS(stdarg.h stddef.h stdio.h stdlib.h string.h)
  187. AC_CHECK_HEADERS(sys/resource.h sys/stat.h)
  188. AC_CHECK_HEADERS(sys/socket.h sys/types.h sys/utsname.h unistd.h strings.h)
  189. dnl TODO: Remove this define once we are using 2.61 across the board.
  190. # AX_HEADER_ASSERT
  191. # ----------------
  192. # Check whether to enable assertions.
  193. AC_DEFUN([AX_HEADER_ASSERT],
  194. [
  195. AC_MSG_CHECKING([whether to enable assertions])
  196. AC_ARG_ENABLE([assert],
  197. [AS_HELP_STRING([--disable-assert],
  198. [Turn off assertions])],
  199. [ac_cv_assert="no"],
  200. [ac_cv_assert="yes"])
  201. AC_MSG_RESULT([$ac_cv_assert])
  202. ])
  203. AX_HEADER_ASSERT
  204. AC_ARG_WITH([debug],
  205. [AS_HELP_STRING([--with-debug],
  206. [Add debug code/turns off optimizations (yes|no) @<:@default=no@:>@])],
  207. [with_debug=$withval],
  208. [with_debug=no])
  209. if test "$with_debug" = "yes"
  210. then
  211. # Debugging. No optimization.
  212. CFLAGS="${DEBUG_CFLAGS} -DDEBUG ${CFLAGS}"
  213. else
  214. # Optimized version. No debug
  215. CFLAGS="${OPTIMIZE_CFLAGS} ${CFLAGS}"
  216. fi
  217. AC_ARG_ENABLE([profiling],
  218. [AS_HELP_STRING([--enable-profiling],
  219. [Toggle profiling @<:@default=off@:>@])],
  220. [ac_profiling="$enableval"],
  221. [ac_profiling="no"])
  222. AC_ARG_ENABLE([coverage],
  223. [AS_HELP_STRING([--enable-coverage],
  224. [Toggle coverage @<:@default=off@:>@])],
  225. [ac_coverage="$enableval"],
  226. [ac_coverage="no"])
  227. if test "$GCC" = "yes"
  228. then
  229. W_STRICT_ALIASING="-Wno-strict-aliasing"
  230. AS_IF([test "$ac_profiling" = "yes"],
  231. [CC_PROFILING="-pg"])
  232. AS_IF([test "$ac_coverage" = "yes"],
  233. [CC_COVERAGE="-fprofile-arcs -ftest-coverage"])
  234. AS_IF([test "$building_from_bzr" = "yes"],
  235. [W_FAIL="-Werror"])
  236. BASE_WARNINGS="-pedantic -W -Wall -Wextra ${W_FAIL} -Wundef -Wshadow -Wmissing-declarations ${W_STRICT_ALIASING} -fdiagnostics-show-option"
  237. CC_WARNINGS="${BASE_WARNINGS} -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wswitch-default -Wswitch-enum -Wcast-align -Wconversion"
  238. CXX_WARNINGS="${BASE_WARNINGS} -Woverloaded-virtual -Wnon-virtual-dtor -Wctor-dtor-privacy -Wold-style-cast -Weffc++ -Wno-long-long -Wconversion"
  239. AC_CACHE_CHECK([whether it is safe to use -Wconversion with htons],
  240. [ac_cv_safe_to_use_Wconversion_],
  241. [save_CFLAGS="$CFLAGS"
  242. CFLAGS="-Werror -Wno-conversion ${CFLAGS}"
  243. AC_COMPILE_IFELSE(
  244. [AC_LANG_PROGRAM(
  245. [[
  246. #include <netinet/in.h>
  247. ]],[[
  248. uint16_t x= htons(80);
  249. ]])],
  250. [ac_cv_safe_to_use_Wconversion_=yes],
  251. [ac_cv_safe_to_use_Wconversion_=no])
  252. CFLAGS="$save_CFLAGS"])
  253. AS_IF([test "$ac_cv_safe_to_use_Wconversion_" = "no"],
  254. [
  255. NO_CONVERSION="-Wno-conversion"
  256. ])
  257. AC_CACHE_CHECK([whether it is safe to use -Wlogical-op],
  258. [ac_cv_safe_to_use_Wlogical_op_],
  259. [save_CFLAGS="$CFLAGS"
  260. CFLAGS="-Wlogical-op"
  261. AC_COMPILE_IFELSE([
  262. AC_LANG_PROGRAM(
  263. [[
  264. #include <stdio>
  265. ]], [[]])
  266. ],
  267. [ac_cv_safe_to_use_Wlogical_op_=yes],
  268. [ac_cv_safe_to_use_Wlogical_op_=no])
  269. CFLAGS="$save_CFLAGS"])
  270. AS_IF([test "$ac_cv_safe_to_use_Wlogical_op_" = "yes"],
  271. [CC_WARNINGS="${CC_WARNINGS} -Wlogical-op"])
  272. AC_CACHE_CHECK([whether it is safe to use -Wredundant-decls from C++],
  273. [ac_cv_safe_to_use_Wredundant_decls_],
  274. [AC_LANG_PUSH(C++)
  275. save_CXXFLAGS="${CXXFLAGS}"
  276. CXXFLAGS="${CXXFLAGS} ${W_FAIL} -Wredundant-decls"
  277. AC_COMPILE_IFELSE(
  278. [AC_LANG_PROGRAM([
  279. template <typename E> struct C { void foo(); };
  280. template <typename E> void C<E>::foo() { }
  281. template <> void C<int>::foo();
  282. AC_INCLUDES_DEFAULT])],
  283. [ac_cv_safe_to_use_Wredundant_decls_=yes],
  284. [ac_cv_safe_to_use_Wredundant_decls_=no])
  285. CXXFLAGS="${save_CXXFLAGS}"
  286. AC_LANG_POP()])
  287. AS_IF([test "$ac_cv_safe_to_use_Wredundant_decls_" = "yes"],
  288. [CXX_WARNINGS="${CXX_WARNINGS} -Wredundant-decls"],
  289. [CXX_WARNINGS="${CXX_WARNINGS} -Wno-redundant-decls"])
  290. NO_REDUNDANT_DECLS="-Wno-redundant-decls"
  291. fi
  292. if test "$SUNCC" = "yes"
  293. then
  294. AS_IF([test "$ac_profiling" = "yes"],
  295. [CC_PROFILING="-xinstrument=datarace"])
  296. AS_IF([test "$building_from_bzr" = "yes"],
  297. [W_FAIL="-errwarn=%all"])
  298. AC_CACHE_CHECK([whether E_PASTE_RESULT_NOT_TOKEN is usable],
  299. [ac_cv_paste_result],
  300. [
  301. save_CFLAGS="${CFLAGS}"
  302. CFLAGS="-errwarn=%all -erroff=E_PASTE_RESULT_NOT_TOKEN ${CFLAGS}"
  303. AC_COMPILE_IFELSE(
  304. [AC_LANG_PROGRAM([
  305. AC_INCLUDES_DEFAULT
  306. ],[
  307. int x= 0;])],
  308. [ac_cv_paste_result=yes],
  309. [ac_cv_paste_result=no])
  310. CFLAGS="${save_CFLAGS}"
  311. ])
  312. AS_IF([test $ac_cv_paste_result = yes],
  313. [W_PASTE_RESULT=",E_PASTE_RESULT_NOT_TOKEN"])
  314. CC_WARNINGS="-v -errtags=yes ${W_FAIL} -erroff=E_INTEGER_OVERFLOW_DETECTED${W_PASTE_RESULT}"
  315. CXX_WARNINGS="+w +w2 -xwe -xport64 -errtags=yes ${W_FAIL}"
  316. fi
  317. AC_SUBST(NO_CONVERSION)
  318. AC_SUBST(NO_REDUNDANT_DECLS)
  319. AM_CPPFLAGS="-I\$(top_srcdir) -I\$(top_builddir) ${CPPFLAGS}"
  320. AM_CFLAGS="${CC_WARNINGS} ${CC_PROFILING} ${CC_COVERAGE} ${CFLAGS}"
  321. AM_CXXFLAGS="${CXX_WARNING} ${CC_PROFILING} ${CC_COVERAGE} ${CXXFLAGS}"
  322. AC_SUBST([AM_CPPFLAGS])
  323. AC_SUBST([AM_CFLAGS])
  324. AC_SUBST([AM_CXXFLAGS])
  325. dnl We've collected the flags in AM_*FLAGS now, so blank these.
  326. CFLAGS=""
  327. CXXFLAGS=""
  328. CPPFLAGS=""
  329. AC_CHECK_PROGS([DOXYGEN], [doxygen])
  330. AC_CHECK_PROGS([PERL], [perl])
  331. AC_CONFIG_FILES(Makefile
  332. libgearman/Makefile
  333. gearmand/Makefile
  334. bin/Makefile
  335. tests/Makefile
  336. examples/Makefile
  337. scripts/Makefile
  338. support/Makefile
  339. benchmark/Makefile
  340. scripts/gearmand-init
  341. scripts/gearmand.xml
  342. scripts/gearmand
  343. scripts/smf_install.sh
  344. support/gearmand.pc
  345. support/gearmand.spec)
  346. AC_OUTPUT
  347. echo "---"
  348. echo "Configuration summary for $PACKAGE_NAME version $VERSION"
  349. echo ""
  350. echo " * Installation prefix: $prefix"
  351. echo " * System type: $host_vendor-$host_os"
  352. echo " * Host CPU: $host_cpu"
  353. echo " * C Compiler: $CC_VERSION"
  354. echo " * Assertions enabled: $ac_cv_assert"
  355. echo " * Debug enabled: $with_debug"
  356. echo " * Warnings as failure: $building_from_bzr"
  357. echo ""
  358. echo "---"