configure.ac 21.7 KB
Newer Older
Martin Sustrik's avatar
Martin Sustrik committed
1 2 3
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
4
#
5 6
# The 0MQ version number is extracted from include/zmq.h using
# the version.sh script. Hence, it should be updated there.
7 8
# The version in git should reflect the *next* version planned.
#
9
AC_INIT([zeromq],[m4_esyscmd([./version.sh])],[zeromq-dev@lists.zeromq.org])
10

Martin Sustrik's avatar
Martin Sustrik committed
11
AC_CONFIG_AUX_DIR(config)
12
AC_CONFIG_MACRO_DIR(config)
13
AC_CONFIG_HEADERS([src/platform.hpp])
14 15
AM_INIT_AUTOMAKE(foreign subdir-objects tar-ustar dist-zip)

16 17 18
m4_pattern_allow([AC_PROG_CC_C99])
m4_include([m4/ax_check_compile_flag.m4])
m4_include([m4/ax_cxx_compile_stdcxx_11.m4])
19
m4_include([m4/ax_code_coverage.m4])
20
m4_include([m4/ax_valgrind_check.m4])
21
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
Martin Sustrik's avatar
Martin Sustrik committed
22

23 24 25
# This lets us use PACKAGE_VERSION in Makefiles
AC_SUBST(PACKAGE_VERSION)

26 27
# Libtool -version-info (ABI version)
#
28 29
# Don't change this unless you know exactly what you're doing and have read and
# understand:
30 31
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
#
32 33
# Changes:
#
34 35 36 37
# 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)
38
# ZeroMQ version 4.0: 4:0:0 (ABI version 4)
39
# ZeroMQ version 4.1: 5:0:0 (ABI version 5)
40
# ZeroMQ version 4.2.0: 6:0:1 (ABI version 5)
41 42
#
# libzmq -version-info current:revision:age
43
LTVER="6:0:1"
malosek's avatar
malosek committed
44 45
AC_SUBST(LTVER)

46 47 48 49 50
# Take a copy of original flags
ZMQ_ORIG_CFLAGS="${CFLAGS:-none}"
ZMQ_ORIG_CPPFLAGS="${CPPFLAGS:-none}"
ZMQ_ORIG_CXXFLAGS="${CXXFLAGS:-none}"

Martin Sustrik's avatar
Martin Sustrik committed
51
# Checks for programs.
52
AC_PROG_CC
53
AX_CHECK_COMPILE_FLAG([-std=gnu11], [CFLAGS+=" -std=gnu11"], [AC_PROG_CC_C99])
Martin Sustrik's avatar
Martin Sustrik committed
54
AC_PROG_CXX
55
AX_CXX_COMPILE_STDCXX_11([ext], [optional])
56
AX_CODE_COVERAGE
57
AM_PROG_CC_C_O
malosek's avatar
malosek committed
58 59
AC_PROG_SED
AC_PROG_AWK
60
PKG_PROG_PKG_CONFIG
61
m4_pattern_forbid([^PKG_[A-Z_]+$], [missing some pkg-config macros (pkg-config package)])
Martin Sustrik's avatar
Martin Sustrik committed
62

Mikko Koppanen's avatar
Mikko Koppanen committed
63
# Libtool configuration for different targets. See acinclude.m4
64
AC_ARG_VAR([XMLTO], [path to xmlto command])
65
AC_PATH_PROG([XMLTO], [xmlto])
66
AC_ARG_VAR([ASCIIDOC], [path to asciidoc command])
67
AC_PATH_PROG([ASCIIDOC], [asciidoc])
68
LIBZMQ_CONFIG_LIBTOOL
69 70
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
71
AX_VALGRIND_CHECK
Mikko Koppanen's avatar
Mikko Koppanen committed
72

73
# Check whether to build a with debug symbols
74
LIBZMQ_CHECK_ENABLE_DEBUG
75

hitstergtd's avatar
hitstergtd committed
76
# Check whether to enable code coverage
77
LIBZMQ_WITH_GCOV
78

79
AC_MSG_CHECKING([if TIPC is available and supports nonblocking connect])
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110

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);
            if (sd == -EAFNOSUPPORT) {
                return 1;
            }
            memset(&topsrv, 0, sizeof(topsrv));
            topsrv.family = AF_TIPC;
            topsrv.addrtype = TIPC_ADDR_NAME;
            topsrv.addr.name.name.type = TIPC_TOP_SRV;
            topsrv.addr.name.name.instance = TIPC_TOP_SRV;
            fcntl(sd, F_SETFL, O_NONBLOCK);
            if (connect(sd, (struct sockaddr *)&topsrv, sizeof(topsrv)) != 0) {
                if (errno != EINPROGRESS)
                    return -1;
            }
        ]])
    ],
    [libzmq_tipc_support=yes],
    [libzmq_tipc_support=no],
    [libzmq_tipc_support=no])

111 112
AC_MSG_RESULT([$libzmq_tipc_support])

113 114 115
AC_ARG_ENABLE([pedantic],
    [AS_HELP_STRING([--disable-pedantic], [disable pedantic compiler checks [default=enabled]])],
    [libzmq_pedantic=$enableval], [libzmq_pedantic=yes])
116

117
AC_ARG_WITH([militant],
118
    [AS_HELP_STRING([--with-militant],
119
        [enable militant API assertions])],
120 121
    [zmq_militant="yes"],
    [])
122 123 124 125 126 127

if test "x$zmq_militant" = "xyes"; then
    AC_DEFINE(ZMQ_ACT_MILITANT, 1, [Enable militant API assertions])
fi


Mikko Koppanen's avatar
Mikko Koppanen committed
128
# By default compiling with -Werror except OSX.
129
libzmq_werror="yes"
130

Mikko Koppanen's avatar
Mikko Koppanen committed
131
# By default use DSO visibility
132
libzmq_dso_visibility="yes"
Mikko Koppanen's avatar
Mikko Koppanen committed
133

Pieter Hintjens's avatar
Pieter Hintjens committed
134
# Platform specific checks
135
libzmq_on_mingw="no"
136
libzmq_on_cygwin="no"
137
libzmq_on_android="no"
138
libzmq_on_linux="no"
139
libzmq_on_gnu="no"
140

141 142
# Set some default features required by ZeroMQ code
CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE -Wno-long-long $CPPFLAGS"
143

144 145 146
# Will be used to add flags to pkg-config useful when apps want to statically link
PKGCFG_LIBS_PRIVATE=""

147 148 149
# For host type checks
AC_CANONICAL_HOST

150
# OS-specific tests
Martin Sustrik's avatar
Martin Sustrik committed
151 152
case "${host_os}" in
    *linux*)
153
        # Define on Linux to enable all library features. Define if using a gnu compiler
154
        if test "x$GXX" = "xyes"; then
155 156
            CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
        fi
Martin Sustrik's avatar
Martin Sustrik committed
157
        AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS])
158
        libzmq_on_linux="yes"
Mikko Koppanen's avatar
Mikko Koppanen committed
159

160 161 162 163 164
        # dladdr/dlopen is in libdl on glibc
        AC_SEARCH_LIBS([dladdr], [dl dld], [], [
          AC_MSG_ERROR([unable to find the dladdr() function])
        ])

165 166 167
        if test "x$libzmq_tipc_support" = "xyes"; then
            AC_DEFINE(ZMQ_HAVE_TIPC, 1, [Have TIPC support])
        fi
Mikko Koppanen's avatar
Mikko Koppanen committed
168 169 170
        case "${host_os}" in
            *android*)
                AC_DEFINE(ZMQ_HAVE_ANDROID, 1, [Have Android OS])
171
                libzmq_on_android="yes"
Mikko Koppanen's avatar
Mikko Koppanen committed
172 173
            ;;
        esac
Martin Sustrik's avatar
Martin Sustrik committed
174 175
        ;;
    *solaris*)
176
        # Define on Solaris to enable all library features
177
        CPPFLAGS="-Wno-sign-compare -D_PTHREADS $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
178
        AC_DEFINE(ZMQ_HAVE_SOLARIS, 1, [Have Solaris OS])
Mikko Koppanen's avatar
Mikko Koppanen committed
179 180
        AC_CHECK_LIB(socket, socket)
        AC_CHECK_LIB(nsl, gethostbyname)
Martin Lucina's avatar
Martin Lucina committed
181
        AC_MSG_CHECKING([whether atomic operations can be used])
Martin Sustrik's avatar
Martin Sustrik committed
182 183 184 185 186 187 188 189 190 191
        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
Martin Sustrik's avatar
Martin Sustrik committed
192
            AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
Martin Sustrik's avatar
Martin Sustrik committed
193 194 195
        fi
        ;;
    *freebsd*)
196 197
        # Define on FreeBSD to enable all library features
        CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
198
        AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have FreeBSD OS])
Martin Sustrik's avatar
Martin Sustrik committed
199
        ;;
200 201 202 203
    *dragonfly*)
        CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS"
        AC_DEFINE(ZMQ_HAVE_DRAGONFLY, 1, [Have DragonFly OS])
        ;;
Martin Sustrik's avatar
Martin Sustrik committed
204
    *darwin*)
205 206
        # Define on Darwin to enable all library features
        CPPFLAGS="-D_DARWIN_C_SOURCE $CPPFLAGS"
207 208
        libzmq_pedantic="no"
        libzmq_werror="no"
Martin Sustrik's avatar
Martin Sustrik committed
209
        AC_DEFINE(ZMQ_HAVE_OSX, 1, [Have DarwinOSX OS])
210
        AC_LANG_PUSH([C++])
211
        LIBZMQ_CHECK_LANG_FLAG_PREPEND([-Wno-uninitialized])
212
        AC_LANG_POP([C++])
Martin Sustrik's avatar
Martin Sustrik committed
213
        ;;
Martin Lucina's avatar
Martin Lucina committed
214 215 216 217
    *netbsd*)
        # Define on NetBSD to enable all library features
        CPPFLAGS="-D_NETBSD_SOURCE $CPPFLAGS"
        AC_DEFINE(ZMQ_HAVE_NETBSD, 1, [Have NetBSD OS])
218 219 220
        # 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++.
221
        libzmq_netbsd_has_atomic=no
222 223 224 225 226 227 228
        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;]])],
229 230
            [libzmq_netbsd_has_atomic=yes],
            [libzmq_netbsd_has_atomic=no])
231
        AC_LANG_POP([C++])
232 233
        AC_MSG_RESULT([$libzmq_netbsd_has_atomic])
        if test "x$libzmq_netbsd_has_atomic" = "xno"; then
Martin Lucina's avatar
Martin Lucina committed
234 235 236
            AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
        fi
        ;;
237
    *openbsd*|*bitrig*)
238 239
        # Define on OpenBSD to enable all library features
        CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
240
        AC_DEFINE(ZMQ_HAVE_OPENBSD, 1, [Have OpenBSD OS])
Martin Sustrik's avatar
Martin Sustrik committed
241 242
        ;;
    *nto-qnx*)
243
        libzmq_pedantic="no"
Martin Sustrik's avatar
Martin Sustrik committed
244
        AC_DEFINE(ZMQ_HAVE_QNXNTO, 1, [Have QNX Neutrino OS])
Mikko Koppanen's avatar
Mikko Koppanen committed
245
        AC_CHECK_LIB(socket, socket)
Martin Sustrik's avatar
Martin Sustrik committed
246 247
        ;;
    *aix*)
Martin Sustrik's avatar
Martin Sustrik committed
248
        AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS])
Martin Sustrik's avatar
Martin Sustrik committed
249 250
        ;;
    *hpux*)
251
        # Define on HP-UX to enable all library features
252
        CPPFLAGS="-D_POSIX_C_SOURCE=200112L $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
253
        AC_DEFINE(ZMQ_HAVE_HPUX, 1, [Have HPUX OS])
254 255
        LIBZMQ_CHECK_LANG_FLAG_PREPEND([-Ae])
        AC_CHECK_FUNCS(gethrtime)
Martin Sustrik's avatar
Martin Sustrik committed
256
        ;;
257
    *mingw*)
Martin Sustrik's avatar
Martin Sustrik committed
258
        AC_DEFINE(ZMQ_HAVE_WINDOWS, 1, [Have Windows OS])
259
        AC_DEFINE(ZMQ_HAVE_MINGW, 1, [Have MinGW])
Martin Sustrik's avatar
Martin Sustrik committed
260
        AC_CHECK_HEADERS(windows.h)
261
        AC_CHECK_LIB(ws2_32, main, ,
262
            [AC_MSG_ERROR([cannot link with ws2_32.dll.])])
Martin Lucina's avatar
Martin Lucina committed
263 264 265 266
        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.])])
267
        libzmq_on_mingw="yes"
268
        libzmq_dso_visibility="no"
Mikko Koppanen's avatar
Mikko Koppanen committed
269 270

        if test "x$enable_static" = "xyes"; then
271
            CPPFLAGS="-DZMQ_STATIC $CPPFLAGS"
Mikko Koppanen's avatar
Mikko Koppanen committed
272
        fi
273
        
274 275
	# Set FD_SETSIZE to 16384
	CPPFLAGS=" -DFD_SETSIZE=16384 $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
276
        ;;
Martin Sustrik's avatar
Martin Sustrik committed
277
    *cygwin*)
Martin Lucina's avatar
Martin Lucina committed
278 279
        # Define on Cygwin to enable all library features
        CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
280
        AC_DEFINE(ZMQ_HAVE_CYGWIN, 1, [Have Cygwin])
281
        libzmq_on_cygwin="yes"
282
        libzmq_dso_visibility="no"
Mikko Koppanen's avatar
Mikko Koppanen committed
283 284 285
        if test "x$enable_static" = "xyes"; then
            AC_MSG_ERROR([Building static libraries is not supported under Cygwin])
        fi
Martin Sustrik's avatar
Martin Sustrik committed
286
        ;;
287 288 289 290 291 292 293 294 295
    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)
        ;;
Martin Sustrik's avatar
Martin Sustrik committed
296
    *)
297
        AC_MSG_ERROR([unsupported system: ${host_os}.])
Martin Sustrik's avatar
Martin Sustrik committed
298 299 300
        ;;
esac

301 302 303
# Checks for libraries
AC_CHECK_LIB([pthread], [pthread_create])
AC_CHECK_LIB([rt], [clock_gettime])
304

305
#
306
# Check if the compiler supports -fvisibility=hidden flag. MinGW uses __declspec
307
#
308
if test "x$libzmq_dso_visibility" = "xyes"; then
309
    AC_LANG_PUSH([C++])
310
    LIBZMQ_CHECK_LANG_VISIBILITY([LIBZMQ_EXTRA_CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag ${LIBZMQ_EXTRA_CXXFLAGS}"])
311
    AC_LANG_POP([C++])
312 313
fi

314 315
# CPU-specific optimizations
case "${host_cpu}" in
316
    *sparc64*)
317
        AC_LANG_PUSH([C++])
318
        LIBZMQ_CHECK_LANG_FLAG_PREPEND([-mcpu=v9])
319
        AC_LANG_POP([C++])
320 321 322 323
    ;;
    *)
    ;;
esac
Martin Sustrik's avatar
Martin Sustrik committed
324

Mikko Koppanen's avatar
Mikko Koppanen committed
325
# Check whether to build docs / install man pages
326
LIBZMQ_CHECK_DOC_BUILD
Mikko Koppanen's avatar
Mikko Koppanen committed
327

328 329
# Check polling system, set appropriate macro in src/platform.hpp
LIBZMQ_CHECK_POLLER
330

Martin Sustrik's avatar
Martin Sustrik committed
331 332
# Checks for header files.
AC_HEADER_STDC
333 334 335 336 337 338 339 340 341 342 343 344 345
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)
Martin Sustrik's avatar
Martin Sustrik committed
346 347

# Check if we have ifaddrs.h header file.
Martin Sustrik's avatar
Martin Sustrik committed
348
AC_CHECK_HEADERS(ifaddrs.h, [AC_DEFINE(ZMQ_HAVE_IFADDRS, 1, [Have ifaddrs.h header.])])
Martin Sustrik's avatar
Martin Sustrik committed
349

350 351 352
# 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.])])

353
# Force not to use eventfd
354
AC_ARG_ENABLE([eventfd],
355
    [AS_HELP_STRING([--disable-eventfd], [disable eventfd [default=enabled]])],
356 357
    [zmq_enable_eventfd=$enableval],
    [zmq_enable_eventfd=yes])
358

359
if test "x$zmq_enable_eventfd" = "xyes"; then
360
    # Check if we have eventfd.h header file.
361 362 363 364 365 366 367 368
    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.])
            ])
    ])
369 370
fi

371 372
# Conditionally build performance measurement tools
AC_ARG_ENABLE([perf],
373
    [AS_HELP_STRING([--disable-perf], [don't build performance measurement tools [default=build]])],
374 375 376 377 378
    [zmq_enable_perf=$enableval],
    [zmq_enable_perf=yes])

AM_CONDITIONAL(ENABLE_PERF, test "x$zmq_enable_perf" = "xyes")

379 380
# Conditionally build curve key generation tool
AC_ARG_ENABLE([curve-keygen],
381
    [AS_HELP_STRING([--disable-curve-keygen], [don't build curve-keygen tool [default=build]])],
382 383 384
    [zmq_enable_curve_keygen=$enableval],
    [zmq_enable_curve_keygen=yes])

Martin Sustrik's avatar
Martin Sustrik committed
385
# Use c++ in subsequent tests
386
AC_LANG_PUSH(C++)
Martin Sustrik's avatar
Martin Sustrik committed
387

388 389 390 391 392 393 394 395 396 397
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>])

398
AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes")
399

Martin Sustrik's avatar
Martin Sustrik committed
400 401 402
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
403

404
# Checks for typedefs, structures, and compiler characteristics.
405
if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_intel_compiler" = "xyes"; then
406 407
    dnl 279: controlling expression is constant
    dnl Fixes build with ICC 12.x
408 409
    LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SIZE_T])
    LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SSIZE_T])
410 411 412 413
else
    AC_TYPE_SIZE_T
    AC_TYPE_SSIZE_T
fi
414

Martin Sustrik's avatar
Martin Sustrik committed
415 416 417 418
AC_HEADER_TIME
AC_TYPE_UINT32_T
AC_C_VOLATILE

419 420 421 422 423 424 425 426
# 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
427 428
    AC_CHECK_HEADERS(gssapi/gssapi_generic.h)
    AC_SEARCH_LIBS([gss_init_sec_context], [gssapi_krb5 gssapi],,
429 430 431
        AC_MSG_ERROR(libgssapi_krb5 is needed for GSSAPI security))
fi

432 433 434 435 436
# 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],
437
    [AS_HELP_STRING([--with-libsodium], [use libsodium instead of built-in tweetnacl [default=no]])])
438 439 440 441

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)
442
    ])
443
])
444

445
AC_ARG_ENABLE([curve],
446
    [AS_HELP_STRING([--disable-curve], [disable CURVE security [default=no]])])
447

448
if test "x$enable_curve" = "xno"; then
449 450 451
    curve_library=""
    AC_MSG_NOTICE([CURVE security is disabled])

452
elif test "x$with_libsodium" = "xyes"; then
453 454
    AC_MSG_NOTICE([Using libsodium for CURVE security])
    AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption])
455
    AC_DEFINE(ZMQ_USE_LIBSODIUM, [1], [Using libsodium for curve encryption])
456
    curve_library="libsodium"
457
    enable_curve="yes"
458 459

    # On Solaris, libsodium depends on libssp
Anthony Scemama's avatar
Anthony Scemama committed
460 461 462
    case "${host_os}" in
        *solaris*)
            LDFLAGS="-lssp $LDFLAGS"
463 464
            libzmq_pedantic="no"
            libzmq_werror="no"
Anthony Scemama's avatar
Anthony Scemama committed
465 466
        ;;
    esac
467

468
    PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE $sodium_LIBS"
469 470 471
else
    AC_MSG_NOTICE([Using tweetnacl for CURVE security])
    AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption])
472
    AC_DEFINE(ZMQ_USE_TWEETNACL, [1], [Using tweetnacl for curve encryption])
473
    curve_library="tweetnacl"
474
    enable_curve="yes"
475 476
fi

477 478
AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$enable_curve" = "xyes" -a "x$zmq_enable_curve_keygen" = "xyes")

479 480
AM_CONDITIONAL(USE_LIBSODIUM, test "$curve_library" = "libsodium")
AM_CONDITIONAL(USE_TWEETNACL, test "$curve_library" = "tweetnacl")
481

482 483
# build using pgm
have_pgm_library="no"
484

485
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm],
486
    [build libzmq with PGM extension. Requires pkg-config [default=no]])],
487 488
    [with_pgm_ext=$withval],
    [with_pgm_ext=no])
489

490
# conditionally require pgm package
491
if test "x$with_pgm_ext" != "xno"; then
492
    PKG_CHECK_MODULES([pgm], [openpgm-5.2 >= 5.2], [ have_pgm_library="yes" ],
493
        [PKG_CHECK_MODULES([pgm], [openpgm-5.1 >= 5.1],
494
            [ have_pgm_library="yes" ])])
495 496 497 498
fi

if test "x$have_pgm_library" = "xyes"; then
    AC_DEFINE(ZMQ_HAVE_OPENPGM, [1], [Have OpenPGM extension])
499
    PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE $pgm_LIBS"
500 501
fi

502
AM_CONDITIONAL(HAVE_PGM, test "x$have_pgm_library" = "xyes")
503

bebopagogo's avatar
bebopagogo committed
504 505 506 507

# 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)
508 509
AC_ARG_WITH([norm],
    [AS_HELP_STRING([--with-norm],
510
        [build libzmq with NORM protocol extension, optionally specifying norm path [default=no]])],
511
    [with_norm_ext=$withval],
512 513
    [with_norm_ext=no])

bebopagogo's avatar
bebopagogo committed
514 515
AC_MSG_CHECKING("with_norm_ext = ${with_norm_ext}")

516
if test "x$with_norm_ext" != "xno"; then
517
    AC_MSG_RESULT([yes])
bebopagogo's avatar
bebopagogo committed
518
    AC_DEFINE(ZMQ_HAVE_NORM, 1, [Have NORM protocol extension])
519

520
    if test "x$with_norm_ext" != "xyes"; then
bebopagogo's avatar
bebopagogo committed
521 522
        norm_path="${with_norm_ext}"
        LIBZMQ_EXTRA_CXXFLAGS="-I${norm_path}/include ${LIBZMQ_EXTRA_CXXFLAGS}"
523
        LIBZMQ_EXTRA_LDFLAGS="-L${norm_path}/lib ${LIBZMQ_EXTRA_LDFLAGS}"
bebopagogo's avatar
bebopagogo committed
524
    fi
525
    LIBS="-L${norm_path}/lib -lnorm $LIBS"
526
    PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lnorm"
527 528
else
    AC_MSG_RESULT([no])
bebopagogo's avatar
bebopagogo committed
529 530
fi

Ilya Kulakov's avatar
Ilya Kulakov committed
531 532 533 534 535 536
# 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],
537
    [have_vmci_ext=no])
Ilya Kulakov's avatar
Ilya Kulakov committed
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552

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")

553 554
# Set -Wall, -Werror and -pedantic
AC_LANG_PUSH([C++])
555

556
# Check how to enable -Wall
557
LIBZMQ_LANG_WALL([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_wall_flag $CPPFLAGS"])
malosek's avatar
malosek committed
558

559 560
if test "x$libzmq_werror" = "xyes" -a "x$libzmq_cv_[]_AC_LANG_ABBREV[]_sun_studio_compiler" != "xyes"; then
    LIBZMQ_LANG_WERROR([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_werror_flag $CPPFLAGS"])
561 562
fi

563 564
if test "x$libzmq_pedantic" = "xyes"; then
    LIBZMQ_LANG_STRICT([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CPPFLAGS"])
565
fi
566
AC_LANG_POP([C++])
567

568
AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")
569
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw" = "xyes")
570
AM_CONDITIONAL(ON_CYGWIN, test "x$libzmq_on_cygwin" = "xyes")
571
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
572
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
573
AM_CONDITIONAL(ON_GNU, test "x$libzmq_on_gnu" = "xyes")
574

575 576 577 578 579 580 581 582 583
# Check for __atomic_Xxx compiler intrinsics
AC_LANG_PUSH([C++])
LIBZMQ_CHECK_ATOMIC_INTRINSICS([
    AC_DEFINE([ZMQ_HAVE_ATOMIC_INTRINSICS],
              [1],
              [Whether compiler has __atomic_Xxx intrinsics.])
    ])
AC_LANG_POP([C++])

584 585
# Checks for library functions.
AC_TYPE_SIGNAL
586
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork posix_memalign mkdtemp)
587
AC_CHECK_HEADERS([alloca.h])
588 589 590 591 592 593

LIBZMQ_CHECK_SOCK_CLOEXEC([
    AC_DEFINE([ZMQ_HAVE_SOCK_CLOEXEC],
        [1],
        [Whether SOCK_CLOEXEC is defined and functioning.])
    ])
594 595

# TCP keep-alives Checks.
596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624
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.])
    ])
625

626 627
AM_CONDITIONAL(HAVE_FORK, test "x$ac_cv_func_fork" = "xyes")

628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653
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

654 655 656 657 658
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])
659
        AC_CHECK_LIB([dl], [dladdr])
660 661 662 663 664
    ],
    [
        AC_MSG_WARN([Cannot find libunwind])
    ])

Mikko Koppanen's avatar
Mikko Koppanen committed
665 666
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
667
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
668
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
Martin Sustrik's avatar
Martin Sustrik committed
669

Ilya Kulakov's avatar
Ilya Kulakov committed
670 671 672
AC_SUBST(LIBZMQ_VMCI_CXXFLAGS)
AC_SUBST(LIBZMQ_VMCI_LDFLAGS)

673 674
AC_SUBST(pkg_config_libs_private, $PKGCFG_LIBS_PRIVATE)

675 676 677 678 679 680
# 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'])
681 682
AC_SUBST([pkgconfigdir])

683 684
AC_CONFIG_FILES([ \
    Makefile \
Pieter Hintjens's avatar
Pieter Hintjens committed
685 686
    src/libzmq.pc \
    doc/Makefile \
687
    builds/Makefile \
688
    builds/msvc/Makefile])
689

690
AC_OUTPUT