configure.ac 21.5 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 361
    # Check if we have eventfd.h header file.
    AC_CHECK_HEADERS(sys/eventfd.h,
362
        [AC_DEFINE(ZMQ_HAVE_EVENTFD, 1, [Have eventfd extension])])
363 364
fi

365 366
# Conditionally build performance measurement tools
AC_ARG_ENABLE([perf],
367
    [AS_HELP_STRING([--disable-perf], [don't build performance measurement tools [default=build]])],
368 369 370 371 372
    [zmq_enable_perf=$enableval],
    [zmq_enable_perf=yes])

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

373 374
# Conditionally build curve key generation tool
AC_ARG_ENABLE([curve-keygen],
375
    [AS_HELP_STRING([--disable-curve-keygen], [don't build curve-keygen tool [default=build]])],
376 377 378
    [zmq_enable_curve_keygen=$enableval],
    [zmq_enable_curve_keygen=yes])

Martin Sustrik's avatar
Martin Sustrik committed
379
# Use c++ in subsequent tests
380
AC_LANG_PUSH(C++)
Martin Sustrik's avatar
Martin Sustrik committed
381

382 383 384 385 386 387 388 389 390 391
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>])

392
AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes")
393

Martin Sustrik's avatar
Martin Sustrik committed
394 395 396
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
397

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

Martin Sustrik's avatar
Martin Sustrik committed
409 410 411 412
AC_HEADER_TIME
AC_TYPE_UINT32_T
AC_C_VOLATILE

413 414 415 416 417 418 419 420
# 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
421 422
    AC_CHECK_HEADERS(gssapi/gssapi_generic.h)
    AC_SEARCH_LIBS([gss_init_sec_context], [gssapi_krb5 gssapi],,
423 424 425
        AC_MSG_ERROR(libgssapi_krb5 is needed for GSSAPI security))
fi

426 427 428 429 430
# 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],
431
    [AS_HELP_STRING([--with-libsodium], [use libsodium instead of built-in tweetnacl [default=no]])])
432 433 434 435

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)
436
    ])
437
])
438

439
AC_ARG_ENABLE([curve],
440
    [AS_HELP_STRING([--disable-curve], [disable CURVE security [default=no]])])
441

442
if test "x$enable_curve" = "xno"; then
443 444 445
    curve_library=""
    AC_MSG_NOTICE([CURVE security is disabled])

446
elif test "x$with_libsodium" = "xyes"; then
447 448
    AC_MSG_NOTICE([Using libsodium for CURVE security])
    AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption])
449
    AC_DEFINE(ZMQ_USE_LIBSODIUM, [1], [Using libsodium for curve encryption])
450
    curve_library="libsodium"
451
    enable_curve="yes"
452 453

    # On Solaris, libsodium depends on libssp
Anthony Scemama's avatar
Anthony Scemama committed
454 455 456
    case "${host_os}" in
        *solaris*)
            LDFLAGS="-lssp $LDFLAGS"
457 458
            libzmq_pedantic="no"
            libzmq_werror="no"
Anthony Scemama's avatar
Anthony Scemama committed
459 460
        ;;
    esac
461

462
    PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE $sodium_LIBS"
463 464 465
else
    AC_MSG_NOTICE([Using tweetnacl for CURVE security])
    AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption])
466
    AC_DEFINE(ZMQ_USE_TWEETNACL, [1], [Using tweetnacl for curve encryption])
467
    curve_library="tweetnacl"
468
    enable_curve="yes"
469 470
fi

471 472
AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$enable_curve" = "xyes" -a "x$zmq_enable_curve_keygen" = "xyes")

473 474
AM_CONDITIONAL(USE_LIBSODIUM, test "$curve_library" = "libsodium")
AM_CONDITIONAL(USE_TWEETNACL, test "$curve_library" = "tweetnacl")
475

476 477
# build using pgm
have_pgm_library="no"
478

479
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm],
480
    [build libzmq with PGM extension. Requires pkg-config [default=no]])],
481 482
    [with_pgm_ext=$withval],
    [with_pgm_ext=no])
483

484
# conditionally require pgm package
485
if test "x$with_pgm_ext" != "xno"; then
486
    PKG_CHECK_MODULES([pgm], [openpgm-5.2 >= 5.2], [ have_pgm_library="yes" ],
487
        [PKG_CHECK_MODULES([pgm], [openpgm-5.1 >= 5.1],
488
            [ have_pgm_library="yes" ])])
489 490 491 492
fi

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

496
AM_CONDITIONAL(HAVE_PGM, test "x$have_pgm_library" = "xyes")
497

bebopagogo's avatar
bebopagogo committed
498 499 500 501

# 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)
502 503
AC_ARG_WITH([norm],
    [AS_HELP_STRING([--with-norm],
504
        [build libzmq with NORM protocol extension, optionally specifying norm path [default=no]])],
505
    [with_norm_ext=$withval],
506 507
    [with_norm_ext=no])

bebopagogo's avatar
bebopagogo committed
508 509
AC_MSG_CHECKING("with_norm_ext = ${with_norm_ext}")

510
if test "x$with_norm_ext" != "xno"; then
511
    AC_MSG_RESULT([yes])
bebopagogo's avatar
bebopagogo committed
512
    AC_DEFINE(ZMQ_HAVE_NORM, 1, [Have NORM protocol extension])
513

514
    if test "x$with_norm_ext" != "xyes"; then
bebopagogo's avatar
bebopagogo committed
515 516
        norm_path="${with_norm_ext}"
        LIBZMQ_EXTRA_CXXFLAGS="-I${norm_path}/include ${LIBZMQ_EXTRA_CXXFLAGS}"
517
        LIBZMQ_EXTRA_LDFLAGS="-L${norm_path}/lib ${LIBZMQ_EXTRA_LDFLAGS}"
bebopagogo's avatar
bebopagogo committed
518
    fi
519
    LIBS="-L${norm_path}/lib -lnorm $LIBS"
520
    PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -lnorm"
521 522
else
    AC_MSG_RESULT([no])
bebopagogo's avatar
bebopagogo committed
523 524
fi

Ilya Kulakov's avatar
Ilya Kulakov committed
525 526 527 528 529 530
# 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],
531
    [have_vmci_ext=no])
Ilya Kulakov's avatar
Ilya Kulakov committed
532 533 534 535 536 537 538 539 540 541 542 543 544 545 546

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

547 548
# Set -Wall, -Werror and -pedantic
AC_LANG_PUSH([C++])
549

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

553 554
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"])
555 556
fi

557 558
if test "x$libzmq_pedantic" = "xyes"; then
    LIBZMQ_LANG_STRICT([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CPPFLAGS"])
559
fi
560
AC_LANG_POP([C++])
561

562
AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")
563
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw" = "xyes")
564
AM_CONDITIONAL(ON_CYGWIN, test "x$libzmq_on_cygwin" = "xyes")
565
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
566
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
567
AM_CONDITIONAL(ON_GNU, test "x$libzmq_on_gnu" = "xyes")
568

569 570 571 572 573 574 575 576 577
# 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++])

578 579
# Checks for library functions.
AC_TYPE_SIGNAL
580
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork posix_memalign mkdtemp)
581
AC_CHECK_HEADERS([alloca.h])
582 583 584 585 586 587

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

# TCP keep-alives Checks.
590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618
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.])
    ])
619

620 621
AM_CONDITIONAL(HAVE_FORK, test "x$ac_cv_func_fork" = "xyes")

622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647
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

648 649 650 651 652
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])
653
        AC_CHECK_LIB([dl], [dladdr])
654 655 656 657 658
    ],
    [
        AC_MSG_WARN([Cannot find libunwind])
    ])

Mikko Koppanen's avatar
Mikko Koppanen committed
659 660
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
661
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
662
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
Martin Sustrik's avatar
Martin Sustrik committed
663

Ilya Kulakov's avatar
Ilya Kulakov committed
664 665 666
AC_SUBST(LIBZMQ_VMCI_CXXFLAGS)
AC_SUBST(LIBZMQ_VMCI_LDFLAGS)

667 668
AC_SUBST(pkg_config_libs_private, $PKGCFG_LIBS_PRIVATE)

669 670 671 672 673 674
# 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'])
675 676
AC_SUBST([pkgconfigdir])

677 678
AC_CONFIG_FILES([ \
    Makefile \
Pieter Hintjens's avatar
Pieter Hintjens committed
679 680
    src/libzmq.pc \
    doc/Makefile \
681
    builds/Makefile \
682
    builds/msvc/Makefile])
683

684
AC_OUTPUT