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) 13AC_CONFIG_HEADERS([src/platform.hpp]) 14AM_INIT_AUTOMAKE(foreign subdir-objects tar-ustar dist-zip) 15# Allow "configure --disable-maintainer-mode" to disable timestamp checking 16AM_MAINTAINER_MODE([enable]) 17 18m4_pattern_allow([AC_PROG_CC_C99]) 19m4_include([m4/ax_check_compile_flag.m4]) 20m4_include([m4/ax_cxx_compile_stdcxx_11.m4]) 21m4_include([m4/ax_code_coverage.m4]) 22m4_include([m4/ax_valgrind_check.m4]) 23m4_include([m4/ax_check_vscript.m4]) 24m4_include([m4/ax_func_posix_memalign.m4]) 25m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) 26 27# This lets us use PACKAGE_VERSION in Makefiles 28AC_SUBST(PACKAGE_VERSION) 29 30# Libtool -version-info (ABI version) 31# 32# Don't change this unless you know exactly what you're doing and have read and 33# understand: 34# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html 35# 36# Changes: 37# 38# ZeroMQ versions prior to 2.1.0 use 0:0:0 (undefined) 39# ZeroMQ versions 2.1.x: 1:0:0 (ABI version 1) 40# ZeroMQ version 3.0: 2:0:0 (ABI version 2) 41# ZeroMQ version 3.1: 3:0:0 (ABI version 3) 42# ZeroMQ version 4.0: 4:0:0 (ABI version 4) 43# ZeroMQ version 4.1: 5:0:0 (ABI version 5) 44# ZeroMQ version 4.2.0: 6:0:1 (ABI version 5) 45# ZeroMQ version 4.2.1: 6:1:1 (ABI version 5) 46# ZeroMQ version 4.2.2: 6:2:1 (ABI version 5) 47# ZeroMQ version 4.2.3: 6:3:1 (ABI version 5) 48# ZeroMQ version 4.2.4: 6:4:1 (ABI version 5) 49# ZeroMQ version 4.2.5: 6:5:1 (ABI version 5) 50# ZeroMQ version 4.3.0: 7:0:2 (ABI version 5) 51# ZeroMQ version 4.3.1: 7:1:2 (ABI version 5) 52# ZeroMQ version 4.3.2: 7:2:2 (ABI version 5) 53# ZeroMQ version 4.3.3: 7:3:2 (ABI version 5) 54# ZeroMQ version 4.3.4: 7:4:2 (ABI version 5) 55# 56# libzmq -version-info current:revision:age 57LTVER="7:4:2" 58AC_SUBST(LTVER) 59 60# Take a copy of original flags 61ZMQ_ORIG_CFLAGS="${CFLAGS:-none}" 62ZMQ_ORIG_CPPFLAGS="${CPPFLAGS:-none}" 63ZMQ_ORIG_CXXFLAGS="${CXXFLAGS:-none}" 64 65# Checks for programs. 66AC_PROG_CC 67AX_CHECK_COMPILE_FLAG([-std=gnu11], [CFLAGS+=" -std=gnu11"], [AC_PROG_CC_C99]) 68AC_PROG_CXX 69AX_CODE_COVERAGE 70AM_PROG_CC_C_O 71AC_PROG_SED 72AC_PROG_AWK 73PKG_PROG_PKG_CONFIG 74m4_pattern_forbid([^PKG_[A-Z_]+$], [missing some pkg-config macros (pkg-config package)]) 75 76# Libtool configuration for different targets. See acinclude.m4 77AC_ARG_VAR([XMLTO], [path to xmlto command]) 78AC_PATH_PROG([XMLTO], [xmlto]) 79AC_ARG_VAR([ASCIIDOC], [path to asciidoc command]) 80AC_PATH_PROG([ASCIIDOC], [asciidoc]) 81LIBZMQ_CONFIG_LIBTOOL 82AC_LIBTOOL_WIN32_DLL 83AC_PROG_LIBTOOL 84AX_VALGRIND_CHECK 85AX_CHECK_VSCRIPT 86AX_FUNC_POSIX_MEMALIGN 87 88AC_ARG_ENABLE([force-CXX98-compat], 89 [AS_HELP_STRING([--enable-force-CXX98-compat], [force C++98 build [default=disabled]])]) 90if test "x$enable_force_CXX98_compat" = "xyes"; then 91 AC_LANG_PUSH([C++]) 92 AX_CHECK_COMPILE_FLAG([-std=gnu++98], [CXXFLAGS+=" -std=gnu++98"], []) 93 AX_CHECK_COMPILE_FLAG([-Wc++98-compat -Wc++98-compat-pedantic], [CXXFLAGS+=" -Wc++98-compat"], []) 94 AC_LANG_POP([C++]) 95else 96 AX_CXX_COMPILE_STDCXX_11([ext], [optional]) 97fi 98 99# Check whether to build a with debug symbols 100LIBZMQ_CHECK_ENABLE_DEBUG 101 102# Check whether to enable code coverage 103LIBZMQ_WITH_GCOV 104 105AC_MSG_CHECKING([if TIPC is available and supports nonblocking connect]) 106 107AC_RUN_IFELSE( 108 [AC_LANG_PROGRAM([[ 109 #include <stdlib.h> 110 #include <string.h> 111 #include <fcntl.h> 112 #include <errno.h> 113 #include <sys/socket.h> 114 #include <linux/tipc.h> 115 ]],[[ 116 struct sockaddr_tipc topsrv; 117 int sd = socket(AF_TIPC, SOCK_SEQPACKET, 0); 118 memset(&topsrv, 0, sizeof(topsrv)); 119 topsrv.family = AF_TIPC; 120 topsrv.addrtype = TIPC_ADDR_NAME; 121 topsrv.addr.name.domain = tipc_addr (10, 10, 10); 122 topsrv.addr.name.name.type = TIPC_TOP_SRV; 123 topsrv.addr.name.name.instance = TIPC_TOP_SRV; 124 fcntl(sd, F_SETFL, O_NONBLOCK); 125 ]]) 126 ], 127 [libzmq_tipc_support=yes], 128 [libzmq_tipc_support=no], 129 [libzmq_tipc_support=no]) 130 131AC_MSG_RESULT([$libzmq_tipc_support]) 132 133AC_ARG_ENABLE([pedantic], 134 [AS_HELP_STRING([--disable-pedantic], [disable pedantic compiler checks [default=enabled]])], 135 [libzmq_pedantic=$enableval], [libzmq_pedantic=yes]) 136 137AC_ARG_WITH([militant], 138 [AS_HELP_STRING([--with-militant], 139 [enable militant API assertions])], 140 [zmq_militant="yes"], 141 []) 142 143if test "x$zmq_militant" = "xyes"; then 144 AC_DEFINE(ZMQ_ACT_MILITANT, 1, [Enable militant API assertions]) 145fi 146 147# Disable IPC on unsupported platforms. 148case "${host_os}" in 149 *vxworks*|*openvms*|*mingw*) 150 ;; 151 *) 152 AC_DEFINE(ZMQ_HAVE_IPC, 1, [Have AF_UNIX sockets for ipc transport]) 153 ;; 154esac 155 156# Data race/deadlock detection 157# NOTE: Running libzmq under TSAN doesn't make much sense -- synchronization in libzmq is to some extent 158# handled by the code "knowing" what threads are allowed to do, rather than by enforcing those 159# restrictions, so TSAN generates a lot of (presumably) false positives from libzmq. 160# The settings below are intended to enable libzmq to be built with minimal support for TSAN 161# such that it can be used along with other code that is also built with TSAN. 162AC_MSG_CHECKING([whether to enable TSan]) 163AC_ARG_ENABLE(thread-sanitizer, [AS_HELP_STRING([--enable-thread-sanitizer=yes/no], 164 [Build with clang Thread Sanitizer instrumentation])], 165 [ZMQ_TSAN="$enableval"]) 166 167if test "x${ZMQ_TSAN}" = "xyes"; then 168 TSAN_FLAGS="-fno-omit-frame-pointer -fsanitize=thread" 169 TSAN_CCFLAGS="${TSAN_CCFLAGS} -mllvm -tsan-instrument-memory-accesses=0" 170 TSAN_CCFLAGS="${TSAN_CCFLAGS} -mllvm -tsan-instrument-atomics=0" 171 TSAN_CCFLAGS="${TSAN_CCFLAGS} -mllvm -tsan-instrument-func-entry-exit=1" 172 CFLAGS="${CFLAGS} ${TSAN_FLAGS} ${TSAN_CCFLAGS}" 173 CXXFLAGS="${CXXFLAGS} ${TSAN_FLAGS} ${TSAN_CCFLAGS}" 174 LDFLAGS="${LDFLAGS} ${TSAN_FLAGS} -pie" 175 176 AM_CONDITIONAL(ENABLE_TSAN, true) 177 AC_MSG_RESULT([yes]) 178else 179 AM_CONDITIONAL(ENABLE_TSAN, false) 180 AC_MSG_RESULT([no]) 181fi 182 183# Memory mis-use detection 184AC_MSG_CHECKING([whether to enable ASan]) 185AC_ARG_ENABLE(address-sanitizer, [AS_HELP_STRING([--enable-address-sanitizer=yes/no], 186 [Build with GCC Address Sanitizer instrumentation])], 187 [ZMQ_ASAN="$enableval"]) 188 189if test "x${ZMQ_ASAN}" = "xyes"; then 190 CFLAGS="${CFLAGS} -fsanitize=address -fsanitize=undefined -fsanitize=leak -fno-sanitize-recover=all" 191 CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize=undefined -fsanitize=leak -fno-sanitize-recover=all" 192 193 AM_CONDITIONAL(ENABLE_ASAN, true) 194 AC_MSG_RESULT([yes]) 195else 196 AM_CONDITIONAL(ENABLE_ASAN, false) 197 AC_MSG_RESULT([no]) 198fi 199 200# By default compiling with -Werror except on OSX and Solaris when building 201# with libsodium. 202AC_ARG_ENABLE([Werror], 203 [AS_HELP_STRING([--disable-Werror], [disable Werror compiler flag [default=enabled]])], 204 [libzmq_werror=$enableval], [libzmq_werror=yes]) 205 206# By default use DSO visibility 207libzmq_dso_visibility="yes" 208 209# Platform specific checks 210libzmq_on_mingw="no" 211libzmq_on_cygwin="no" 212libzmq_on_android="no" 213libzmq_on_linux="no" 214libzmq_on_gnu="no" 215 216# Set some default features required by ZeroMQ code 217CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS" 218CXXFLAGS="-Wno-long-long $CXXFLAGS" 219 220# Will be used to add flags to pkg-config useful when apps want to statically link 221PKGCFG_LIBS_PRIVATE="" 222PKGCFG_NAMES_PRIVATE="" 223 224# For host type checks 225AC_CANONICAL_HOST 226 227# OS-specific tests 228case "${host_os}" in 229 *linux*) 230 # Define on Linux to enable all library features. Define if using a gnu compiler 231 if test "x$GXX" = "xyes"; then 232 CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS" 233 fi 234 AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS]) 235 libzmq_on_linux="yes" 236 237 if test "x$libzmq_tipc_support" = "xyes"; then 238 AC_DEFINE(ZMQ_HAVE_TIPC, 1, [Have TIPC support]) 239 fi 240 case "${host_os}" in 241 *android*) 242 AC_DEFINE(ZMQ_HAVE_ANDROID, 1, [Have Android OS]) 243 libzmq_on_android="yes" 244 ;; 245 esac 246 ;; 247 *solaris*) 248 # Define on Solaris to enable all library features 249 CPPFLAGS="-D_PTHREADS $CPPFLAGS" 250 CXXFLAGS="-Wno-sign-compare $CXXFLAGS" 251 AC_DEFINE(ZMQ_HAVE_SOLARIS, 1, [Have Solaris OS]) 252 AC_CHECK_LIB(socket, socket) 253 AC_CHECK_LIB(nsl, gethostbyname) 254 AC_MSG_CHECKING([whether atomic operations can be used]) 255 AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 256 [[#include <atomic.h>]], 257 [[uint32_t value; 258 atomic_cas_32 (&value, 0, 0); 259 return 0;]])], 260 [solaris_has_atomic=yes], 261 [solaris_has_atomic=no]) 262 AC_MSG_RESULT([$solaris_has_atomic]) 263 # Solaris 8 does not have atomic operations exported to user space. 264 if test "x$solaris_has_atomic" = "xno"; then 265 AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes]) 266 fi 267 ;; 268 *freebsd*) 269 # Define on FreeBSD to enable all library features 270 CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS" 271 AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have FreeBSD OS]) 272 ;; 273 *dragonfly*) 274 CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS" 275 AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have DragonFly OS]) 276 AC_DEFINE(ZMQ_HAVE_DRAGONFLY, 1, [Have DragonFly OS]) 277 ;; 278 *darwin*) 279 # Define on Darwin to enable all library features 280 CPPFLAGS="-D_DARWIN_C_SOURCE $CPPFLAGS" 281 libzmq_pedantic="no" 282 AC_DEFINE(ZMQ_HAVE_OSX, 1, [Have DarwinOSX OS]) 283 ;; 284 *haiku*) 285 AC_DEFINE(ZMQ_HAVE_HAIKU, 1, [Have Haiku OS]) 286 AC_CHECK_LIB(network, socket) 287 ;; 288 *netbsd*) 289 # Define on NetBSD to enable all library features 290 CPPFLAGS="-D_NETBSD_SOURCE $CPPFLAGS" 291 AC_DEFINE(ZMQ_HAVE_NETBSD, 1, [Have NetBSD OS]) 292 # NetBSD 5.0 and newer provides atomic operations but we can 293 # only use these on systems where PR #42842 has been fixed so 294 # we must try and link a test program using C++. 295 libzmq_netbsd_has_atomic=no 296 AC_MSG_CHECKING([whether atomic operations can be used]) 297 AC_LANG_PUSH([C++]) 298 AC_LINK_IFELSE([AC_LANG_PROGRAM( 299 [[#include <atomic.h>]], 300 [[uint32_t value; 301 atomic_cas_32 (&value, 0, 0); 302 return 0;]])], 303 [libzmq_netbsd_has_atomic=yes], 304 [libzmq_netbsd_has_atomic=no]) 305 AC_LANG_POP([C++]) 306 AC_MSG_RESULT([$libzmq_netbsd_has_atomic]) 307 if test "x$libzmq_netbsd_has_atomic" = "xno"; then 308 AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes]) 309 fi 310 ;; 311 *openbsd*|*bitrig*) 312 # Define on OpenBSD to enable all library features 313 CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS" 314 AC_DEFINE(ZMQ_HAVE_OPENBSD, 1, [Have OpenBSD OS]) 315 ;; 316 *nto-qnx*) 317 libzmq_pedantic="no" 318 AC_DEFINE(ZMQ_HAVE_QNXNTO, 1, [Have QNX Neutrino OS]) 319 AC_CHECK_LIB(socket, socket) 320 ;; 321 *aix*|*os400*) 322 AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS]) 323 ;; 324 *hpux*) 325 # Define on HP-UX to enable all library features 326 CPPFLAGS="-D_POSIX_C_SOURCE=200112L $CPPFLAGS" 327 AC_DEFINE(ZMQ_HAVE_HPUX, 1, [Have HPUX OS]) 328 LIBZMQ_CHECK_LANG_FLAG_PREPEND([-Ae]) 329 AC_CHECK_FUNCS(gethrtime) 330 ;; 331 *mingw*|*msys*) 332 AC_DEFINE(ZMQ_HAVE_WINDOWS, 1, [Have Windows OS]) 333 AC_DEFINE(ZMQ_HAVE_MINGW, 1, [Have MinGW]) 334 AC_CHECK_HEADERS(windows.h) 335 AC_CHECK_LIB(ws2_32, main, , 336 [AC_MSG_ERROR([cannot link with ws2_32.dll.])]) 337 AC_CHECK_LIB(rpcrt4, main, , 338 [AC_MSG_ERROR([cannot link with rpcrt4.dll.])]) 339 AC_CHECK_LIB(iphlpapi, main, , 340 [AC_MSG_ERROR([cannot link with iphlpapi.dll.])]) 341 libzmq_on_mingw="yes" 342 libzmq_dso_visibility="no" 343 344 if test "x$enable_static" = "xyes"; then 345 CPPFLAGS="-DZMQ_STATIC $CPPFLAGS" 346 PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -liphlpapi" 347 fi 348 # Set FD_SETSIZE to 16384 349 CPPFLAGS=" -DFD_SETSIZE=16384 $CPPFLAGS" 350 ;; 351 *cygwin*) 352 # Define on Cygwin to enable all library features 353 CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS" 354 AC_DEFINE(ZMQ_HAVE_CYGWIN, 1, [Have Cygwin]) 355 libzmq_on_cygwin="yes" 356 libzmq_dso_visibility="no" 357 if test "x$enable_static" = "xyes"; then 358 AC_MSG_ERROR([Building static libraries is not supported under Cygwin]) 359 fi 360 ;; 361 gnu*) 362 # Define on GNU/Hurd to enable all library features. Define if using a gnu compiler 363 if test "x$GXX" = "xyes"; then 364 CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS" 365 fi 366 AC_DEFINE(ZMQ_HAVE_GNU, 1, [Have GNU/Hurd OS]) 367 libzmq_on_gnu="yes" 368 AC_CHECK_LIB(rt, sem_init) 369 ;; 370 *) 371 AC_MSG_ERROR([unsupported system: ${host_os}.]) 372 ;; 373esac 374 375# Sun Studio does not like anonymous structures in unions and does not have weak attribute 376if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_sun_studio_compiler" = "xyes"; then 377 CXXFLAGS="${CXXFLAGS} -features=extensions" 378 CFLAGS="${CFLAGS} -features=extensions" 379 CPPFLAGS="${CPPFLAGS} -DUNITY_WEAK_PRAGMA" 380fi 381 382# Checks for libraries 383AC_CHECK_LIB([pthread], [pthread_create]) 384if test "x$ac_cv_lib_pthread_pthread_create" = "xyes"; then 385 PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lpthread" 386fi 387AC_CHECK_LIB([rt], [clock_gettime]) 388if test "x$ac_cv_lib_rt_clock_gettime" = "xyes"; then 389 PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lrt" 390fi 391 392# 393# Check if the compiler supports -fvisibility=hidden flag. MinGW uses __declspec 394# 395if test "x$libzmq_dso_visibility" = "xyes"; then 396 AC_LANG_PUSH([C++]) 397 LIBZMQ_CHECK_LANG_VISIBILITY([LIBZMQ_EXTRA_CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag ${LIBZMQ_EXTRA_CXXFLAGS}"]) 398 AC_LANG_POP([C++]) 399fi 400 401# CPU-specific optimizations 402case "${host_cpu}" in 403 *sparc64*) 404 AC_LANG_PUSH([C++]) 405 LIBZMQ_CHECK_LANG_FLAG_PREPEND([-mcpu=v9]) 406 AC_LANG_POP([C++]) 407 ;; 408 *) 409 ;; 410esac 411 412# Check whether to build docs / install man pages 413LIBZMQ_CHECK_DOC_BUILD 414 415# Check polling system, set appropriate macro in src/platform.hpp 416LIBZMQ_CHECK_POLLER 417 418# Check cacheline size, set appropriate macro in src/platform.hpp 419LIBZMQ_CHECK_CACHELINE 420 421# Check condition variable implementation, set appropriate macro in src/platform.hpp 422LIBZMQ_CHECK_CV_IMPL 423 424# Checks for header files. 425AC_HEADER_STDC 426AC_CHECK_HEADERS(\ 427 errno.h \ 428 time.h \ 429 unistd.h \ 430 limits.h \ 431 stddef.h \ 432 stdlib.h \ 433 string.h \ 434 arpa/inet.h \ 435 netinet/tcp.h \ 436 netinet/in.h \ 437 sys/socket.h \ 438 sys/time.h) 439 440# Check if we have ifaddrs.h header file. 441AC_CHECK_HEADERS(ifaddrs.h, [AC_DEFINE(ZMQ_HAVE_IFADDRS, 1, [Have ifaddrs.h header.])]) 442 443# Check if we have sys/uio.h header file. 444AC_CHECK_HEADERS(sys/uio.h, [AC_DEFINE(ZMQ_HAVE_UIO, 1, [Have uio.h header.])]) 445 446# Force not to use eventfd 447AC_ARG_ENABLE([eventfd], 448 [AS_HELP_STRING([--disable-eventfd], [disable eventfd [default=enabled]])], 449 [zmq_enable_eventfd=$enableval], 450 [zmq_enable_eventfd=yes]) 451 452if test "x$zmq_enable_eventfd" = "xyes"; then 453 # Check if we have eventfd.h header file. 454 AC_CHECK_HEADERS(sys/eventfd.h, [ 455 AC_DEFINE(ZMQ_HAVE_EVENTFD, 1, [Have eventfd extension]) 456 LIBZMQ_CHECK_EVENTFD_CLOEXEC([ 457 AC_DEFINE([ZMQ_HAVE_EVENTFD_CLOEXEC], 458 [1], 459 [Whether EFD_CLOEXEC is defined and functioning.]) 460 ]) 461 ]) 462fi 463 464# Conditionally build performance measurement tools 465AC_ARG_ENABLE([perf], 466 [AS_HELP_STRING([--disable-perf], [don't build performance measurement tools [default=build]])], 467 [zmq_enable_perf=$enableval], 468 [zmq_enable_perf=yes]) 469 470AM_CONDITIONAL(ENABLE_PERF, test "x$zmq_enable_perf" = "xyes") 471 472# Conditionally build curve key generation tool 473AC_ARG_ENABLE([curve-keygen], 474 [AS_HELP_STRING([--disable-curve-keygen], [don't build curve-keygen tool [default=build]])], 475 [zmq_enable_curve_keygen=$enableval], 476 [zmq_enable_curve_keygen=yes]) 477 478# Use c++ in subsequent tests 479AC_LANG_PUSH(C++) 480 481AC_CHECK_DECLS([SO_PEERCRED], 482 [AC_DEFINE(ZMQ_HAVE_SO_PEERCRED, 1, [Have SO_PEERCRED socket option])], 483 [], 484 [#include <sys/socket.h>]) 485 486AC_CHECK_DECLS([LOCAL_PEERCRED], 487 [AC_DEFINE(ZMQ_HAVE_LOCAL_PEERCRED, 1, [Have LOCAL_PEERCRED socket option])], 488 [], 489 [#include <sys/socket.h>]) 490 491AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes") 492 493AC_HEADER_STDBOOL 494AC_C_CONST 495AC_C_INLINE 496 497# Checks for typedefs, structures, and compiler characteristics. 498if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_intel_compiler" = "xyes"; then 499 dnl 279: controlling expression is constant 500 dnl Fixes build with ICC 12.x 501 LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SIZE_T]) 502 LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SSIZE_T]) 503else 504 AC_TYPE_SIZE_T 505 AC_TYPE_SSIZE_T 506fi 507 508AC_HEADER_TIME 509AC_TYPE_UINT32_T 510AC_C_VOLATILE 511 512# build using libgssapi_krb5 513AC_ARG_WITH([libgssapi_krb5], [AS_HELP_STRING([--with-libgssapi_krb5], 514 [require libzmq build with libgssapi_krb5 [default=no]])], 515 [require_libgssapi_krb5_ext=$withval], 516 [require_libgssapi_krb5_ext=no]) 517 518# conditionally require libgssapi_krb5 519if test "x$require_libgssapi_krb5_ext" != "xno"; then 520 PKG_CHECK_MODULES([gssapi_krb5], [krb5-gssapi], [ 521 have_gssapi_library="yes" 522 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE krb5-gssapi" 523 ], [ 524 AC_CHECK_HEADERS(gssapi/gssapi_generic.h) 525 AC_SEARCH_LIBS([gss_init_sec_context], [gssapi_krb5 gssapi], 526 have_gssapi_library="yes", 527 AC_MSG_ERROR(libgssapi_krb5 is needed for GSSAPI security)) 528 PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lgssapi_krb5" 529 ]) 530fi 531if test "x$have_gssapi_library" = "xyes"; then 532 AC_DEFINE(HAVE_LIBGSSAPI_KRB5, [1], [Enabled GSSAPI security]) 533fi 534AM_CONDITIONAL(BUILD_GSSAPI, test "x$have_gssapi_library" = "xyes") 535 536# Select curve encryption library, defaults to tweetnacl 537# To use libsodium instead, use --with-libsodium (must be installed) 538# To disable curve, use --disable-curve 539 540AC_ARG_WITH([libsodium], 541 [AS_HELP_STRING([--with-libsodium], [use libsodium instead of built-in tweetnacl [default=no]])]) 542 543AS_IF([test "x$with_libsodium" = "xyes"], [ 544 PKG_CHECK_MODULES([sodium], [libsodium], [libsodium_found=yes], [ 545 AC_MSG_ERROR(libsodium is not installed. Install it, then run configure again) 546 ]) 547]) 548 549AC_ARG_ENABLE([curve], 550 [AS_HELP_STRING([--disable-curve], [disable CURVE security [default=no]])]) 551 552if test "x$enable_curve" = "xno"; then 553 curve_library="" 554 AC_MSG_NOTICE([CURVE security is disabled]) 555 556elif test "x$with_libsodium" = "xyes"; then 557 AC_MSG_NOTICE([Using libsodium for CURVE security]) 558 AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption]) 559 AC_DEFINE(ZMQ_USE_LIBSODIUM, [1], [Using libsodium for curve encryption]) 560 curve_library="libsodium" 561 enable_curve="yes" 562 563 case "${host_os}" in 564 *solaris*) 565 dnl On Solaris, libsodium depends on libssp 566 LDFLAGS="-lssp $LDFLAGS" 567 libzmq_pedantic="no" 568 libzmq_werror="no" 569 ;; 570 *darwin*) 571 dnl On Darwin, building with libsodium causes 572 dnl macro redefinition warnings 573 libzmq_werror="no" 574 ;; 575 esac 576 577 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libsodium" 578else 579 AC_MSG_NOTICE([Using tweetnacl for CURVE security]) 580 AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption]) 581 AC_DEFINE(ZMQ_USE_TWEETNACL, [1], [Using tweetnacl for curve encryption]) 582 curve_library="tweetnacl" 583 enable_curve="yes" 584fi 585 586AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$enable_curve" = "xyes" -a "x$zmq_enable_curve_keygen" = "xyes") 587 588AM_CONDITIONAL(USE_LIBSODIUM, test "$curve_library" = "libsodium") 589AM_CONDITIONAL(USE_TWEETNACL, test "$curve_library" = "tweetnacl") 590AM_CONDITIONAL(HAVE_CURVE, test "x$curve_library" != "x") 591AM_CONDITIONAL(USE_WEPOLL, test "$poller" = "wepoll") 592 593# Check requiring packages for WebSocket 594ws_crypto_library="" 595 596AC_ARG_ENABLE([ws], 597 [AS_HELP_STRING([--enable-ws], [Enable WebSocket transport [default=state of DRAFT]])], 598 [enable_ws=$enableval], 599 [enable_ws=$enable_drafts]) 600 601AC_ARG_WITH([nss], 602 [AS_HELP_STRING([--with-nss], [use nss instead of built-in sha1 [default=no]])]) 603 604AC_ARG_WITH([tls], 605 [AS_HELP_STRING([--with-tls], [Enable TLS (WSS transport) [default=no]])]) 606 607if test "x$enable_ws" != "xno"; then 608 if test "x$with_tls" = "xyes"; then 609 PKG_CHECK_MODULES([GNUTLS], [gnutls >= 3.1.4], [ 610 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE gnutls >= 3.1.4" 611 ws_crypto_library="gnutls" 612 AC_DEFINE(ZMQ_USE_GNUTLS, [1], [Use GNUTLS for TLS]) 613 AC_DEFINE(ZMQ_HAVE_WS, [1], [Using websocket]) 614 AC_DEFINE(ZMQ_HAVE_WSS, [1], [WSS enabled]) 615 AC_MSG_NOTICE(Using gnutls) 616 ],[ 617 AC_MSG_ERROR([GnuTLS is not installed. Install it, then run configure again]) 618 ]) 619 elif test "x$with_nss" = "xyes"; then 620 PKG_CHECK_MODULES([NSS3], [nss], [ 621 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE nss" 622 AC_DEFINE(ZMQ_USE_NSS, [1], [Using NSS]) 623 AC_DEFINE(ZMQ_HAVE_WS, [1], [Using websocket]) 624 ws_crypto_library="nss" 625 AC_MSG_NOTICE(Using NSS) 626 ], [ 627 AC_MSG_ERROR([nss is not installed. Install it, then run configure again]) 628 ]) 629 else 630 AC_DEFINE(ZMQ_HAVE_WS, [1], [Using websocket]) 631 AC_DEFINE(ZMQ_USE_BUILTIN_SHA1, [1], [Using built-in sha1]) 632 AC_MSG_NOTICE(Using builting SHA1) 633 ws_crypto_library="builtin" 634 fi 635fi 636 637AM_CONDITIONAL(HAVE_WS, test "x$ws_crypto_library" != "x") 638AM_CONDITIONAL(USE_NSS, test "x$ws_crypto_library" = "xnss") 639AM_CONDITIONAL(USE_BUILTIN_SHA1, test "x$ws_crypto_library" = "xbuiltin") 640AM_CONDITIONAL(USE_GNUTLS, test "x$ws_crypto_library" = "xgnutls") 641AM_CONDITIONAL(HAVE_WSS, test "x$ws_crypto_library" = "xgnutls") 642 643# build using pgm 644have_pgm_library="no" 645 646AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm], 647 [build libzmq with PGM extension. Requires pkg-config [default=no]])], 648 [with_pgm_ext=$withval], 649 [with_pgm_ext=no]) 650 651# conditionally require pgm package 652if test "x$with_pgm_ext" != "xno"; then 653 PKG_CHECK_MODULES([pgm], [openpgm-5.3 >= 5.3], [ 654 have_pgm_library="yes" 655 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE openpgm-5.3 >= 5.3" 656 ], [ 657 PKG_CHECK_MODULES([pgm], [openpgm-5.2 >= 5.2], [ 658 have_pgm_library="yes" 659 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE openpgm-5.2 >= 5.2" 660 ], [ 661 PKG_CHECK_MODULES([pgm], [openpgm-5.1 >= 5.1], [ 662 have_pgm_library="yes" 663 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE openpgm-5.1 >= 5.1" 664 ]) 665 ]) 666 ]) 667fi 668 669if test "x$have_pgm_library" = "xyes"; then 670 AC_DEFINE(ZMQ_HAVE_OPENPGM, [1], [Have OpenPGM extension]) 671fi 672 673AM_CONDITIONAL(HAVE_PGM, test "x$have_pgm_library" = "xyes") 674 675 676# This uses "--with-norm" to point to the "norm" directory 677# for "norm/include" and "norm/lib" 678#(if "--with-norm=yes" is given, then assume installed on system) 679AC_ARG_WITH([norm], 680 [AS_HELP_STRING([--with-norm], 681 [build libzmq with NORM protocol extension, optionally specifying norm path [default=no]])], 682 [with_norm_ext=$withval], 683 [with_norm_ext=no]) 684 685AC_MSG_CHECKING("with_norm_ext = ${with_norm_ext}") 686 687if test "x$with_norm_ext" != "xno"; then 688 PKG_CHECK_MODULES([norm], [norm], [ 689 have_norm_library="yes" 690 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE norm" 691 ], [ 692 AC_MSG_RESULT([yes]) 693 694 norm_LIBS="" 695 norm_CFLAGS="" 696 if test "x$with_norm_ext" != "xyes"; then 697 norm_path="${with_norm_ext}" 698 norm_CFLAGS="${norm_CFLAGS} -I${norm_path}/include" 699 norm_LIBS="${norm_LIBS} -L${norm_path}/lib" 700 fi 701 norm_LIBS="${norm_LIBS} -lnorm" 702 have_norm_library="yes" 703 PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE $norm_LIBS" 704 AC_SUBST(norm_LIBS) 705 AC_SUBST(norm_CFLAGS) 706 ]) 707else 708 AC_MSG_RESULT([no]) 709fi 710if test "x$have_norm_library" = "xyes"; then 711 AC_DEFINE(ZMQ_HAVE_NORM, [1], [Have NORM protocol extension]) 712fi 713AM_CONDITIONAL(HAVE_NORM, test "x$have_norm_library" = "xyes") 714 715# build using vmci 716have_vmci_library="no" 717 718AC_ARG_WITH([vmci], [AS_HELP_STRING([--with-vmci], 719 [build libzmq with VMCI transport [default=no]])], 720 [have_vmci_ext=$withval], 721 [have_vmci_ext=no]) 722 723if test "x$have_vmci_ext" != "xno"; then 724 AC_DEFINE(ZMQ_HAVE_VMCI, 1, [Have VMCI transport]) 725 726 if test "x$have_vmci_ext" != "xyes"; then 727 vmci_path="${have_vmci_ext}" 728 LIBZMQ_VMCI_CXXFLAGS="-I${vmci_path}" 729 LIBZMQ_VMCI_LDFLAGS="-I${vmci_path}" 730 LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_VMCI_CXXFLAGS} ${LIBZMQ_EXTRA_CXXFLAGS}" 731 LIBZMQ_EXTRA_LDFLAGS="${LIBZMQ_VMCI_LDFLAGS} ${LIBZMQ_EXTRA_LDFLAGS}" 732 fi 733fi 734 735AM_CONDITIONAL(HAVE_VMCI, test "x$have_vmci_ext" != "xno") 736 737# Set -Wall, -Werror and -pedantic 738AC_LANG_PUSH([C++]) 739 740# Check how to enable -Wall 741LIBZMQ_LANG_WALL([CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_wall_flag $CXXFLAGS"]) 742 743if test "x$libzmq_werror" = "xyes" -a "x$libzmq_cv_[]_AC_LANG_ABBREV[]_sun_studio_compiler" != "xyes"; then 744 LIBZMQ_LANG_WERROR([CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_werror_flag $CXXFLAGS"]) 745fi 746 747if test "x$libzmq_pedantic" = "xyes"; then 748 LIBZMQ_LANG_STRICT([CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CXXFLAGS"]) 749fi 750AC_LANG_POP([C++]) 751 752AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes") 753AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw" = "xyes") 754AM_CONDITIONAL(ON_CYGWIN, test "x$libzmq_on_cygwin" = "xyes") 755AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes") 756AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes") 757AM_CONDITIONAL(ON_GNU, test "x$libzmq_on_gnu" = "xyes") 758 759# Check for __atomic_Xxx compiler intrinsics 760AC_LANG_PUSH([C++]) 761AX_CHECK_COMPILE_FLAG([-Watomic-alignment], 762 [CXXFLAGS+=" -Wno-atomic-alignment"], 763 [], 764 [-Werror]) 765LIBZMQ_CHECK_ATOMIC_INTRINSICS([ 766 AC_DEFINE([ZMQ_HAVE_ATOMIC_INTRINSICS], 767 [1], 768 [Whether compiler has __atomic_Xxx intrinsics.]) 769 ]) 770AC_LANG_POP([C++]) 771 772# Checks for library functions. 773AC_TYPE_SIGNAL 774AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork mkdtemp accept4) 775AC_CHECK_HEADERS([alloca.h]) 776 777# string.h doesn't seem to be included by default in Fedora 30 778AC_MSG_CHECKING([whether strnlen is available]) 779AC_COMPILE_IFELSE( 780 [AC_LANG_PROGRAM( 781 [[#include <string.h>]], 782 [[size_t bar = strnlen ("foo", 1); (void)bar; return 0;]]) 783 ],[ 784 AC_MSG_RESULT([yes]) 785 AC_DEFINE(HAVE_STRNLEN, [1], 786 [strnlen is available]) 787 ],[ 788 AC_MSG_RESULT([no]) 789]) 790 791AC_MSG_CHECKING([whether if_nametoindex is available]) 792AC_COMPILE_IFELSE( 793 [AC_LANG_PROGRAM([[ 794 #ifdef _WIN32 795 #include <iphlpapi.h> 796 #else 797 #include <sys/types.h> 798 #include <sys/socket.h> 799 #include <net/if.h> 800 #endif]], [[ 801 if_nametoindex(""); 802 ]])],[ 803 AC_MSG_RESULT([yes]) 804 AC_DEFINE(HAVE_IF_NAMETOINDEX, [1], 805 [if_nametoindex is available]) 806 ],[ 807 AC_MSG_RESULT([no]) 808]) 809 810AC_ARG_ENABLE([libbsd], 811 [AS_HELP_STRING([--enable-libbsd], 812 [enable libbsd [default=auto]])], 813 [enable_libbsd=$enableval], 814 [enable_libbsd="auto"]) 815 816if test "x$enable_libbsd" != "xno"; then 817 PKG_CHECK_MODULES(LIBBSD, [libbsd], 818 [ 819 AC_DEFINE(ZMQ_HAVE_LIBBSD, 1, [The libbsd library is to be used]) 820 AC_SUBST([LIBBSD_CFLAGS]) 821 AC_SUBST([LIBBSD_LIBS]) 822 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libbsd" 823 found_libbsd="yes" 824 ], 825 [ 826 found_libbsd="no" 827 if test "x$enable_libbsd" = "xyes"; then 828 AC_MSG_ERROR([Cannot find libbsd]) 829 else 830 AC_MSG_WARN([Cannot find libbsd]) 831 fi 832 ]) 833fi 834AC_MSG_CHECKING([whether strlcpy is available]) 835AC_COMPILE_IFELSE( 836 [AC_LANG_PROGRAM( 837 [[#include <string.h>]], 838 [[char buf [100]; size_t bar = strlcpy (buf, "foo", 100); (void)bar; return 0;]]) 839 ],[ 840 AC_MSG_RESULT([yes]) 841 AC_DEFINE(ZMQ_HAVE_STRLCPY, [1], 842 [strlcpy is available]) 843 ],[ 844 AC_MSG_RESULT([no]) 845]) 846 847# pthread_setname is non-posix, and there are at least 4 different implementations 848AC_MSG_CHECKING([whether signature of pthread_setname_np() has 1 argument]) 849AC_COMPILE_IFELSE( 850 [AC_LANG_PROGRAM( 851 [[#include <pthread.h>]], 852 [[pthread_setname_np ("foo"); return 0;]]) 853 ],[ 854 AC_MSG_RESULT([yes]) 855 AC_DEFINE(ZMQ_HAVE_PTHREAD_SETNAME_1, [1], 856 [Whether pthread_setname_np() has 1 argument]) 857 ],[ 858 AC_MSG_RESULT([no]) 859]) 860AC_MSG_CHECKING([whether signature of pthread_setname_np() has 2 arguments]) 861AC_COMPILE_IFELSE( 862 [AC_LANG_PROGRAM( 863 [[#include <pthread.h>]], 864 [[pthread_setname_np (pthread_self (), "foo"); return 0;]]) 865 ],[ 866 AC_MSG_RESULT([yes]) 867 AC_DEFINE(ZMQ_HAVE_PTHREAD_SETNAME_2, [1], 868 [Whether pthread_setname_np() has 2 arguments]) 869 ],[ 870 AC_MSG_RESULT([no]) 871]) 872AC_MSG_CHECKING([whether signature of pthread_setname_np() has 3 arguments]) 873AC_COMPILE_IFELSE( 874 [AC_LANG_PROGRAM( 875 [[#include <pthread.h>]], 876 [[pthread_setname_np (pthread_self(), "foo", (void *)0); return 0;]]) 877 ],[ 878 AC_MSG_RESULT([yes]) 879 AC_DEFINE(ZMQ_HAVE_PTHREAD_SETNAME_3, [1], 880 [Whether pthread_setname_np() has 3 arguments]) 881 ],[ 882 AC_MSG_RESULT([no]) 883]) 884AC_MSG_CHECKING([whether pthread_set_name_np() exists]) 885AC_COMPILE_IFELSE( 886 [AC_LANG_PROGRAM( 887 [[#include <pthread.h>]], 888 [[pthread_set_name_np (pthread_self(), "foo"); return 0;]]) 889 ],[ 890 AC_MSG_RESULT([yes]) 891 AC_DEFINE(ZMQ_HAVE_PTHREAD_SET_NAME, [1], 892 [Whether pthread_set_name_np() exists]) 893 ],[ 894 AC_MSG_RESULT([no]) 895]) 896 897 898# pthread_setaffinity_np is non-posix: 899AC_MSG_CHECKING([whether pthread_setaffinity_np() exists]) 900AC_COMPILE_IFELSE( 901 [AC_LANG_PROGRAM( 902 [[#include <pthread.h>]], 903 [[cpu_set_t test; pthread_setaffinity_np (pthread_self(), sizeof(cpu_set_t), &test); return 0;]]) 904 ],[ 905 AC_MSG_RESULT([yes]) 906 AC_DEFINE(ZMQ_HAVE_PTHREAD_SET_AFFINITY, [1], 907 [Whether pthread_setaffinity_np() exists]) 908 ],[ 909 AC_MSG_RESULT([no]) 910]) 911 912 913LIBZMQ_CHECK_SOCK_CLOEXEC([ 914 AC_DEFINE([ZMQ_HAVE_SOCK_CLOEXEC], 915 [1], 916 [Whether SOCK_CLOEXEC is defined and functioning.]) 917 ]) 918 919LIBZMQ_CHECK_O_CLOEXEC([ 920 AC_DEFINE([ZMQ_HAVE_O_CLOEXEC], 921 [1], 922 [Whether O_CLOEXEC is defined and functioning.]) 923 ]) 924 925LIBZMQ_CHECK_SO_BINDTODEVICE([ 926 AC_DEFINE([ZMQ_HAVE_SO_BINDTODEVICE], 927 [1], 928 [Whether SO_BINDTODEVICE is supported.]) 929 ]) 930 931# TCP keep-alives Checks. 932LIBZMQ_CHECK_SO_KEEPALIVE([ 933 AC_DEFINE([ZMQ_HAVE_SO_KEEPALIVE], 934 [1], 935 [Whether SO_KEEPALIVE is supported.]) 936 ]) 937 938LIBZMQ_CHECK_TCP_KEEPCNT([ 939 AC_DEFINE([ZMQ_HAVE_TCP_KEEPCNT], 940 [1], 941 [Whether TCP_KEEPCNT is supported.]) 942 ]) 943 944LIBZMQ_CHECK_TCP_KEEPIDLE([ 945 AC_DEFINE([ZMQ_HAVE_TCP_KEEPIDLE], 946 [1], 947 [Whether TCP_KEEPIDLE is supported.]) 948 ]) 949 950LIBZMQ_CHECK_TCP_KEEPINTVL([ 951 AC_DEFINE([ZMQ_HAVE_TCP_KEEPINTVL], 952 [1], 953 [Whether TCP_KEEPINTVL is supported.]) 954 ]) 955 956LIBZMQ_CHECK_TCP_KEEPALIVE([ 957 AC_DEFINE([ZMQ_HAVE_TCP_KEEPALIVE], 958 [1], 959 [Whether TCP_KEEPALIVE is supported.]) 960 ]) 961 962LIBZMQ_CHECK_SO_PRIORITY([ 963 AC_DEFINE([ZMQ_HAVE_SO_PRIORITY], 964 [1], 965 [Whether SO_PRIORITY is supported.]) 966 ]) 967 968LIBZMQ_CHECK_GETRANDOM([ 969 AC_DEFINE([ZMQ_HAVE_GETRANDOM], 970 [1], 971 [Whether getrandom is supported.]) 972 ]) 973 974AM_CONDITIONAL(HAVE_FORK, test "x$ac_cv_func_fork" = "xyes") 975 976if test "x$cross_compiling" = "xyes"; then 977 # Enable draft by default when cross-compiling 978 defaultval=yes 979else 980 # enable draft API by default if we're in a git repository 981 # else disable it by default; then allow --enable-drafts=yes/no override 982 AC_CHECK_FILE($srcdir/.git, [defaultval=yes], [defaultval=no]) 983fi 984 985AC_ARG_ENABLE([drafts], 986 AS_HELP_STRING([--enable-drafts], 987 [Build and install draft classes and methods [default=yes]]), 988 [enable_drafts=$enableval], 989 [enable_drafts=$defaultval]) 990 991AM_CONDITIONAL([ENABLE_DRAFTS], [test x$enable_drafts != xno]) 992 993if test "x$enable_drafts" = "xyes"; then 994 AC_MSG_NOTICE([Building stable and legacy API + draft API]) 995 AC_DEFINE(ZMQ_BUILD_DRAFT_API, 1, [Provide draft classes and methods]) 996 AC_SUBST(pkg_config_defines, "-DZMQ_BUILD_DRAFT_API=1") 997else 998 AC_MSG_NOTICE([Building stable and legacy API (no draft API)]) 999 AC_SUBST(pkg_config_defines, "") 1000fi 1001 1002AC_ARG_ENABLE([libunwind], 1003 [AS_HELP_STRING([--enable-libunwind], 1004 [enable libunwind [default=auto]])], 1005 [enable_libunwind=$enableval], 1006 [enable_libunwind="auto"]) 1007 1008if test "x$enable_libunwind" != "xno"; then 1009 PKG_CHECK_MODULES(LIBUNWIND, [libunwind], 1010 [ 1011 AC_DEFINE(HAVE_LIBUNWIND, 1, [The libunwind library is to be used]) 1012 AC_SUBST([LIBUNWIND_CFLAGS]) 1013 AC_SUBST([LIBUNWIND_LIBS]) 1014 AC_CHECK_LIB([dl], [dladdr], [ 1015 PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -ldl" 1016 LIBS="-ldl $LIBS" 1017 ], [ 1018 AC_CHECK_LIB([dld], [dladdr], [ 1019 PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -ldld" 1020 LIBS="-ldld $LIBS" 1021 ]) 1022 ]) 1023 PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libunwind" 1024 ], 1025 [ 1026 if test "x$enable_libunwind" = "xyes"; then 1027 AC_MSG_ERROR([Cannot find libunwind]) 1028 else 1029 AC_MSG_WARN([Cannot find libunwind]) 1030 fi 1031 ]) 1032fi 1033 1034AC_ARG_ENABLE([radix-tree], 1035 AS_HELP_STRING([--enable-radix-tree], 1036 [Use radix tree implementation to manage subscriptions [default=DRAFT]]), 1037 [radix_tree=$enableval], 1038 [radix_tree=$enable_drafts]) 1039 1040AM_CONDITIONAL([ENABLE_RADIX_TREE], [test x$radix_tree != xno]) 1041 1042if test "x$radix_tree" = "xyes"; then 1043 AC_MSG_NOTICE([Using radix tree implementation to manage subscriptions]) 1044 AC_DEFINE(ZMQ_USE_RADIX_TREE, 1, [Use radix tree implementation to manage subscriptions]) 1045else 1046 AC_MSG_NOTICE([Using mtree implementation to manage subscriptions]) 1047fi 1048 1049# See if clang-format is in PATH; the result unblocks the relevant recipes 1050WITH_CLANG_FORMAT="" 1051AS_IF([test x"$CLANG_FORMAT" = x], 1052 [AC_PATH_PROG([CLANG_FORMAT], [clang-format], [])], 1053 [AC_CHECK_PROG([WITH_CLANG_FORMAT], [$CLANG_FORMAT], [true], [fail])]) 1054AS_IF([test x"$CLANG_FORMAT" != x && test x"$WITH_CLANG_FORMAT" = x], 1055 [AS_IF([test -x "$CLANG_FORMAT"], 1056 [WITH_CLANG_FORMAT=true], 1057 [AC_CHECK_PROG([WITH_CLANG_FORMAT], [$CLANG_FORMAT], [true], [false])])]) 1058AS_IF([test "$WITH_CLANG_FORMAT" = fail], 1059 [AC_MSG_ERROR([Caller explicitly referenced CLANG_FORMAT=$CLANG_FORMAT which was not found])]) 1060AM_CONDITIONAL([WITH_CLANG_FORMAT], [$WITH_CLANG_FORMAT]) 1061 1062# unittests will not build without the static libzmq.a 1063AM_CONDITIONAL(ENABLE_STATIC, test "x$enable_static" = "xyes") 1064 1065# build using a fuzzing engine - fuzzers will be built separately and statically 1066AC_ARG_WITH([fuzzing-engine], [AS_HELP_STRING([--with-fuzzing-engine], 1067 [build libzmq with an exernal fuzzing engine [default=no]])], 1068 [have_fuzzing_engine_ext=$withval], 1069 [have_fuzzing_engine_ext=no]) 1070AC_ARG_WITH([fuzzing-installdir], 1071 AS_HELP_STRING([--with-fuzzing-installdir=PATH], 1072 [Path where to install fuzzer binaries]), 1073 [fuzzing_installdir="$withval"]) 1074 1075if test "x$have_fuzzing_engine_ext" != "xno" && test "x$fuzzing_installdir" != "x" && test "x$enable_static" = "xyes"; then 1076 FUZZING_ENGINE_LIB="${have_fuzzing_engine_ext}" 1077 FUZZING_INSTALLDIR="${fuzzing_installdir}" 1078 AC_SUBST(FUZZING_ENGINE_LIB) 1079 AC_SUBST(FUZZING_INSTALLDIR) 1080 AC_DEFINE(ZMQ_USE_FUZZING_ENGINE, 1, [fuzz tests will be built with fuzzing engine]) 1081fi 1082AM_CONDITIONAL(FUZZING_ENGINE_LIB, test "x$FUZZING_ENGINE_LIB" != "x") 1083 1084# clang 6 has a warning that does not make sense on multi-platform code 1085AC_LANG_PUSH([C]) 1086AX_CHECK_COMPILE_FLAG([-Wtautological-constant-compare], 1087 [CFLAGS+=" -Wno-tautological-constant-compare"], 1088 [], 1089 [-Werror]) 1090AC_LANG_POP([C]) 1091AX_CHECK_COMPILE_FLAG([-Wtautological-constant-compare], 1092 [CXXFLAGS+=" -Wno-tautological-constant-compare"], 1093 [], 1094 [-Werror]) 1095 1096# LTO is enabled by default on SUSE Tumbleweed and RPM lint generates an error if 1097# the flag is not used to compile archives: 1098# E: lto-no-text-in-archive 1099AC_LANG_PUSH([C]) 1100AX_CHECK_COMPILE_FLAG([-ffat-lto-objects], 1101 [CFLAGS+=" -ffat-lto-objects"], 1102 [], 1103 [-Werror]) 1104AC_LANG_POP([C]) 1105AX_CHECK_COMPILE_FLAG([-ffat-lto-objects], 1106 [CXXFLAGS+=" -ffat-lto-objects"], 1107 [], 1108 [-Werror]) 1109 1110# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS 1111AC_SUBST(LIBZMQ_EXTRA_CFLAGS) 1112AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS) 1113AC_SUBST(LIBZMQ_EXTRA_LDFLAGS) 1114 1115AC_SUBST(LIBZMQ_VMCI_CXXFLAGS) 1116AC_SUBST(LIBZMQ_VMCI_LDFLAGS) 1117 1118AC_SUBST(pkg_config_libs_private, $PKGCFG_LIBS_PRIVATE) 1119AC_SUBST(pkg_config_names_private, $PKGCFG_NAMES_PRIVATE) 1120 1121# set pkgconfigdir, allow override 1122AC_ARG_WITH([pkgconfigdir], 1123 AS_HELP_STRING([--with-pkgconfigdir=PATH], 1124 [Path to the pkgconfig directory [[LIBDIR/pkgconfig]]]), 1125 [pkgconfigdir="$withval"], 1126 [pkgconfigdir='${libdir}/pkgconfig']) 1127AC_SUBST([pkgconfigdir]) 1128 1129AC_CONFIG_FILES([ \ 1130 Makefile \ 1131 src/libzmq.pc \ 1132 doc/Makefile \ 1133 builds/Makefile \ 1134 builds/deprecated-msvc/Makefile]) 1135 1136AC_OUTPUT 1137