configure.ac 17.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
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 35
#
# libzmq -version-info current:revision:age
36
LTVER="4:0:0"
malosek's avatar
malosek committed
37 38
AC_SUBST(LTVER)

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

Mikko Koppanen's avatar
Mikko Koppanen committed
54
# Libtool configuration for different targets. See acinclude.m4
55 56 57 58
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])
59
LIBZMQ_CONFIG_LIBTOOL
60 61
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
Mikko Koppanen's avatar
Mikko Koppanen committed
62

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

66
# Check wheter to enable code coverage
67
LIBZMQ_WITH_GCOV
68

69 70


71
AC_MSG_CHECKING([if TIPC is available and supports nonblocking connect])
72 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

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

103 104
AC_MSG_RESULT([$libzmq_tipc_support])

105

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

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

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

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

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

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

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

144 145 146
# For host type checks
AC_CANONICAL_HOST

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

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

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

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

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

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

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

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

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

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

337 338 339
# 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.])])

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

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

352 353 354 355 356 357 358 359
# 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")

360 361 362 363 364 365 366 367
# 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
368
# Use c++ in subsequent tests
369
AC_LANG_PUSH(C++)
Martin Sustrik's avatar
Martin Sustrik committed
370

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

381
AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes")
382

Martin Sustrik's avatar
Martin Sustrik committed
383 384 385
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
386

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

Martin Sustrik's avatar
Martin Sustrik committed
398 399 400 401
AC_HEADER_TIME
AC_TYPE_UINT32_T
AC_C_VOLATILE

402 403 404 405 406 407 408 409 410 411 412 413
# 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

414 415 416 417 418
# build using libsodium
have_sodium_library="no"

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

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

427
if test "x$have_sodium_library" != "xno"; then
428
    AC_DEFINE(HAVE_LIBSODIUM, 1, [The libsodium library is to be used.])
429 430 431
fi

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

433 434
# build using pgm
have_pgm_library="no"
435

436
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm],
437
    [build libzmq with PGM extension. Requires pkg-config [default=no]])],
438 439
    [with_pgm_ext=$withval],
    [with_pgm_ext=no])
440

441
# conditionally require pgm package
442
if test "x$with_pgm_ext" != "xno"; then
443 444 445
    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" ])])
446 447 448 449
fi

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

452
AM_CONDITIONAL(HAVE_PGM, test "x$have_pgm_library" = "xyes")
453

bebopagogo's avatar
bebopagogo committed
454 455 456 457

# 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)
458 459
AC_ARG_WITH([norm],
    [AS_HELP_STRING([--with-norm],
460
        [build libzmq with NORM protocol extension, optionally specifying norm path [default=no]])],
461
    [with_norm_ext=$withval],
462 463 464 465
    [with_norm_ext=no])



bebopagogo's avatar
bebopagogo committed
466 467
AC_MSG_CHECKING("with_norm_ext = ${with_norm_ext}")

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

bebopagogo's avatar
bebopagogo committed
471 472 473 474 475
    if test "x$wwith_norm_ext" != "xyes"; then
        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
476

bebopagogo's avatar
bebopagogo committed
477 478 479
    LIBS="-lnorm $LIBS"
fi

480 481
# Set -Wall, -Werror and -pedantic
AC_LANG_PUSH([C++])
482

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

486 487
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"])
488 489
fi

490 491
if test "x$libzmq_pedantic" = "xyes"; then
    LIBZMQ_LANG_STRICT([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CPPFLAGS"])
492
fi
493
AC_LANG_POP([C++])
494

495
AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")
496
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes")
497
AM_CONDITIONAL(ON_CYGWIN, test "x$libzmq_on_cygwin" = "xyes")
498
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
499
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
500

501 502 503 504 505 506 507 508 509
# 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++])

510 511
# Checks for library functions.
AC_TYPE_SIGNAL
512
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork posix_memalign)
513
AC_CHECK_HEADERS([alloca.h])
514 515 516 517 518 519

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

# TCP keep-alives Checks.
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550
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.])
    ])
551

552 553
AM_CONDITIONAL(HAVE_FORK, test "x$ac_cv_func_fork" = "xyes")

Mikko Koppanen's avatar
Mikko Koppanen committed
554 555
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
556
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
557
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
Martin Sustrik's avatar
Martin Sustrik committed
558

559 560 561 562 563 564
# 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'])
565 566
AC_SUBST([pkgconfigdir])

567 568
AC_CONFIG_FILES([ \
    Makefile \
Pieter Hintjens's avatar
Pieter Hintjens committed
569 570 571
    src/libzmq.pc \
    doc/Makefile \
    builds/msvc/Makefile \
572
    builds/redhat/zeromq.spec])
573

574
AC_OUTPUT