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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

415 416 417 418 419
# 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]])],
420
    [require_libsodium_ext=$withval],
421
    [require_libsodium_ext=yes])
422

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

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

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

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

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

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

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

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

bebopagogo's avatar
bebopagogo committed
455 456 457 458

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



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

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

bebopagogo's avatar
bebopagogo committed
472 473 474 475 476
    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
477

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

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

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

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

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

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

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

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

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

# TCP keep-alives Checks.
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 551
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.])
    ])
552

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

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

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

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

576
AC_OUTPUT