configure.ac 18.4 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
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
Martin Sustrik's avatar
Martin Sustrik committed
17

18 19 20
# This lets us use PACKAGE_VERSION in Makefiles
AC_SUBST(PACKAGE_VERSION)

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

40 41 42 43 44
# 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
45
# Checks for programs.
46
AC_PROG_CC
Mikko Koppanen's avatar
Mikko Koppanen committed
47
AC_PROG_CC_C99
Martin Sustrik's avatar
Martin Sustrik committed
48
AC_PROG_CXX
49
AM_PROG_CC_C_O
malosek's avatar
malosek committed
50 51
AC_PROG_SED
AC_PROG_AWK
52
PKG_PROG_PKG_CONFIG
53
m4_pattern_forbid([^PKG_[A-Z_]+$], [missing some pkg-config macros (pkg-config package)])
Martin Sustrik's avatar
Martin Sustrik committed
54

Mikko Koppanen's avatar
Mikko Koppanen committed
55
# Libtool configuration for different targets. See acinclude.m4
56 57 58 59
AC_ARG_VAR([XMLTO], [Path to xmlto command])
AC_PATH_PROG([XMLTO], [xmlto])
AC_ARG_VAR([ASCIIDOC], [Path to asciidoc command])
AC_PATH_PROG([ASCIIDOC], [asciidoc])
60
LIBZMQ_CONFIG_LIBTOOL
61 62
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
Mikko Koppanen's avatar
Mikko Koppanen committed
63

64
# Check whether to build a with debug symbols
65
LIBZMQ_CHECK_ENABLE_DEBUG
66

67
# Check wheter to enable code coverage
68
LIBZMQ_WITH_GCOV
69

70 71


72
AC_MSG_CHECKING([if TIPC is available and supports nonblocking connect])
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

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

104 105
AC_MSG_RESULT([$libzmq_tipc_support])

106

107
AC_ARG_WITH([relaxed],
108 109 110 111
    [AS_HELP_STRING([--with-relaxed],
        [Switch off pedantic compiler])],
    [zmq_relaxed="yes"],
    [])
112 113 114 115 116 117

if test "x$zmq_relaxed" = "xyes"; then
    libzmq_pedantic="no"
else
    libzmq_pedantic="yes"
fi
118

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

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
130
# By default compiling with -Werror except OSX.
131
libzmq_werror="yes"
132

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

Pieter Hintjens's avatar
Pieter Hintjens committed
136
# Platform specific checks
137
libzmq_on_mingw32="no"
138
libzmq_on_cygwin="no"
139
libzmq_on_android="no"
140
libzmq_on_linux="no"
141

142
# Set some default features required by 0MQ code.
143
CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS"
144

145 146 147
# For host type checks
AC_CANONICAL_HOST

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

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

        if test "x$enable_static" = "xyes"; then
268
            CPPFLAGS="-DZMQ_STATIC"
Mikko Koppanen's avatar
Mikko Koppanen committed
269
        fi
270
        
Michael's avatar
Michael committed
271
	# Set FD_SETSIZE to 1024
Michael's avatar
Michael committed
272
	CPPFLAGS=" -DFD_SETSIZE=1024 $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
273
        ;;
Martin Sustrik's avatar
Martin Sustrik committed
274
    *cygwin*)
Martin Lucina's avatar
Martin Lucina committed
275 276
        # Define on Cygwin to enable all library features
        CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
277
        AC_DEFINE(ZMQ_HAVE_CYGWIN, 1, [Have Cygwin])
278
        libzmq_on_cygwin="yes"
279
        libzmq_dso_visibility="no"
Mikko Koppanen's avatar
Mikko Koppanen committed
280 281 282
        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
283
        ;;
Martin Sustrik's avatar
Martin Sustrik committed
284
    *)
285
        AC_MSG_ERROR([unsupported system: ${host_os}.])
Martin Sustrik's avatar
Martin Sustrik committed
286 287 288
        ;;
esac

289 290 291
# Checks for libraries
AC_CHECK_LIB([pthread], [pthread_create])
AC_CHECK_LIB([rt], [clock_gettime])
292

293 294 295
#
# Check if the compiler supports -fvisibility=hidden flag. MinGW32 uses __declspec
#
296
if test "x$libzmq_dso_visibility" = "xyes"; then
297
    AC_LANG_PUSH([C++])
298
    LIBZMQ_CHECK_LANG_VISIBILITY([LIBZMQ_EXTRA_CXXFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag ${LIBZMQ_EXTRA_CXXFLAGS}"])
299
    AC_LANG_POP([C++])
300 301
fi

302 303 304
# CPU-specific optimizations
case "${host_cpu}" in
    *sparc*)
305
        AC_LANG_PUSH([C++])
306
        LIBZMQ_CHECK_LANG_FLAG_PREPEND([-mcpu=v9])
307
        AC_LANG_POP([C++])
308 309 310 311
    ;;
    *)
    ;;
esac
Martin Sustrik's avatar
Martin Sustrik committed
312

Mikko Koppanen's avatar
Mikko Koppanen committed
313
# Check whether to build docs / install man pages
314
LIBZMQ_CHECK_DOC_BUILD
Mikko Koppanen's avatar
Mikko Koppanen committed
315

316 317
# Check polling system
LIBZMQ_CHECK_POLLER([CPPFLAGS="${CPPFLAGS} -D${libzmq_cv_poller_flag}"],
318
    [AC_MSG_ERROR([Unable to continue without polling system])])
319

Martin Sustrik's avatar
Martin Sustrik committed
320 321
# Checks for header files.
AC_HEADER_STDC
322 323 324 325 326 327 328 329 330 331 332 333 334
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
335 336

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

339 340 341
# 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.])])

342
# Force not to use eventfd
343 344
AC_ARG_ENABLE([eventfd],
    [AS_HELP_STRING([--disable-eventfd], [disable eventfd [default=no]])],
345 346
    [zmq_enable_eventfd=$enableval],
    [zmq_enable_eventfd=yes])
347

348
if test "x$zmq_enable_eventfd" = "xyes"; then
349 350
    # Check if we have eventfd.h header file.
    AC_CHECK_HEADERS(sys/eventfd.h,
351
        [AC_DEFINE(ZMQ_HAVE_EVENTFD, 1, [Have eventfd extension.])])
352 353
fi

354 355 356 357 358 359 360 361
# Conditionally build performance measurement tools
AC_ARG_ENABLE([perf],
    [AS_HELP_STRING([--enable-perf], [Build performance measurement tools [default=yes].])],
    [zmq_enable_perf=$enableval],
    [zmq_enable_perf=yes])

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

362 363 364 365 366 367 368 369
# Conditionally build curve key generation tool
AC_ARG_ENABLE([curve-keygen],
    [AS_HELP_STRING([--enable-curve-keygen], [Build curve key-generation tool [default=yes].])],
    [zmq_enable_curve_keygen=$enableval],
    [zmq_enable_curve_keygen=yes])

AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$zmq_enable_curve_keygen" = "xyes")

Martin Sustrik's avatar
Martin Sustrik committed
370
# Use c++ in subsequent tests
371
AC_LANG_PUSH(C++)
Martin Sustrik's avatar
Martin Sustrik committed
372

373 374 375 376 377 378 379 380 381 382
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>])

383
AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes")
384

Martin Sustrik's avatar
Martin Sustrik committed
385 386 387
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
388

389
# Checks for typedefs, structures, and compiler characteristics.
390
if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_intel_compiler" = "xyes"; then
391 392
    dnl 279: controlling expression is constant
    dnl Fixes build with ICC 12.x
393 394
    LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SIZE_T])
    LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SSIZE_T])
395 396 397 398
else
    AC_TYPE_SIZE_T
    AC_TYPE_SSIZE_T
fi
399

Martin Sustrik's avatar
Martin Sustrik committed
400 401 402 403
AC_HEADER_TIME
AC_TYPE_UINT32_T
AC_C_VOLATILE

404 405 406 407 408 409 410 411 412 413 414 415
# 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
    AC_CHECK_LIB([gssapi_krb5], [gss_init_sec_context],,
        AC_MSG_ERROR(libgssapi_krb5 is needed for GSSAPI security))
fi

416 417 418 419
# build using libsodium
have_sodium_library="no"

AC_ARG_WITH([libsodium], [AS_HELP_STRING([--with-libsodium],
420
    [require libzmq build with libsodium crypto library. Requires pkg-config [default=yes]])],
421
    [require_libsodium_ext=$withval],
422
    [require_libsodium_ext=yes])
423

424
# conditionally require libsodium package
425 426 427 428
if test "x$require_libsodium_ext" != "xno"; then
    PKG_CHECK_MODULES([sodium], [libsodium], [have_sodium_library="yes"])
fi

429
if test "x$have_sodium_library" != "xno"; then
430
    AC_DEFINE(HAVE_LIBSODIUM, 1, [The libsodium library is to be used.])
Anthony Scemama's avatar
Anthony Scemama committed
431 432 433 434 435 436 437 438

    # ssp library is required for libsodium on Solaris-like systems
    case "${host_os}" in
        *solaris*)
            LDFLAGS="-lssp $LDFLAGS"
            CPPFLAGS="$CPPFLAGS -Wno-long-long"
        ;;
    esac
439 440
fi

Anthony Scemama's avatar
Anthony Scemama committed
441

442
AM_CONDITIONAL(HAVE_SODIUM, test "x$have_sodium_library" != "xno")
443

444 445
# build using pgm
have_pgm_library="no"
446

447
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm],
448
    [build libzmq with PGM extension. Requires pkg-config [default=no]])],
449 450
    [with_pgm_ext=$withval],
    [with_pgm_ext=no])
451

452
# conditionally require pgm package
453
if test "x$with_pgm_ext" != "xno"; then
454 455 456
    PKG_CHECK_MODULES([pgm], [openpgm-5.2 >= 5.2], [ have_pgm_library="yes" ],
        [PKG_CHECK_MODULES([pgm], [openpgm-5.1 >= 5.1],
            [ have_pgm_library="yes" ])])
457 458 459 460
fi

if test "x$have_pgm_library" = "xyes"; then
    AC_DEFINE(ZMQ_HAVE_OPENPGM, [1], [Have OpenPGM extension])
461 462
fi

463
AM_CONDITIONAL(HAVE_PGM, test "x$have_pgm_library" = "xyes")
464

bebopagogo's avatar
bebopagogo committed
465 466 467 468

# 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)
469 470
AC_ARG_WITH([norm],
    [AS_HELP_STRING([--with-norm],
471
        [build libzmq with NORM protocol extension, optionally specifying norm path [default=no]])],
472
    [with_norm_ext=$withval],
473 474 475 476
    [with_norm_ext=no])



bebopagogo's avatar
bebopagogo committed
477 478
AC_MSG_CHECKING("with_norm_ext = ${with_norm_ext}")

479
if test "x$with_norm_ext" != "xno"; then
bebopagogo's avatar
bebopagogo committed
480
    AC_DEFINE(ZMQ_HAVE_NORM, 1, [Have NORM protocol extension])
481

482
    if test "x$with_norm_ext" != "xyes"; then
bebopagogo's avatar
bebopagogo committed
483 484 485 486
        norm_path="${with_norm_ext}"
        LIBZMQ_EXTRA_CXXFLAGS="-I${norm_path}/include ${LIBZMQ_EXTRA_CXXFLAGS}"
        LIBZMQ_EXTRA_LDFLAGS="-I${norm_path}/include ${LIBZMQ_EXTRA_LDFLAGS}"
    fi
487

bebopagogo's avatar
bebopagogo committed
488 489 490
    LIBS="-lnorm $LIBS"
fi

Ilya Kulakov's avatar
Ilya Kulakov committed
491 492 493 494 495 496
# 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],
497
    [have_vmci_ext=no])
Ilya Kulakov's avatar
Ilya Kulakov committed
498 499 500 501 502 503 504 505 506 507 508 509 510 511 512

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

513 514
# Set -Wall, -Werror and -pedantic
AC_LANG_PUSH([C++])
515

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

519 520
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"])
521 522
fi

523 524
if test "x$libzmq_pedantic" = "xyes"; then
    LIBZMQ_LANG_STRICT([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CPPFLAGS"])
525
fi
526
AC_LANG_POP([C++])
527

528
AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")
529
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes")
530
AM_CONDITIONAL(ON_CYGWIN, test "x$libzmq_on_cygwin" = "xyes")
531
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
532
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
533

534 535 536 537 538 539 540 541 542
# 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++])

543 544
# Checks for library functions.
AC_TYPE_SIGNAL
545
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork posix_memalign)
546
AC_CHECK_HEADERS([alloca.h])
547 548 549 550 551 552

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

# TCP keep-alives Checks.
555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583
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.])
    ])
584

585 586
AM_CONDITIONAL(HAVE_FORK, test "x$ac_cv_func_fork" = "xyes")

Mikko Koppanen's avatar
Mikko Koppanen committed
587 588
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
589
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
590
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
Martin Sustrik's avatar
Martin Sustrik committed
591

Ilya Kulakov's avatar
Ilya Kulakov committed
592 593 594
AC_SUBST(LIBZMQ_VMCI_CXXFLAGS)
AC_SUBST(LIBZMQ_VMCI_LDFLAGS)

595 596 597 598 599 600
# 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'])
601 602
AC_SUBST([pkgconfigdir])

603 604
AC_CONFIG_FILES([ \
    Makefile \
Pieter Hintjens's avatar
Pieter Hintjens committed
605 606
    src/libzmq.pc \
    doc/Makefile \
607
    builds/Makefile \
Pieter Hintjens's avatar
Pieter Hintjens committed
608
    builds/msvc/Makefile \
609
    builds/redhat/zeromq.spec])
610

611
AC_OUTPUT