0
0
mirror of https://github.com/zeromq/libzmq.git synced 2024-12-27 15:41:05 +08:00
libzmq/configure.in
Mikko Koppanen 925595259b MinGW32 build fixes
After long discussions in IRC we came to conclusion that there is no
elegant way to handle static builds with MinGW32. This patch sets
AC_DISABLE_STATIC by default on MinGW32 and Cygwin

Signed-off-by: Mikko Koppanen <mkoppanen@php.net>
2010-11-17 15:06:51 +01:00

384 lines
12 KiB
Plaintext

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
#
# The 0MQ version number is extracted from include/zmq.h using
# the version.sh script. Hence, it should be updated there.
# The version in git should reflect the *next* version planned.
#
AC_INIT([zeromq],
m4_esyscmd([./version.sh | tr -d '\n']),
[zeromq-dev@lists.zeromq.org])
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_MACRO_DIR(config)
AM_CONFIG_HEADER(src/platform.hpp)
AM_INIT_AUTOMAKE(tar-ustar dist-zip foreign)
# This lets us use PACKAGE_VERSION in Makefiles
AC_SUBST(PACKAGE_VERSION)
# Libtool -version-info (ABI version)
#
# Currently 0.0.0 ("unstable"). Don't change this unless you
# know exactly what you're doing and have read and understand
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
#
# libzmq -version-info
LTVER="0:0:0"
AC_SUBST(LTVER)
# Checks for programs.
AC_PROG_CC
AC_PROG_CC_C99
AC_PROG_CXX
AM_PROG_CC_C_O
AC_PROG_SED
AC_PROG_AWK
# Host specific checks
AC_CANONICAL_HOST
# Libtool configuration for different targets. See acinclude.m4
AC_CONFIG_LIBTOOL
# Check for ICC and Sun Studio compilers
AC_LANG(C)
AC_CHECK_LANG_ICC
AC_CHECK_LANG_SUN_STUDIO
AC_LANG(C++)
AC_CHECK_LANG_ICC
AC_CHECK_LANG_SUN_STUDIO
# Checks for libraries.
AC_CHECK_LIB([pthread], [pthread_create])
# Extra CFLAGS are appended at the end of CFLAGS for pgm.
LIBZMQ_EXTRA_CFLAGS=""
# Extra CXXFLAGS are appended at the end of CXXFLAGS for libzmq.
LIBZMQ_EXTRA_CXXFLAGS=""
# Extra LDFLAGS are appended at the end of LDFLAGS for libzmq.
LIBZMQ_EXTRA_LDFLAGS=""
# Set a helper variable to indicate GNU C and C++ are in use
if test "x$GCC" = "xyes" -a "x$GXX" = "xyes"; then
gnu_compilers="yes"
# ICC is detected as GNU compiler, make sure that it's not being used as one
if test "xyes" = "x$ac_cv_c_intel_compiler" -o "xyes" = "x$ac_cv_cpp_intel_compiler"; then
gnu_compilers="no"
fi
else
gnu_compilers="no"
fi
# Set pedantic when using GNU compilers
if test "x$gnu_compilers" = "xyes"; then
pedantic="yes"
fi
# By default compiling with -Werror except OSX.
werror="yes"
# Whether we are on mingw or not.
on_mingw32="no"
# Set some default features required by 0MQ code.
CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS"
# OS-specific tests
case "${host_os}" in
*linux*)
# Define on Linux to enable all library features. Define if using a gnu compiler
if test "x$gnu_compilers" = "xyes"; then
CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
fi
AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS])
AC_CHECK_LIB(rt, sem_init)
AC_CHECK_LIB(uuid, uuid_generate, ,
[AC_MSG_ERROR([cannot link with -luuid, install uuid-dev.])])
;;
*solaris*)
# Define on Solaris to enable all library features
CPPFLAGS="-D_PTHREADS $CPPFLAGS"
AC_DEFINE(ZMQ_HAVE_SOLARIS, 1, [Have Solaris OS])
AC_CHECK_LIB(socket, socket)
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(rt, sem_init)
AC_CHECK_LIB(uuid, uuid_generate, ,
[AC_MSG_ERROR([cannot link with -luuid, install uuid-dev.])])
AC_MSG_CHECKING([whether atomic operations can be used])
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
AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
fi
;;
*freebsd*)
# Define on FreeBSD to enable all library features
CPPFLAGS="-D__BSD_VISIBLE $CPPFLAGS"
AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have FreeBSD OS])
;;
*darwin*)
# Define on Darwin to enable all library features
CPPFLAGS="-D_DARWIN_C_SOURCE $CPPFLAGS"
pedantic="no"
werror="no"
AC_DEFINE(ZMQ_HAVE_OSX, 1, [Have DarwinOSX OS])
LIBZMQ_EXTRA_CXXFLAGS+="-Wno-uninitialized"
;;
*netbsd*)
# Define on NetBSD to enable all library features
CPPFLAGS="-D_NETBSD_SOURCE $CPPFLAGS"
AC_DEFINE(ZMQ_HAVE_NETBSD, 1, [Have NetBSD OS])
# 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++.
netbsd_has_atomic=no
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;]])],
[netbsd_has_atomic=yes],
[netbsd_has_atomic=no])
AC_LANG_POP([C++])
AC_MSG_RESULT([$netbsd_has_atomic])
if test "x$netbsd_has_atomic" = "xno"; then
AC_DEFINE(ZMQ_FORCE_MUTEXES, 1, [Force to use mutexes])
fi
;;
*openbsd*)
# Define on OpenBSD to enable all library features
CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
AC_DEFINE(ZMQ_HAVE_OPENBSD, 1, [Have OpenBSD OS])
;;
*nto-qnx*)
pedantic="no"
AC_DEFINE(ZMQ_HAVE_QNXNTO, 1, [Have QNX Neutrino OS])
AC_CHECK_LIB(socket, socket)
AC_CHECK_LIB(crypto, RAND_bytes)
;;
*aix*)
AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS])
AC_CHECK_LIB(crypto,RAND_bytes)
;;
*hpux*)
# Define on HP-UX to enable all library features
CPPFLAGS="-D_POSIX_C_SOURCE=200112L"
AC_DEFINE(ZMQ_HAVE_HPUX, 1, [Have HPUX OS])
AC_CHECK_LIB(rt, sem_init)
AC_CHECK_LIB(crypto, RAND_bytes)
;;
*mingw32*)
AC_DEFINE(ZMQ_HAVE_WINDOWS, 1, [Have Windows OS])
AC_DEFINE(ZMQ_HAVE_MINGW32, 1, [Have MinGW32])
AC_CHECK_HEADERS(windows.h)
AC_CHECK_LIB(ws2_32, main, ,
[AC_MSG_ERROR([cannot link with ws2_32.dll.])])
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.])])
# mingw32 defines __int64_t as long long
CPPFLAGS="-Wno-long-long ${CPPFLAGS} "
on_mingw32="yes"
if test "x$enable_static" = "xyes"; then
AC_MSG_ERROR([Building static libraries is not supported under MinGW32])
fi
;;
*cygwin*)
# Define on Cygwin to enable all library features
CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
AC_DEFINE(ZMQ_HAVE_CYGWIN, 1, [Have Cygwin])
# Cygwin provides libuuid as part of the e2fsprogs package, and somewhat
# uselessly installs the library in /usr/lib/e2fsprogs
LDFLAGS="${LDFLAGS} -L/usr/lib/e2fsprogs"
AC_CHECK_LIB(uuid, uuid_generate, ,
[AC_MSG_ERROR([cannot link with -luuid, install the e2fsprogs package.])])
if test "x$enable_static" = "xyes"; then
AC_MSG_ERROR([Building static libraries is not supported under Cygwin])
fi
;;
*)
AC_MSG_ERROR([unsupported system: ${host_os}.])
;;
esac
# CPU-specific optimizations
case "${host_cpu}" in
*sparc*)
if test "x$gnu_compilers" = "xyes"; then
CPPFLAGS="$CPPFLAGS -mcpu=v9"
fi
;;
*)
;;
esac
# Check whether to build docs / install man pages
AC_CHECK_DOC_BUILD
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(errno.h arpa/inet.h netinet/tcp.h netinet/in.h stddef.h \
stdlib.h string.h sys/socket.h sys/time.h unistd.h limits.h)
# Check if we have ifaddrs.h header file.
AC_CHECK_HEADERS(ifaddrs.h, [AC_DEFINE(ZMQ_HAVE_IFADDRS, 1, [Have ifaddrs.h header.])])
# Use c++ in subsequent tests
AC_LANG(C++)
# pkg-config is used if found, however, we need to provide a way to disable it
# entirely when the user knows what she's doing and it's use is undesirable,
# such as when cross-compiling.
AC_ARG_WITH([pkg-config], [AS_HELP_STRING([--without-pkg-config],
[do not use pkg-config [default=no]])])
if test "x$with_pkg_config" != "xno"; then
AC_CHECK_PROG(have_pkg_config, pkg-config, yes, no)
fi
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_HEADER_TIME
AC_TYPE_UINT32_T
AC_C_VOLATILE
# Substs
stdint="0"
if test "x$HAVE_STDINT_H" = "xyes"; then
stdint="1"
fi
inttypes="0"
if test "x$HAVE_INTTYPES_H" = "xyes"; then
inttypes="1"
fi
# PGM extension
pgm_ext="no"
pgm_basename="libpgm-5.0.91~dfsg"
AC_SUBST(pgm_basename)
AC_ARG_WITH([pgm], [AS_HELP_STRING([--with-pgm],
[build libzmq with PGM extension [default=no]])],
[with_pgm_ext=yes], [with_pgm_ext=no])
if test "x$with_pgm_ext" != "xno"; then
if test "x$ac_cv_prog_cc_c99" = "xno"; then
AC_WARN([The C compiler is not set to C99 mode. The build will most likely fail])
fi
AC_MSG_CHECKING([if the PGM extension is supported on this platform])
# OpenPGM is only supported by the vendor on x86, AMD64, and SPARC platforms...
case "${host_cpu}" in
i*86|x86_64|amd64|*sparc*)
# Supported
;;
*)
AC_MSG_ERROR([the PGM extension is not supported on the ${host_cpu} platform.])
;;
esac
# ... and on Linux/Windows/Solaris/FreeBSD/OSX systems.
case "${host_os}" in
*linux*|*mingw32*|*solaris*|*freebsd*|*darwin*)
if test "x$gnu_compilers" = "xyes"; then
LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_EXTRA_CXXFLAGS} -Wno-variadic-macros -Wno-long-long "
elif test "x$ac_cv_c_intel_compiler" = "xyes"; then
LIBZMQ_EXTRA_CFLAGS="-strict-ansi -Dasm=__asm__ "
elif test "x$ac_cv_c_sun_studio_compiler" = "xyes"; then
LIBZMQ_EXTRA_CFLAGS="-Xc -Dasm=__asm__ "
fi
;;
*)
AC_MSG_ERROR([the PGM extension is not supported on system ${host_os}.])
;;
esac
AC_MSG_RESULT([yes])
# Gzip, Perl and Python are required duing PGM build
AC_CHECK_PROG(have_gzip, gzip, yes, no)
if test "x$have_gzip" != "xyes"; then
AC_MSG_ERROR([gzip is required for building the PGM extension.])
fi
AC_CHECK_PROG(have_perl, perl, yes, no)
if test "x$have_perl" != "xyes"; then
AC_MSG_ERROR([perl is required for building the PGM extension.])
fi
AC_CHECK_PROG(have_python, python, yes, no)
if test "x$have_python" != "xyes"; then
AC_MSG_ERROR([python is required for building the PGM extension.])
fi
# Unpack libpgm
AC_MSG_NOTICE([Unpacking ${pgm_basename}.tar.gz])
if ! gzip -dc foreign/openpgm/${pgm_basename}.tar.gz | tar -xf - -C foreign/openpgm/; then
AC_MSG_ERROR([cannot unpack the foreign/openpgm/${pgm_basename}.tar.gz file.])
fi
# Success!
AC_DEFINE(ZMQ_HAVE_OPENPGM, 1, [Have OpenPGM extension])
pgm_ext="yes"
fi
# -Wall, -Werror and -pedantic are GNU compiler specific.
# Also, these break OpenPGM so don't specify them if we are building with it.
if test "x$gnu_compilers" = "xyes" -a "x$pgm_ext" = "xno"; then
CPPFLAGS="-Wall $CPPFLAGS"
if test "x$pedantic" = "xyes"; then
CPPFLAGS="-pedantic $CPPFLAGS"
fi
if test "x$werror" = "xyes"; then
CPPFLAGS="-Werror $CPPFLAGS"
fi
fi
AM_CONDITIONAL(BUILD_PGM, test "x$pgm_ext" = "xyes")
AM_CONDITIONAL(BUILD_NO_PGM, test "x$pgm_ext" = "xno")
AM_CONDITIONAL(ON_MINGW, test "x$on_mingw32" = "xyes")
AC_SUBST(stdint)
AC_SUBST(inttypes)
# Subst LIBZMQ_EXTRA_CFLAGS & CXXFLAGS & LDFLAGS
AC_SUBST(LIBZMQ_EXTRA_CFLAGS)
AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS)
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
# Checks for library functions.
AC_TYPE_SIGNAL
AC_CHECK_FUNCS(perror gettimeofday memset socket getifaddrs freeifaddrs)
AC_OUTPUT(Makefile src/Makefile doc/Makefile
perf/Makefile src/libzmq.pc \
devices/Makefile devices/zmq_forwarder/Makefile \
devices/zmq_streamer/Makefile devices/zmq_queue/Makefile \
builds/msvc/Makefile tests/Makefile)