PageRenderTime 73ms CodeModel.GetById 40ms RepoModel.GetById 0ms app.codeStats 0ms

/src/external/zeromq/configure.in

https://bitbucket.org/joneshf/cloudi
Autoconf | 398 lines | 274 code | 54 blank | 70 comment | 25 complexity | 381df9d127cc3255b50a00c9cd586792 MD5 | raw file
  1. # -*- Autoconf -*-
  2. # Process this file with autoconf to produce a configure script.
  3. AC_PREREQ(2.61)
  4. #
  5. # The 0MQ version number is extracted from include/zmq.h using
  6. # the version.sh script. Hence, it should be updated there.
  7. # The version in git should reflect the *next* version planned.
  8. #
  9. AC_INIT([zeromq],[m4_esyscmd([./version.sh])],[zeromq-dev@lists.zeromq.org])
  10. AC_CONFIG_AUX_DIR(config)
  11. AC_CONFIG_MACRO_DIR(config)
  12. AM_CONFIG_HEADER(src/platform.hpp)
  13. AM_INIT_AUTOMAKE(tar-ustar dist-zip foreign)
  14. m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
  15. # This lets us use PACKAGE_VERSION in Makefiles
  16. AC_SUBST(PACKAGE_VERSION)
  17. # Libtool -version-info (ABI version)
  18. #
  19. # Don't change this unless you know exactly what you're doing and have read and
  20. # understand:
  21. # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
  22. #
  23. # Changes:
  24. #
  25. # ZeroMQ versions prior to 2.1.0 use 0.0.0 ("unstable")
  26. # ZeroMQ version 2.1.0: 1:0:0
  27. #
  28. # libzmq -version-info current:revision:age
  29. LTVER="1:0:0"
  30. AC_SUBST(LTVER)
  31. # Take a copy of original flags
  32. ZMQ_ORIG_CFLAGS="${CFLAGS:-none}"
  33. ZMQ_ORIG_CPPFLAGS="${CPPFLAGS:-none}"
  34. ZMQ_ORIG_CXXFLAGS="${CXXFLAGS:-none}"
  35. # Checks for programs.
  36. AC_PROG_CC
  37. AC_PROG_CC_C99
  38. AC_PROG_CXX
  39. AM_PROG_CC_C_O
  40. AC_PROG_SED
  41. AC_PROG_AWK
  42. AC_ARG_VAR([XMLTO], [Path to xmlto command])
  43. AC_PATH_PROG([XMLTO], [xmlto])
  44. AC_ARG_VAR([ASCIIDOC], [Path to asciidoc command])
  45. AC_PATH_PROG([ASCIIDOC], [asciidoc])
  46. LIBZMQ_CONFIG_LIBTOOL
  47. AC_LIBTOOL_WIN32_DLL
  48. AC_PROG_LIBTOOL
  49. # Check whether to build a with debug symbols
  50. LIBZMQ_CHECK_ENABLE_DEBUG
  51. # Check wheter to enable code coverage
  52. LIBZMQ_WITH_GCOV
  53. # Checks for libraries.
  54. AC_CHECK_LIB([pthread], [pthread_create])
  55. # Set pedantic
  56. libzmq_pedantic="yes"
  57. # By default compiling with -Werror except OSX.
  58. libzmq_werror="yes"
  59. # By default use DSO visibility
  60. libzmq_dso_visibility="yes"
  61. # Whether we are on mingw or not.
  62. libzmq_on_mingw32="no"
  63. # Set some default features required by 0MQ code.
  64. CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS"
  65. # For host type checks
  66. AC_CANONICAL_HOST
  67. # OS-specific tests
  68. case "${host_os}" in
  69. *linux*)
  70. # Define on Linux to enable all library features. Define if using a gnu compiler
  71. if test "x$GXX" = "xyes"; then
  72. CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
  73. fi
  74. AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS])
  75. AC_CHECK_LIB(rt, sem_init)
  76. AC_CHECK_LIB(uuid, uuid_generate, ,
  77. [AC_MSG_ERROR([cannot link with -luuid, install uuid-dev.])])
  78. case "${host_os}" in
  79. *android*)
  80. AC_DEFINE(ZMQ_HAVE_ANDROID, 1, [Have Android OS])
  81. ;;
  82. esac
  83. ;;
  84. *solaris*)
  85. # Define on Solaris to enable all library features
  86. CPPFLAGS="-D_PTHREADS $CPPFLAGS"
  87. AC_DEFINE(ZMQ_HAVE_SOLARIS, 1, [Have Solaris OS])
  88. AC_CHECK_LIB(socket, socket)
  89. AC_CHECK_LIB(nsl, gethostbyname)
  90. AC_CHECK_LIB(rt, sem_init)
  91. AC_CHECK_LIB(uuid, uuid_generate, ,
  92. [AC_MSG_ERROR([cannot link with -luuid, install uuid-dev.])])
  93. AC_MSG_CHECKING([whether atomic operations can be used])
  94. AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
  95. [[#include <atomic.h>]],
  96. [[uint32_t value;
  97. atomic_cas_32 (&value, 0, 0);
  98. return 0;]])],
  99. [solaris_has_atomic=yes],
  100. [solaris_has_atomic=no])
  101. AC_MSG_RESULT([$solaris_has_atomic])
  102. # Solaris 8 does not have atomic operations exported to user space.
  103. if test "x$solaris_has_atomic" = "xno"; then
  104. AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
  105. fi
  106. ;;
  107. *freebsd*)
  108. # Define on FreeBSD to enable all library features
  109. CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS"
  110. AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have FreeBSD OS])
  111. ;;
  112. *darwin*)
  113. # Define on Darwin to enable all library features
  114. CPPFLAGS="-D_DARWIN_C_SOURCE $CPPFLAGS"
  115. libzmq_pedantic="no"
  116. libzmq_werror="no"
  117. AC_DEFINE(ZMQ_HAVE_OSX, 1, [Have DarwinOSX OS])
  118. AC_LANG_PUSH([C++])
  119. LIBZMQ_CHECK_LANG_FLAG_PREPEND([-Wno-uninitialized])
  120. AC_LANG_POP([C++])
  121. ;;
  122. *netbsd*)
  123. # Define on NetBSD to enable all library features
  124. CPPFLAGS="-D_NETBSD_SOURCE $CPPFLAGS"
  125. AC_DEFINE(ZMQ_HAVE_NETBSD, 1, [Have NetBSD OS])
  126. # NetBSD 5.0 and newer provides atomic operations but we can
  127. # only use these on systems where PR #42842 has been fixed so
  128. # we must try and link a test program using C++.
  129. libzmq_netbsd_has_atomic=no
  130. AC_MSG_CHECKING([whether atomic operations can be used])
  131. AC_LANG_PUSH([C++])
  132. AC_LINK_IFELSE([AC_LANG_PROGRAM(
  133. [[#include <atomic.h>]],
  134. [[uint32_t value;
  135. atomic_cas_32 (&value, 0, 0);
  136. return 0;]])],
  137. [libzmq_netbsd_has_atomic=yes],
  138. [libzmq_netbsd_has_atomic=no])
  139. AC_LANG_POP([C++])
  140. AC_MSG_RESULT([$libzmq_netbsd_has_atomic])
  141. if test "x$libzmq_netbsd_has_atomic" = "xno"; then
  142. AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
  143. fi
  144. ;;
  145. *openbsd*)
  146. # Define on OpenBSD to enable all library features
  147. CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
  148. AC_DEFINE(ZMQ_HAVE_OPENBSD, 1, [Have OpenBSD OS])
  149. ;;
  150. *nto-qnx*)
  151. libzmq_pedantic="no"
  152. AC_DEFINE(ZMQ_HAVE_QNXNTO, 1, [Have QNX Neutrino OS])
  153. AC_CHECK_LIB(socket, socket)
  154. AC_CHECK_LIB(crypto, RAND_bytes)
  155. ;;
  156. *aix*)
  157. AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS])
  158. AC_CHECK_LIB(crypto,RAND_bytes)
  159. ;;
  160. *hpux*)
  161. # Define on HP-UX to enable all library features
  162. CPPFLAGS="-D_POSIX_C_SOURCE=200112L $CPPFLAGS"
  163. AC_DEFINE(ZMQ_HAVE_HPUX, 1, [Have HPUX OS])
  164. AC_CHECK_LIB(rt, sem_init)
  165. AC_ARG_WITH([dce],
  166. [AS_HELP_STRING([--without-dce],
  167. [HP-UX only: Do not use DCE library for UUID functions])],,
  168. [],
  169. [with_dce=yes])
  170. AS_IF([test "x$with_dce" != xno],
  171. [AC_CHECK_LIB(dcekt, uuid_create)],
  172. [AC_CHECK_LIB(crypto, RAND_bytes)])
  173. ;;
  174. *mingw32*)
  175. AC_DEFINE(ZMQ_HAVE_WINDOWS, 1, [Have Windows OS])
  176. AC_DEFINE(ZMQ_HAVE_MINGW32, 1, [Have MinGW32])
  177. AC_CHECK_HEADERS(windows.h)
  178. AC_CHECK_LIB(ws2_32, main, ,
  179. [AC_MSG_ERROR([cannot link with ws2_32.dll.])])
  180. AC_CHECK_LIB(rpcrt4, main, ,
  181. [AC_MSG_ERROR([cannot link with rpcrt4.dll.])])
  182. AC_CHECK_LIB(iphlpapi, main, ,
  183. [AC_MSG_ERROR([cannot link with iphlpapi.dll.])])
  184. # mingw32 defines __int64_t as long long
  185. AC_LANG_PUSH([C++])
  186. LIBZMQ_CHECK_LANG_FLAG_PREPEND([-Wno-long-long])
  187. AC_LANG_POP([C++])
  188. libzmq_on_mingw32="yes"
  189. libzmq_dso_visibility="no"
  190. if test "x$enable_static" = "xyes"; then
  191. AC_MSG_ERROR([Building static libraries is not supported under MinGW32])
  192. fi
  193. ;;
  194. *cygwin*)
  195. # Define on Cygwin to enable all library features
  196. CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
  197. AC_DEFINE(ZMQ_HAVE_CYGWIN, 1, [Have Cygwin])
  198. # Cygwin provides libuuid as part of the e2fsprogs package, and somewhat
  199. # uselessly installs the library in /usr/lib/e2fsprogs
  200. LDFLAGS="-L/usr/lib/e2fsprogs ${LDFLAGS}"
  201. AC_CHECK_LIB(uuid, uuid_generate, ,
  202. [AC_MSG_ERROR([cannot link with -luuid, install the e2fsprogs package.])])
  203. if test "x$enable_static" = "xyes"; then
  204. AC_MSG_ERROR([Building static libraries is not supported under Cygwin])
  205. fi
  206. ;;
  207. *)
  208. AC_MSG_ERROR([unsupported system: ${host_os}.])
  209. ;;
  210. esac
  211. #
  212. # Check if the compiler supports -fvisibility=hidden flag. MinGW32 uses __declspec
  213. #
  214. if test "x$libzmq_dso_visibility" = "xyes"; then
  215. AC_LANG_PUSH([C++])
  216. LIBZMQ_CHECK_LANG_VISIBILITY([LIBZMQ_EXTRA_CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag ${LIBZMQ_EXTRA_CXXFLAGS}"])
  217. AC_LANG_POP([C++])
  218. fi
  219. # CPU-specific optimizations
  220. case "${host_cpu}" in
  221. *sparc*)
  222. AC_LANG_PUSH([C++])
  223. LIBZMQ_CHECK_LANG_FLAG_PREPEND([-mcpu=v9])
  224. AC_LANG_POP([C++])
  225. ;;
  226. *)
  227. ;;
  228. esac
  229. # Check whether to build docs / install man pages
  230. LIBZMQ_CHECK_DOC_BUILD
  231. # Checks for header files.
  232. AC_HEADER_STDC
  233. AC_CHECK_HEADERS(errno.h arpa/inet.h netinet/tcp.h netinet/in.h stddef.h \
  234. stdlib.h string.h sys/socket.h sys/time.h time.h unistd.h limits.h)
  235. # Check if we have ifaddrs.h header file.
  236. AC_CHECK_HEADERS(ifaddrs.h, [AC_DEFINE(ZMQ_HAVE_IFADDRS, 1, [Have ifaddrs.h header.])])
  237. # Use c++ in subsequent tests
  238. AC_LANG_PUSH(C++)
  239. AC_HEADER_STDBOOL
  240. AC_C_CONST
  241. AC_C_INLINE
  242. # Checks for typedefs, structures, and compiler characteristics.
  243. if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_intel_compiler" = "xyes"; then
  244. dnl 279: controlling expression is constant
  245. dnl Fixes build with ICC 12.x
  246. LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SIZE_T])
  247. LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SSIZE_T])
  248. else
  249. AC_TYPE_SIZE_T
  250. AC_TYPE_SSIZE_T
  251. fi
  252. AC_HEADER_TIME
  253. AC_TYPE_UINT32_T
  254. AC_C_VOLATILE
  255. # PGM extension
  256. libzmq_pgm_ext="no"
  257. pgm_basename="libpgm-5.1.118~dfsg"
  258. AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm],
  259. [build libzmq with PGM extension [default=no]])],
  260. [with_pgm_ext=$withval], [with_pgm_ext=no])
  261. # build using system pgm
  262. AC_ARG_WITH([system-pgm], [AS_HELP_STRING([--with-system-pgm],
  263. [build libzmq with PGM extension. Requires pkg-config [default=no]])],
  264. [with_system_pgm_ext=yes], [with_system_pgm_ext=no])
  265. if test "x$with_pgm_ext" != "xno" -a "x$with_system_pgm_ext" != "xno"; then
  266. AC_MSG_ERROR([--with-pgm and --with-system-pgm cannot be specified together])
  267. fi
  268. if test "x$with_pgm_ext" != "xno"; then
  269. # This allows placing the tar.gz to foreign/openpgm
  270. # and using ./configure --with-pgm=libpgm-x.y.z
  271. if test "x$with_pgm_ext" != "xyes"; then
  272. pgm_basename="$with_pgm_ext"
  273. fi
  274. # Unpack libpgm
  275. AC_MSG_NOTICE([Unpacking ${pgm_basename}.tar.gz])
  276. libzmq_pwd=`pwd`
  277. cd foreign/openpgm
  278. if ! (gzip -dc "${pgm_basename}.tar.gz" || echo "failed") | ${am__untar}; then
  279. AC_MSG_ERROR([cannot unpack the foreign/openpgm/${pgm_basename}.tar.gz file])
  280. fi
  281. cd "${libzmq_pwd}"
  282. if test -d foreign/openpgm/build-staging; then
  283. rm -rf foreign/openpgm/build-staging
  284. fi
  285. mv foreign/openpgm/${pgm_basename} foreign/openpgm/build-staging
  286. pgm_srcdir=foreign/openpgm/build-staging/openpgm/pgm
  287. if ! test -d foreign/openpgm/build-staging/openpgm/pgm/config; then
  288. mkdir foreign/openpgm/build-staging/openpgm/pgm/config
  289. fi
  290. # DSO symbol visibility for openpgm
  291. AC_LANG_PUSH([C])
  292. LIBZMQ_CHECK_LANG_VISIBILITY([ac_configure_args="CFLAGS='$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag' ${ac_configure_args}"])
  293. AC_LANG_POP([C])
  294. pgm_subdir=build-staging/openpgm/pgm
  295. AC_SUBST(pgm_subdir)
  296. AC_SUBST(pgm_srcdir)
  297. AC_CONFIG_SUBDIRS([foreign/openpgm/build-staging/openpgm/pgm/])
  298. # Success!
  299. AC_DEFINE(ZMQ_HAVE_OPENPGM, 1, [Have OpenPGM extension])
  300. libzmq_pgm_ext="yes"
  301. fi
  302. # Build with system openpgm
  303. if test "x$with_system_pgm_ext" != "xno"; then
  304. m4_ifdef([PKG_CHECK_MODULES], [
  305. PKG_CHECK_MODULES([OpenPGM], [openpgm-5.1 >= 5.1])
  306. AC_DEFINE(ZMQ_HAVE_OPENPGM, 1, [Have OpenPGM extension])
  307. LIBZMQ_EXTRA_CXXFLAGS="$OpenPGM_CFLAGS $LIBZMQ_EXTRA_CXXFLAGS"
  308. LIBS="$OpenPGM_LIBS $LIBS"
  309. ],
  310. [AC_MSG_ERROR([--with-system-pgm requires a working pkg-config installation])])
  311. fi
  312. AC_SUBST(pgm_basename)
  313. # Set -Wall, -Werror and -pedantic
  314. AC_LANG_PUSH([C++])
  315. # Check how to enable -Wall
  316. LIBZMQ_LANG_WALL([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_wall_flag $CPPFLAGS"])
  317. if test "x$libzmq_werror" = "xyes" -a "x$libzmq_cv_[]_AC_LANG_ABBREV[]_sun_studio_compiler" != "xyes"; then
  318. LIBZMQ_LANG_WERROR([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_werror_flag $CPPFLAGS"])
  319. fi
  320. if test "x$libzmq_pedantic" = "xyes"; then
  321. LIBZMQ_LANG_STRICT([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CPPFLAGS"])
  322. fi
  323. AC_LANG_POP([C++])
  324. AM_CONDITIONAL(BUILD_PGM, test "x$libzmq_pgm_ext" = "xyes")
  325. AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes")
  326. # Checks for library functions.
  327. AC_TYPE_SIGNAL
  328. AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs)
  329. AC_CHECK_HEADERS([alloca.h])
  330. LIBZMQ_CHECK_SOCK_CLOEXEC([AC_DEFINE(
  331. [HAVE_SOCK_CLOEXEC],
  332. [1],
  333. [Whether SOCK_CLOEXEC is defined and functioning.])
  334. ])
  335. # Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
  336. AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
  337. AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
  338. AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
  339. AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile
  340. perf/Makefile src/libzmq.pc \
  341. builds/msvc/Makefile tests/Makefile \
  342. foreign/openpgm/Makefile \
  343. builds/redhat/zeromq.spec])
  344. AC_OUTPUT