0
0
mirror of https://github.com/zeromq/libzmq.git synced 2024-12-29 00:32:34 +08:00
libzmq/configure.in
Martin Lucina a6d3629fb4 build: Generate ChangeLog in 'make dist', ZIP automatically
Change 'make dist' to generate the Git ChangeLog file, that way it doesn't
have to be manually updated nor kept in Git which causes unnecessary work.

Also change 'make dist' to invoke 'dist-zip' automatically to generate a
ZIP as well as a .tar.gz.

Thanks to http://live.gnome.org/Git/ChangeLog for the inspiration to
automatically generate ChangeLog.
2010-09-04 17:42:12 +02:00

390 lines
12 KiB
Plaintext

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
#
# Change the version number below after doing a public release.
# The version in git should reflect the *next* version planned.
# Version must be MAJOR.MINOR.PATCH otherwise things will break.
#
AC_INIT([zeromq],[2.0.9],[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 defines PACKAGE_VERSION_... in src/platform.hpp
PV_MAJOR=`echo $PACKAGE_VERSION | cut -d . -f 1`
PV_MINOR=`echo $PACKAGE_VERSION | cut -d . -f 2`
PV_PATCH=`echo $PACKAGE_VERSION | cut -d . -f 3`
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR],[$PV_MAJOR],
[0MQ major version])
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR],[$PV_MINOR],
[0MQ minor version])
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_PATCH],[$PV_PATCH],
[0MQ patchlevel])
# 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_CXX
AM_PROG_CC_C_O
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
AC_PROG_SED
AC_PROG_AWK
# 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"
else
gnu_compilers="no"
fi
# Checks for libraries.
AC_CHECK_LIB([pthread], [pthread_create])
# 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=""
# By default compiling with -pedantic except QNX and OSX.
pedantic="yes"
#By default compiling with -Werror except OSX.
werror="yes"
#Whether we are on mingw or not.
on_mingw32="no"
# Host speciffic checks
AC_CANONICAL_HOST
# Determine whether or not documentation should be built and installed.
build_doc="yes"
install_man="yes"
# Check for asciidoc and xmlto and don't build the docs if these are not installed.
AC_CHECK_PROG(have_asciidoc, asciidoc, yes, no)
AC_CHECK_PROG(have_xmlto, xmlto, yes, no)
if test "x$have_asciidoc" = "xno" -o "x$have_xmlto" = "xno"; then
build_doc="no"
# Tarballs built with 'make dist' ship with prebuilt documentation.
if ! test -f doc/zmq.7; then
install_man="no"
AC_MSG_WARN([You are building an unreleased version of 0MQ and asciidoc or xmlto are not installed. Documentation will not be built and manual pages will not be installed.])
fi
fi
AC_MSG_CHECKING([whether to build documentation])
AC_MSG_RESULT([$build_doc])
AC_MSG_CHECKING([whether to install manpages])
AC_MSG_RESULT([$install_man])
# 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
CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS])
AC_CHECK_LIB(uuid, main, ,
[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, main)
AC_CHECK_LIB(nsl, main)
AC_CHECK_LIB(rt, main)
AC_CHECK_LIB(uuid, main, ,
[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,main)
AC_CHECK_LIB(crypto,RAND_bytes)
;;
*aix*)
AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS])
;;
*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, main)
;;
*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.])])
CFLAGS="${CFLAGS} -std=c99"
on_mingw32="yes"
install_man="no"
;;
*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.])])
;;
*)
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
# 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, and is required for builds with OpenPGM.
# 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-2.1.26"
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
AC_MSG_CHECKING([if the PGM extension is supported on this platform])
# OpenPGM is only supported by the vendor on x86 and AMD64 platforms...
case "${host_cpu}" in
i*86|x86_64)
# Supported
;;
*)
AC_MSG_ERROR([the PGM extension is not supported on the ${host_cpu} platform.])
;;
esac
# ... and on Linux/Windows/Solaris systems.
case "${host_os}" in
*linux*|*mingw32*|*solaris*)
LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_EXTRA_CXXFLAGS} -Wno-variadic-macros -Wno-long-long "
;;
*)
AC_MSG_ERROR([the PGM extension is not supported on system ${host_os}.])
;;
esac
AC_MSG_RESULT([yes])
# Test if we have pkg-config
if test "x$with_pkg_config" != "xno"; then
if test "x$have_pkg_config" != "xyes"; then
AC_MSG_ERROR([the --with-pgm option requires that pkg-config be installed.]);
fi
# Check for OpenPGM dependencies
PKG_CHECK_MODULES([GLIB], [glib-2.0 gthread-2.0])
LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_EXTRA_CXXFLAGS} ${GLIB_CFLAGS} "
LIBZMQ_EXTRA_LDFLAGS="${LIBZMQ_EXTRA_LDFLAGS} ${GLIB_LIBS} "
fi
# 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")
AM_CONDITIONAL(INSTALL_MAN, test "x$install_man" = "xyes")
AM_CONDITIONAL(BUILD_DOC, test "x$build_doc" = "xyes")
AC_SUBST(stdint)
AC_SUBST(inttypes)
# Subst LIBZMQ_EXTRA_CXXFLAGS & LDFLAGS
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)
# On Linux patch libtool to delete hardcoded paths (rpath).
case "${host_os}" in
*linux*)
sed < libtool > libtool-2 \
's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" "/'
mv libtool-2 libtool
chmod 755 libtool
;;
esac