configure.ac 19.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
AM_INIT_AUTOMAKE(tar-ustar dist-zip foreign)
15
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
Martin Sustrik's avatar
Martin Sustrik committed
16

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

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

38 39 40 41 42
# 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
43
# Checks for programs.
44
AC_PROG_CC
Mikko Koppanen's avatar
Mikko Koppanen committed
45
AC_PROG_CC_C99
Martin Sustrik's avatar
Martin Sustrik committed
46
AC_PROG_CXX
47
AM_PROG_CC_C_O
malosek's avatar
malosek committed
48 49
AC_PROG_SED
AC_PROG_AWK
Martin Sustrik's avatar
Martin Sustrik committed
50

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

60
# Check whether to build a with debug symbols
61
LIBZMQ_CHECK_ENABLE_DEBUG
62

63
# Check wheter to enable code coverage
64
LIBZMQ_WITH_GCOV
65

66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
AC_MSG_CHECKING([if TIPC is available and supports nonblocking connect])
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])
AC_MSG_RESULT([$libzmq_tipc_support])

96 97 98 99 100 101 102 103 104 105
# Allow libsodium to be installed in a custom path:

AC_ARG_WITH([libsodium],
            [AS_HELP_STRING([--with-libsodium],
                            [Specify libsodium prefix])],
            [zmq_search_libsodium="yes"],
            [])

if test "x$zmq_search_libsodium" = "xyes"; then
    if test -r "${with_libsodium}/include/sodium.h"; then
106
        CPPFLAGS="-I${with_libsodium}/include ${CPPFLAGS}"
107 108 109 110 111 112 113 114 115 116 117 118
        LDFLAGS="-L${with_libsodium}/lib ${LDFLAGS}"
    fi
fi

AC_ARG_WITH([libsodium-include-dir],
            [AS_HELP_STRING([--with-libsodium-include-dir],
                            [Specify libsodium include prefix])],
            [zmq_search_libsodium_include="yes"],
            [])

if test "x$zmq_search_libsodium_include" = "xyes"; then
    if test -r "${with_libsodium_include_dir}/sodium.h"; then
119
        CPPFLAGS="-I${with_libsodium_include_dir}/include ${CPPFLAGS}"
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
    fi
fi

AC_ARG_WITH([libsodium_lib_dir],
            [AS_HELP_STRING([--with-libsodium-lib-dir],
                            [Specify libsodium library prefix])],
            [zmq_search_libsodium_lib="yes"],
            [])

if test "x$zmq_search_libsodium_lib" = "xyes"; then
    if test -r "${with_libsodium_lib_dir}/libsodium.{a|so|dylib}"; then
        LDFLAGS="-L${with_libsodium}/lib ${LDFLAGS}"
    fi
fi

135 136 137 138 139 140 141 142 143 144 145
AC_ARG_WITH([relaxed],
            [AS_HELP_STRING([--with-relaxed],
                            [Switch off pedantic compiler])],
            [zmq_relaxed="yes"],
            [])

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

Mikko Koppanen's avatar
Mikko Koppanen committed
147
# By default compiling with -Werror except OSX.
148
libzmq_werror="yes"
149

Mikko Koppanen's avatar
Mikko Koppanen committed
150
# By default use DSO visibility
151
libzmq_dso_visibility="yes"
Mikko Koppanen's avatar
Mikko Koppanen committed
152

Pieter Hintjens's avatar
Pieter Hintjens committed
153
# Platform specific checks
154
libzmq_on_mingw32="no"
155
libzmq_on_android="no"
156
libzmq_on_linux="no"
157

158
# Set some default features required by 0MQ code.
159
CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS"
160

161 162 163
# For host type checks
AC_CANONICAL_HOST

164
# OS-specific tests
Martin Sustrik's avatar
Martin Sustrik committed
165 166
case "${host_os}" in
    *linux*)
167
        # Define on Linux to enable all library features. Define if using a gnu compiler
168
        if test "x$GXX" = "xyes"; then
169 170
            CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
        fi
Martin Sustrik's avatar
Martin Sustrik committed
171
        AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS])
172
        libzmq_on_linux="yes"
Mikko Koppanen's avatar
Mikko Koppanen committed
173

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

        if test "x$enable_static" = "xyes"; then
            AC_MSG_ERROR([Building static libraries is not supported under MinGW32])
        fi
Martin Sustrik's avatar
Martin Sustrik committed
285
        ;;
Martin Sustrik's avatar
Martin Sustrik committed
286
    *cygwin*)
Martin Lucina's avatar
Martin Lucina committed
287 288
        # Define on Cygwin to enable all library features
        CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
Martin Sustrik's avatar
Martin Sustrik committed
289
        AC_DEFINE(ZMQ_HAVE_CYGWIN, 1, [Have Cygwin])
Mikko Koppanen's avatar
Mikko Koppanen committed
290 291 292
        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
293
        ;;
Martin Sustrik's avatar
Martin Sustrik committed
294
    *)
295
        AC_MSG_ERROR([unsupported system: ${host_os}.])
Martin Sustrik's avatar
Martin Sustrik committed
296 297 298
        ;;
esac

299 300 301
# Checks for libraries
AC_CHECK_LIB([pthread], [pthread_create])
AC_CHECK_LIB([rt], [clock_gettime])
302 303 304 305 306 307
if test "x$zmq_search_libsodium" = "xyes"; then
    AC_CHECK_LIB([sodium], [sodium_init],,AC_MSG_ERROR(libsodium is not installed.  Install it or don't pass --with-libsodium to configure script))
else
    AC_CHECK_LIB([sodium], [sodium_init],,AC_MSG_WARN(libsodium is needed for CURVE security))
fi

308

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

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

Mikko Koppanen's avatar
Mikko Koppanen committed
329
# Check whether to build docs / install man pages
330
LIBZMQ_CHECK_DOC_BUILD
Mikko Koppanen's avatar
Mikko Koppanen committed
331

332 333 334 335
# Check polling system
LIBZMQ_CHECK_POLLER([CPPFLAGS="${CPPFLAGS} -D${libzmq_cv_poller_flag}"],
                    [AC_MSG_ERROR([Unable to continue without polling system])])

Martin Sustrik's avatar
Martin Sustrik committed
336 337 338
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(errno.h arpa/inet.h netinet/tcp.h netinet/in.h stddef.h \
339
stdlib.h string.h sys/socket.h sys/time.h time.h unistd.h limits.h)
Martin Sustrik's avatar
Martin Sustrik committed
340 341

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

344 345 346
# 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.])])

347 348 349 350 351 352 353 354 355 356
# Force not to use eventfd
AC_ARG_ENABLE([eventfd], [AS_HELP_STRING([--disable-eventfd], [disable eventfd [default=no]])],
    [zmq_disable_eventfd=yes], [zmq_disable_eventfd=no])

if test "x$zmq_disable_eventfd" != "xyes"; then
    # Check if we have eventfd.h header file.
    AC_CHECK_HEADERS(sys/eventfd.h,
                     [AC_DEFINE(ZMQ_HAVE_EVENTFD, 1, [Have eventfd extension.])])
fi

Martin Sustrik's avatar
Martin Sustrik committed
357
# Use c++ in subsequent tests
358
AC_LANG_PUSH(C++)
Martin Sustrik's avatar
Martin Sustrik committed
359

360 361
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>])
362
AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes")
363

Martin Sustrik's avatar
Martin Sustrik committed
364 365 366
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
367
# Checks for typedefs, structures, and compiler characteristics.
368
if test "x$libzmq_cv_[]_AC_LANG_ABBREV[]_intel_compiler" = "xyes"; then
369 370
    dnl 279: controlling expression is constant
    dnl Fixes build with ICC 12.x
371 372
    LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SIZE_T])
    LIBZMQ_CHECK_WITH_FLAG([-wd279], [AC_TYPE_SSIZE_T])
373 374 375 376
else
    AC_TYPE_SIZE_T
    AC_TYPE_SSIZE_T
fi
Martin Sustrik's avatar
Martin Sustrik committed
377 378 379 380
AC_HEADER_TIME
AC_TYPE_UINT32_T
AC_C_VOLATILE

381
#  PGM extension
382
libzmq_pgm_ext="no"
383

384
pgm_basename="libpgm-5.2.122~dfsg"
385

386
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm], 
387
    [build libzmq with PGM extension [default=no]])], 
388
    [with_pgm_ext=$withval], [with_pgm_ext=no])
389

390 391
# build using system pgm
AC_ARG_WITH([system-pgm], [AS_HELP_STRING([--with-system-pgm],
392
    [build libzmq with PGM extension. Requires pkg-config [default=no]])],
393 394 395 396 397 398
    [with_system_pgm_ext=yes], [with_system_pgm_ext=no])

if test "x$with_pgm_ext" != "xno" -a "x$with_system_pgm_ext" != "xno"; then
    AC_MSG_ERROR([--with-pgm and --with-system-pgm cannot be specified together])
fi

399
if test "x$with_pgm_ext" != "xno"; then
400

401 402 403 404
    # This allows placing the tar.gz to foreign/openpgm
    # and using ./configure --with-pgm=libpgm-x.y.z
    if test "x$with_pgm_ext" != "xyes"; then
        pgm_basename="$with_pgm_ext"
405 406
    fi

407
    # Unpack libpgm
408
    AC_MSG_NOTICE([Unpacking ${pgm_basename}.tar.gz])
409
    libzmq_pwd=`pwd`
410 411 412 413
    cd foreign/openpgm

    if ! (gzip -dc "${pgm_basename}.tar.gz" || echo "failed") | ${am__untar}; then
        AC_MSG_ERROR([cannot unpack the foreign/openpgm/${pgm_basename}.tar.gz file])
414
    fi
415

416
    cd "${libzmq_pwd}"
417

418 419 420 421 422 423 424 425 426 427 428 429 430
    if test -d foreign/openpgm/build-staging; then
        rm -rf foreign/openpgm/build-staging
    fi

    mv foreign/openpgm/${pgm_basename} foreign/openpgm/build-staging
    pgm_srcdir=foreign/openpgm/build-staging/openpgm/pgm

    if ! test -d foreign/openpgm/build-staging/openpgm/pgm/config; then
        mkdir foreign/openpgm/build-staging/openpgm/pgm/config
    fi

    # DSO symbol visibility for openpgm
    AC_LANG_PUSH([C])
431
    LIBZMQ_CHECK_LANG_VISIBILITY([ac_configure_args="CFLAGS='$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag' ${ac_configure_args}"])
432 433 434 435 436 437 438 439 440
    AC_LANG_POP([C])

    pgm_subdir=build-staging/openpgm/pgm
    AC_SUBST(pgm_subdir)

    AC_SUBST(pgm_srcdir)
    AC_CONFIG_SUBDIRS([foreign/openpgm/build-staging/openpgm/pgm/])

    # Success!
441
    AC_DEFINE(ZMQ_HAVE_OPENPGM, 1, [Have OpenPGM extension])
442
    libzmq_pgm_ext="yes"
443 444
fi

445 446
# Build with system openpgm
if test "x$with_system_pgm_ext" != "xno"; then
447
    m4_ifdef([PKG_CHECK_MODULES], [
Jose Pedro Oliveira's avatar
Jose Pedro Oliveira committed
448 449 450 451 452 453 454 455 456 457 458 459
        have_pgm_system_library="no"
        PKG_CHECK_MODULES([OpenPGM], [openpgm-5.2 >= 5.2],
            [ have_pgm_system_library="yes" ],
            [PKG_CHECK_MODULES([OpenPGM], [openpgm-5.1 >= 5.1],
                [ have_pgm_system_library="yes" ])
            ]
        )
        if test "x$have_pgm_system_library" = "xyes"; then
            AC_DEFINE(ZMQ_HAVE_OPENPGM, 1, [Have OpenPGM extension])
            LIBZMQ_EXTRA_CXXFLAGS="$OpenPGM_CFLAGS $LIBZMQ_EXTRA_CXXFLAGS"
            LIBS="$OpenPGM_LIBS $LIBS"
        fi
460 461
    ],
    [AC_MSG_ERROR([--with-system-pgm requires a working pkg-config installation])])
462 463
fi

464 465
AC_SUBST(pgm_basename)

bebopagogo's avatar
bebopagogo committed
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487

# 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)
AC_ARG_WITH([norm], [AS_HELP_STRING([--with-norm], 
    [build libzmq with NORM protocol extension, optionally specifying norm path [default=no]])],
    [with_norm_ext=$withval], [with_norm_ext=no])
    
    
AC_MSG_CHECKING("with_norm_ext = ${with_norm_ext}")

if test "x$with_norm_ext" != "xno"; then    
    AC_DEFINE(ZMQ_HAVE_NORM, 1, [Have NORM protocol extension])
    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
    LIBS="-lnorm $LIBS"
fi


488 489
# Set -Wall, -Werror and -pedantic
AC_LANG_PUSH([C++])
490

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

494 495
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"])
496 497
fi

498 499
if test "x$libzmq_pedantic" = "xyes"; then
    LIBZMQ_LANG_STRICT([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CPPFLAGS"])
500
fi
501
AC_LANG_POP([C++])
502

503
AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")
504 505
AM_CONDITIONAL(BUILD_PGM, test "x$libzmq_pgm_ext" = "xyes")
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes")
506
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
507
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
508

509 510
# Checks for library functions.
AC_TYPE_SIGNAL
511
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork)
512
AC_CHECK_HEADERS([alloca.h])
513 514 515 516 517
LIBZMQ_CHECK_SOCK_CLOEXEC([AC_DEFINE(
                              [ZMQ_HAVE_SOCK_CLOEXEC],
                              [1],
                              [Whether SOCK_CLOEXEC is defined and functioning.])
                          ])
518 519 520 521

# TCP keep-alives Checks.
LIBZMQ_CHECK_SO_KEEPALIVE([AC_DEFINE(
                              [ZMQ_HAVE_SO_KEEPALIVE],
522 523 524
                              [1],
                              [Whether SO_KEEPALIVE is supported.])
                          ])
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
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],
542
                              [1],
543
                              [Whether TCP_KEEPALIVE is supported.])
544
                          ])
545

Mikko Koppanen's avatar
Mikko Koppanen committed
546 547
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
548
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
549
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
Martin Sustrik's avatar
Martin Sustrik committed
550

Pieter Hintjens's avatar
Pieter Hintjens committed
551 552 553 554 555 556 557 558
AC_CONFIG_FILES([Makefile \
    src/Makefile \
    src/libzmq.pc \
    doc/Makefile \
    perf/Makefile \
    tests/Makefile \
    tools/Makefile \
    builds/msvc/Makefile \
559 560
    foreign/openpgm/Makefile \
    builds/redhat/zeromq.spec])
561
AC_OUTPUT