2009-07-29 12:07:54 +02:00
|
|
|
# -*- Autoconf -*-
|
|
|
|
# Process this file with autoconf to produce a configure script.
|
|
|
|
AC_PREREQ(2.61)
|
2010-02-11 17:49:40 +01:00
|
|
|
#
|
2010-10-15 15:05:54 +02:00
|
|
|
# The 0MQ version number is extracted from include/zmq.h using
|
|
|
|
# the version.sh script. Hence, it should be updated there.
|
2010-02-11 17:49:40 +01:00
|
|
|
# The version in git should reflect the *next* version planned.
|
|
|
|
#
|
2011-02-07 15:06:20 +01:00
|
|
|
AC_INIT([zeromq],[m4_esyscmd([./version.sh])],[zeromq-dev@lists.zeromq.org])
|
2010-02-11 17:49:40 +01:00
|
|
|
|
2009-07-29 12:07:54 +02:00
|
|
|
AC_CONFIG_AUX_DIR(config)
|
2010-01-05 13:46:35 +01:00
|
|
|
AC_CONFIG_MACRO_DIR(config)
|
2013-01-17 16:00:38 -08:00
|
|
|
AC_CONFIG_HEADERS([src/platform.hpp])
|
2014-10-13 19:10:36 -07:00
|
|
|
AM_INIT_AUTOMAKE(foreign subdir-objects tar-ustar dist-zip)
|
2019-09-18 16:20:22 +01:00
|
|
|
# Allow "configure --disable-maintainer-mode" to disable timestamp checking
|
|
|
|
AM_MAINTAINER_MODE([enable])
|
2014-10-13 19:10:36 -07:00
|
|
|
|
2016-02-19 21:02:58 +00:00
|
|
|
m4_pattern_allow([AC_PROG_CC_C99])
|
|
|
|
m4_include([m4/ax_check_compile_flag.m4])
|
|
|
|
m4_include([m4/ax_cxx_compile_stdcxx_11.m4])
|
2016-03-04 23:07:13 +00:00
|
|
|
m4_include([m4/ax_code_coverage.m4])
|
2016-02-05 15:31:14 +00:00
|
|
|
m4_include([m4/ax_valgrind_check.m4])
|
2018-12-14 18:48:39 +01:00
|
|
|
m4_include([m4/ax_check_vscript.m4])
|
2019-01-19 20:50:26 +00:00
|
|
|
m4_include([m4/ax_func_posix_memalign.m4])
|
2011-03-31 18:42:09 +02:00
|
|
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
2009-07-29 12:07:54 +02:00
|
|
|
|
2010-10-11 16:32:27 +02:00
|
|
|
# This lets us use PACKAGE_VERSION in Makefiles
|
|
|
|
AC_SUBST(PACKAGE_VERSION)
|
|
|
|
|
2010-02-11 17:49:40 +01:00
|
|
|
# Libtool -version-info (ABI version)
|
|
|
|
#
|
2010-12-01 11:11:25 +01:00
|
|
|
# Don't change this unless you know exactly what you're doing and have read and
|
|
|
|
# understand:
|
2010-02-11 17:49:40 +01:00
|
|
|
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
|
|
|
#
|
2010-12-01 11:11:25 +01:00
|
|
|
# Changes:
|
|
|
|
#
|
2011-11-09 15:39:33 +01:00
|
|
|
# ZeroMQ versions prior to 2.1.0 use 0:0:0 (undefined)
|
|
|
|
# ZeroMQ versions 2.1.x: 1:0:0 (ABI version 1)
|
|
|
|
# ZeroMQ version 3.0: 2:0:0 (ABI version 2)
|
|
|
|
# ZeroMQ version 3.1: 3:0:0 (ABI version 3)
|
2014-05-01 16:12:51 +02:00
|
|
|
# ZeroMQ version 4.0: 4:0:0 (ABI version 4)
|
2015-06-11 23:53:23 +02:00
|
|
|
# ZeroMQ version 4.1: 5:0:0 (ABI version 5)
|
2016-11-01 13:18:21 +00:00
|
|
|
# ZeroMQ version 4.2.0: 6:0:1 (ABI version 5)
|
2016-12-31 15:55:48 +01:00
|
|
|
# ZeroMQ version 4.2.1: 6:1:1 (ABI version 5)
|
2016-12-31 16:26:41 +01:00
|
|
|
# ZeroMQ version 4.2.2: 6:2:1 (ABI version 5)
|
2017-02-18 17:56:55 +00:00
|
|
|
# ZeroMQ version 4.2.3: 6:3:1 (ABI version 5)
|
2017-12-13 13:13:50 +00:00
|
|
|
# ZeroMQ version 4.2.4: 6:4:1 (ABI version 5)
|
2018-03-23 11:18:28 +00:00
|
|
|
# ZeroMQ version 4.2.5: 6:5:1 (ABI version 5)
|
2018-11-28 20:06:23 +00:00
|
|
|
# ZeroMQ version 4.3.0: 7:0:2 (ABI version 5)
|
|
|
|
# ZeroMQ version 4.3.1: 7:1:2 (ABI version 5)
|
2019-01-12 16:10:36 +00:00
|
|
|
# ZeroMQ version 4.3.2: 7:2:2 (ABI version 5)
|
2019-07-02 23:43:07 +01:00
|
|
|
# ZeroMQ version 4.3.3: 7:3:2 (ABI version 5)
|
2010-12-01 11:11:25 +01:00
|
|
|
#
|
|
|
|
# libzmq -version-info current:revision:age
|
2019-07-02 23:43:07 +01:00
|
|
|
LTVER="7:3:2"
|
2009-09-08 14:54:04 +02:00
|
|
|
AC_SUBST(LTVER)
|
|
|
|
|
2010-12-18 12:13:10 +01:00
|
|
|
# Take a copy of original flags
|
|
|
|
ZMQ_ORIG_CFLAGS="${CFLAGS:-none}"
|
|
|
|
ZMQ_ORIG_CPPFLAGS="${CPPFLAGS:-none}"
|
|
|
|
ZMQ_ORIG_CXXFLAGS="${CXXFLAGS:-none}"
|
|
|
|
|
2009-07-29 12:07:54 +02:00
|
|
|
# Checks for programs.
|
2010-04-10 16:18:34 +02:00
|
|
|
AC_PROG_CC
|
2016-02-19 19:25:32 +00:00
|
|
|
AX_CHECK_COMPILE_FLAG([-std=gnu11], [CFLAGS+=" -std=gnu11"], [AC_PROG_CC_C99])
|
2009-07-29 12:07:54 +02:00
|
|
|
AC_PROG_CXX
|
2016-03-04 23:07:13 +00:00
|
|
|
AX_CODE_COVERAGE
|
2010-04-10 16:18:34 +02:00
|
|
|
AM_PROG_CC_C_O
|
2009-09-08 14:54:04 +02:00
|
|
|
AC_PROG_SED
|
|
|
|
AC_PROG_AWK
|
2014-10-16 00:37:57 -07:00
|
|
|
PKG_PROG_PKG_CONFIG
|
2014-10-21 22:24:16 +02:00
|
|
|
m4_pattern_forbid([^PKG_[A-Z_]+$], [missing some pkg-config macros (pkg-config package)])
|
2009-07-29 12:07:54 +02:00
|
|
|
|
2010-11-17 15:06:51 +01:00
|
|
|
# Libtool configuration for different targets. See acinclude.m4
|
2016-02-11 16:52:41 +01:00
|
|
|
AC_ARG_VAR([XMLTO], [path to xmlto command])
|
2011-03-31 18:42:09 +02:00
|
|
|
AC_PATH_PROG([XMLTO], [xmlto])
|
2016-02-11 16:52:41 +01:00
|
|
|
AC_ARG_VAR([ASCIIDOC], [path to asciidoc command])
|
2011-03-31 18:42:09 +02:00
|
|
|
AC_PATH_PROG([ASCIIDOC], [asciidoc])
|
2011-04-02 22:50:46 +02:00
|
|
|
LIBZMQ_CONFIG_LIBTOOL
|
2010-11-18 11:51:27 +01:00
|
|
|
AC_LIBTOOL_WIN32_DLL
|
|
|
|
AC_PROG_LIBTOOL
|
2016-02-05 15:31:14 +00:00
|
|
|
AX_VALGRIND_CHECK
|
2018-12-14 18:48:39 +01:00
|
|
|
AX_CHECK_VSCRIPT
|
2019-01-19 20:50:26 +00:00
|
|
|
AX_FUNC_POSIX_MEMALIGN
|
2010-11-17 15:06:51 +01:00
|
|
|
|
2018-11-09 18:54:46 +00:00
|
|
|
AC_ARG_ENABLE([force-CXX98-compat],
|
|
|
|
[AS_HELP_STRING([--enable-force-CXX98-compat], [force C++98 build [default=disabled]])])
|
|
|
|
if test "x$enable_force_CXX98_compat" = "xyes"; then
|
|
|
|
AC_LANG_PUSH([C++])
|
|
|
|
AX_CHECK_COMPILE_FLAG([-std=gnu++98], [CXXFLAGS+=" -std=gnu++98"], [])
|
|
|
|
AX_CHECK_COMPILE_FLAG([-Wc++98-compat -Wc++98-compat-pedantic], [CXXFLAGS+=" -Wc++98-compat"], [])
|
|
|
|
AC_LANG_POP([C++])
|
|
|
|
else
|
|
|
|
AX_CXX_COMPILE_STDCXX_11([ext], [optional])
|
|
|
|
fi
|
|
|
|
|
2010-12-01 10:33:07 +01:00
|
|
|
# Check whether to build a with debug symbols
|
2011-04-02 22:50:46 +02:00
|
|
|
LIBZMQ_CHECK_ENABLE_DEBUG
|
2010-04-10 16:18:34 +02:00
|
|
|
|
2016-05-09 14:24:12 +01:00
|
|
|
# Check whether to enable code coverage
|
2011-04-02 22:50:46 +02:00
|
|
|
LIBZMQ_WITH_GCOV
|
2011-04-02 22:49:41 +02:00
|
|
|
|
2013-11-01 14:59:31 +01:00
|
|
|
AC_MSG_CHECKING([if TIPC is available and supports nonblocking connect])
|
2014-10-13 19:10:36 -07:00
|
|
|
|
|
|
|
AC_RUN_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM([[
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <sys/socket.h>
|
|
|
|
#include <linux/tipc.h>
|
|
|
|
]],[[
|
|
|
|
struct sockaddr_tipc topsrv;
|
|
|
|
int sd = socket(AF_TIPC, SOCK_SEQPACKET, 0);
|
|
|
|
memset(&topsrv, 0, sizeof(topsrv));
|
|
|
|
topsrv.family = AF_TIPC;
|
|
|
|
topsrv.addrtype = TIPC_ADDR_NAME;
|
2018-11-28 19:35:04 +00:00
|
|
|
topsrv.addr.name.domain = tipc_addr (10, 10, 10);
|
2014-10-13 19:10:36 -07:00
|
|
|
topsrv.addr.name.name.type = TIPC_TOP_SRV;
|
|
|
|
topsrv.addr.name.name.instance = TIPC_TOP_SRV;
|
|
|
|
fcntl(sd, F_SETFL, O_NONBLOCK);
|
|
|
|
]])
|
|
|
|
],
|
|
|
|
[libzmq_tipc_support=yes],
|
|
|
|
[libzmq_tipc_support=no],
|
|
|
|
[libzmq_tipc_support=no])
|
|
|
|
|
2013-11-01 14:59:31 +01:00
|
|
|
AC_MSG_RESULT([$libzmq_tipc_support])
|
|
|
|
|
2016-02-13 11:56:47 +01:00
|
|
|
AC_ARG_ENABLE([pedantic],
|
|
|
|
[AS_HELP_STRING([--disable-pedantic], [disable pedantic compiler checks [default=enabled]])],
|
|
|
|
[libzmq_pedantic=$enableval], [libzmq_pedantic=yes])
|
2009-09-10 11:21:05 +02:00
|
|
|
|
Problem: API violations are treated as recoverable errors
The example is applications passing invalid arguments to a socket option
and then failing to check the return code. The results can be very hard
to diagnose. Here are some threads that show the pain this causes:
* https://github.com/zeromq/zyre/issues/179
* http://lists.zeromq.org/pipermail/zeromq-dev/2014-June/026388.html
One common argument is that a library should never assert, and should
pass errors back to the calling application. The counter argument is
that when an application is broken enough to pass garbage to libzmq,
it cannot be trusted to handle the resulting errors properly. Empirical
evidence from CZMQ, where we systematically assert on bad arguments, is
that this militant approach makes applications more, not less, robust.
I don't see any valid use cases for returning errors on bad arguments,
with one exception: zmq_setsockopt can be used to probe whether libzmq
was e.g. built with CURVE security. I'd argue that it's nasty to use a
side effect like this. If apps need to probe how libzmq was built, this
should be done explicitly, and for ALL build options, not just CURVE.
There are/were no libzmq test cases that check the return code for an
invalid option.
For now I've enabled militant assertions using --with-militant at
configure time. However I'd like to make this the default setting.
2014-06-17 15:49:52 +02:00
|
|
|
AC_ARG_WITH([militant],
|
2014-10-13 19:10:36 -07:00
|
|
|
[AS_HELP_STRING([--with-militant],
|
2016-02-11 16:52:41 +01:00
|
|
|
[enable militant API assertions])],
|
2014-10-13 19:10:36 -07:00
|
|
|
[zmq_militant="yes"],
|
|
|
|
[])
|
Problem: API violations are treated as recoverable errors
The example is applications passing invalid arguments to a socket option
and then failing to check the return code. The results can be very hard
to diagnose. Here are some threads that show the pain this causes:
* https://github.com/zeromq/zyre/issues/179
* http://lists.zeromq.org/pipermail/zeromq-dev/2014-June/026388.html
One common argument is that a library should never assert, and should
pass errors back to the calling application. The counter argument is
that when an application is broken enough to pass garbage to libzmq,
it cannot be trusted to handle the resulting errors properly. Empirical
evidence from CZMQ, where we systematically assert on bad arguments, is
that this militant approach makes applications more, not less, robust.
I don't see any valid use cases for returning errors on bad arguments,
with one exception: zmq_setsockopt can be used to probe whether libzmq
was e.g. built with CURVE security. I'd argue that it's nasty to use a
side effect like this. If apps need to probe how libzmq was built, this
should be done explicitly, and for ALL build options, not just CURVE.
There are/were no libzmq test cases that check the return code for an
invalid option.
For now I've enabled militant assertions using --with-militant at
configure time. However I'd like to make this the default setting.
2014-06-17 15:49:52 +02:00
|
|
|
|
|
|
|
if test "x$zmq_militant" = "xyes"; then
|
|
|
|
AC_DEFINE(ZMQ_ACT_MILITANT, 1, [Enable militant API assertions])
|
|
|
|
fi
|
|
|
|
|
2020-07-07 13:19:15 +08:00
|
|
|
# Disable IPC on unsupported platforms.
|
2019-10-19 14:46:53 +02:00
|
|
|
case "${host_os}" in
|
2020-07-07 13:19:15 +08:00
|
|
|
*vxworks*|*openvms*|*mingw*)
|
2019-10-19 14:46:53 +02:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
AC_DEFINE(ZMQ_HAVE_IPC, 1, [Have AF_UNIX sockets for ipc transport])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2020-05-20 15:01:29 -04:00
|
|
|
# Data race/deadlock detection
|
|
|
|
# NOTE: Running libzmq under TSAN doesn't make much sense -- synchronization in libzmq is to some extent
|
|
|
|
# handled by the code "knowing" what threads are allowed to do, rather than by enforcing those
|
|
|
|
# restrictions, so TSAN generates a lot of (presumably) false positives from libzmq.
|
|
|
|
# The settings below are intended to enable libzmq to be built with minimal support for TSAN
|
|
|
|
# such that it can be used along with other code that is also built with TSAN.
|
|
|
|
AC_MSG_CHECKING([whether to enable TSan])
|
|
|
|
AC_ARG_ENABLE(thread-sanitizer, [AS_HELP_STRING([--enable-thread-sanitizer=yes/no],
|
|
|
|
[Build with clang Thread Sanitizer instrumentation])],
|
|
|
|
[ZMQ_TSAN="$enableval"])
|
|
|
|
|
|
|
|
if test "x${ZMQ_TSAN}" = "xyes"; then
|
|
|
|
TSAN_FLAGS="-fno-omit-frame-pointer -fsanitize=thread"
|
|
|
|
TSAN_CCFLAGS="${TSAN_CCFLAGS} -mllvm -tsan-instrument-memory-accesses=0"
|
|
|
|
TSAN_CCFLAGS="${TSAN_CCFLAGS} -mllvm -tsan-instrument-atomics=0"
|
|
|
|
TSAN_CCFLAGS="${TSAN_CCFLAGS} -mllvm -tsan-instrument-func-entry-exit=1"
|
|
|
|
CFLAGS="${CFLAGS} ${TSAN_FLAGS} ${TSAN_CCFLAGS}"
|
|
|
|
CXXFLAGS="${CXXFLAGS} ${TSAN_FLAGS} ${TSAN_CCFLAGS}"
|
|
|
|
LDFLAGS="${LDFLAGS} ${TSAN_FLAGS} -pie"
|
|
|
|
|
|
|
|
AM_CONDITIONAL(ENABLE_TSAN, true)
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
|
|
|
AM_CONDITIONAL(ENABLE_TSAN, false)
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
|
|
|
|
2017-05-01 18:06:45 +01:00
|
|
|
# Memory mis-use detection
|
|
|
|
AC_MSG_CHECKING([whether to enable ASan])
|
|
|
|
AC_ARG_ENABLE(address-sanitizer, [AS_HELP_STRING([--enable-address-sanitizer=yes/no],
|
|
|
|
[Build with GCC Address Sanitizer instrumentation])],
|
|
|
|
[ZMQ_ASAN="$enableval"])
|
|
|
|
|
2019-05-22 01:30:54 +02:00
|
|
|
if test "x${ZMQ_ASAN}" = "xyes"; then
|
2020-05-06 00:14:02 +01:00
|
|
|
CFLAGS="${CFLAGS} -fsanitize=address -fsanitize=undefined -fsanitize=leak -fno-sanitize-recover=all"
|
|
|
|
CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize=undefined -fsanitize=leak -fno-sanitize-recover=all"
|
2017-05-01 18:06:45 +01:00
|
|
|
|
|
|
|
AM_CONDITIONAL(ENABLE_ASAN, true)
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
|
|
|
AM_CONDITIONAL(ENABLE_ASAN, false)
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
Problem: API violations are treated as recoverable errors
The example is applications passing invalid arguments to a socket option
and then failing to check the return code. The results can be very hard
to diagnose. Here are some threads that show the pain this causes:
* https://github.com/zeromq/zyre/issues/179
* http://lists.zeromq.org/pipermail/zeromq-dev/2014-June/026388.html
One common argument is that a library should never assert, and should
pass errors back to the calling application. The counter argument is
that when an application is broken enough to pass garbage to libzmq,
it cannot be trusted to handle the resulting errors properly. Empirical
evidence from CZMQ, where we systematically assert on bad arguments, is
that this militant approach makes applications more, not less, robust.
I don't see any valid use cases for returning errors on bad arguments,
with one exception: zmq_setsockopt can be used to probe whether libzmq
was e.g. built with CURVE security. I'd argue that it's nasty to use a
side effect like this. If apps need to probe how libzmq was built, this
should be done explicitly, and for ALL build options, not just CURVE.
There are/were no libzmq test cases that check the return code for an
invalid option.
For now I've enabled militant assertions using --with-militant at
configure time. However I'd like to make this the default setting.
2014-06-17 15:49:52 +02:00
|
|
|
|
2020-07-21 09:26:10 +08:00
|
|
|
# By default compiling with -Werror except on OSX and Solaris when building
|
2017-11-19 13:30:14 +00:00
|
|
|
# with libsodium.
|
|
|
|
AC_ARG_ENABLE([Werror],
|
|
|
|
[AS_HELP_STRING([--disable-Werror], [disable Werror compiler flag [default=enabled]])],
|
|
|
|
[libzmq_werror=$enableval], [libzmq_werror=yes])
|
2009-09-10 11:21:05 +02:00
|
|
|
|
2010-12-07 11:14:46 +01:00
|
|
|
# By default use DSO visibility
|
2011-04-02 22:50:46 +02:00
|
|
|
libzmq_dso_visibility="yes"
|
2010-12-07 11:14:46 +01:00
|
|
|
|
2013-03-08 14:22:58 +01:00
|
|
|
# Platform specific checks
|
2016-02-03 23:51:52 +11:00
|
|
|
libzmq_on_mingw="no"
|
2014-12-29 17:39:19 -05:00
|
|
|
libzmq_on_cygwin="no"
|
2012-07-03 12:20:37 +02:00
|
|
|
libzmq_on_android="no"
|
2013-10-03 16:35:30 -07:00
|
|
|
libzmq_on_linux="no"
|
2016-01-16 02:26:20 +01:00
|
|
|
libzmq_on_gnu="no"
|
2009-10-06 12:57:24 +02:00
|
|
|
|
2016-02-13 11:56:47 +01:00
|
|
|
# Set some default features required by ZeroMQ code
|
2018-11-09 18:54:08 +00:00
|
|
|
CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS"
|
|
|
|
CXXFLAGS="-Wno-long-long $CXXFLAGS"
|
2010-02-17 15:40:26 +01:00
|
|
|
|
2016-09-27 18:39:07 +01:00
|
|
|
# Will be used to add flags to pkg-config useful when apps want to statically link
|
|
|
|
PKGCFG_LIBS_PRIVATE=""
|
2018-12-14 21:45:27 +00:00
|
|
|
PKGCFG_NAMES_PRIVATE=""
|
2016-09-27 18:39:07 +01:00
|
|
|
|
2010-12-01 10:33:07 +01:00
|
|
|
# For host type checks
|
|
|
|
AC_CANONICAL_HOST
|
|
|
|
|
2010-02-17 15:40:26 +01:00
|
|
|
# OS-specific tests
|
2009-07-29 12:07:54 +02:00
|
|
|
case "${host_os}" in
|
|
|
|
*linux*)
|
2010-10-15 10:43:22 +02:00
|
|
|
# Define on Linux to enable all library features. Define if using a gnu compiler
|
2010-12-01 10:33:07 +01:00
|
|
|
if test "x$GXX" = "xyes"; then
|
2010-10-15 10:43:22 +02:00
|
|
|
CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
|
|
|
|
fi
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS])
|
2013-10-03 16:35:30 -07:00
|
|
|
libzmq_on_linux="yes"
|
2011-08-15 19:09:04 +02:00
|
|
|
|
2013-11-01 14:59:31 +01:00
|
|
|
if test "x$libzmq_tipc_support" = "xyes"; then
|
|
|
|
AC_DEFINE(ZMQ_HAVE_TIPC, 1, [Have TIPC support])
|
|
|
|
fi
|
2011-08-15 19:09:04 +02:00
|
|
|
case "${host_os}" in
|
|
|
|
*android*)
|
|
|
|
AC_DEFINE(ZMQ_HAVE_ANDROID, 1, [Have Android OS])
|
2018-11-28 19:35:04 +00:00
|
|
|
libzmq_on_android="yes"
|
2011-08-15 19:09:04 +02:00
|
|
|
;;
|
|
|
|
esac
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
|
|
|
*solaris*)
|
2010-02-18 13:46:00 +01:00
|
|
|
# Define on Solaris to enable all library features
|
2018-11-09 18:54:08 +00:00
|
|
|
CPPFLAGS="-D_PTHREADS $CPPFLAGS"
|
|
|
|
CXXFLAGS="-Wno-sign-compare $CXXFLAGS"
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_SOLARIS, 1, [Have Solaris OS])
|
2010-11-15 17:02:36 +01:00
|
|
|
AC_CHECK_LIB(socket, socket)
|
|
|
|
AC_CHECK_LIB(nsl, gethostbyname)
|
2010-02-18 19:27:35 +01:00
|
|
|
AC_MSG_CHECKING([whether atomic operations can be used])
|
2009-07-29 12:07:54 +02:00
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
|
|
[[#include <atomic.h>]],
|
|
|
|
[[uint32_t value;
|
|
|
|
atomic_cas_32 (&value, 0, 0);
|
|
|
|
return 0;]])],
|
|
|
|
[solaris_has_atomic=yes],
|
|
|
|
[solaris_has_atomic=no])
|
|
|
|
AC_MSG_RESULT([$solaris_has_atomic])
|
|
|
|
# Solaris 8 does not have atomic operations exported to user space.
|
|
|
|
if test "x$solaris_has_atomic" = "xno"; then
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
|
2009-07-29 12:07:54 +02:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*freebsd*)
|
2010-02-18 13:46:00 +01:00
|
|
|
# Define on FreeBSD to enable all library features
|
|
|
|
CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS"
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have FreeBSD OS])
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
2015-09-03 08:58:12 +01:00
|
|
|
*dragonfly*)
|
|
|
|
CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS"
|
2019-08-06 10:37:50 +08:00
|
|
|
AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have DragonFly OS])
|
2015-09-03 08:58:12 +01:00
|
|
|
AC_DEFINE(ZMQ_HAVE_DRAGONFLY, 1, [Have DragonFly OS])
|
|
|
|
;;
|
2009-07-29 12:07:54 +02:00
|
|
|
*darwin*)
|
2010-02-18 13:46:00 +01:00
|
|
|
# Define on Darwin to enable all library features
|
|
|
|
CPPFLAGS="-D_DARWIN_C_SOURCE $CPPFLAGS"
|
2011-04-02 22:50:46 +02:00
|
|
|
libzmq_pedantic="no"
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_OSX, 1, [Have DarwinOSX OS])
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
2017-04-18 21:52:36 +02:00
|
|
|
*haiku*)
|
|
|
|
AC_DEFINE(ZMQ_HAVE_HAIKU, 1, [Have Haiku OS])
|
|
|
|
AC_CHECK_LIB(network, socket)
|
|
|
|
;;
|
2010-02-18 19:38:15 +01:00
|
|
|
*netbsd*)
|
|
|
|
# Define on NetBSD to enable all library features
|
|
|
|
CPPFLAGS="-D_NETBSD_SOURCE $CPPFLAGS"
|
|
|
|
AC_DEFINE(ZMQ_HAVE_NETBSD, 1, [Have NetBSD OS])
|
2010-02-22 18:16:40 +01:00
|
|
|
# NetBSD 5.0 and newer provides atomic operations but we can
|
|
|
|
# only use these on systems where PR #42842 has been fixed so
|
|
|
|
# we must try and link a test program using C++.
|
2011-04-02 22:50:46 +02:00
|
|
|
libzmq_netbsd_has_atomic=no
|
2010-02-22 18:16:40 +01:00
|
|
|
AC_MSG_CHECKING([whether atomic operations can be used])
|
|
|
|
AC_LANG_PUSH([C++])
|
|
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
|
|
|
[[#include <atomic.h>]],
|
|
|
|
[[uint32_t value;
|
|
|
|
atomic_cas_32 (&value, 0, 0);
|
|
|
|
return 0;]])],
|
2011-04-02 22:50:46 +02:00
|
|
|
[libzmq_netbsd_has_atomic=yes],
|
|
|
|
[libzmq_netbsd_has_atomic=no])
|
2010-02-22 18:16:40 +01:00
|
|
|
AC_LANG_POP([C++])
|
2011-04-02 22:50:46 +02:00
|
|
|
AC_MSG_RESULT([$libzmq_netbsd_has_atomic])
|
|
|
|
if test "x$libzmq_netbsd_has_atomic" = "xno"; then
|
2010-02-18 19:38:15 +01:00
|
|
|
AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
|
|
|
|
fi
|
|
|
|
;;
|
2015-04-17 22:14:53 +02:00
|
|
|
*openbsd*|*bitrig*)
|
2010-02-18 13:46:00 +01:00
|
|
|
# Define on OpenBSD to enable all library features
|
|
|
|
CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_OPENBSD, 1, [Have OpenBSD OS])
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
|
|
|
*nto-qnx*)
|
2011-04-02 22:50:46 +02:00
|
|
|
libzmq_pedantic="no"
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_QNXNTO, 1, [Have QNX Neutrino OS])
|
2010-11-15 17:02:36 +01:00
|
|
|
AC_CHECK_LIB(socket, socket)
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
2019-10-02 15:21:28 -05:00
|
|
|
*aix*|*os400*)
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS])
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
|
|
|
*hpux*)
|
2010-02-18 13:46:00 +01:00
|
|
|
# Define on HP-UX to enable all library features
|
2010-12-01 10:33:07 +01:00
|
|
|
CPPFLAGS="-D_POSIX_C_SOURCE=200112L $CPPFLAGS"
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_HPUX, 1, [Have HPUX OS])
|
2012-01-19 12:27:19 -06:00
|
|
|
LIBZMQ_CHECK_LANG_FLAG_PREPEND([-Ae])
|
|
|
|
AC_CHECK_FUNCS(gethrtime)
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
2017-03-19 18:38:43 -04:00
|
|
|
*mingw*|*msys*)
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_DEFINE(ZMQ_HAVE_WINDOWS, 1, [Have Windows OS])
|
2016-02-03 23:51:52 +11:00
|
|
|
AC_DEFINE(ZMQ_HAVE_MINGW, 1, [Have MinGW])
|
2009-07-29 12:07:54 +02:00
|
|
|
AC_CHECK_HEADERS(windows.h)
|
2009-10-12 22:50:01 +02:00
|
|
|
AC_CHECK_LIB(ws2_32, main, ,
|
2010-02-15 22:58:45 +01:00
|
|
|
[AC_MSG_ERROR([cannot link with ws2_32.dll.])])
|
2010-03-03 17:01:08 +01:00
|
|
|
AC_CHECK_LIB(rpcrt4, main, ,
|
|
|
|
[AC_MSG_ERROR([cannot link with rpcrt4.dll.])])
|
|
|
|
AC_CHECK_LIB(iphlpapi, main, ,
|
|
|
|
[AC_MSG_ERROR([cannot link with iphlpapi.dll.])])
|
2016-02-03 23:51:52 +11:00
|
|
|
libzmq_on_mingw="yes"
|
2011-04-02 22:50:46 +02:00
|
|
|
libzmq_dso_visibility="no"
|
2010-11-17 15:06:51 +01:00
|
|
|
|
|
|
|
if test "x$enable_static" = "xyes"; then
|
2016-05-10 13:53:53 -07:00
|
|
|
CPPFLAGS="-DZMQ_STATIC $CPPFLAGS"
|
2017-10-17 14:29:09 +02:00
|
|
|
PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -liphlpapi"
|
2010-11-17 15:06:51 +01:00
|
|
|
fi
|
2016-06-13 09:41:00 +01:00
|
|
|
# Set FD_SETSIZE to 16384
|
|
|
|
CPPFLAGS=" -DFD_SETSIZE=16384 $CPPFLAGS"
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
2010-02-19 17:50:47 +01:00
|
|
|
*cygwin*)
|
2010-02-26 20:03:58 +01:00
|
|
|
# Define on Cygwin to enable all library features
|
|
|
|
CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
|
2010-02-19 17:50:47 +01:00
|
|
|
AC_DEFINE(ZMQ_HAVE_CYGWIN, 1, [Have Cygwin])
|
2014-12-29 17:39:19 -05:00
|
|
|
libzmq_on_cygwin="yes"
|
2015-01-12 13:37:32 -06:00
|
|
|
libzmq_dso_visibility="no"
|
2010-11-17 15:06:51 +01:00
|
|
|
if test "x$enable_static" = "xyes"; then
|
|
|
|
AC_MSG_ERROR([Building static libraries is not supported under Cygwin])
|
|
|
|
fi
|
2010-02-19 17:50:47 +01:00
|
|
|
;;
|
2016-01-16 02:26:20 +01:00
|
|
|
gnu*)
|
|
|
|
# Define on GNU/Hurd to enable all library features. Define if using a gnu compiler
|
|
|
|
if test "x$GXX" = "xyes"; then
|
|
|
|
CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
|
|
|
|
fi
|
|
|
|
AC_DEFINE(ZMQ_HAVE_GNU, 1, [Have GNU/Hurd OS])
|
|
|
|
libzmq_on_gnu="yes"
|
|
|
|
AC_CHECK_LIB(rt, sem_init)
|
|
|
|
;;
|
2009-07-29 12:07:54 +02:00
|
|
|
*)
|
2010-02-15 22:58:45 +01:00
|
|
|
AC_MSG_ERROR([unsupported system: ${host_os}.])
|
2009-07-29 12:07:54 +02:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2018-11-04 21:14:35 +00:00
|
|
|
# Sun Studio does not like anonymous structures in unions and does not have weak attribute
|
2018-05-13 17:49:46 +01:00
|
|
|
if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_sun_studio_compiler" = "xyes"; then
|
|
|
|
CXXFLAGS="${CXXFLAGS} -features=extensions"
|
|
|
|
CFLAGS="${CFLAGS} -features=extensions"
|
2018-11-04 21:14:35 +00:00
|
|
|
CPPFLAGS="${CPPFLAGS} -DUNITY_WEAK_PRAGMA"
|
2018-05-13 17:49:46 +01:00
|
|
|
fi
|
|
|
|
|
2013-09-27 11:12:16 +00:00
|
|
|
# Checks for libraries
|
|
|
|
AC_CHECK_LIB([pthread], [pthread_create])
|
2018-12-14 21:45:27 +00:00
|
|
|
if test "x$ac_cv_lib_pthread_pthread_create" = "xyes"; then
|
|
|
|
PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lpthread"
|
|
|
|
fi
|
2013-09-27 11:12:16 +00:00
|
|
|
AC_CHECK_LIB([rt], [clock_gettime])
|
2018-12-14 21:45:27 +00:00
|
|
|
if test "x$ac_cv_lib_rt_clock_gettime" = "xyes"; then
|
|
|
|
PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lrt"
|
|
|
|
fi
|
2014-10-13 19:10:36 -07:00
|
|
|
|
2010-12-01 10:33:07 +01:00
|
|
|
#
|
2016-02-03 23:51:52 +11:00
|
|
|
# Check if the compiler supports -fvisibility=hidden flag. MinGW uses __declspec
|
2010-12-01 10:33:07 +01:00
|
|
|
#
|
2011-04-02 22:50:46 +02:00
|
|
|
if test "x$libzmq_dso_visibility" = "xyes"; then
|
2010-12-01 10:33:07 +01:00
|
|
|
AC_LANG_PUSH([C++])
|
2011-04-02 22:50:46 +02:00
|
|
|
LIBZMQ_CHECK_LANG_VISIBILITY([LIBZMQ_EXTRA_CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag ${LIBZMQ_EXTRA_CXXFLAGS}"])
|
2010-12-01 10:33:07 +01:00
|
|
|
AC_LANG_POP([C++])
|
2010-11-25 17:12:31 +01:00
|
|
|
fi
|
|
|
|
|
2010-02-15 22:25:01 +01:00
|
|
|
# CPU-specific optimizations
|
|
|
|
case "${host_cpu}" in
|
2016-06-04 13:40:14 +02:00
|
|
|
*sparc64*)
|
2010-12-01 10:33:07 +01:00
|
|
|
AC_LANG_PUSH([C++])
|
2011-04-02 22:50:46 +02:00
|
|
|
LIBZMQ_CHECK_LANG_FLAG_PREPEND([-mcpu=v9])
|
2010-12-01 10:33:07 +01:00
|
|
|
AC_LANG_POP([C++])
|
2010-02-15 22:25:01 +01:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
2009-07-29 12:07:54 +02:00
|
|
|
|
2010-11-15 17:02:36 +01:00
|
|
|
# Check whether to build docs / install man pages
|
2011-04-02 22:50:46 +02:00
|
|
|
LIBZMQ_CHECK_DOC_BUILD
|
2010-11-15 17:02:36 +01:00
|
|
|
|
2016-02-11 16:14:12 +01:00
|
|
|
# Check polling system, set appropriate macro in src/platform.hpp
|
|
|
|
LIBZMQ_CHECK_POLLER
|
2011-09-04 10:28:15 +02:00
|
|
|
|
2019-01-19 19:39:42 +00:00
|
|
|
# Check cacheline size, set appropriate macro in src/platform.hpp
|
|
|
|
LIBZMQ_CHECK_CACHELINE
|
|
|
|
|
2019-02-11 07:05:04 -05:00
|
|
|
# Check condition variable implementation, set appropriate macro in src/platform.hpp
|
|
|
|
LIBZMQ_CHECK_CV_IMPL
|
|
|
|
|
2009-07-29 12:07:54 +02:00
|
|
|
# Checks for header files.
|
|
|
|
AC_HEADER_STDC
|
2014-10-13 19:10:36 -07:00
|
|
|
AC_CHECK_HEADERS(\
|
|
|
|
errno.h \
|
|
|
|
time.h \
|
|
|
|
unistd.h \
|
|
|
|
limits.h \
|
|
|
|
stddef.h \
|
|
|
|
stdlib.h \
|
|
|
|
string.h \
|
|
|
|
arpa/inet.h \
|
|
|
|
netinet/tcp.h \
|
|
|
|
netinet/in.h \
|
|
|
|
sys/socket.h \
|
|
|
|
sys/time.h)
|
2009-07-29 12:07:54 +02:00
|
|
|
|
|
|
|
# Check if we have ifaddrs.h header file.
|
2009-08-03 11:30:13 +02:00
|
|
|
AC_CHECK_HEADERS(ifaddrs.h, [AC_DEFINE(ZMQ_HAVE_IFADDRS, 1, [Have ifaddrs.h header.])])
|
2009-07-29 12:07:54 +02:00
|
|
|
|
2012-02-08 02:47:51 +11:00
|
|
|
# Check if we have sys/uio.h header file.
|
|
|
|
AC_CHECK_HEADERS(sys/uio.h, [AC_DEFINE(ZMQ_HAVE_UIO, 1, [Have uio.h header.])])
|
|
|
|
|
2011-07-03 16:11:11 +02:00
|
|
|
# Force not to use eventfd
|
2014-10-13 19:10:36 -07:00
|
|
|
AC_ARG_ENABLE([eventfd],
|
2016-02-11 16:52:41 +01:00
|
|
|
[AS_HELP_STRING([--disable-eventfd], [disable eventfd [default=enabled]])],
|
2014-10-28 05:01:52 -07:00
|
|
|
[zmq_enable_eventfd=$enableval],
|
|
|
|
[zmq_enable_eventfd=yes])
|
2011-07-03 16:11:11 +02:00
|
|
|
|
2014-10-28 05:01:52 -07:00
|
|
|
if test "x$zmq_enable_eventfd" = "xyes"; then
|
2011-07-03 16:11:11 +02:00
|
|
|
# Check if we have eventfd.h header file.
|
2016-12-26 18:18:00 +01:00
|
|
|
AC_CHECK_HEADERS(sys/eventfd.h, [
|
|
|
|
AC_DEFINE(ZMQ_HAVE_EVENTFD, 1, [Have eventfd extension])
|
|
|
|
LIBZMQ_CHECK_EVENTFD_CLOEXEC([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_EVENTFD_CLOEXEC],
|
|
|
|
[1],
|
|
|
|
[Whether EFD_CLOEXEC is defined and functioning.])
|
|
|
|
])
|
|
|
|
])
|
2011-07-03 16:11:11 +02:00
|
|
|
fi
|
|
|
|
|
2015-02-07 15:28:24 +01:00
|
|
|
# Conditionally build performance measurement tools
|
|
|
|
AC_ARG_ENABLE([perf],
|
2016-02-11 16:52:41 +01:00
|
|
|
[AS_HELP_STRING([--disable-perf], [don't build performance measurement tools [default=build]])],
|
2015-02-07 15:28:24 +01:00
|
|
|
[zmq_enable_perf=$enableval],
|
|
|
|
[zmq_enable_perf=yes])
|
|
|
|
|
|
|
|
AM_CONDITIONAL(ENABLE_PERF, test "x$zmq_enable_perf" = "xyes")
|
|
|
|
|
2015-02-07 15:30:32 +01:00
|
|
|
# Conditionally build curve key generation tool
|
|
|
|
AC_ARG_ENABLE([curve-keygen],
|
2016-02-11 16:52:41 +01:00
|
|
|
[AS_HELP_STRING([--disable-curve-keygen], [don't build curve-keygen tool [default=build]])],
|
2015-02-07 15:30:32 +01:00
|
|
|
[zmq_enable_curve_keygen=$enableval],
|
|
|
|
[zmq_enable_curve_keygen=yes])
|
|
|
|
|
2009-07-29 12:07:54 +02:00
|
|
|
# Use c++ in subsequent tests
|
2010-12-01 10:33:07 +01:00
|
|
|
AC_LANG_PUSH(C++)
|
2009-07-29 12:07:54 +02:00
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
AC_CHECK_DECLS([SO_PEERCRED],
|
|
|
|
[AC_DEFINE(ZMQ_HAVE_SO_PEERCRED, 1, [Have SO_PEERCRED socket option])],
|
|
|
|
[],
|
|
|
|
[#include <sys/socket.h>])
|
|
|
|
|
|
|
|
AC_CHECK_DECLS([LOCAL_PEERCRED],
|
|
|
|
[AC_DEFINE(ZMQ_HAVE_LOCAL_PEERCRED, 1, [Have LOCAL_PEERCRED socket option])],
|
|
|
|
[],
|
|
|
|
[#include <sys/socket.h>])
|
|
|
|
|
2013-12-06 14:28:44 -08:00
|
|
|
AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes")
|
2013-12-06 10:59:07 -08:00
|
|
|
|
2009-07-29 12:07:54 +02:00
|
|
|
AC_HEADER_STDBOOL
|
|
|
|
AC_C_CONST
|
|
|
|
AC_C_INLINE
|
2014-10-13 19:10:36 -07:00
|
|
|
|
2010-12-01 10:33:07 +01:00
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
2011-04-02 22:50:46 +02:00
|
|
|
if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_intel_compiler" = "xyes"; then
|
2010-12-01 10:33:07 +01:00
|
|
|
dnl 279: controlling expression is constant
|
|
|
|
dnl Fixes build with ICC 12.x
|
2011-04-02 22:50:46 +02:00
|
|
|
LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SIZE_T])
|
|
|
|
LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SSIZE_T])
|
2010-12-01 10:33:07 +01:00
|
|
|
else
|
|
|
|
AC_TYPE_SIZE_T
|
|
|
|
AC_TYPE_SSIZE_T
|
|
|
|
fi
|
2014-10-13 19:10:36 -07:00
|
|
|
|
2009-07-29 12:07:54 +02:00
|
|
|
AC_HEADER_TIME
|
|
|
|
AC_TYPE_UINT32_T
|
|
|
|
AC_C_VOLATILE
|
|
|
|
|
2014-10-25 01:10:53 -07:00
|
|
|
# build using libgssapi_krb5
|
|
|
|
AC_ARG_WITH([libgssapi_krb5], [AS_HELP_STRING([--with-libgssapi_krb5],
|
|
|
|
[require libzmq build with libgssapi_krb5 [default=no]])],
|
|
|
|
[require_libgssapi_krb5_ext=$withval],
|
|
|
|
[require_libgssapi_krb5_ext=no])
|
|
|
|
|
|
|
|
# conditionally require libgssapi_krb5
|
|
|
|
if test "x$require_libgssapi_krb5_ext" != "xno"; then
|
2018-12-14 21:45:27 +00:00
|
|
|
PKG_CHECK_MODULES([gssapi_krb5], [krb5-gssapi], [
|
2019-01-14 14:51:03 +00:00
|
|
|
have_gssapi_library="yes"
|
2018-12-14 21:45:27 +00:00
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE krb5-gssapi"
|
|
|
|
], [
|
2017-08-18 16:24:51 +01:00
|
|
|
AC_CHECK_HEADERS(gssapi/gssapi_generic.h)
|
|
|
|
AC_SEARCH_LIBS([gss_init_sec_context], [gssapi_krb5 gssapi],
|
2019-01-14 14:51:03 +00:00
|
|
|
have_gssapi_library="yes",
|
2017-08-18 16:24:51 +01:00
|
|
|
AC_MSG_ERROR(libgssapi_krb5 is needed for GSSAPI security))
|
2018-12-14 21:45:27 +00:00
|
|
|
PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lgssapi_krb5"
|
2017-08-18 16:24:51 +01:00
|
|
|
])
|
2014-10-25 01:10:53 -07:00
|
|
|
fi
|
2019-01-14 14:51:03 +00:00
|
|
|
if test "x$have_gssapi_library" = "xyes"; then
|
|
|
|
AC_DEFINE(HAVE_LIBGSSAPI_KRB5, [1], [Enabled GSSAPI security])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(BUILD_GSSAPI, test "x$have_gssapi_library" = "xyes")
|
2014-10-25 01:10:53 -07:00
|
|
|
|
2016-02-11 13:32:01 +01:00
|
|
|
# Select curve encryption library, defaults to tweetnacl
|
|
|
|
# To use libsodium instead, use --with-libsodium (must be installed)
|
|
|
|
# To disable curve, use --disable-curve
|
|
|
|
|
|
|
|
AC_ARG_WITH([libsodium],
|
2016-03-02 12:11:08 -08:00
|
|
|
[AS_HELP_STRING([--with-libsodium], [use libsodium instead of built-in tweetnacl [default=no]])])
|
2016-02-11 13:32:01 +01:00
|
|
|
|
|
|
|
AS_IF([test "x$with_libsodium" = "xyes"], [
|
|
|
|
PKG_CHECK_MODULES([sodium], [libsodium], [libsodium_found=yes], [
|
|
|
|
AC_MSG_ERROR(libsodium is not installed. Install it, then run configure again)
|
2016-02-08 11:58:30 +01:00
|
|
|
])
|
2016-02-11 13:32:01 +01:00
|
|
|
])
|
2014-10-16 00:37:57 -07:00
|
|
|
|
2016-02-11 13:32:01 +01:00
|
|
|
AC_ARG_ENABLE([curve],
|
2016-03-02 12:11:08 -08:00
|
|
|
[AS_HELP_STRING([--disable-curve], [disable CURVE security [default=no]])])
|
2016-02-17 12:40:44 +01:00
|
|
|
|
2016-03-04 17:17:04 +09:00
|
|
|
if test "x$enable_curve" = "xno"; then
|
2016-02-11 13:32:01 +01:00
|
|
|
curve_library=""
|
|
|
|
AC_MSG_NOTICE([CURVE security is disabled])
|
|
|
|
|
2016-03-04 17:17:04 +09:00
|
|
|
elif test "x$with_libsodium" = "xyes"; then
|
2016-02-11 13:32:01 +01:00
|
|
|
AC_MSG_NOTICE([Using libsodium for CURVE security])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption])
|
2016-03-12 15:25:41 +01:00
|
|
|
AC_DEFINE(ZMQ_USE_LIBSODIUM, [1], [Using libsodium for curve encryption])
|
2016-02-11 13:32:01 +01:00
|
|
|
curve_library="libsodium"
|
2016-11-05 10:44:13 +01:00
|
|
|
enable_curve="yes"
|
2016-02-11 13:32:01 +01:00
|
|
|
|
2015-10-07 21:45:49 +02:00
|
|
|
case "${host_os}" in
|
|
|
|
*solaris*)
|
2020-07-21 09:26:10 +08:00
|
|
|
dnl On Solaris, libsodium depends on libssp
|
2015-10-07 21:45:49 +02:00
|
|
|
LDFLAGS="-lssp $LDFLAGS"
|
2016-04-13 00:30:23 +01:00
|
|
|
libzmq_pedantic="no"
|
|
|
|
libzmq_werror="no"
|
2015-10-07 21:45:49 +02:00
|
|
|
;;
|
2020-07-21 09:26:10 +08:00
|
|
|
*darwin*)
|
|
|
|
dnl On Darwin, building with libsodium causes
|
|
|
|
dnl macro redefinition warnings
|
|
|
|
libzmq_werror="no"
|
|
|
|
;;
|
2015-10-07 21:45:49 +02:00
|
|
|
esac
|
2016-09-27 18:39:07 +01:00
|
|
|
|
2018-12-14 21:45:27 +00:00
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libsodium"
|
2016-02-11 13:32:01 +01:00
|
|
|
else
|
|
|
|
AC_MSG_NOTICE([Using tweetnacl for CURVE security])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption])
|
2016-02-11 18:06:07 +01:00
|
|
|
AC_DEFINE(ZMQ_USE_TWEETNACL, [1], [Using tweetnacl for curve encryption])
|
2016-02-11 13:32:01 +01:00
|
|
|
curve_library="tweetnacl"
|
2016-11-05 10:44:13 +01:00
|
|
|
enable_curve="yes"
|
2014-10-16 04:44:08 -07:00
|
|
|
fi
|
|
|
|
|
2016-11-05 10:44:13 +01:00
|
|
|
AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$enable_curve" = "xyes" -a "x$zmq_enable_curve_keygen" = "xyes")
|
|
|
|
|
2016-03-04 17:17:04 +09:00
|
|
|
AM_CONDITIONAL(USE_LIBSODIUM, test "$curve_library" = "libsodium")
|
|
|
|
AM_CONDITIONAL(USE_TWEETNACL, test "$curve_library" = "tweetnacl")
|
2017-08-15 16:28:24 +02:00
|
|
|
AM_CONDITIONAL(HAVE_CURVE, test "x$curve_library" != "x")
|
2018-06-03 11:55:26 +08:00
|
|
|
AM_CONDITIONAL(USE_WEPOLL, test "$poller" = "wepoll")
|
|
|
|
|
2019-09-11 13:09:22 +03:00
|
|
|
# Check requiring packages for WebSocket
|
2019-09-29 18:30:37 +03:00
|
|
|
ws_crypto_library=""
|
2019-09-11 13:09:22 +03:00
|
|
|
|
|
|
|
AC_ARG_ENABLE([ws],
|
2020-01-19 16:36:29 +00:00
|
|
|
[AS_HELP_STRING([--enable-ws], [Enable WebSocket transport [default=state of DRAFT]])],
|
|
|
|
[enable_ws=$enableval],
|
|
|
|
[enable_ws=$enable_drafts])
|
2019-09-11 13:09:22 +03:00
|
|
|
|
|
|
|
AC_ARG_WITH([nss],
|
|
|
|
[AS_HELP_STRING([--with-nss], [use nss instead of built-in sha1 [default=no]])])
|
|
|
|
|
2019-09-29 18:30:37 +03:00
|
|
|
AC_ARG_WITH([tls],
|
|
|
|
[AS_HELP_STRING([--with-tls], [Enable TLS (WSS transport) [default=no]])])
|
|
|
|
|
2019-09-11 13:09:22 +03:00
|
|
|
if test "x$enable_ws" != "xno"; then
|
2019-09-29 18:30:37 +03:00
|
|
|
if test "x$with_tls" = "xyes"; then
|
|
|
|
PKG_CHECK_MODULES([GNUTLS], [gnutls >= 3.1.4], [
|
2019-12-28 15:47:23 +01:00
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE gnutls >= 3.1.4"
|
2019-09-29 18:30:37 +03:00
|
|
|
ws_crypto_library="gnutls"
|
|
|
|
AC_DEFINE(ZMQ_USE_GNUTLS, [1], [Use GNUTLS for TLS])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_WS, [1], [Using websocket])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_WSS, [1], [WSS enabled])
|
|
|
|
AC_MSG_NOTICE(Using gnutls)
|
|
|
|
],[
|
|
|
|
AC_MSG_ERROR([GnuTLS is not installed. Install it, then run configure again])
|
|
|
|
])
|
|
|
|
elif test "x$with_nss" = "xyes"; then
|
2019-09-11 13:09:22 +03:00
|
|
|
PKG_CHECK_MODULES([NSS3], [nss], [
|
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE nss"
|
|
|
|
AC_DEFINE(ZMQ_USE_NSS, [1], [Using NSS])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_WS, [1], [Using websocket])
|
2019-09-29 18:30:37 +03:00
|
|
|
ws_crypto_library="nss"
|
2019-09-11 13:09:22 +03:00
|
|
|
AC_MSG_NOTICE(Using NSS)
|
|
|
|
], [
|
2019-09-29 18:30:37 +03:00
|
|
|
AC_MSG_ERROR([nss is not installed. Install it, then run configure again])
|
2019-09-11 13:09:22 +03:00
|
|
|
])
|
|
|
|
else
|
|
|
|
AC_DEFINE(ZMQ_HAVE_WS, [1], [Using websocket])
|
2019-09-29 18:30:37 +03:00
|
|
|
AC_DEFINE(ZMQ_USE_BUILTIN_SHA1, [1], [Using built-in sha1])
|
2019-09-11 13:09:22 +03:00
|
|
|
AC_MSG_NOTICE(Using builting SHA1)
|
2019-09-29 18:30:37 +03:00
|
|
|
ws_crypto_library="builtin"
|
2019-09-11 13:09:22 +03:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-09-29 18:30:37 +03:00
|
|
|
AM_CONDITIONAL(HAVE_WS, test "x$ws_crypto_library" != "x")
|
|
|
|
AM_CONDITIONAL(USE_NSS, test "x$ws_crypto_library" = "xnss")
|
|
|
|
AM_CONDITIONAL(USE_BUILTIN_SHA1, test "x$ws_crypto_library" = "xbuiltin")
|
|
|
|
AM_CONDITIONAL(USE_GNUTLS, test "x$ws_crypto_library" = "xgnutls")
|
|
|
|
AM_CONDITIONAL(HAVE_WSS, test "x$ws_crypto_library" = "xgnutls")
|
2019-09-11 13:09:22 +03:00
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
# build using pgm
|
|
|
|
have_pgm_library="no"
|
2009-09-24 12:43:35 +02:00
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm],
|
2011-04-04 22:52:02 +02:00
|
|
|
[build libzmq with PGM extension. Requires pkg-config [default=no]])],
|
2014-10-18 16:48:40 -07:00
|
|
|
[with_pgm_ext=$withval],
|
|
|
|
[with_pgm_ext=no])
|
2011-04-02 22:48:52 +02:00
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
# conditionally require pgm package
|
2010-02-15 23:51:05 +01:00
|
|
|
if test "x$with_pgm_ext" != "xno"; then
|
2018-12-14 21:45:27 +00:00
|
|
|
PKG_CHECK_MODULES([pgm], [openpgm-5.2 >= 5.2], [
|
|
|
|
have_pgm_library="yes"
|
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE openpgm-5.2 >= 5.2"
|
|
|
|
], [
|
|
|
|
PKG_CHECK_MODULES([pgm], [openpgm-5.1 >= 5.1], [
|
|
|
|
have_pgm_library="yes"
|
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE openpgm-5.1 >= 5.1"
|
|
|
|
])
|
|
|
|
])
|
2014-10-13 19:10:36 -07:00
|
|
|
fi
|
|
|
|
|
|
|
|
if test "x$have_pgm_library" = "xyes"; then
|
|
|
|
AC_DEFINE(ZMQ_HAVE_OPENPGM, [1], [Have OpenPGM extension])
|
2011-04-02 22:48:52 +02:00
|
|
|
fi
|
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
AM_CONDITIONAL(HAVE_PGM, test "x$have_pgm_library" = "xyes")
|
2011-03-31 18:42:09 +02:00
|
|
|
|
2014-03-15 10:48:12 -04:00
|
|
|
|
|
|
|
# This uses "--with-norm" to point to the "norm" directory
|
|
|
|
# for "norm/include" and "norm/lib"
|
|
|
|
#(if "--with-norm=yes" is given, then assume installed on system)
|
2015-01-12 13:37:32 -06:00
|
|
|
AC_ARG_WITH([norm],
|
|
|
|
[AS_HELP_STRING([--with-norm],
|
2014-10-13 19:10:36 -07:00
|
|
|
[build libzmq with NORM protocol extension, optionally specifying norm path [default=no]])],
|
2015-01-12 13:37:32 -06:00
|
|
|
[with_norm_ext=$withval],
|
2014-10-13 19:10:36 -07:00
|
|
|
[with_norm_ext=no])
|
|
|
|
|
2014-03-15 10:48:12 -04:00
|
|
|
AC_MSG_CHECKING("with_norm_ext = ${with_norm_ext}")
|
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
if test "x$with_norm_ext" != "xno"; then
|
2018-12-14 21:45:27 +00:00
|
|
|
PKG_CHECK_MODULES([norm], [norm], [
|
|
|
|
have_norm_library="yes"
|
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE norm"
|
|
|
|
], [
|
2017-10-16 23:23:32 +01:00
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
|
|
|
norm_LIBS=""
|
|
|
|
norm_CFLAGS=""
|
|
|
|
if test "x$with_norm_ext" != "xyes"; then
|
|
|
|
norm_path="${with_norm_ext}"
|
|
|
|
norm_CFLAGS="${norm_CFLAGS} -I${norm_path}/include"
|
|
|
|
norm_LIBS="${norm_LIBS} -L${norm_path}/lib"
|
|
|
|
fi
|
|
|
|
norm_LIBS="${norm_LIBS} -lnorm"
|
|
|
|
have_norm_library="yes"
|
2018-12-14 21:45:27 +00:00
|
|
|
PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE $norm_LIBS"
|
2017-10-16 23:23:32 +01:00
|
|
|
AC_SUBST(norm_LIBS)
|
|
|
|
AC_SUBST(norm_CFLAGS)
|
|
|
|
])
|
2016-02-11 16:14:12 +01:00
|
|
|
else
|
|
|
|
AC_MSG_RESULT([no])
|
2014-03-15 10:48:12 -04:00
|
|
|
fi
|
2017-10-16 23:23:32 +01:00
|
|
|
if test "x$have_norm_library" = "xyes"; then
|
|
|
|
AC_DEFINE(ZMQ_HAVE_NORM, [1], [Have NORM protocol extension])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_NORM, test "x$have_norm_library" = "xyes")
|
2014-03-15 10:48:12 -04:00
|
|
|
|
2015-12-07 18:19:45 +06:00
|
|
|
# build using vmci
|
|
|
|
have_vmci_library="no"
|
|
|
|
|
|
|
|
AC_ARG_WITH([vmci], [AS_HELP_STRING([--with-vmci],
|
|
|
|
[build libzmq with VMCI transport [default=no]])],
|
|
|
|
[have_vmci_ext=$withval],
|
2015-12-08 17:58:31 +00:00
|
|
|
[have_vmci_ext=no])
|
2015-12-07 18:19:45 +06:00
|
|
|
|
|
|
|
if test "x$have_vmci_ext" != "xno"; then
|
|
|
|
AC_DEFINE(ZMQ_HAVE_VMCI, 1, [Have VMCI transport])
|
|
|
|
|
|
|
|
if test "x$have_vmci_ext" != "xyes"; then
|
|
|
|
vmci_path="${have_vmci_ext}"
|
|
|
|
LIBZMQ_VMCI_CXXFLAGS="-I${vmci_path}"
|
|
|
|
LIBZMQ_VMCI_LDFLAGS="-I${vmci_path}"
|
|
|
|
LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_VMCI_CXXFLAGS} ${LIBZMQ_EXTRA_CXXFLAGS}"
|
|
|
|
LIBZMQ_EXTRA_LDFLAGS="${LIBZMQ_VMCI_LDFLAGS} ${LIBZMQ_EXTRA_LDFLAGS}"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
AM_CONDITIONAL(HAVE_VMCI, test "x$have_vmci_ext" != "xno")
|
|
|
|
|
2010-12-01 10:33:07 +01:00
|
|
|
# Set -Wall, -Werror and -pedantic
|
|
|
|
AC_LANG_PUSH([C++])
|
2010-04-10 16:18:34 +02:00
|
|
|
|
2010-12-01 10:33:07 +01:00
|
|
|
# Check how to enable -Wall
|
2018-11-09 18:54:08 +00:00
|
|
|
LIBZMQ_LANG_WALL([CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_wall_flag $CXXFLAGS"])
|
2009-09-24 16:23:49 +02:00
|
|
|
|
2011-04-02 22:50:46 +02:00
|
|
|
if test "x$libzmq_werror" = "xyes" -a "x$libzmq_cv_[]_AC_LANG_ABBREV[]_sun_studio_compiler" != "xyes"; then
|
2018-11-09 18:54:08 +00:00
|
|
|
LIBZMQ_LANG_WERROR([CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_werror_flag $CXXFLAGS"])
|
2010-12-01 10:33:07 +01:00
|
|
|
fi
|
|
|
|
|
2011-04-02 22:50:46 +02:00
|
|
|
if test "x$libzmq_pedantic" = "xyes"; then
|
2018-11-09 18:54:08 +00:00
|
|
|
LIBZMQ_LANG_STRICT([CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CXXFLAGS"])
|
2009-09-10 11:21:05 +02:00
|
|
|
fi
|
2010-12-01 10:33:07 +01:00
|
|
|
AC_LANG_POP([C++])
|
2009-09-10 11:21:05 +02:00
|
|
|
|
2013-11-01 14:59:31 +01:00
|
|
|
AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")
|
2016-02-03 23:51:52 +11:00
|
|
|
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw" = "xyes")
|
2014-12-29 17:39:19 -05:00
|
|
|
AM_CONDITIONAL(ON_CYGWIN, test "x$libzmq_on_cygwin" = "xyes")
|
2012-07-03 12:20:37 +02:00
|
|
|
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
|
2013-10-03 16:35:30 -07:00
|
|
|
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
|
2016-01-16 02:26:20 +01:00
|
|
|
AM_CONDITIONAL(ON_GNU, test "x$libzmq_on_gnu" = "xyes")
|
2009-08-26 15:50:37 +02:00
|
|
|
|
2015-01-28 10:27:15 -06:00
|
|
|
# Check for __atomic_Xxx compiler intrinsics
|
|
|
|
AC_LANG_PUSH([C++])
|
2020-07-07 11:06:44 +08:00
|
|
|
AX_CHECK_COMPILE_FLAG([-Watomic-alignment],
|
2018-11-27 04:51:31 -05:00
|
|
|
[CXXFLAGS+=" -Wno-atomic-alignment"],
|
|
|
|
[],
|
|
|
|
[-Werror])
|
2015-01-28 10:27:15 -06:00
|
|
|
LIBZMQ_CHECK_ATOMIC_INTRINSICS([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_ATOMIC_INTRINSICS],
|
|
|
|
[1],
|
|
|
|
[Whether compiler has __atomic_Xxx intrinsics.])
|
|
|
|
])
|
|
|
|
AC_LANG_POP([C++])
|
|
|
|
|
2011-01-12 09:22:25 +01:00
|
|
|
# Checks for library functions.
|
|
|
|
AC_TYPE_SIGNAL
|
2019-05-04 15:05:09 +01:00
|
|
|
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork mkdtemp accept4)
|
2011-01-12 09:22:25 +01:00
|
|
|
AC_CHECK_HEADERS([alloca.h])
|
2014-10-13 19:10:36 -07:00
|
|
|
|
2019-05-04 15:05:09 +01:00
|
|
|
# string.h doesn't seem to be included by default in Fedora 30
|
|
|
|
AC_MSG_CHECKING([whether strnlen is available])
|
|
|
|
AC_COMPILE_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM(
|
|
|
|
[[#include <string.h>]],
|
|
|
|
[[size_t bar = strnlen ("foo", 1); (void)bar; return 0;]])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
AC_DEFINE(HAVE_STRNLEN, [1],
|
|
|
|
[strnlen is available])
|
2019-12-11 13:33:00 +01:00
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
2019-12-28 15:31:35 +01:00
|
|
|
AC_ARG_ENABLE([libbsd],
|
|
|
|
[AS_HELP_STRING([--enable-libbsd],
|
|
|
|
[enable libbsd [default=auto]])],
|
|
|
|
[enable_libbsd=$enableval],
|
|
|
|
[enable_libbsd="auto"])
|
|
|
|
|
|
|
|
if test "x$enable_libbsd" != "xno"; then
|
|
|
|
PKG_CHECK_MODULES(LIBBSD, [libbsd],
|
|
|
|
[
|
|
|
|
AC_DEFINE(ZMQ_HAVE_LIBBSD, 1, [The libbsd library is to be used])
|
|
|
|
AC_SUBST([LIBBSD_CFLAGS])
|
|
|
|
AC_SUBST([LIBBSD_LIBS])
|
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libbsd"
|
|
|
|
found_libbsd="yes"
|
|
|
|
],
|
|
|
|
[
|
|
|
|
found_libbsd="no"
|
|
|
|
if test "x$enable_libbsd" = "xyes"; then
|
|
|
|
AC_MSG_ERROR([Cannot find libbsd])
|
|
|
|
else
|
|
|
|
AC_MSG_WARN([Cannot find libbsd])
|
|
|
|
fi
|
|
|
|
])
|
|
|
|
fi
|
|
|
|
if test "x$found_libbsd" != "xyes"; then
|
|
|
|
AC_MSG_CHECKING([whether strlcpy is available])
|
|
|
|
AC_COMPILE_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM(
|
|
|
|
[[#include <string.h>]],
|
|
|
|
[[char buf [100]; size_t bar = strlcpy (buf, "foo", 100); (void)bar; return 0;]])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_STRLCPY, [1],
|
|
|
|
[strlcpy is available])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
fi
|
2019-05-04 15:05:09 +01:00
|
|
|
|
2017-02-28 19:45:23 +00:00
|
|
|
# pthread_setname is non-posix, and there are at least 4 different implementations
|
|
|
|
AC_MSG_CHECKING([whether signature of pthread_setname_np() has 1 argument])
|
|
|
|
AC_COMPILE_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM(
|
|
|
|
[[#include <pthread.h>]],
|
|
|
|
[[pthread_setname_np ("foo"); return 0;]])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_PTHREAD_SETNAME_1, [1],
|
|
|
|
[Whether pthread_setname_np() has 1 argument])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
AC_MSG_CHECKING([whether signature of pthread_setname_np() has 2 arguments])
|
|
|
|
AC_COMPILE_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM(
|
|
|
|
[[#include <pthread.h>]],
|
|
|
|
[[pthread_setname_np (pthread_self (), "foo"); return 0;]])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_PTHREAD_SETNAME_2, [1],
|
|
|
|
[Whether pthread_setname_np() has 2 arguments])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
AC_MSG_CHECKING([whether signature of pthread_setname_np() has 3 arguments])
|
|
|
|
AC_COMPILE_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM(
|
|
|
|
[[#include <pthread.h>]],
|
|
|
|
[[pthread_setname_np (pthread_self(), "foo", (void *)0); return 0;]])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_PTHREAD_SETNAME_3, [1],
|
|
|
|
[Whether pthread_setname_np() has 3 arguments])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
AC_MSG_CHECKING([whether pthread_set_name_np() exists])
|
|
|
|
AC_COMPILE_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM(
|
|
|
|
[[#include <pthread.h>]],
|
|
|
|
[[pthread_set_name_np (pthread_self(), "foo"); return 0;]])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_PTHREAD_SET_NAME, [1],
|
|
|
|
[Whether pthread_set_name_np() exists])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
2017-10-16 13:29:03 +02:00
|
|
|
|
|
|
|
# pthread_setaffinity_np is non-posix:
|
|
|
|
AC_MSG_CHECKING([whether pthread_setaffinity_np() exists])
|
|
|
|
AC_COMPILE_IFELSE(
|
|
|
|
[AC_LANG_PROGRAM(
|
|
|
|
[[#include <pthread.h>]],
|
|
|
|
[[cpu_set_t test; pthread_setaffinity_np (pthread_self(), sizeof(cpu_set_t), &test); return 0;]])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
AC_DEFINE(ZMQ_HAVE_PTHREAD_SET_AFFINITY, [1],
|
|
|
|
[Whether pthread_setaffinity_np() exists])
|
|
|
|
],[
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
LIBZMQ_CHECK_SOCK_CLOEXEC([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_SOCK_CLOEXEC],
|
|
|
|
[1],
|
|
|
|
[Whether SOCK_CLOEXEC is defined and functioning.])
|
|
|
|
])
|
2012-04-06 20:04:35 +04:00
|
|
|
|
2017-07-27 23:29:33 +01:00
|
|
|
LIBZMQ_CHECK_O_CLOEXEC([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_O_CLOEXEC],
|
|
|
|
[1],
|
|
|
|
[Whether O_CLOEXEC is defined and functioning.])
|
|
|
|
])
|
|
|
|
|
Add socket option BINDTODEVICE
Linux now supports Virtual Routing and Forwarding (VRF) as per:
https://www.kernel.org/doc/Documentation/networking/vrf.txt
In order for an application to bind or connect to a socket with an
address in a VRF, they need to first bind the socket to the VRF device:
setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, dev, strlen(dev)+1);
Note "dev" is the VRF device, eg. VRF "blue", rather than an interface
enslaved to the VRF.
Add a new socket option, ZMQ_BINDTODEVICE, to bind a socket to a device.
In general, if a socket is bound to a device, eg. an interface, only
packets received from that particular device are processed by the socket.
If device is a VRF device, then subsequent binds/connects to that socket
use addresses in the VRF routing table.
2017-07-28 14:35:09 +01:00
|
|
|
LIBZMQ_CHECK_SO_BINDTODEVICE([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_SO_BINDTODEVICE],
|
|
|
|
[1],
|
|
|
|
[Whether SO_BINDTODEVICE is supported.])
|
|
|
|
])
|
|
|
|
|
2012-04-06 20:04:35 +04:00
|
|
|
# TCP keep-alives Checks.
|
2014-10-13 19:10:36 -07:00
|
|
|
LIBZMQ_CHECK_SO_KEEPALIVE([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_SO_KEEPALIVE],
|
|
|
|
[1],
|
|
|
|
[Whether SO_KEEPALIVE is supported.])
|
|
|
|
])
|
|
|
|
|
|
|
|
LIBZMQ_CHECK_TCP_KEEPCNT([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_TCP_KEEPCNT],
|
|
|
|
[1],
|
|
|
|
[Whether TCP_KEEPCNT is supported.])
|
|
|
|
])
|
|
|
|
|
|
|
|
LIBZMQ_CHECK_TCP_KEEPIDLE([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_TCP_KEEPIDLE],
|
|
|
|
[1],
|
|
|
|
[Whether TCP_KEEPIDLE is supported.])
|
|
|
|
])
|
|
|
|
|
|
|
|
LIBZMQ_CHECK_TCP_KEEPINTVL([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_TCP_KEEPINTVL],
|
|
|
|
[1],
|
|
|
|
[Whether TCP_KEEPINTVL is supported.])
|
|
|
|
])
|
|
|
|
|
|
|
|
LIBZMQ_CHECK_TCP_KEEPALIVE([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_TCP_KEEPALIVE],
|
|
|
|
[1],
|
|
|
|
[Whether TCP_KEEPALIVE is supported.])
|
|
|
|
])
|
2011-01-12 09:22:25 +01:00
|
|
|
|
2017-07-27 21:37:12 +01:00
|
|
|
LIBZMQ_CHECK_GETRANDOM([
|
|
|
|
AC_DEFINE([ZMQ_HAVE_GETRANDOM],
|
|
|
|
[1],
|
|
|
|
[Whether getrandom is supported.])
|
|
|
|
])
|
|
|
|
|
2014-05-03 13:56:32 +02:00
|
|
|
AM_CONDITIONAL(HAVE_FORK, test "x$ac_cv_func_fork" = "xyes")
|
|
|
|
|
2016-05-02 19:44:35 +01:00
|
|
|
if test "x$cross_compiling" = "xyes"; then
|
|
|
|
# Enable draft by default when cross-compiling
|
|
|
|
defaultval=yes
|
|
|
|
else
|
|
|
|
# enable draft API by default if we're in a git repository
|
|
|
|
# else disable it by default; then allow --enable-drafts=yes/no override
|
|
|
|
AC_CHECK_FILE($srcdir/.git, [defaultval=yes], [defaultval=no])
|
|
|
|
fi
|
|
|
|
|
|
|
|
AC_ARG_ENABLE([drafts],
|
|
|
|
AS_HELP_STRING([--enable-drafts],
|
|
|
|
[Build and install draft classes and methods [default=yes]]),
|
|
|
|
[enable_drafts=$enableval],
|
|
|
|
[enable_drafts=$defaultval])
|
|
|
|
|
|
|
|
AM_CONDITIONAL([ENABLE_DRAFTS], [test x$enable_drafts != xno])
|
|
|
|
|
|
|
|
if test "x$enable_drafts" = "xyes"; then
|
|
|
|
AC_MSG_NOTICE([Building stable and legacy API + draft API])
|
|
|
|
AC_DEFINE(ZMQ_BUILD_DRAFT_API, 1, [Provide draft classes and methods])
|
|
|
|
AC_SUBST(pkg_config_defines, "-DZMQ_BUILD_DRAFT_API=1")
|
|
|
|
else
|
|
|
|
AC_MSG_NOTICE([Building stable and legacy API (no draft API)])
|
|
|
|
AC_SUBST(pkg_config_defines, "")
|
|
|
|
fi
|
|
|
|
|
2017-07-14 21:44:30 +01:00
|
|
|
AC_ARG_ENABLE([libunwind],
|
|
|
|
[AS_HELP_STRING([--enable-libunwind],
|
|
|
|
[enable libunwind [default=auto]])],
|
|
|
|
[enable_libunwind=$enableval],
|
|
|
|
[enable_libunwind="auto"])
|
|
|
|
|
|
|
|
if test "x$enable_libunwind" != "xno"; then
|
|
|
|
PKG_CHECK_MODULES(LIBUNWIND, [libunwind],
|
|
|
|
[
|
|
|
|
AC_DEFINE(HAVE_LIBUNWIND, 1, [The libunwind library is to be used])
|
|
|
|
AC_SUBST([LIBUNWIND_CFLAGS])
|
|
|
|
AC_SUBST([LIBUNWIND_LIBS])
|
2018-12-14 21:45:27 +00:00
|
|
|
AC_CHECK_LIB([dl], [dladdr], [
|
|
|
|
PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -ldl"
|
|
|
|
LIBS="-ldl $LIBS"
|
|
|
|
], [
|
|
|
|
AC_CHECK_LIB([dld], [dladdr], [
|
|
|
|
PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -ldld"
|
|
|
|
LIBS="-ldld $LIBS"
|
|
|
|
])
|
|
|
|
])
|
|
|
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libunwind"
|
2017-07-14 21:44:30 +01:00
|
|
|
],
|
|
|
|
[
|
|
|
|
if test "x$enable_libunwind" = "xyes"; then
|
|
|
|
AC_MSG_ERROR([Cannot find libunwind])
|
|
|
|
else
|
|
|
|
AC_MSG_WARN([Cannot find libunwind])
|
|
|
|
fi
|
|
|
|
])
|
|
|
|
fi
|
2016-05-06 19:00:44 +01:00
|
|
|
|
2018-11-13 13:17:12 +00:00
|
|
|
AC_ARG_ENABLE([radix-tree],
|
|
|
|
AS_HELP_STRING([--enable-radix-tree],
|
|
|
|
[Use radix tree implementation to manage subscriptions [default=DRAFT]]),
|
|
|
|
[radix_tree=$enableval],
|
|
|
|
[radix_tree=$enable_drafts])
|
|
|
|
|
|
|
|
AM_CONDITIONAL([ENABLE_RADIX_TREE], [test x$radix_tree != xno])
|
|
|
|
|
|
|
|
if test "x$radix_tree" = "xyes"; then
|
|
|
|
AC_MSG_NOTICE([Using radix tree implementation to manage subscriptions])
|
|
|
|
AC_DEFINE(ZMQ_USE_RADIX_TREE, 1, [Use radix tree implementation to manage subscriptions])
|
|
|
|
else
|
|
|
|
AC_MSG_NOTICE([Using mtree implementation to manage subscriptions])
|
|
|
|
fi
|
|
|
|
|
2018-02-10 17:34:01 +00:00
|
|
|
# See if clang-format is in PATH; the result unblocks the relevant recipes
|
|
|
|
WITH_CLANG_FORMAT=""
|
|
|
|
AS_IF([test x"$CLANG_FORMAT" = x],
|
|
|
|
[AC_PATH_PROG([CLANG_FORMAT], [clang-format], [])],
|
|
|
|
[AC_CHECK_PROG([WITH_CLANG_FORMAT], [$CLANG_FORMAT], [true], [fail])])
|
|
|
|
AS_IF([test x"$CLANG_FORMAT" != x && test x"$WITH_CLANG_FORMAT" = x],
|
|
|
|
[AS_IF([test -x "$CLANG_FORMAT"],
|
|
|
|
[WITH_CLANG_FORMAT=true],
|
|
|
|
[AC_CHECK_PROG([WITH_CLANG_FORMAT], [$CLANG_FORMAT], [true], [false])])])
|
|
|
|
AS_IF([test "$WITH_CLANG_FORMAT" = fail],
|
|
|
|
[AC_MSG_ERROR([Caller explicitly referenced CLANG_FORMAT=$CLANG_FORMAT which was not found])])
|
|
|
|
AM_CONDITIONAL([WITH_CLANG_FORMAT], [$WITH_CLANG_FORMAT])
|
|
|
|
|
2018-02-10 19:18:33 +00:00
|
|
|
# unittests will not build without the static libzmq.a
|
|
|
|
AM_CONDITIONAL(ENABLE_STATIC, test "x$enable_static" = "xyes")
|
|
|
|
|
2020-04-25 13:53:53 +01:00
|
|
|
# build using a fuzzing engine - fuzzers will be built separately and statically
|
|
|
|
AC_ARG_WITH([fuzzing-engine], [AS_HELP_STRING([--with-fuzzing-engine],
|
|
|
|
[build libzmq with an exernal fuzzing engine [default=no]])],
|
|
|
|
[have_fuzzing_engine_ext=$withval],
|
|
|
|
[have_fuzzing_engine_ext=no])
|
|
|
|
AC_ARG_WITH([fuzzing-installdir],
|
|
|
|
AS_HELP_STRING([--with-fuzzing-installdir=PATH],
|
|
|
|
[Path where to install fuzzer binaries]),
|
|
|
|
[fuzzing_installdir="$withval"])
|
|
|
|
|
|
|
|
if test "x$have_fuzzing_engine_ext" != "xno" && test "x$fuzzing_installdir" != "x" && test "x$enable_static" = "xyes"; then
|
|
|
|
FUZZING_ENGINE_LIB="${have_fuzzing_engine_ext}"
|
|
|
|
FUZZING_INSTALLDIR="${fuzzing_installdir}"
|
|
|
|
AC_SUBST(FUZZING_ENGINE_LIB)
|
|
|
|
AC_SUBST(FUZZING_INSTALLDIR)
|
|
|
|
AC_DEFINE(ZMQ_USE_FUZZING_ENGINE, 1, [fuzz tests will be built with fuzzing engine])
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(FUZZING_ENGINE_LIB, test "x$FUZZING_ENGINE_LIB" != "x")
|
|
|
|
|
2018-05-26 20:05:14 +01:00
|
|
|
# clang 6 has a warning that does not make sense on multi-platform code
|
2018-05-30 21:21:59 +01:00
|
|
|
AC_LANG_PUSH([C])
|
2020-07-07 11:06:44 +08:00
|
|
|
AX_CHECK_COMPILE_FLAG([-Wtautological-constant-compare],
|
2018-05-30 21:21:59 +01:00
|
|
|
[CFLAGS+=" -Wno-tautological-constant-compare"],
|
|
|
|
[],
|
|
|
|
[-Werror])
|
|
|
|
AC_LANG_POP([C])
|
2020-07-07 11:06:44 +08:00
|
|
|
AX_CHECK_COMPILE_FLAG([-Wtautological-constant-compare],
|
2018-05-30 21:21:59 +01:00
|
|
|
[CXXFLAGS+=" -Wno-tautological-constant-compare"],
|
2018-05-26 20:05:14 +01:00
|
|
|
[],
|
|
|
|
[-Werror])
|
|
|
|
|
2019-09-11 16:02:10 +01:00
|
|
|
# LTO is enabled by default on SUSE Tumbleweed and RPM lint generates an error if
|
|
|
|
# the flag is not used to compile archives:
|
|
|
|
# E: lto-no-text-in-archive
|
|
|
|
AC_LANG_PUSH([C])
|
|
|
|
AX_CHECK_COMPILE_FLAG([-ffat-lto-objects],
|
|
|
|
[CFLAGS+=" -ffat-lto-objects"],
|
|
|
|
[],
|
|
|
|
[-Werror])
|
|
|
|
AC_LANG_POP([C])
|
|
|
|
AX_CHECK_COMPILE_FLAG([-ffat-lto-objects],
|
|
|
|
[CXXFLAGS+=" -ffat-lto-objects"],
|
|
|
|
[],
|
|
|
|
[-Werror])
|
|
|
|
|
2010-11-15 17:02:36 +01:00
|
|
|
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
|
|
|
|
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
|
2009-09-10 11:21:05 +02:00
|
|
|
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
|
2010-02-15 23:51:05 +01:00
|
|
|
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
|
2009-07-29 12:07:54 +02:00
|
|
|
|
2015-12-07 18:19:45 +06:00
|
|
|
AC_SUBST(LIBZMQ_VMCI_CXXFLAGS)
|
|
|
|
AC_SUBST(LIBZMQ_VMCI_LDFLAGS)
|
|
|
|
|
2016-09-27 18:39:07 +01:00
|
|
|
AC_SUBST(pkg_config_libs_private, $PKGCFG_LIBS_PRIVATE)
|
2018-12-14 21:45:27 +00:00
|
|
|
AC_SUBST(pkg_config_names_private, $PKGCFG_NAMES_PRIVATE)
|
2016-09-27 18:39:07 +01:00
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
# set pkgconfigdir, allow override
|
|
|
|
AC_ARG_WITH([pkgconfigdir],
|
|
|
|
AS_HELP_STRING([--with-pkgconfigdir=PATH],
|
|
|
|
[Path to the pkgconfig directory [[LIBDIR/pkgconfig]]]),
|
|
|
|
[pkgconfigdir="$withval"],
|
|
|
|
[pkgconfigdir='${libdir}/pkgconfig'])
|
2014-10-10 14:36:12 -07:00
|
|
|
AC_SUBST([pkgconfigdir])
|
|
|
|
|
2014-10-13 19:10:36 -07:00
|
|
|
AC_CONFIG_FILES([ \
|
|
|
|
Makefile \
|
Added Z85 support
The use of binary for CURVE keys is painful; you cannot easily copy
these in e.g. email, or use them directly in source code. There are
various encoding possibilities. Base16 and Base64 are not optimal.
Ascii85 is not safe for source (it generates quotes and escapes).
So, I've designed a new Base85 encoding, Z85, which is safe to use
in code and elsewhere, and I've modified libzmq to use this where
it also uses binary keys (in get/setsockopt).
Very simply, if you use a 32-byte value, it's Base256 (binary),
and if you use a 40-byte value, it's Base85 (Z85).
I've put the Z85 codec into z85_codec.hpp, it's not elegant C++
but it is minimal and it works. Feel free to rewrap as a real class
if this annoys you.
2013-06-28 22:10:22 +02:00
|
|
|
src/libzmq.pc \
|
|
|
|
doc/Makefile \
|
2015-08-10 12:25:19 +02:00
|
|
|
builds/Makefile \
|
2018-05-24 08:59:30 +02:00
|
|
|
builds/deprecated-msvc/Makefile])
|
2014-10-13 19:10:36 -07:00
|
|
|
|
2010-11-18 11:51:27 +01:00
|
|
|
AC_OUTPUT
|