# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) AC_INIT([zeromq],[dev]) AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(src/platform.hpp) AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) # libzmq -version-info LTVER="0:0:0" AC_SUBST(LTVER) # librbzmq -version-info RBLTVER="0:0:0" AC_SUBST(RBLTVER) # libjzmq -version-info JLTVER="0:0:0" AC_SUBST(JLTVER) AM_PROG_CC_C_O # Checks for programs. AC_PROG_CXX AC_PROG_LIBTOOL AC_PROG_SED AC_PROG_AWK # Checks for libraries. AC_CHECK_LIB(pthread, pthread_create) AC_CHECK_LIB(stdc++, malloc) # 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_LDFLAFS="" # By default compiling with -pedantic except QNX and OSX. pedantic="yes" #By default compiling with -Werror except OSX. werror="yes" # Host speciffic checks AC_CANONICAL_HOST case "${host_os}" in *linux*) AC_DEFINE(ZMQ_HAVE_LINUX, 1, [Have Linux OS]) CPPFLAGS="-D_REENTRANT $CPPFLAGS" sed < libtool > libtool-2 \ 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" "/' mv libtool-2 libtool chmod 755 libtool AC_CHECK_LIB(uuid, main, , [AC_MSG_ERROR([Could not link with libuuid, install develop version.])]) ;; *solaris*) 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) CPPFLAGS="-D_REENTRANT -D_PTHREADS $CPPFLAGS" AC_MSG_CHECKING([wheter atomic operations can be used]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include ]], [[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*) AC_DEFINE(ZMQ_HAVE_FREEBSD, 1, [Have FreeBSD OS]) CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS" LIBS="-pthread" ;; *darwin*) pedantic="no" werror="no" AC_DEFINE(ZMQ_HAVE_OSX, 1, [Have DarwinOSX OS]) LIBS="-pthread" LIBZMQ_EXTRA_CXXFLAGS+="-Wno-uninitialized" ;; *openbsd*) AC_DEFINE(ZMQ_HAVE_OPENBSD, 1, [Have OpenBSD OS]) CPPFLAGS="-pthread $CPPFLAGS" LIBS="-pthread" ;; *nto-qnx*) pedantic="no" AC_DEFINE(ZMQ_HAVE_QNXNTO, 1, [Have QNX Neutrino OS]) CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS" AC_CHECK_LIB(socket,main) ;; *aix*) AC_DEFINE(ZMQ_HAVE_AIX, 1, [Have AIX OS]) if test "x$GXX" = "xyes"; then CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS" fi ;; *hpux*) AC_DEFINE(ZMQ_HAVE_HPUX, 1, [Have HPUX OS]) if test "x$GXX" = "xyes"; then CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS" fi AC_CHECK_LIB(rt, main) sed < libtool > libtool-2 \ 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" "/' mv libtool-2 libtool chmod 755 libtool ;; *mingw32*) pedantic="no" AC_DEFINE(ZMQ_HAVE_WINDOWS, 1, [Have Windows OS]) AC_DEFINE(ZMQ_HAVE_MINGW32, 1, [Have MinGW32]) AC_CHECK_HEADERS(windows.h) LIBS="-lwsock32 -lws2_32 -no-undefined" CFLAGS="-std=c99" ;; *) AC_MSG_ERROR([Not supported os: $host.]) ;; esac # If not on QNX nor OSX add -pedantic into LIBZMQ_EXTRA_CXXFLAGS. if test "x$pedantic" = "xyes"; then LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_EXTRA_CXXFLAGS} -pedantic" fi # If not on QNX nor --with-pgm add -Werror into LIBZMQ_EXTRA_CXXFLAGS. if test "x$werror" = "xyes" -a "x$pgm_ext" = "xno"; then LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_EXTRA_CXXFLAGS} -Werror" fi # Check if we are running at sparc harware AC_MSG_CHECKING([wheter __sparc__ is defined]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#if defined __sparc__ //OK we are on sparc #else error: we are not on sparc #endif ]])], [sparc=yes], [sparc=no]) AC_MSG_RESULT([$sparc]) if test "x$sparc" = "xyes"; then CPPFLAGS="$CPPFLAGS -mcpu=v9" fi # 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 eventfd.h header file. AC_CHECK_HEADERS(sys/eventfd.h, [AC_DEFINE(ZMQ_HAVE_EVENTFD, 1, [Have eventfd extension.])]) # 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++) # Optional stuff AC_CHECK_PROG(have_pkg_config, pkg-config, yes, no) if test "x$have_pkg_config" != "xno"; then # First instance of PKG_CHECK_ has to be executed PKG_CHECK_EXISTS([dummy_pkg], [], []) 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 # c czmq="no" AC_ARG_WITH([c], [AS_HELP_STRING([--with-c], [build c language binding [default=no]])], [c=yes], [c=no]) if test "x$c" != "xno"; then czmq="yes" fi # c++ cppzmq="no" AC_ARG_WITH([cpp], [AS_HELP_STRING([--with-cpp], [build c++ language binding [default=no]])], [cpp=yes], [cpp=no]) if test "x$cpp" != "xno"; then cppzmq="yes" fi # Python pyzmq="no" AC_ARG_WITH(python_headersdir, AS_HELP_STRING([--with-python-headersdir], [Python.h header file location]), [python_headersdir="$withval"], [python_headersdir="no"]) AC_ARG_WITH([python], [AS_HELP_STRING([--with-python], [build Python language binding [default=no]])], [with_python=yes], [with_python=no]) if test "x$with_python" != "xno"; then AM_PATH_PYTHON([2.4], , [:]) if test "x$PYTHON" = "x:"; then AC_MSG_ERROR([To run configure with --with-python option, Python has to be installed.]); fi if test "x$python_headersdir" != "xno"; then PYTHON_INCLUDES="-I${python_headersdir}" PYTHON_SETUP_INCLUDES="${python_headersdir}" AC_CHECK_HEADERS($python_headersdir/Python.h, [] , [AC_MSG_ERROR([To run configure with --with-python option, Python.h has to be usable.])]) else py_prefix=`$PYTHON -c "import sys; print sys.prefix"` py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" PYTHON_SETUP_INCLUDES="${py_prefix}/include/python${PYTHON_VERSION}" if test "$py_prefix" != "$py_exec_prefix"; then PYTHON_INCLUDES="${PYTHON_INCLUDES} -I${py_exec_prefix}/include/python${PYTHON_VERSION}" fi AC_CHECK_HEADERS($py_prefix/include/python${PYTHON_VERSION}/Python.h, [] , [AC_MSG_ERROR([To run configure with --with-python option, Python.h has to be usable.])]) fi AC_SUBST(PYTHON_INCLUDES) AC_SUBST(PYTHON_SETUP_INCLUDES) pyzmq="yes" fi # RUBY rbzmq="no" AC_ARG_WITH(ruby_headersdir, AS_HELP_STRING([--with-ruby-headersdir], [ruby.h header file location]), [ruby_headersdir="$withval"], [ruby_headersdir="no"]) if test "x$ruby_headersdir" != "xno"; then CPPFLAGS="${CPPFLAGS} -I${ruby_headersdir}" fi AC_ARG_WITH(ruby_libdir, AS_HELP_STRING([--with-ruby-libdir],[libruby library file location]), [ruby_libdir="$withval"], [ruby_libdir="no"]) if test "x$ruby_libdir" != "xno"; then LDFLAGS="${LDFLAGS} -L${ruby_libdir}" fi AC_ARG_WITH([ruby], [AS_HELP_STRING([--with-ruby], [build ruby language binding [default=no]])], [with_ruby=yes], [with_ruby=no]) if test "x$with_ruby" != "xno"; then AC_CHECK_HEADERS([ruby.h], [], [AC_MSG_ERROR([Could not find Ruby header files, Please specify their location with --with-ruby-headersdir.])]) AC_SEARCH_LIBS(ruby_init,[ruby ruby1.8 ruby18],, [AC_MSG_ERROR([Could not link with Ruby library. Please specify their location with --with-ruby-libdir.])]) rbzmq="yes" fi AC_ARG_WITH([rubydir], [AS_HELP_STRING([--with-rubydir], [librbzmq install dir [default=EPREFIX/lib]])], [rubydir="$withval"], [rubydir="_default_"]) if test "$rubydir" = "_default_"; then rubydir=${libdir} else rubydir=${rubydir} fi RUBYDIR="$rubydir" AC_SUBST([RUBYDIR]) if test "x$pyzmq" != "xyes"; then AC_CHECK_PROG(have_python, python, yes, no) if test "x$have_python" != "xyes"; then AC_MSG_ERROR([Could not find python.]) fi fi # Java language binding jzmq="no" AC_ARG_WITH([java], [AS_HELP_STRING([--with-java], [build Java language binding [default=no]])], [with_java=yes], [with_java=no]) if test "x$with_java" != "xno"; then AC_PATH_PROG(JAVAC, javac, "no",[$PATH:$JAVA_HOME/bin]) if test "x$JAVAC" = "xno"; then AC_MSG_ERROR([To run configure with --with-java option, javac has to be on the path.]); fi AC_PATH_PROG(JAVAH, javah, "no",[$PATH:$JAVA_HOME/bin]) if test "x$JAVAH" = "xno"; then AC_MSG_ERROR([To run configure with --with-java option, javah has to be on the path.]); fi AC_PATH_PROG(JAR, jar, "no", [$PATH:$JAVA_HOME/bin]) if test "x$JAR" = "xno"; then AC_MSG_ERROR([To run configure with --with-java option, jar has to be on the path.]); fi if test "x$JAVA_HOME" = "x"; then AC_MSG_ERROR([To run configure with --with-java, please set the JAVA_HOME variable to your JDK environment.]); fi AC_MSG_CHECKING([for jni.h in a $JAVA_HOME/include dir]) if test -f $JAVA_HOME/include/jni.h; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([Could not find jni.h in $JAVA_HOME/include directory.]); fi JAVAROOT=./ AC_SUBST(JAVAROOT) case "${host_os}" in *solaris*) JAVA_INCLUDE="-I.. -I${JAVA_HOME}/include -I ${JAVA_HOME}/include/solaris" ;; *openbsd*) JAVA_INCLUDE="-I.. -I${JAVA_HOME}/include -I ${JAVA_HOME}/include/openbsd" ;; *) JAVA_INCLUDE="-I.. -I${JAVA_HOME}/include -I ${JAVA_HOME}/include/linux" ;; esac AC_SUBST(JAVA_INCLUDE) jzmq="yes" else # Workaround to be able to run make dist without real JAVAH JAVAH=true JAVAC=true JAR=true fi # PGM extension pgm_ext="no" pgm_name="" pgm_basename="libpgm-1.2.14" 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 # Test if we have pkg-config if test "x$have_pkg_config" != "xyes"; then AC_MSG_ERROR([To run configure with --with-pgm option, pkg-config has to be installed.]); fi case "${host_os}" in *linux*) LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_EXTRA_CXXFLAGS} -Wno-variadic-macros -Wno-long-long " ;; *solaris*) ;; *) AC_MSG_ERROR([PGM extesion is not supported on this platform $host.]) ;; esac AC_CHECK_PROG(have_tar, tar, yes, no) if test "x$have_tar" != "xyes"; then AC_MSG_ERROR([Could not find tar.]) fi AC_CHECK_PROG(have_bunzip2, bunzip2, yes, no) if test "x$have_bunzip2" != "xyes"; then AC_MSG_ERROR([Could not find bunzip2.]) fi AC_CHECK_PROG(have_perl, perl, yes, no) if test "x$have_perl" != "xyes"; then AC_MSG_ERROR([Could not find perl.]) fi if test "x$pyzmq" != "xyes"; then AC_CHECK_PROG(have_python, python, yes, no) if test "x$have_python" != "xyes"; then AC_MSG_ERROR([Could not find python.]) fi fi # Unpack libpgm-1.0.0rc8.tar.bz2 AC_MSG_CHECKING([Unpacking ${pgm_basename}.tar.bz2]) if tar -xjf foreign/openpgm/${pgm_basename}.tar.bz2 -C foreign/openpgm/; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([Could not unpack foreign/openpgm/${pgm_basename}.tar.bz2 file]) fi # Generate galois_tables.c AC_CONFIG_COMMANDS([galois_tables.c], [perl foreign/openpgm/libpgm-1.2.14/openpgm/pgm/galois_generator.pl > \ foreign/openpgm/libpgm-1.2.14/openpgm/pgm/galois_tables.c]) # Generate version.c AC_CONFIG_COMMANDS([version.c], [python foreign/openpgm/libpgm-1.2.14/openpgm/pgm/version_generator.py > \ foreign/openpgm/libpgm-1.2.14/openpgm/pgm/version.c]) # Check for OpenPGM nedded libraries. PKG_CHECK_MODULES([GLIB], [glib-2.0 gthread-2.0]) LIBZMQ_EXTRA_CXXFLAGS="${LIBZMQ_EXTRA_CXXFLAGS} ${GLIB_CFLAGS} " LIBZMQ_EXTRA_LDFLAFS="${LIBZMQ_EXTRA_LDFLAFS} ${GLIB_LIBS}" AC_DEFINE(ZMQ_HAVE_OPENPGM, 1, [Have OpenPGM extension.]) pgm_name="$pgm_basename" pgm_ext="yes" fi # forwarder device forwarder="no" AC_ARG_WITH([forwarder], [AS_HELP_STRING([--with-forwarder], [build forwarder device [default=no]])], [with_forwarder=yes], [with_forwarder=no]) if test "x$with_forwarder" != "xno"; then forwarder="yes" fi # Perf perf="no" AC_ARG_WITH([perf], [AS_HELP_STRING([--with-perf], [build performance tests [default=no]])], [with_perf=yes], [with_perf=no]) if test "x$with_perf" != "xno"; then perf="yes" if test "x$czmq" = "xno" -a "x$cppzmq" = "xno" -a "x$pyzmq" = "xno" -a \ "x$jzmq" = "xno" -a "x$rbzmq" = "xno"; then AC_MSG_ERROR([To run configure with --with-perf option chose at least one language binding.]); fi fi AM_CONDITIONAL(BUILD_PYTHON, test "x$pyzmq" = "xyes") AM_CONDITIONAL(BUILD_JAVA, test "x$jzmq" = "xyes") AM_CONDITIONAL(BUILD_PYTHON, test "x$pyzmq" = "xyes") AM_CONDITIONAL(BUILD_RUBY, test "x$rbzmq" = "xyes") AM_CONDITIONAL(BUILD_C, test "x$czmq" = "xyes") AM_CONDITIONAL(BUILD_CPP, test "x$cppzmq" = "xyes") AM_CONDITIONAL(BUILD_PGM, test "x$pgm_ext" = "xyes") AM_CONDITIONAL(BUILD_FORWARDER, test "x$forwarder" = "xyes") AM_CONDITIONAL(BUILD_PERF, test "x$perf" = "xyes") AC_SUBST(stdint) AC_SUBST(inttypes) # Subst LIBZMQ_EXTRA_CXXFLAGS & LDFLAGS AC_SUBST(LIBZMQ_EXTRA_CXXFLAGS) AC_SUBST(LIBZMQ_EXTRA_LDFLAFS) # Checks for library functions. AC_FUNC_MALLOC AC_TYPE_SIGNAL AC_CHECK_FUNCS(perror gettimeofday memset socket getifaddrs freeifaddrs) AC_OUTPUT(Makefile src/Makefile bindings/python/Makefile \ bindings/python/setup.py bindings/ruby/Makefile \ bindings/java/Makefile perf/Makefile perf/c/Makefile perf/cpp/Makefile \ perf/python/Makefile perf/ruby/Makefile perf/java/Makefile src/libzmq.pc \ devices/Makefile devices/zmq_forwarder/Makefile bindings/Makefile) AC_MSG_RESULT([]) AC_MSG_RESULT([ ******************************************************** ]) AC_MSG_RESULT([ 0MQ ]) AC_MSG_RESULT([ ******************************************************** ]) AC_MSG_RESULT([ This software is distributed under the terms and ]) AC_MSG_RESULT([ conditions of the LESSER GNU GENERAL PUBLIC LICENSE. ]) AC_MSG_RESULT([ See the file COPYING and COPYING.LESSER for the full ]) AC_MSG_RESULT([ license text. ]) AC_MSG_RESULT([ ******************************************************** ]) AC_MSG_RESULT([]) AC_MSG_RESULT([ 0MQ install dir: $prefix]) AC_MSG_RESULT([ Language bindings:]) AC_MSG_RESULT([ C: $czmq]) AC_MSG_RESULT([ C++: $cppzmq]) AC_MSG_RESULT([ Java: $jzmq]) AC_MSG_RESULT([ Python: $pyzmq]) AC_MSG_RESULT([ Ruby: $rbzmq]) if test "x$rbzmq" = "xyes"; then AC_MSG_RESULT([ Ruby library install dir: $rubydir]) fi AC_MSG_RESULT([ Network protocols:]) AC_MSG_RESULT([ TCP: yes]) if test "x$pgm_ext" = "xyes"; then AC_MSG_RESULT([ PGM: $pgm_ext ($pgm_name)]) else AC_MSG_RESULT([ PGM: $pgm_ext]) fi AC_MSG_RESULT([ Devices:]) AC_MSG_RESULT([ forwarder: $forwarder]) AC_MSG_RESULT([ Performance tests: $perf]) AC_MSG_RESULT([]) AC_MSG_RESULT([ ******************************************************** ]) AC_MSG_RESULT([])