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