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
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 302 303
# Checks for libraries
AC_CHECK_LIB([pthread], [pthread_create])
AC_CHECK_LIB([rt], [clock_gettime])
AC_CHECK_LIB([sodium], [sodium_init],,AC_MSG_WARN(libsodium is needed for CURVE security))

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

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

Mikko Koppanen's avatar
Mikko Koppanen committed
324
# Check whether to build docs / install man pages
325
LIBZMQ_CHECK_DOC_BUILD
Mikko Koppanen's avatar
Mikko Koppanen committed
326

327 328 329 330
# 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
331 332 333
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(errno.h arpa/inet.h netinet/tcp.h netinet/in.h stddef.h \
334
stdlib.h string.h sys/socket.h sys/time.h time.h unistd.h limits.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 343 344 345 346 347 348 349 350 351
# 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
352
# Use c++ in subsequent tests
353
AC_LANG_PUSH(C++)
Martin Sustrik's avatar
Martin Sustrik committed
354

355 356
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>])
357
AM_CONDITIONAL(HAVE_IPC_PEERCRED, test "x$ac_cv_have_decl_SO_PEERCRED" = "xyes" || test "x$ac_cv_have_decl_LOCAL_PEERCRED" = "xyes")
358

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

376
#  PGM extension
377
libzmq_pgm_ext="no"
378

379
pgm_basename="libpgm-5.2.122~dfsg"
380

381
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm], 
382
    [build libzmq with PGM extension [default=no]])], 
383
    [with_pgm_ext=$withval], [with_pgm_ext=no])
384

385 386
# build using system pgm
AC_ARG_WITH([system-pgm], [AS_HELP_STRING([--with-system-pgm],
387
    [build libzmq with PGM extension. Requires pkg-config [default=no]])],
388 389 390 391 392 393
    [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

394
if test "x$with_pgm_ext" != "xno"; then
395

396 397 398 399
    # 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"
400 401
    fi

402
    # Unpack libpgm
403
    AC_MSG_NOTICE([Unpacking ${pgm_basename}.tar.gz])
404
    libzmq_pwd=`pwd`
405 406 407 408
    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])
409
    fi
410

411
    cd "${libzmq_pwd}"
412

413 414 415 416 417 418 419 420 421 422 423 424 425
    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])
426
    LIBZMQ_CHECK_LANG_VISIBILITY([ac_configure_args="CFLAGS='$libzmq_cv_[]_AC_LANG_ABBREV[]_visibility_flag' ${ac_configure_args}"])
427 428 429 430 431 432 433 434 435
    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!
436
    AC_DEFINE(ZMQ_HAVE_OPENPGM, 1, [Have OpenPGM extension])
437
    libzmq_pgm_ext="yes"
438 439
fi

440 441
# Build with system openpgm
if test "x$with_system_pgm_ext" != "xno"; then
442
    m4_ifdef([PKG_CHECK_MODULES], [
Jose Pedro Oliveira's avatar
Jose Pedro Oliveira committed
443 444 445 446 447 448 449 450 451 452 453 454
        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
455 456
    ],
    [AC_MSG_ERROR([--with-system-pgm requires a working pkg-config installation])])
457 458
fi

459 460
AC_SUBST(pgm_basename)

461 462
# Set -Wall, -Werror and -pedantic
AC_LANG_PUSH([C++])
463

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

467 468
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"])
469 470
fi

471 472
if test "x$libzmq_pedantic" = "xyes"; then
    LIBZMQ_LANG_STRICT([CPPFLAGS="$libzmq_cv_[]_AC_LANG_ABBREV[]_strict_flag $CPPFLAGS"])
473
fi
474
AC_LANG_POP([C++])
475

476
AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")
477 478
AM_CONDITIONAL(BUILD_PGM, test "x$libzmq_pgm_ext" = "xyes")
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes")
479
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
480
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
481

482 483
# Checks for library functions.
AC_TYPE_SIGNAL
484
AC_CHECK_FUNCS(perror gettimeofday clock_gettime memset socket getifaddrs freeifaddrs fork)
485
AC_CHECK_HEADERS([alloca.h])
486 487 488 489 490
LIBZMQ_CHECK_SOCK_CLOEXEC([AC_DEFINE(
                              [ZMQ_HAVE_SOCK_CLOEXEC],
                              [1],
                              [Whether SOCK_CLOEXEC is defined and functioning.])
                          ])
491 492 493 494

# TCP keep-alives Checks.
LIBZMQ_CHECK_SO_KEEPALIVE([AC_DEFINE(
                              [ZMQ_HAVE_SO_KEEPALIVE],
495 496 497
                              [1],
                              [Whether SO_KEEPALIVE is supported.])
                          ])
498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514
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],
515
                              [1],
516
                              [Whether TCP_KEEPALIVE is supported.])
517
                          ])
518

Mikko Koppanen's avatar
Mikko Koppanen committed
519 520
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
521
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
522
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
Martin Sustrik's avatar
Martin Sustrik committed
523

Pieter Hintjens's avatar
Pieter Hintjens committed
524 525 526 527 528 529 530 531
AC_CONFIG_FILES([Makefile \
    src/Makefile \
    src/libzmq.pc \
    doc/Makefile \
    perf/Makefile \
    tests/Makefile \
    tools/Makefile \
    builds/msvc/Makefile \
532 533
    foreign/openpgm/Makefile \
    builds/redhat/zeromq.spec])
534
AC_OUTPUT