From 73c370dd1772e09be476ec8dcbe097fb5de939e9 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Sun, 30 Dec 2012 17:58:27 -0500 Subject: [PATCH 01/16] Fix inconsistently using #if or #ifdef instead of #if defined --- src/ip.cpp | 4 ++-- src/zmq.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ip.cpp b/src/ip.cpp index 45e54984..c194f0e4 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -73,11 +73,11 @@ zmq::fd_t zmq::open_socket (int domain_, int type_, int protocol_) void zmq::unblock_socket (fd_t s_) { -#ifdef ZMQ_HAVE_WINDOWS +#if defined ZMQ_HAVE_WINDOWS u_long nonblock = 1; int rc = ioctlsocket (s_, FIONBIO, &nonblock); wsa_assert (rc != SOCKET_ERROR); -#elif ZMQ_HAVE_OPENVMS +#elif defined ZMQ_HAVE_OPENVMS int nonblock = 1; int rc = ioctl (s_, FIONBIO, &nonblock); errno_assert (rc != -1); diff --git a/src/zmq.cpp b/src/zmq.cpp index 72bed06c..5e5ad58a 100644 --- a/src/zmq.cpp +++ b/src/zmq.cpp @@ -56,7 +56,7 @@ // XSI vector I/O -#if ZMQ_HAVE_UIO +#if defined ZMQ_HAVE_UIO #include #else struct iovec { From 0362c310a58f3304653592bf8c38f0d068e51c16 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 31 Dec 2012 17:52:32 -0500 Subject: [PATCH 02/16] First pass at getting cmake build to work with non-Windows systems. Make doc building option dependent on asciidoc being installed Fix MSVC build requiring cygwin. Don't use try_run to get the version --- CMakeLists.txt | 913 ++++++++++++++++--------- builds/cmake/platform.hpp.in | 90 +++ cmake/Modules/AutoconfHelper.cmake | 298 ++++++++ cmake/Modules/FindAsciiDoc.cmake | 19 + cmake/Modules/TestZMQVersion.cmake | 2 +- cmake/Modules/ZMQSourceRunChecks.cmake | 129 ++++ cmake/Modules/zmq_version.cpp | 31 - src/libzmq.pc.cmake.in | 10 + 8 files changed, 1151 insertions(+), 341 deletions(-) create mode 100644 builds/cmake/platform.hpp.in create mode 100644 cmake/Modules/AutoconfHelper.cmake create mode 100644 cmake/Modules/FindAsciiDoc.cmake create mode 100644 cmake/Modules/ZMQSourceRunChecks.cmake delete mode 100644 cmake/Modules/zmq_version.cpp create mode 100644 src/libzmq.pc.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index f73baf8c..50930ab0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,49 +1,236 @@ -# CMake build script for ZeroMQ on Windows +# CMake build script for ZeroMQ -cmake_minimum_required (VERSION 2.8) -project (ZeroMQ) +cmake_minimum_required(VERSION 2.8) +project(ZeroMQ) -include (${CMAKE_SOURCE_DIR}/cmake/Modules/TestZMQVersion.cmake) +option(WITH_OPENPGM "Build with support for OpenPGM" OFF) -option (WITH_DOC "Build Reference Guide documentation (requires DocBook)" OFF) -option (WITH_OPENPGM "Build with support for OpenPGM" OFF) +if(APPLE) + option(ZMQ_BUILD_FRAMEWORK "Build as OS X framework" ON) +endif() -# WARNING: Windows Python will override Cygwin yet not work with Asciidoc. -#find_package (PythonInterp REQUIRED) -# Workaround, manually set Python location -set(PYTHON_EXECUTABLE c:/cygwin/bin/python2.6.exe CACHE FILEPATH "Python interpreter executable") -# TODO: Replace with FindAsciidoc.cmake -set(ASCIIDOC_EXECUTABLE c:/cygwin/bin/asciidoc CACHE FILEPATH "AsciiDoc executable") -if (WITH_OPENPGM) -# set(OPENPGM_ROOT "" CACHE PATH "Location of OpenPGM") - set(OPENPGM_VERSION_MAJOR 5) - set(OPENPGM_VERSION_MINOR 2) - set(OPENPGM_VERSION_MICRO 122) - if (CMAKE_CL_64) - find_path(OPENPGM_ROOT include/pgm/pgm.h - PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" - NO_DEFAULT_PATH - ) - message(STATUS "OpenPGM x64 detected - ${OPENPGM_ROOT}") - else (CMAKE_CL_64) - find_path(OPENPGM_ROOT include/pgm/pgm.h - PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" - NO_DEFAULT_PATH - ) - message(STATUS "OpenPGM x86 detected - ${OPENPGM_ROOT}") - endif (CMAKE_CL_64) - set(OPENPGM_INCLUDE_DIRS ${OPENPGM_ROOT}/include) - set(OPENPGM_LIBRARY_DIRS ${OPENPGM_ROOT}/lib) - set(OPENPGM_LIBRARIES - optimized libpgm${_zmq_COMPILER}-mt-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib - debug libpgm${_zmq_COMPILER}-mt-gd-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib) -endif (WITH_OPENPGM) +set(POLLER "" CACHE STRING "Choose polling system manually. valid values are + kqueue, epoll, devpoll, poll or select [default=autodetect]") + +if( NOT POLLER STREQUAL "" + AND NOT POLLER STREQUAL "kqueue" + AND NOT POLLER STREQUAL "epoll" + AND NOT POLLER STREQUAL "devpoll" + AND NOT POLLER STREQUAL "poll" + AND NOT POLLER STREQUAL "select") + message(FATAL_ERROR "Invalid polling method") +endif() + +if(NOT ${POLLER} STREQUAL "") + string(TOUPPER ${POLLER} UPPER_POLLER) + set(ZMQ_FORCE_${UPPER_POLLER} 1) +endif() + +set(ZMQ_CMAKE_MODULES_DIR ${CMAKE_SOURCE_DIR}/cmake/Modules) +list(APPEND CMAKE_MODULE_PATH ${ZMQ_CMAKE_MODULES_DIR}) + +include(TestZMQVersion) +include(ZMQSourceRunChecks) +include(CheckIncludeFiles) +include(CheckLibraryExists) +include(CheckFunctionExists) +include(CheckCCompilerFlag) +include(CheckCXXCompilerFlag) +include(CheckCSourceCompiles) +include(CheckCSourceRuns) +include(AutoconfHelper) +include(CMakeDependentOption) + +check_include_files(ifaddrs.h ZMQ_HAVE_IFADDRS) +check_include_files(windows.h HAVE_WINDOWS_H) +check_include_files(sys/uio.h ZMQ_HAVE_UIO) +check_include_files(sys/eventfd.h ZMQ_HAVE_EVENTFD) + +check_library_exists(ws2_32 WSAStartup "" HAVE_WS2_32) +check_library_exists(rpcrt4 UuidCreateSequential "" HAVE_RPCRT4) +check_library_exists(iphlpapi GetAdaptersAddresses "" HAVE_IPHLAPI) +find_package(Threads) + +if(MINGW) + if(NOT HAVE_WS2_32) + message(FATAL_ERROR "Cannot link to ws2_32") + endif() + + if(NOT HAVE_RPCRT4) + message(FATAL_ERROR "Cannot link to rpcrt4") + endif() + + if(NOT HAVE_IPHLAPI) + message(FATAL_ERROR "Cannot link to iphlapi") + endif() +endif() + +set(CMAKE_REQUIRED_LIBRARIES rt) +check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) +set(CMAKE_REQUIRED_LIBRARIES ) + +set(CMAKE_REQUIRED_INCLUDES sys/time.h) +check_function_exists(gethrtime HAVE_GETHRTIME) +set(CMAKE_REQUIRED_INCLUDES ) + +add_definitions(-D_REENTRANT -D_THREAD_SAFE) + +if(WIN32) + add_definitions(-DDLL_EXPORT) +endif() + +option(ENABLE_EVENTFD "Enable/disable eventfd" ZMQ_HAVE_EVENTFD) + +macro(zmq_check_cxx_flag_prepend flag) + check_cxx_compiler_flag("${flag}" HAVE_FLAG_${flag}) + + if(HAVE_FLAG_${flag}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") + endif() +endmacro() + + +if(MSVC) + zmq_check_cxx_flag_prepend("/W3") +else() + zmq_check_cxx_flag_prepend("-Wall") +endif() + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + zmq_check_cxx_flag_prepend("-Wextra") +endif() + +zmq_check_cxx_flag_prepend("-Wno-long-long") +zmq_check_cxx_flag_prepend("-Wno-uninitialized") + +option(LIBZMQ_PEDANTIC "" ON) +option(LIBZMQ_WERROR "" OFF) + +if(LIBZMQ_PEDANTIC) + zmq_check_cxx_flag_prepend("-pedantic") # GCC + zmq_check_cxx_flag_prepend("-strict-ansi") # ICC + zmq_check_cxx_flag_prepend("-compat=5") # Sun Studio +endif() + +if(LIBZMQ_WERROR) + zmq_check_cxx_flag_prepend("-Werror") + zmq_check_cxx_flag_prepend("-errwarn=%all") +endif() + + +if(${CMAKE_C_COMPILER_ID} STREQUAL "Intel") + # 279: controlling expression is constant + # Fixes build with ICC 12.x + zmq_check_cxx_flag_prepend("-wd279") + ac_type_size_t() + ac_type_ssize_t() +endif() + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc") + zmq_check_cxx_flag_prepend("-mcpu=v9") +endif() + + +if(CMAKE_SYSTEM_NAME MATCHES "SunOS" OR CMAKE_SYSTEM_NAME MATCHES "NetBSD") + message(STATUS "Checking whether atomic operations can be used") + check_c_source_compiles( + " + #include + + int main() + { + uint32_t value; + atomic_cas_32(&value, 0, 0); + return 0; + } + " + HAVE_ATOMIC_H) + + if(NOT HAVE_ATOMIC_H) + set(ZMQ_FORCE_MUTEXES 1) + endif() +endif() + + +#----------------------------------------------------------------------------- +zmq_check_sock_cloexec() +zmq_check_so_keepalive() +zmq_check_tcp_keepcnt() +zmq_check_tcp_keepidle() +zmq_check_tcp_keepintvl() +zmq_check_tcp_keepalive() + + +if( CMAKE_SYSTEM_NAME MATCHES "Linux" + OR CMAKE_SYSTEM_NAME MATCHES "GNU/kFreeBSD" + OR CMAKE_SYSTEM_NAME MATCHES "GNU/Hurd" + OR CYGWIN) + add_definitions(-D_GNU_SOURCE) +elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + add_definitions(-D__BSD_VISIBLE) +elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") + add_definitions(-D_NETBSD_SOURCE) +elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") + add_definitions(-D_OPENBSD_SOURCE) +elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") + add_definitions(-D_PTHREADS) +elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX") + add_definitions(-D_POSIX_C_SOURCE=200112L) + zmq_check_cxx_flag_prepend(-Ae) +elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") + add_definitions(-D_DARWIN_C_SOURCE) +endif() + +set(CMAKE_PYTHON_VERSION 2.7 2.6 2.5 2.4) +find_package(PythonInterp) +find_package(AsciiDoc) + +cmake_dependent_option(WITH_DOC "Build Reference Guide documentation(requires DocBook)" ON + "PYTHON_FOUND;ASCIIDOC_FOUND" OFF) + +if(MSVC) + if(WITH_OPENPGM) + # set(OPENPGM_ROOT "" CACHE PATH "Location of OpenPGM") + set(OPENPGM_VERSION_MAJOR 5) + set(OPENPGM_VERSION_MINOR 2) + set(OPENPGM_VERSION_MICRO 122) + if(CMAKE_CL_64) + find_path(OPENPGM_ROOT include/pgm/pgm.h + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" + NO_DEFAULT_PATH + ) + message(STATUS "OpenPGM x64 detected - ${OPENPGM_ROOT}") + else() + find_path(OPENPGM_ROOT include/pgm/pgm.h + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" + NO_DEFAULT_PATH + ) + message(STATUS "OpenPGM x86 detected - ${OPENPGM_ROOT}") + endif(CMAKE_CL_64) + set(OPENPGM_INCLUDE_DIRS ${OPENPGM_ROOT}/include) + set(OPENPGM_LIBRARY_DIRS ${OPENPGM_ROOT}/lib) + set(OPENPGM_LIBRARIES + optimized libpgm${_zmq_COMPILER}-mt-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib + debug libpgm${_zmq_COMPILER}-mt-gd-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib) + endif() +else() + if(WITH_OPENPGM) + message(FATAL_ERROR "WITH_OPENPGM not implemented") + # DSO symbol visibility for openpgm + check_c_compiler_flag("-fvisibility=hidden" HAVE_FLAG_VISIBILITY_HIDDEN) + check_c_compiler_flag("-xldscope=hidden" HAVE_FLAG_LDSCOPE_HIDDEN) + + if(HAVE_FLAG_VISIBILITY_HIDDEN) + + elseif(HAVE_FLAG_LDSCOPE_HIDDEN) + endif() + endif() +endif() -mark_as_advanced(PYTHON_EXECUTABLE ASCIIDOC_EXECUTABLE) #----------------------------------------------------------------------------- # force off-tree build @@ -52,12 +239,12 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(FATAL_ERROR "CMake generation is not allowed within the source directory! Remove the CMakeCache.txt file and try again from another folder, e.g.: - del CMakeCache.txt + rm CMakeCache.txt mkdir cmake-make cd cmake-make cmake .. ") -endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) +endif() #----------------------------------------------------------------------------- # default to Release build @@ -66,7 +253,7 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) -endif(NOT CMAKE_BUILD_TYPE) +endif() set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) @@ -74,322 +261,430 @@ set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) #----------------------------------------------------------------------------- # platform specifics -add_definitions( - -DWIN32 - -DDLL_EXPORT -# NB: May require tweaking for highly connected applications. - -DFD_SETSIZE=1024 - -D_CRT_SECURE_NO_WARNINGS -) +if(MSVC) + add_definitions( + -DWIN32 + -DDLL_EXPORT + # NB: May require tweaking for highly connected applications. + -DFD_SETSIZE=1024 + -D_CRT_SECURE_NO_WARNINGS + ) -# Parallel make. -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") + # Parallel make. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") + + # Optimization flags. + # http://msdn.microsoft.com/en-us/magazine/cc301698.aspx + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") + set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG") +endif() -# Optimization flags. -# http://msdn.microsoft.com/en-us/magazine/cc301698.aspx -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL") -set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") -set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") -set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG") #----------------------------------------------------------------------------- # source files set(cxx-sources - address.cpp - clock.cpp - ctx.cpp - dealer.cpp - decoder.cpp - devpoll.cpp - dist.cpp - encoder.cpp - epoll.cpp - err.cpp - fq.cpp - io_object.cpp - io_thread.cpp - ip.cpp - ipc_address.cpp - ipc_connecter.cpp - ipc_listener.cpp - kqueue.cpp - lb.cpp - mailbox.cpp - msg.cpp - mtrie.cpp - object.cpp - options.cpp - own.cpp - pair.cpp - pgm_receiver.cpp - pgm_sender.cpp - pgm_socket.cpp - pipe.cpp - poll.cpp - poller_base.cpp - precompiled.cpp - proxy.cpp - pub.cpp - pull.cpp - push.cpp - random.cpp - raw_encoder.cpp - raw_decoder.cpp - reaper.cpp - rep.cpp - req.cpp - router.cpp - select.cpp - session_base.cpp - signaler.cpp - socket_base.cpp - stream_engine.cpp - sub.cpp - tcp.cpp - tcp_address.cpp - tcp_connecter.cpp - tcp_listener.cpp - thread.cpp - trie.cpp - v1_decoder.cpp - v1_encoder.cpp - xpub.cpp - xsub.cpp - zmq.cpp - zmq_utils.cpp + address.cpp + clock.cpp + ctx.cpp + dealer.cpp + decoder.cpp + devpoll.cpp + dist.cpp + encoder.cpp + epoll.cpp + err.cpp + fq.cpp + io_object.cpp + io_thread.cpp + ip.cpp + ipc_address.cpp + ipc_connecter.cpp + ipc_listener.cpp + kqueue.cpp + lb.cpp + mailbox.cpp + msg.cpp + mtrie.cpp + object.cpp + options.cpp + own.cpp + pair.cpp + pgm_receiver.cpp + pgm_sender.cpp + pgm_socket.cpp + pipe.cpp + poll.cpp + poller_base.cpp + precompiled.cpp + proxy.cpp + pub.cpp + pull.cpp + push.cpp + random.cpp + raw_encoder.cpp + raw_decoder.cpp + reaper.cpp + rep.cpp + req.cpp + router.cpp + select.cpp + session_base.cpp + signaler.cpp + socket_base.cpp + stream_engine.cpp + sub.cpp + tcp.cpp + tcp_address.cpp + tcp_connecter.cpp + tcp_listener.cpp + thread.cpp + trie.cpp + v1_decoder.cpp + v1_encoder.cpp + xpub.cpp + xsub.cpp + zmq.cpp + zmq_utils.cpp ) set(rc-sources - version.rc + version.rc ) include_directories( include - ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR} ) -set(headers - include/zmq.h - include/zmq_utils.h +set(public_headers + include/zmq.h + include/zmq_utils.h ) + set(readme-docs - AUTHORS - COPYING - COPYING.LESSER - MAINTAINERS - NEWS - README + AUTHORS + COPYING + COPYING.LESSER + MAINTAINERS + NEWS + README ) #----------------------------------------------------------------------------- # optional modules if(WITH_OPENPGM) - add_definitions( - -DZMQ_HAVE_OPENPGM - ) - include_directories( - ${OPENPGM_INCLUDE_DIRS} - ) - link_directories( - ${OPENPGM_LIBRARY_DIRS} - ) - set(OPTIONAL_LIBRARIES ${OPENPGM_LIBRARIES}) + add_definitions( + -DZMQ_HAVE_OPENPGM + ) + include_directories( + ${OPENPGM_INCLUDE_DIRS} + ) + link_directories( + ${OPENPGM_LIBRARY_DIRS} + ) + set(OPTIONAL_LIBRARIES ${OPENPGM_LIBRARIES}) endif(WITH_OPENPGM) #----------------------------------------------------------------------------- # source generators -foreach (source ${cxx-sources}) - list(APPEND sources ${CMAKE_SOURCE_DIR}/src/${source}) +foreach(source ${cxx-sources}) + list(APPEND sources ${CMAKE_SOURCE_DIR}/src/${source}) endforeach() -foreach (source ${rc-sources}) - list(APPEND sources ${CMAKE_BINARY_DIR}/${source}) - configure_file(${CMAKE_SOURCE_DIR}/src/${source}.in ${CMAKE_BINARY_DIR}/${source}) +foreach(source ${rc-sources}) + list(APPEND sources ${CMAKE_BINARY_DIR}/${source}) + configure_file(${CMAKE_SOURCE_DIR}/src/${source}.in ${CMAKE_BINARY_DIR}/${source}) endforeach() -add_custom_command( - OUTPUT ${CMAKE_BINARY_DIR}/platform.hpp - COMMAND ${CMAKE_COMMAND} - ARGS -E - copy - ${CMAKE_SOURCE_DIR}/builds/msvc/platform.hpp - ${CMAKE_BINARY_DIR}/platform.hpp - DEPENDS ${CMAKE_SOURCE_DIR}/builds/msvc/platform.hpp -) +configure_file(${CMAKE_SOURCE_DIR}/builds/cmake/platform.hpp.in ${CMAKE_BINARY_DIR}/platform.hpp) list(APPEND sources ${CMAKE_BINARY_DIR}/platform.hpp) -if (CMAKE_CL_64) - set (nsis-template ${CMAKE_SOURCE_DIR}/cmake/NSIS.template64.in) -else (CMAKE_CL_64) - set (nsis-template ${CMAKE_SOURCE_DIR}/cmake/NSIS.template32.in) -endif (CMAKE_CL_64) -add_custom_command( - OUTPUT ${CMAKE_BINARY_DIR}/NSIS.template.in - COMMAND ${CMAKE_COMMAND} - ARGS -E - copy - ${nsis-template} - ${CMAKE_BINARY_DIR}/NSIS.template.in - DEPENDS ${nsis-template} -) +configure_file(${CMAKE_SOURCE_DIR}/src/libzmq.pc.cmake.in ${CMAKE_BINARY_DIR}/libzmq.pc) +set(zmq-pkgconfig ${CMAKE_BINARY_DIR}/libzmq.pc) + +if(NOT ZMQ_BUILD_FRAMEWORK) + install(FILES ${CMAKE_BINARY_DIR}/libzmq.pc DESTINATION lib/pkgconfig) +endif() + + + +if(MSVC) + if(CMAKE_CL_64) + set(nsis-template ${CMAKE_SOURCE_DIR}/cmake/NSIS.template64.in) + else() + set(nsis-template ${CMAKE_SOURCE_DIR}/cmake/NSIS.template32.in) + endif() + + add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/NSIS.template.in + COMMAND ${CMAKE_COMMAND} + ARGS -E + copy + ${nsis-template} + ${CMAKE_BINARY_DIR}/NSIS.template.in + DEPENDS ${nsis-template}) +endif() file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doc) file(GLOB docs RELATIVE ${CMAKE_BINARY_DIR}/ "${CMAKE_SOURCE_DIR}/doc/*.txt") -set (html-docs) -foreach (txt ${docs}) - string (REGEX REPLACE ".*/(.*)\\.txt" "\\1.html" html ${txt}) - set (src ${txt}) - set (dst doc/${html}) - add_custom_command( - OUTPUT ${dst} - COMMAND ${PYTHON_EXECUTABLE} - ARGS -x - ${ASCIIDOC_EXECUTABLE} - -d manpage - -b xhtml11 - -f ${CMAKE_SOURCE_DIR}/doc/asciidoc.conf - -azmq_version=${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH} - -o ${dst} - ${src} - DEPENDS ${CMAKE_BINARY_DIR}/${src} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating ${html}" - ) - if (WITH_DOC) - list(APPEND html-docs ${CMAKE_BINARY_DIR}/${dst}) - endif (WITH_DOC) -endforeach (txt ${docs}) +set(html-docs) +foreach(txt ${docs}) + string(REGEX REPLACE ".*/(.*)\\.txt" "\\1.html" html ${txt}) + set(src ${txt}) + set(dst doc/${html}) + add_custom_command( + OUTPUT ${dst} + COMMAND ${PYTHON_EXECUTABLE} + ARGS -x + ${ASCIIDOC_EXECUTABLE} + -d manpage + -b xhtml11 + -f ${CMAKE_SOURCE_DIR}/doc/asciidoc.conf + -azmq_version=${ZMQ_VERSION} + -o ${dst} + ${src} + DEPENDS ${CMAKE_BINARY_DIR}/${src} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating ${html}") + if(WITH_DOC) + list(APPEND html-docs ${CMAKE_BINARY_DIR}/${dst}) + endif() +endforeach() + +if(ZMQ_BUILD_FRAMEWORK) + add_custom_command( + TARGET libzmq + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E make_directory "${CMAKE_LIBRARY_OUTPUT_PATH}/ZeroMQ.framework/Versions/${ZMQ_VERSION}/MacOS" + COMMENT "Perf tools") +endif() + #----------------------------------------------------------------------------- # output -add_library(libzmq SHARED ${sources} ${html-docs} ${CMAKE_BINARY_DIR}/NSIS.template.in) -target_link_libraries(libzmq ws2_32.lib rpcrt4.lib ${OPTIONAL_LIBRARIES}) -set_target_properties(libzmq PROPERTIES - RELEASE_POSTFIX "${_zmq_COMPILER}-mt-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}" - DEBUG_POSTFIX "${_zmq_COMPILER}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}") +if(MSVC) + add_library(libzmq SHARED ${sources} ${public_headers} ${html-docs} ${readme-docs} ${CMAKE_BINARY_DIR}/NSIS.template.in) + target_link_libraries(libzmq ws2_32.lib rpcrt4.lib ${OPTIONAL_LIBRARIES}) + set_target_properties(libzmq PROPERTIES + PUBLIC_HEADER "${public_headers}" + RELEASE_POSTFIX "${_zmq_COMPILER}-mt-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}" + DEBUG_POSTFIX "${_zmq_COMPILER}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}") +else() + add_library(libzmq SHARED ${sources} ${public_headers} ${html-docs} ${readme-docs} ${zmq-pkgconfig}) + if(ZMQ_BUILD_FRAMEWORK) + set_target_properties(libzmq PROPERTIES + FRAMEWORK TRUE + OUTPUT_NAME "ZeroMQ" + PUBLIC_HEADER "${public_headers}" + MACOSX_FRAMEWORK_IDENTIFIER "org.zeromq.libzmq" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${ZMQ_VERSION} + MACOSX_FRAMEWORK_BUNDLE_VERSION ${ZMQ_VERSION} + VERSION ${ZMQ_VERSION} + SOVERSION "${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.0") + set_source_files_properties(${html-docs} PROPERTIES + MACOSX_PACKAGE_LOCATION doc) + set_source_files_properties(${readme-docs} PROPERTIES + MACOSX_PACKAGE_LOCATION etc) + set_source_files_properties(${zmq-pkgconfig} PROPERTIES + MACOSX_PACKAGE_LOCATION lib/pkgconfig) + else() + set_target_properties(libzmq PROPERTIES + OUTPUT_NAME "zmq" + PUBLIC_HEADER "${public_headers}") + endif() +endif() + +target_link_libraries(libzmq ${CMAKE_THREAD_LIBS_INIT}) +if(HAVE_WS2_32) + target_link_libraries(libzmq ws2_32) +endif() + +if(HAVE_RPCRT4) + target_link_libraries(libzmq rpcrt4) +endif() + +if(HAVE_IPHLAPI) + target_link_libraries(libzmq iphlpapi) +endif() + +set(perf-tools local_lat + remote_lat + local_thr + remote_thr + inproc_lat + inproc_thr) + +#get_target_property + +if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") # Why? + foreach(perf-tool ${perf-tools}) + add_executable(${perf-tool} perf/${perf-tool}.cpp) + target_link_libraries(${perf-tool} libzmq) + + if(ZMQ_BUILD_FRAMEWORK) + # Copy perf-tools binaries into Framework + add_custom_command( + TARGET libzmq ${perf-tool} + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy "$" "${LIBRARY_OUTPUT_PATH}/ZeroMQ.framework/Versions/${ZMQ_VERSION_STRING}/MacOS/${perf-tool}" + VERBATIM + COMMENT "Perf tools") + else() + install(TARGETS ${perf-tool} + RUNTIME DESTINATION bin + COMPONENT PerfTools) + endif() + endforeach() +endif() + #----------------------------------------------------------------------------- # installer -install (TARGETS libzmq ARCHIVE DESTINATION lib COMPONENT SDK) -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - install (TARGETS libzmq RUNTIME DESTINATION bin COMPONENT SDK) - install (FILES ${CMAKE_BINARY_DIR}/lib/libzmq${_zmq_COMPILER}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}.pdb DESTINATION lib COMPONENT SDK) -else (CMAKE_BUILD_TYPE STREQUAL "Debug") - install (TARGETS libzmq RUNTIME DESTINATION bin COMPONENT Runtime) -endif (CMAKE_BUILD_TYPE STREQUAL "Debug") -install (FILES ${headers} DESTINATION include COMPONENT SDK) +if(MSVC) + install(TARGETS libzmq + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + PUBLIC_HEADER DESTINATION include + COMPONENT SDK) + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + install(TARGETS libzmq + RUNTIME DESTINATION bin + PUBLIC_HEADER DESTINATION include + COMPONENT SDK) + install(FILES ${CMAKE_BINARY_DIR}/lib/libzmq${_zmq_COMPILER}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}.pdb DESTINATION lib + COMPONENT SDK) + else() + install(TARGETS libzmq + RUNTIME DESTINATION bin + PUBLIC_HEADER DESTINATION include + COMPONENT Runtime) + endif() +else() + install(TARGETS libzmq + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + FRAMEWORK DESTINATION "Library/Frameworks" + PUBLIC_HEADER DESTINATION include) +endif() -set (perf-tools - local_lat - remote_lat - local_thr - remote_thr - inproc_lat - inproc_thr -) -if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") - foreach (perf-tool ${perf-tools}) - add_executable (${perf-tool} perf/${perf-tool}.cpp) - target_link_libraries (${perf-tool} libzmq) - install (TARGETS ${perf-tool} RUNTIME DESTINATION bin COMPONENT PerfTools) - endforeach (perf-tool ${perf-tools}) -endif (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") +# install(FILES ${public_headers} +# DESTINATION include +# COMPONENT SDK) -file(GLOB headers "${CMAKE_SOURCE_DIR}/src/*.hpp") -install (FILES ${sources} ${headers} DESTINATION src COMPONENT SourceCode) +if(NOT ZMQ_BUILD_FRAMEWORK) + file(GLOB private_headers "${CMAKE_SOURCE_DIR}/src/*.hpp") + install(FILES ${sources} ${private_headers} DESTINATION src + COMPONENT SourceCode) +endif() -foreach (readme ${readme-docs}) - configure_file (${CMAKE_SOURCE_DIR}/${readme} ${CMAKE_BINARY_DIR}/${readme}.txt) - install (FILES ${CMAKE_BINARY_DIR}/${readme}.txt DESTINATION .) -endforeach (readme ${readme-docs}) -if (WITH_DOC) - install (FILES ${html-docs} DESTINATION doc COMPONENT RefGuide) -endif (WITH_DOC) +foreach(readme ${readme-docs}) + configure_file(${CMAKE_SOURCE_DIR}/${readme} ${CMAKE_BINARY_DIR}/${readme}.txt) -include (InstallRequiredSystemLibraries) + if(NOT ZMQ_BUILD_FRAMEWORK) + install(FILES ${CMAKE_BINARY_DIR}/${readme}.txt DESTINATION etc/zmq) + endif() +endforeach() -if (CMAKE_CL_64) - set (CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH} (x64)") - set (CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-x64") - set (CPACK_INSTALL_CMAKE_PROJECTS - "${CMAKE_SOURCE_DIR}/build/x64/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x64/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x64/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x64/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x64/v90;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x64/v90;ZeroMQ;ALL;/" - ) -else (CMAKE_CL_64) - set (CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}") - set (CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-x86") - set (CPACK_INSTALL_CMAKE_PROJECTS - "${CMAKE_SOURCE_DIR}/build/x86/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x86/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x86/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x86/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x86/v90;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x86/v90;ZeroMQ;ALL;/" - ) -endif (CMAKE_CL_64) -set (CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}") -set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "ZeroMQ lightweight messaging kernel") -set (CPACK_PACKAGE_VENDOR "Miru") -set (CPACK_NSIS_CONTACT "Steven McCoy ") -set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/COPYING.txt") -# There is a bug in NSI that does not handle full unix paths properly. Make -# sure there is at least one set of four (4) backlasshes. -set (CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}\\\\installer.ico") -set (CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}\\\\installer.ico") -set (CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}\\\\branding.bmp") -set (CPACK_NSIS_COMPRESSOR "/SOLID lzma") -set (CPACK_PACKAGE_VERSION_MAJOR "${ZMQ_VERSION_MAJOR}") -set (CPACK_PACKAGE_VERSION_MINOR "${ZMQ_VERSION_MINOR}") -set (CPACK_PACKAGE_VERSION_PATCH "${ZMQ_VERSION_PATCH}") +if(WITH_DOC) + if(NOT ZMQ_BUILD_FRAMEWORK) + install(FILES ${html-docs} DESTINATION doc/zmq COMPONENT RefGuide) + endif() +endif() -include (CPack) -cpack_add_component_group (Development - DISPLAY_NAME "ZeroMQ software development kit" - EXPANDED -) -cpack_add_component (PerfTools - DISPLAY_NAME "ZeroMQ performance tools" - INSTALL_TYPES FullInstall DevInstall -) -cpack_add_component (SourceCode - DISPLAY_NAME "ZeroMQ source code" - DISABLED - INSTALL_TYPES FullInstall -) -cpack_add_component (SDK - DISPLAY_NAME "ZeroMQ headers and libraries" - INSTALL_TYPES FullInstall DevInstall - GROUP Development -) -if (WITH_DOC) - cpack_add_component (RefGuide - DISPLAY_NAME "ZeroMQ reference guide" - INSTALL_TYPES FullInstall DevInstall - GROUP Development - ) -endif (WITH_DOC) -cpack_add_component (Runtime - DISPLAY_NAME "ZeroMQ runtime files" - REQUIRED - INSTALL_TYPES FullInstall DevInstall MinInstall -) -cpack_add_install_type (FullInstall - DISPLAY_NAME "Full install, including source code" -) -cpack_add_install_type (DevInstall - DISPLAY_NAME "Developer install, headers and libraries" -) -cpack_add_install_type (MinInstall - DISPLAY_NAME "Minimal install, runtime only" -) +if(MSVC) + include(InstallRequiredSystemLibraries) -# end of file + if(CMAKE_CL_64) + set(CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}(x64)") + set(CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-x64") + set(CPACK_INSTALL_CMAKE_PROJECTS + "${CMAKE_SOURCE_DIR}/build/x64/v110;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/debug/x64/v110;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/build/x64/v100;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/debug/x64/v100;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/build/x64/v90;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/debug/x64/v90;ZeroMQ;ALL;/") + else() + set(CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}") + set(CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-x86") + set(CPACK_INSTALL_CMAKE_PROJECTS + "${CMAKE_SOURCE_DIR}/build/x86/v110;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/debug/x86/v110;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/build/x86/v100;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/debug/x86/v100;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/build/x86/v90;ZeroMQ;ALL;/" + "${CMAKE_SOURCE_DIR}/debug/x86/v90;ZeroMQ;ALL;/") + endif() + set(CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "ZeroMQ lightweight messaging kernel") + set(CPACK_PACKAGE_VENDOR "Miru") + set(CPACK_NSIS_CONTACT "Steven McCoy ") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/COPYING.txt") + # There is a bug in NSI that does not handle full unix paths properly. Make + # sure there is at least one set of four(4) backslashes. + set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}\\\\installer.ico") + set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}\\\\installer.ico") + set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}\\\\branding.bmp") + set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") + set(CPACK_PACKAGE_VERSION ${ZMQ_VERSION}) + set(CPACK_PACKAGE_VERSION_MAJOR ${ZMQ_VERSION_MAJOR}) + set(CPACK_PACKAGE_VERSION_MINOR ${ZMQ_VERSION_MINOR}) + set(CPACK_PACKAGE_VERSION_PATCH ${ZMQ_VERSION_PATCH}) +# set(CPACK_PACKAGE_INSTALL_DIRECTORY "ZMQ Install Directory") +# set(CPACK_TEMPORARY_DIRECTORY "ZMQ Temporary CPack Directory") + + include(CPack) + + cpack_add_component_group(Development + DISPLAY_NAME "ZeroMQ software development kit" + EXPANDED) + cpack_add_component(PerfTools + DISPLAY_NAME "ZeroMQ performance tools" + INSTALL_TYPES FullInstall DevInstall) + cpack_add_component(SourceCode + DISPLAY_NAME "ZeroMQ source code" + DISABLED + INSTALL_TYPES FullInstall) + cpack_add_component(SDK + DISPLAY_NAME "ZeroMQ headers and libraries" + INSTALL_TYPES FullInstall DevInstall + GROUP Development) + if(WITH_DOC) + cpack_add_component(RefGuide + DISPLAY_NAME "ZeroMQ reference guide" + INSTALL_TYPES FullInstall DevInstall + GROUP Development) + endif(WITH_DOC) + cpack_add_component(Runtime + DISPLAY_NAME "ZeroMQ runtime files" + REQUIRED + INSTALL_TYPES FullInstall DevInstall MinInstall) + cpack_add_install_type(FullInstall + DISPLAY_NAME "Full install, including source code") + cpack_add_install_type(DevInstall + DISPLAY_NAME "Developer install, headers and libraries") + cpack_add_install_type(MinInstall + DISPLAY_NAME "Minimal install, runtime only") +endif() + +# Export this for library to help build this as a sub-project +set(ZEROMQ_LIBRARY libzmq CACHE STRING "ZeroMQ library") + +# Workaround for MSVS10 to avoid the Dialog Hell +# FIXME: This could be removed with future version of CMake. +if(MSVC_VERSION EQUAL 1600) + set(ZMQ_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/ZeroMQ.sln") + if(EXISTS "${ZMQ_SLN_FILENAME}") + file(APPEND "${ZMQ_SLN_FILENAME}" "\n# This should be regenerated!\n") + endif() +endif() diff --git a/builds/cmake/platform.hpp.in b/builds/cmake/platform.hpp.in new file mode 100644 index 00000000..f5bc3104 --- /dev/null +++ b/builds/cmake/platform.hpp.in @@ -0,0 +1,90 @@ +#ifndef __ZMQ_PLATFORM_HPP_INCLUDED__ +#define __ZMQ_PLATFORM_HPP_INCLUDED__ + +#cmakedefine ZMQ_FORCE_SELECT +#cmakedefine ZMQ_FORCE_POLL +#cmakedefine ZMQ_FORCE_EPOLL +#cmakedefine ZMQ_FORCE_DEVPOLL +#cmakedefine ZMQ_FORCE_KQUEUE +#cmakedefine ZMQ_FORCE_SELECT +#cmakedefine ZMQ_FORCE_POLL + +#cmakedefine ZMQ_FORCE_MUTEXES + + +#cmakedefine HAVE_CLOCK_GETTIME +#cmakedefine HAVE_GETHRTIME +#cmakedefine ZMQ_HAVE_UIO + +#cmakedefine ZMQ_HAVE_EVENTFD +#cmakedefine ZMQ_HAVE_IFADDRS + +#cmakedefine ZMQ_HAVE_SOCK_CLOEXEC +#cmakedefine ZMQ_HAVE_SO_KEEPALIVE +#cmakedefine ZMQ_HAVE_TCP_KEEPCNT +#cmakedefine ZMQ_HAVE_TCP_KEEPIDLE +#cmakedefine ZMQ_HAVE_TCP_KEEPINTVL +#cmakedefine ZMQ_HAVE_TCP_KEEPALIVE + +#cmakedefine ZMQ_HAVE_OPENPGM +#cmakedefine ZMQ_MAKE_VALGRIND_HAPPY + +#cmakedefine size_t +#cmakedefine ssize_t + + +#ifdef _AIX + #define ZMQ_HAVE_AIX +#endif + +#if defined ANDROID + #define ZMQ_HAVE_ANDROID +#endif + +#if defined __CYGWIN__ + #define ZMQ_HAVE_CYGWIN +#endif + +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) + #define ZMQ_HAVE_FREEBSD +#endif + +#if defined __hpux + #define ZMQ_HAVE_HPUX +#endif + +#if defined __linux__ + #define ZMQ_HAVE_LINUX +#endif + +#if defined __NetBSD__ + #define ZMQ_HAVE_NETBSD +#endif + +#if defined __OpenBSD__ + #define ZMQ_HAVE_OPENBSD +#endif + +#if defined __VMS + #define ZMQ_HAVE_OPENVMS +#endif + +#if defined __APPLE__ + #define ZMQ_HAVE_OSX +#endif + +#if defined __QNXNTO__ + #define ZMQ_HAVE_QNXNTO +#endif + +#if defined(sun) || defined(__sun) + #define ZMQ_HAVE_SOLARIS +#endif + +#if defined(WIN32) || defined(_WIN32) + #define ZMQ_HAVE_WINDOWS +#endif + + + +#endif diff --git a/cmake/Modules/AutoconfHelper.cmake b/cmake/Modules/AutoconfHelper.cmake new file mode 100644 index 00000000..965674bf --- /dev/null +++ b/cmake/Modules/AutoconfHelper.cmake @@ -0,0 +1,298 @@ +# Helper functions for translating autoconf projects. Several functions +# are lifted from the Mono sources + +include (CheckCSourceCompiles) +include (CheckIncludeFile) +include (TestBigEndian) +include (CheckFunctionExists) +include (CheckTypeSize) +include (CheckCSourceRuns) + + +# Function to get the version information from the configure.ac file in the +# current directory. Its argument is the name of the library as passed to +# AC_INIT. It will set the variables ${LIBNAME}_VERSION and ${LIBNAME}_SOVERSION +function (ac_get_version libname) + string(TOUPPER "${libname}" libname_upper) + + # Read the relevant content from configure.ac + file (STRINGS configure.ac tmp_configure_ac + REGEX "${libname_upper}_[_A-Z]+=[ \\t]*[0-9]+") + + # Product version + string (REGEX REPLACE ".+MAJOR[_A-Z]+=([0-9]+).+MINOR[_A-Z]+=([0-9]+).+MICRO[_A-Z]+=([0-9]+).*" + "\\1.\\2.\\3" ${libname_upper}_VERSION "${tmp_configure_ac}") + + # Library version for libtool + string (REGEX REPLACE ".+CURRENT=([0-9]+).+REVISION=([0-9]+).+AGE=([0-9]+).*" + "\\1.\\2.\\3" ${libname_upper}_SOVERSION "${tmp_configure_ac}") + + # Checks if the string needs to be displayed + set (${libname_upper}_DISPLAYSTR_AUX + "Found ${libname} version ${${libname_upper}_VERSION}, soversion ${${libname_upper}_SOVERSION} from configure.ac" + ) + if ((NOT ${libname_upper}_DISPLAYSTR) OR (NOT ${libname_upper}_DISPLAYSTR STREQUAL ${libname_upper}_DISPLAYSTR_AUX)) + set (${libname_upper}_DISPLAYSTR ${${libname_upper}_DISPLAYSTR_AUX} + CACHE INTERNAL "Version string from ${libname}" FORCE) + message (STATUS ${${libname_upper}_DISPLAYSTR}) + endif () + + # Export the result to the caller + set(${libname_upper}_VERSION "${${libname_upper}_VERSION}" PARENT_SCOPE) + set(${libname_upper}_SOVERSION "${${libname_upper}_SOVERSION}" PARENT_SCOPE) +endfunction() + + +# Also from mono's source code +# Implementation of AC_CHECK_HEADERS +# In addition, it also records the list of variables in the variable +# 'autoheader_vars', and for each variable, a documentation string in the +# variable ${var}_doc +function(ac_check_headers) + foreach (header ${ARGV}) + string(TOUPPER ${header} header_var) + string(REPLACE "." "_" header_var ${header_var}) + string(REPLACE "/" "_" header_var ${header_var}) + set(header_var "HAVE_${header_var}") + check_include_file (${header} ${header_var}) + set("${header_var}_doc" "Define to 1 if you have the <${header}> header file." PARENT_SCOPE) + if (${header_var}) + set("${header_var}_defined" "1" PARENT_SCOPE) + endif() + set("${header_var}_val" "1" PARENT_SCOPE) + set (autoheader_vars ${autoheader_vars} ${header_var}) + endforeach() + set (autoheader_vars ${autoheader_vars} PARENT_SCOPE) +endfunction() + +# Function taken from mono's source code +function (ac_check_funcs) + foreach (func ${ARGV}) + string(TOUPPER ${func} var) + set(var "HAVE_${var}") + set(${var}) + check_function_exists (${func} ${var}) + set("${var}_doc" "Define to 1 if you have the '${func}' function." PARENT_SCOPE) + if (${var}) + set("${var}_defined" "1" PARENT_SCOPE) + set(${var} yes PARENT_SCOPE) + endif() + set("${var}_val" "1" PARENT_SCOPE) + set (autoheader_vars ${autoheader_vars} ${var}) + endforeach() + set (autoheader_vars ${autoheader_vars} PARENT_SCOPE) +endfunction() + + +# Specifically, this macro checks for stdlib.h', stdarg.h', +# string.h', and float.h'; if the system has those, it probably +# has the rest of the ANSI C header files. This macro also checks +# whether string.h' declares memchr' (and thus presumably the +# other mem' functions), whether stdlib.h' declare free' (and +# thus presumably malloc' and other related functions), and whether +# the ctype.h' macros work on characters with the high bit set, as +# ANSI C requires. +function (ac_header_stdc) + if (STDC_HEADERS) + return() + endif() + message(STATUS "Looking for ANSI-C headers") + set(code " +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + void *ptr; + free((void*)1); + ptr = memchr((void*)1, 0, 0); + + return (int)ptr; +} +") + # FIXME Check the ctype.h high bit + CHECK_C_SOURCE_COMPILES("${code}" STDC_HEADERS) + if (STDC_HEADERS) + set(STDC_HEADERS 1 PARENT_SCOPE) + message(STATUS "Looking for ANSI-C headers - found") + else() + message(STATUS "Looking for ANSI-C headers - not found") + endif() +endfunction() + + +# Also from the mono sources, kind of implements AC_SYS_LARGEFILE +function (ac_sys_largefile) + CHECK_C_SOURCE_RUNS(" +#include +#define BIG_OFF_T (((off_t)1<<62)-1+((off_t)1<<62)) +int main (int argc, char **argv) { + int big_off_t=((BIG_OFF_T%2147483629==721) && + (BIG_OFF_T%2147483647==1)); + return big_off ? 0 : 1; +} +" HAVE_LARGE_FILE_SUPPORT) + +# Check if it makes sense to define _LARGE_FILES or _FILE_OFFSET_BITS + if (HAVE_LARGE_FILE_SUPPORT) + return() + endif() + + set (_LARGE_FILE_EXTRA_SRC " +#include +int main (int argc, char **argv) { + return sizeof(off_t) == 8 ? 0 : 1; +} +") + CHECK_C_SOURCE_RUNS ("#define _LARGE_FILES\n${_LARGE_FILE_EXTRA_SRC}" + HAVE_USEFUL_D_LARGE_FILES) + if (NOT HAVE_USEFUL_D_LARGE_FILES) + if (NOT DEFINED HAVE_USEFUL_D_FILE_OFFSET_BITS) + set (SHOW_LARGE_FILE_WARNING TRUE) + endif () + CHECK_C_SOURCE_RUNS ("#define _FILE_OFFSET_BITS 64\n${_LARGE_FILE_EXTRA_SRC}" + HAVE_USEFUL_D_FILE_OFFSET_BITS) + if (HAVE_USEFUL_D_FILE_OFFSET_BITS) + set (_FILE_OFFSET_BITS 64 PARENT_SCOPE) + elseif (SHOW_LARGE_FILE_WARNING) + message (WARNING "No 64 bit file support through off_t available.") + endif () + else () + set (_LARGE_FILES 1 PARENT_SCOPE) + endif () +endfunction () + + +# Quick way to set some basic variables +# FIXME add support for variable number of arguments: only package and version are mandatory +function (ac_init package version bug_report tarname) + set(PACKAGE_NAME "\"${package}\"" PARENT_SCOPE) + set(PACKAGE_VERSION "\"${version}\"" PARENT_SCOPE) + set(VERSION "\"${version}\"" PARENT_SCOPE) + set(PACKAGE_STRING "\"${package} ${version}\"" PARENT_SCOPE) + + if (bug_report) + set(PACKAGE_BUGREPORT "\"${bug_report}\"" PARENT_SCOPE) + endif() + if (tarname) + set(PACKAGE_TARNAME "\"${tarname}\"" PARENT_SCOPE) + set(PACKAGE "\"${tarname}\"" PARENT_SCOPE) + set(PACKAGE_UNQUOTED "${tarname}" PARENT_SCOPE) + endif() +endfunction() + + +# Checks for the const keyword, defining "HAS_CONST_SUPPORT" +# If it does not have support, defines "const" to 0 in the parent scope +function (ac_c_const) + CHECK_C_SOURCE_COMPILES( + "int main(int argc, char **argv){const int r = 0;return r;}" + HAS_CONST_SUPPORT) + if (NOT HAS_CONST_SUPPORT) + set(const 0 PARENT_SCOPE) + endif() +endfunction() + + +# Inline keyword support. Defines "inline" in the parent scope to the +# compiler internal keyword for inline in C +# TODO write a better test! +function (ac_c_inline) + if (MSVC) + set (inline __inline) + elseif(CMAKE_COMPILER_IS_GNUC) + set (inline __inline__) + endif() + set(inline "${inline}" PARENT_SCOPE) +endfunction() + + +# Test if you can safely include both and +function (ac_header_time) + CHECK_C_SOURCE_COMPILES( + "#include \n#include \nint main(int argc, char **argv) { return 0; }" + TIME_WITH_SYS_TIME) + set(TIME_WITH_SYS_TIME ${TIME_WITH_SYS_TIME} PARENT_SCOPE) +endfunction() + + +# Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian +# (Intel), setting "WORDS_BIGENDIAN" to 1 if big endian +function (ac_c_bigendian) + TEST_BIG_ENDIAN(HOST_BIGENDIAN) + if (HOST_BIGENDIAN) + set(WORDS_BIGENDIAN 1 PARENT_SCOPE) + endif() +endfunction() + + +# Check for off_t, setting "off_t" in the parent scope +function(ac_type_off_t) + CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T) + if (NOT SIZEOF_OFF_T) + set(off_t "long int") + endif() + set(off_t ${off_t} PARENT_SCOPE) +endfunction() + + +# Check for size_t, setting "size_t" in the parent scope +function(ac_type_size_t) + CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T) + if (NOT SIZEOF_SIZE_T) + set(size_t "unsigned int") + endif() + set(size_t ${size_t} PARENT_SCOPE) +endfunction() + + +# Define "TM_IN_SYS_TIME" to 1 if declares "struct tm" +function(ac_struct_tm) + CHECK_C_SOURCE_COMPILES( + "#include \nint main(int argc, char **argv) { struct tm x; return 0; }" + TM_IN_SYS_TIME + ) + if (TM_IN_SYS_TIME) + set (TM_IN_SYS_TIME 1 PARENT_SCOPE) + endif() +endfunction() + + +# Obtain size of an 'type' and define as SIZEOF_TYPE +function (ac_check_sizeof typename) + string(TOUPPER "SIZEOF_${typename}" varname) + string(REPLACE " " "_" varname "${varname}") + string(REPLACE "*" "p" varname "${varname}") + CHECK_TYPE_SIZE("${typename}" ${varname} BUILTIN_TYPES_ONLY) + if(NOT ${varname}) + set(${varname} 0 PARENT_SCOPE) + endif() +endfunction() + + +# Check if the type exists, defines HAVE_ +function (ac_check_type typename) + string(TOUPPER "${typename}" varname) + string(REPLACE " " "_" varname "${varname}") + string(REPLACE "*" "p" varname "${varname}") + CHECK_TYPE_SIZE("${typename}" ${varname}) + if (NOT "${varname}" STREQUAL "") + set("HAVE_${varname}" 1 PARENT_SCOPE) + set("${varname}" "${typename}" PARENT_SCOPE) + else() + set("${varname}" "unknown" PARENT_SCOPE) + endif() +endfunction() + + +# Verifies if each type on the list exists, using the given prelude +function (ac_check_types type_list prelude) + foreach(typename ${type_list}) + string(TOUPPER "HAVE_${typename}" varname) + string(REPLACE " " "_" varname "${varname}") + string(REPLACE "*" "p" varname "${varname}") + CHECK_C_SOURCE_COMPILES("${prelude}\n ${typename} foo;" ${varname}) + endforeach() +endfunction() diff --git a/cmake/Modules/FindAsciiDoc.cmake b/cmake/Modules/FindAsciiDoc.cmake new file mode 100644 index 00000000..168d1527 --- /dev/null +++ b/cmake/Modules/FindAsciiDoc.cmake @@ -0,0 +1,19 @@ +# - Find Asciidoc +# this module looks for asciidoc and a2x +# +# ASCIIDOC_EXECUTABLE - the full path to asciidoc +# ASCIIDOC_FOUND - If false, don't attempt to use asciidoc. +# A2X_EXECUTABLE - the full path to a2x +# A2X_FOUND - If false, don't attempt to use a2x. + +find_program(ASCIIDOC_EXECUTABLE asciidoc asciidoc.py + PATHS "$ENV{ASCIIDOC_ROOT}" + "$ENV{PROGRAMW6432}/asciidoc" + "$ENV{PROGRAMFILES}/asciidoc" + "$ENV{PROGRAMFILES(X86)}/asciidoc") + +find_program(A2X_EXECUTABLE a2x) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_ARGS(AsciiDoc REQUIRED_VARS ASCIIDOC_EXECUTABLE) +mark_as_advanced(ASCIIDOC_EXECUTABLE A2X_EXECUTABLE) \ No newline at end of file diff --git a/cmake/Modules/TestZMQVersion.cmake b/cmake/Modules/TestZMQVersion.cmake index 0fcdc7cd..b8a87b2b 100644 --- a/cmake/Modules/TestZMQVersion.cmake +++ b/cmake/Modules/TestZMQVersion.cmake @@ -5,7 +5,7 @@ TRY_RUN(RUN_RESULT COMPILE_RESULT ${TRY_RUN_DIR} ${CMAKE_SOURCE_DIR}/cmake/Modules/zmq_version.cpp - CMAKE_FLAGS + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_SOURCE_DIR}/include" COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT RUN_OUTPUT_VARIABLE RUN_OUTPUT) diff --git a/cmake/Modules/ZMQSourceRunChecks.cmake b/cmake/Modules/ZMQSourceRunChecks.cmake new file mode 100644 index 00000000..4d23a2a1 --- /dev/null +++ b/cmake/Modules/ZMQSourceRunChecks.cmake @@ -0,0 +1,129 @@ + + +macro(zmq_check_sock_cloexec) + message(STATUS "Checking whether SOCK_CLOEXEC is supported") + check_c_source_runs( + " +#include +#include + +int main(int argc, char *argv []) +{ + int s = socket(PF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0); + return(s == -1); +} +" + ZMQ_HAVE_SOCK_CLOEXEC) +endmacro() + +# TCP keep-alives Checks. + +macro(zmq_check_so_keepalive) + message(STATUS "Checking whether SO_KEEPALIVE is supported") + check_c_source_runs( +" +#include +#include + +int main(int argc, char *argv []) +{ + int s, rc, opt = 1; + return( + ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1) || + ((rc = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE,(char*) &opt, sizeof(int))) == -1) + ); +} +" + ZMQ_HAVE_SO_KEEPALIVE) +endmacro() + +macro(zmq_check_tcp_keepcnt) + message(STATUS "Checking whether TCP_KEEPCNT is supported") + check_c_source_runs( + " +#include +#include +#include +#include + +int main(int argc, char *argv []) +{ + int s, rc, opt = 1; + return( + ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1) || + ((rc = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE,(char*) &opt, sizeof(int))) == -1) || + ((rc = setsockopt(s, IPPROTO_TCP, TCP_KEEPCNT,(char*) &opt, sizeof(int))) == -1) + ); +} +" + ZMQ_HAVE_TCP_KEEPCNT) +endmacro() + +macro(zmq_check_tcp_keepidle) + message(STATUS "Checking whether TCP_KEEPIDLE is supported") + check_c_source_runs( + " +#include +#include +#include +#include + +int main(int argc, char *argv []) +{ + int s, rc, opt = 1; + return( + ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1) || + ((rc = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE,(char*) &opt, sizeof(int))) == -1) || + ((rc = setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE,(char*) &opt, sizeof(int))) == -1) + ); +} +" + ZMQ_HAVE_TCP_KEEPIDLE) +endmacro() + + +macro(zmq_check_tcp_keepintvl) + message(STATUS "Checking whether TCP_KEEPINTVL is supported") + check_c_source_runs( + " +#include +#include +#include +#include + +int main(int argc, char *argv []) +{ + int s, rc, opt = 1; + return( + ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1) || + ((rc = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE,(char*) &opt, sizeof(int))) == -1) || + ((rc = setsockopt(s, IPPROTO_TCP, TCP_KEEPINTVL,(char*) &opt, sizeof(int))) == -1) + ); +} + +" + ZMQ_HAVE_TCP_KEEPINTVL) +endmacro() + + +macro(zmq_check_tcp_keepalive) + message(STATUS "Checking whether TCP_KEEPALIVE is supported") + check_c_source_runs( + " +#include +#include +#include +#include + +int main(int argc, char *argv []) +{ + int s, rc, opt = 1; + return( + ((s = socket(PF_INET, SOCK_STREAM, 0)) == -1) || + ((rc = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE,(char*) &opt, sizeof(int))) == -1) || + ((rc = setsockopt(s, IPPROTO_TCP, TCP_KEEPALIVE,(char*) &opt, sizeof(int))) == -1) + ); +} +" + ZMQ_HAVE_TCP_KEEPALIVE) +endmacro() diff --git a/cmake/Modules/zmq_version.cpp b/cmake/Modules/zmq_version.cpp deleted file mode 100644 index 120fd5c2..00000000 --- a/cmake/Modules/zmq_version.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright (c) 2007-2012 iMatix Corporation - Copyright (c) 2009-2011 250bpm s.r.o. - Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file - - This file is part of 0MQ. - - 0MQ is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - 0MQ is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . -*/ - -#include "zmq.h" - -#include - -int main () -{ - printf ("%d.%d.%d\n", ZMQ_VERSION_MAJOR, ZMQ_VERSION_MINOR, ZMQ_VERSION_PATCH); - return 0; -} - diff --git a/src/libzmq.pc.cmake.in b/src/libzmq.pc.cmake.in new file mode 100644 index 00000000..ac25909b --- /dev/null +++ b/src/libzmq.pc.cmake.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_PREFIX@/lib +includedir=@CMAKE_INSTALL_PREFIX@/include + +Name: libzmq +Description: 0MQ c++ library +Version: @ZMQ_VERSION_MAJOR@.@ZMQ_VERSION_MINOR@.@ZMQ_VERSION_PATCH@ +Libs: -L${libdir} -lzmq +Cflags: -I@CMAKE_INSTALL_PREFIX@/include From f3901b35d46c91ebd6a8f8b7b2110c15b54b90da Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 05:06:09 -0500 Subject: [PATCH 03/16] Comments about ICC build failure with 12.x were crazy Fix warnings with ICC. --- CMakeLists.txt | 9 - builds/cmake/platform.hpp.in | 3 - cmake/Modules/AutoconfHelper.cmake | 298 ----------------------------- src/stream_engine.hpp | 2 +- 4 files changed, 1 insertion(+), 311 deletions(-) delete mode 100644 cmake/Modules/AutoconfHelper.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 50930ab0..37628bb6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,6 @@ include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) include(CheckCSourceCompiles) include(CheckCSourceRuns) -include(AutoconfHelper) include(CMakeDependentOption) check_include_files(ifaddrs.h ZMQ_HAVE_IFADDRS) @@ -119,14 +118,6 @@ if(LIBZMQ_WERROR) endif() -if(${CMAKE_C_COMPILER_ID} STREQUAL "Intel") - # 279: controlling expression is constant - # Fixes build with ICC 12.x - zmq_check_cxx_flag_prepend("-wd279") - ac_type_size_t() - ac_type_ssize_t() -endif() - if(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc") zmq_check_cxx_flag_prepend("-mcpu=v9") endif() diff --git a/builds/cmake/platform.hpp.in b/builds/cmake/platform.hpp.in index f5bc3104..76b0281d 100644 --- a/builds/cmake/platform.hpp.in +++ b/builds/cmake/platform.hpp.in @@ -29,9 +29,6 @@ #cmakedefine ZMQ_HAVE_OPENPGM #cmakedefine ZMQ_MAKE_VALGRIND_HAPPY -#cmakedefine size_t -#cmakedefine ssize_t - #ifdef _AIX #define ZMQ_HAVE_AIX diff --git a/cmake/Modules/AutoconfHelper.cmake b/cmake/Modules/AutoconfHelper.cmake deleted file mode 100644 index 965674bf..00000000 --- a/cmake/Modules/AutoconfHelper.cmake +++ /dev/null @@ -1,298 +0,0 @@ -# Helper functions for translating autoconf projects. Several functions -# are lifted from the Mono sources - -include (CheckCSourceCompiles) -include (CheckIncludeFile) -include (TestBigEndian) -include (CheckFunctionExists) -include (CheckTypeSize) -include (CheckCSourceRuns) - - -# Function to get the version information from the configure.ac file in the -# current directory. Its argument is the name of the library as passed to -# AC_INIT. It will set the variables ${LIBNAME}_VERSION and ${LIBNAME}_SOVERSION -function (ac_get_version libname) - string(TOUPPER "${libname}" libname_upper) - - # Read the relevant content from configure.ac - file (STRINGS configure.ac tmp_configure_ac - REGEX "${libname_upper}_[_A-Z]+=[ \\t]*[0-9]+") - - # Product version - string (REGEX REPLACE ".+MAJOR[_A-Z]+=([0-9]+).+MINOR[_A-Z]+=([0-9]+).+MICRO[_A-Z]+=([0-9]+).*" - "\\1.\\2.\\3" ${libname_upper}_VERSION "${tmp_configure_ac}") - - # Library version for libtool - string (REGEX REPLACE ".+CURRENT=([0-9]+).+REVISION=([0-9]+).+AGE=([0-9]+).*" - "\\1.\\2.\\3" ${libname_upper}_SOVERSION "${tmp_configure_ac}") - - # Checks if the string needs to be displayed - set (${libname_upper}_DISPLAYSTR_AUX - "Found ${libname} version ${${libname_upper}_VERSION}, soversion ${${libname_upper}_SOVERSION} from configure.ac" - ) - if ((NOT ${libname_upper}_DISPLAYSTR) OR (NOT ${libname_upper}_DISPLAYSTR STREQUAL ${libname_upper}_DISPLAYSTR_AUX)) - set (${libname_upper}_DISPLAYSTR ${${libname_upper}_DISPLAYSTR_AUX} - CACHE INTERNAL "Version string from ${libname}" FORCE) - message (STATUS ${${libname_upper}_DISPLAYSTR}) - endif () - - # Export the result to the caller - set(${libname_upper}_VERSION "${${libname_upper}_VERSION}" PARENT_SCOPE) - set(${libname_upper}_SOVERSION "${${libname_upper}_SOVERSION}" PARENT_SCOPE) -endfunction() - - -# Also from mono's source code -# Implementation of AC_CHECK_HEADERS -# In addition, it also records the list of variables in the variable -# 'autoheader_vars', and for each variable, a documentation string in the -# variable ${var}_doc -function(ac_check_headers) - foreach (header ${ARGV}) - string(TOUPPER ${header} header_var) - string(REPLACE "." "_" header_var ${header_var}) - string(REPLACE "/" "_" header_var ${header_var}) - set(header_var "HAVE_${header_var}") - check_include_file (${header} ${header_var}) - set("${header_var}_doc" "Define to 1 if you have the <${header}> header file." PARENT_SCOPE) - if (${header_var}) - set("${header_var}_defined" "1" PARENT_SCOPE) - endif() - set("${header_var}_val" "1" PARENT_SCOPE) - set (autoheader_vars ${autoheader_vars} ${header_var}) - endforeach() - set (autoheader_vars ${autoheader_vars} PARENT_SCOPE) -endfunction() - -# Function taken from mono's source code -function (ac_check_funcs) - foreach (func ${ARGV}) - string(TOUPPER ${func} var) - set(var "HAVE_${var}") - set(${var}) - check_function_exists (${func} ${var}) - set("${var}_doc" "Define to 1 if you have the '${func}' function." PARENT_SCOPE) - if (${var}) - set("${var}_defined" "1" PARENT_SCOPE) - set(${var} yes PARENT_SCOPE) - endif() - set("${var}_val" "1" PARENT_SCOPE) - set (autoheader_vars ${autoheader_vars} ${var}) - endforeach() - set (autoheader_vars ${autoheader_vars} PARENT_SCOPE) -endfunction() - - -# Specifically, this macro checks for stdlib.h', stdarg.h', -# string.h', and float.h'; if the system has those, it probably -# has the rest of the ANSI C header files. This macro also checks -# whether string.h' declares memchr' (and thus presumably the -# other mem' functions), whether stdlib.h' declare free' (and -# thus presumably malloc' and other related functions), and whether -# the ctype.h' macros work on characters with the high bit set, as -# ANSI C requires. -function (ac_header_stdc) - if (STDC_HEADERS) - return() - endif() - message(STATUS "Looking for ANSI-C headers") - set(code " -#include -#include -#include -#include - -int main(int argc, char **argv) -{ - void *ptr; - free((void*)1); - ptr = memchr((void*)1, 0, 0); - - return (int)ptr; -} -") - # FIXME Check the ctype.h high bit - CHECK_C_SOURCE_COMPILES("${code}" STDC_HEADERS) - if (STDC_HEADERS) - set(STDC_HEADERS 1 PARENT_SCOPE) - message(STATUS "Looking for ANSI-C headers - found") - else() - message(STATUS "Looking for ANSI-C headers - not found") - endif() -endfunction() - - -# Also from the mono sources, kind of implements AC_SYS_LARGEFILE -function (ac_sys_largefile) - CHECK_C_SOURCE_RUNS(" -#include -#define BIG_OFF_T (((off_t)1<<62)-1+((off_t)1<<62)) -int main (int argc, char **argv) { - int big_off_t=((BIG_OFF_T%2147483629==721) && - (BIG_OFF_T%2147483647==1)); - return big_off ? 0 : 1; -} -" HAVE_LARGE_FILE_SUPPORT) - -# Check if it makes sense to define _LARGE_FILES or _FILE_OFFSET_BITS - if (HAVE_LARGE_FILE_SUPPORT) - return() - endif() - - set (_LARGE_FILE_EXTRA_SRC " -#include -int main (int argc, char **argv) { - return sizeof(off_t) == 8 ? 0 : 1; -} -") - CHECK_C_SOURCE_RUNS ("#define _LARGE_FILES\n${_LARGE_FILE_EXTRA_SRC}" - HAVE_USEFUL_D_LARGE_FILES) - if (NOT HAVE_USEFUL_D_LARGE_FILES) - if (NOT DEFINED HAVE_USEFUL_D_FILE_OFFSET_BITS) - set (SHOW_LARGE_FILE_WARNING TRUE) - endif () - CHECK_C_SOURCE_RUNS ("#define _FILE_OFFSET_BITS 64\n${_LARGE_FILE_EXTRA_SRC}" - HAVE_USEFUL_D_FILE_OFFSET_BITS) - if (HAVE_USEFUL_D_FILE_OFFSET_BITS) - set (_FILE_OFFSET_BITS 64 PARENT_SCOPE) - elseif (SHOW_LARGE_FILE_WARNING) - message (WARNING "No 64 bit file support through off_t available.") - endif () - else () - set (_LARGE_FILES 1 PARENT_SCOPE) - endif () -endfunction () - - -# Quick way to set some basic variables -# FIXME add support for variable number of arguments: only package and version are mandatory -function (ac_init package version bug_report tarname) - set(PACKAGE_NAME "\"${package}\"" PARENT_SCOPE) - set(PACKAGE_VERSION "\"${version}\"" PARENT_SCOPE) - set(VERSION "\"${version}\"" PARENT_SCOPE) - set(PACKAGE_STRING "\"${package} ${version}\"" PARENT_SCOPE) - - if (bug_report) - set(PACKAGE_BUGREPORT "\"${bug_report}\"" PARENT_SCOPE) - endif() - if (tarname) - set(PACKAGE_TARNAME "\"${tarname}\"" PARENT_SCOPE) - set(PACKAGE "\"${tarname}\"" PARENT_SCOPE) - set(PACKAGE_UNQUOTED "${tarname}" PARENT_SCOPE) - endif() -endfunction() - - -# Checks for the const keyword, defining "HAS_CONST_SUPPORT" -# If it does not have support, defines "const" to 0 in the parent scope -function (ac_c_const) - CHECK_C_SOURCE_COMPILES( - "int main(int argc, char **argv){const int r = 0;return r;}" - HAS_CONST_SUPPORT) - if (NOT HAS_CONST_SUPPORT) - set(const 0 PARENT_SCOPE) - endif() -endfunction() - - -# Inline keyword support. Defines "inline" in the parent scope to the -# compiler internal keyword for inline in C -# TODO write a better test! -function (ac_c_inline) - if (MSVC) - set (inline __inline) - elseif(CMAKE_COMPILER_IS_GNUC) - set (inline __inline__) - endif() - set(inline "${inline}" PARENT_SCOPE) -endfunction() - - -# Test if you can safely include both and -function (ac_header_time) - CHECK_C_SOURCE_COMPILES( - "#include \n#include \nint main(int argc, char **argv) { return 0; }" - TIME_WITH_SYS_TIME) - set(TIME_WITH_SYS_TIME ${TIME_WITH_SYS_TIME} PARENT_SCOPE) -endfunction() - - -# Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian -# (Intel), setting "WORDS_BIGENDIAN" to 1 if big endian -function (ac_c_bigendian) - TEST_BIG_ENDIAN(HOST_BIGENDIAN) - if (HOST_BIGENDIAN) - set(WORDS_BIGENDIAN 1 PARENT_SCOPE) - endif() -endfunction() - - -# Check for off_t, setting "off_t" in the parent scope -function(ac_type_off_t) - CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T) - if (NOT SIZEOF_OFF_T) - set(off_t "long int") - endif() - set(off_t ${off_t} PARENT_SCOPE) -endfunction() - - -# Check for size_t, setting "size_t" in the parent scope -function(ac_type_size_t) - CHECK_TYPE_SIZE("size_t" SIZEOF_SIZE_T) - if (NOT SIZEOF_SIZE_T) - set(size_t "unsigned int") - endif() - set(size_t ${size_t} PARENT_SCOPE) -endfunction() - - -# Define "TM_IN_SYS_TIME" to 1 if declares "struct tm" -function(ac_struct_tm) - CHECK_C_SOURCE_COMPILES( - "#include \nint main(int argc, char **argv) { struct tm x; return 0; }" - TM_IN_SYS_TIME - ) - if (TM_IN_SYS_TIME) - set (TM_IN_SYS_TIME 1 PARENT_SCOPE) - endif() -endfunction() - - -# Obtain size of an 'type' and define as SIZEOF_TYPE -function (ac_check_sizeof typename) - string(TOUPPER "SIZEOF_${typename}" varname) - string(REPLACE " " "_" varname "${varname}") - string(REPLACE "*" "p" varname "${varname}") - CHECK_TYPE_SIZE("${typename}" ${varname} BUILTIN_TYPES_ONLY) - if(NOT ${varname}) - set(${varname} 0 PARENT_SCOPE) - endif() -endfunction() - - -# Check if the type exists, defines HAVE_ -function (ac_check_type typename) - string(TOUPPER "${typename}" varname) - string(REPLACE " " "_" varname "${varname}") - string(REPLACE "*" "p" varname "${varname}") - CHECK_TYPE_SIZE("${typename}" ${varname}) - if (NOT "${varname}" STREQUAL "") - set("HAVE_${varname}" 1 PARENT_SCOPE) - set("${varname}" "${typename}" PARENT_SCOPE) - else() - set("${varname}" "unknown" PARENT_SCOPE) - endif() -endfunction() - - -# Verifies if each type on the list exists, using the given prelude -function (ac_check_types type_list prelude) - foreach(typename ${type_list}) - string(TOUPPER "HAVE_${typename}" varname) - string(REPLACE " " "_" varname "${varname}") - string(REPLACE "*" "p" varname "${varname}") - CHECK_C_SOURCE_COMPILES("${prelude}\n ${typename} foo;" ${varname}) - endforeach() -endfunction() diff --git a/src/stream_engine.hpp b/src/stream_engine.hpp index 2d83995c..d7505331 100644 --- a/src/stream_engine.hpp +++ b/src/stream_engine.hpp @@ -94,7 +94,7 @@ namespace zmq // Size of the greeting message: // Preamble (10 bytes) + version (1 byte) + socket type (1 byte). - const static size_t greeting_size = 12; + static const size_t greeting_size = 12; // True iff we are registered with an I/O poller. bool io_enabled; From 74763e2c8ee5eccf2bea0ca64e7f784be4307404 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 05:34:44 -0500 Subject: [PATCH 04/16] Don't use the toplevel cmake paths so the build works as a subproject --- CMakeLists.txt | 101 +++++++++++++++++++---------- cmake/Modules/TestZMQVersion.cmake | 47 +++++--------- 2 files changed, 82 insertions(+), 66 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 37628bb6..ee341a85 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ if(NOT ${POLLER} STREQUAL "") set(ZMQ_FORCE_${UPPER_POLLER} 1) endif() -set(ZMQ_CMAKE_MODULES_DIR ${CMAKE_SOURCE_DIR}/cmake/Modules) +set(ZMQ_CMAKE_MODULES_DIR ${CMAKE_CURRENT_LIST_DIR}/cmake/Modules) list(APPEND CMAKE_MODULE_PATH ${ZMQ_CMAKE_MODULES_DIR}) include(TestZMQVersion) @@ -226,7 +226,7 @@ endif() #----------------------------------------------------------------------------- # force off-tree build -if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) +if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR}) message(FATAL_ERROR "CMake generation is not allowed within the source directory! Remove the CMakeCache.txt file and try again from another folder, e.g.: @@ -246,8 +246,8 @@ if(NOT CMAKE_BUILD_TYPE) FORCE) endif() -set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) -set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) +set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib) #----------------------------------------------------------------------------- # platform specifics @@ -347,7 +347,7 @@ set(rc-sources include_directories( include - ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR} ) set(public_headers include/zmq.h @@ -383,45 +383,44 @@ endif(WITH_OPENPGM) # source generators foreach(source ${cxx-sources}) - list(APPEND sources ${CMAKE_SOURCE_DIR}/src/${source}) + list(APPEND sources ${CMAKE_CURRENT_SOURCE_DIR}/src/${source}) endforeach() foreach(source ${rc-sources}) - list(APPEND sources ${CMAKE_BINARY_DIR}/${source}) - configure_file(${CMAKE_SOURCE_DIR}/src/${source}.in ${CMAKE_BINARY_DIR}/${source}) + list(APPEND sources ${CMAKE_CURRENT_BINARY_DIR}/${source}) endforeach() -configure_file(${CMAKE_SOURCE_DIR}/builds/cmake/platform.hpp.in ${CMAKE_BINARY_DIR}/platform.hpp) -list(APPEND sources ${CMAKE_BINARY_DIR}/platform.hpp) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/platform.hpp.in ${CMAKE_CURRENT_BINARY_DIR}/platform.hpp) +list(APPEND sources ${CMAKE_CURRENT_BINARY_DIR}/platform.hpp) -configure_file(${CMAKE_SOURCE_DIR}/src/libzmq.pc.cmake.in ${CMAKE_BINARY_DIR}/libzmq.pc) -set(zmq-pkgconfig ${CMAKE_BINARY_DIR}/libzmq.pc) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/libzmq.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/libzmq.pc) +set(zmq-pkgconfig ${CMAKE_CURRENT_BINARY_DIR}/libzmq.pc) if(NOT ZMQ_BUILD_FRAMEWORK) - install(FILES ${CMAKE_BINARY_DIR}/libzmq.pc DESTINATION lib/pkgconfig) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libzmq.pc DESTINATION lib/pkgconfig) endif() if(MSVC) if(CMAKE_CL_64) - set(nsis-template ${CMAKE_SOURCE_DIR}/cmake/NSIS.template64.in) + set(nsis-template ${CMAKE_CURRENT_SOURCE_DIR}/cmake/NSIS.template64.in) else() - set(nsis-template ${CMAKE_SOURCE_DIR}/cmake/NSIS.template32.in) + set(nsis-template ${CMAKE_CURRENT_SOURCE_DIR}/cmake/NSIS.template32.in) endif() add_custom_command( - OUTPUT ${CMAKE_BINARY_DIR}/NSIS.template.in + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in COMMAND ${CMAKE_COMMAND} ARGS -E copy ${nsis-template} - ${CMAKE_BINARY_DIR}/NSIS.template.in + ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in DEPENDS ${nsis-template}) endif() -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doc) -file(GLOB docs RELATIVE ${CMAKE_BINARY_DIR}/ "${CMAKE_SOURCE_DIR}/doc/*.txt") +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc) +file(GLOB docs RELATIVE ${CMAKE_CURRENT_BINARY_DIR}/ "${CMAKE_CURRENT_SOURCE_DIR}/doc/*.txt") set(html-docs) foreach(txt ${docs}) string(REGEX REPLACE ".*/(.*)\\.txt" "\\1.html" html ${txt}) @@ -436,13 +435,15 @@ foreach(txt ${docs}) -b xhtml11 -f ${CMAKE_SOURCE_DIR}/doc/asciidoc.conf -azmq_version=${ZMQ_VERSION} + -f ${CMAKE_CURRENT_SOURCE_DIR}/doc/asciidoc.conf + -azmq_version=${ZMQ_VERSION} -o ${dst} ${src} - DEPENDS ${CMAKE_BINARY_DIR}/${src} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${src} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating ${html}") if(WITH_DOC) - list(APPEND html-docs ${CMAKE_BINARY_DIR}/${dst}) + list(APPEND html-docs ${CMAKE_CURRENT_BINARY_DIR}/${dst}) endif() endforeach() @@ -460,8 +461,8 @@ endif() # output if(MSVC) - add_library(libzmq SHARED ${sources} ${public_headers} ${html-docs} ${readme-docs} ${CMAKE_BINARY_DIR}/NSIS.template.in) - target_link_libraries(libzmq ws2_32.lib rpcrt4.lib ${OPTIONAL_LIBRARIES}) + add_library(libzmq SHARED ${sources} ${public_headers} ${html-docs} ${readme-docs} ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in) + target_link_libraries(libzmq ${OPTIONAL_LIBRARIES}) set_target_properties(libzmq PROPERTIES PUBLIC_HEADER "${public_headers}" RELEASE_POSTFIX "${_zmq_COMPILER}-mt-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}" @@ -550,7 +551,7 @@ if(MSVC) RUNTIME DESTINATION bin PUBLIC_HEADER DESTINATION include COMPONENT SDK) - install(FILES ${CMAKE_BINARY_DIR}/lib/libzmq${_zmq_COMPILER}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}.pdb DESTINATION lib + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib/libzmq${_zmq_COMPILER}-mt-gd-${ZMQ_VERSION_MAJOR}_${ZMQ_VERSION_MINOR}_${ZMQ_VERSION_PATCH}.pdb DESTINATION lib COMPONENT SDK) else() install(TARGETS libzmq @@ -572,16 +573,20 @@ endif() # COMPONENT SDK) if(NOT ZMQ_BUILD_FRAMEWORK) - file(GLOB private_headers "${CMAKE_SOURCE_DIR}/src/*.hpp") - install(FILES ${sources} ${private_headers} DESTINATION src + file(GLOB private_headers "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hpp") + install(FILES ${sources} ${private_headers} DESTINATION src/zmq COMPONENT SourceCode) endif() foreach(readme ${readme-docs}) - configure_file(${CMAKE_SOURCE_DIR}/${readme} ${CMAKE_BINARY_DIR}/${readme}.txt) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${readme} ${CMAKE_CURRENT_BINARY_DIR}/${readme}.txt) if(NOT ZMQ_BUILD_FRAMEWORK) - install(FILES ${CMAKE_BINARY_DIR}/${readme}.txt DESTINATION etc/zmq) + if(MSVC) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${readme}.txt DESTINATION .) + else() + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${readme}.txt DESTINATION etc/zmq) + endif() endif() endforeach() @@ -616,16 +621,44 @@ if(MSVC) "${CMAKE_SOURCE_DIR}/build/x86/v90;ZeroMQ;ALL;/" "${CMAKE_SOURCE_DIR}/debug/x86/v90;ZeroMQ;ALL;/") endif() - set(CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}") + + set(CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}(${arch_name})") + set(CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-${arch_name}") + + # TODO: I think this part was intended to be used when running cpack + # separately from cmake but I don't know how that works. + # + # macro(add_crt_version version) + # set(rel_dir "${CMAKE_CURRENT_BINARY_DIR}/build/${arch_name}/${version};ZeroMQ;ALL;/") + # set(debug_dir "${CMAKE_CURRENT_BINARY_DIR}/debug/${arch_name}/${version};ZeroMQ;ALL;/") + # if(EXISTS ${rel_dir}) + # list(APPEND CPACK_INSTALL_CMAKE_PROJECTS ${rel_dir}) + # endif() + + # if(EXISTS ${debug_dir}) + # list(APPEND CPACK_INSTALL_CMAKE_PROJECTS ${rel_dir}) + # endmacro() + # endmacro() + + # add_crt_version(v110) + # add_crt_version(v100) + # add_crt_version(v90) + + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}") + set(CPACK_GENERATOR "NSIS") + set(CPACK_PACKAGE_NAME "ZeroMQ") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "ZeroMQ lightweight messaging kernel") set(CPACK_PACKAGE_VENDOR "Miru") set(CPACK_NSIS_CONTACT "Steven McCoy ") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/COPYING.txt") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}\\\\COPYING.txt") + set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_BINARY_DIR}\\\\README.txt") + set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_BINARY_DIR}\\\\README.txt") # There is a bug in NSI that does not handle full unix paths properly. Make # sure there is at least one set of four(4) backslashes. - set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}\\\\installer.ico") - set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}\\\\installer.ico") - set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}\\\\branding.bmp") + set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\installer.ico") + set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\installer.ico") + + set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\branding.bmp") set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") set(CPACK_PACKAGE_VERSION ${ZMQ_VERSION}) set(CPACK_PACKAGE_VERSION_MAJOR ${ZMQ_VERSION_MAJOR}) diff --git a/cmake/Modules/TestZMQVersion.cmake b/cmake/Modules/TestZMQVersion.cmake index b8a87b2b..130c6013 100644 --- a/cmake/Modules/TestZMQVersion.cmake +++ b/cmake/Modules/TestZMQVersion.cmake @@ -1,35 +1,18 @@ - MESSAGE(STATUS "Detecting ZMQ") - SET(TRY_RUN_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/zmq_run.dir) +file(READ "${PROJECT_SOURCE_DIR}/include/zmq.h" _ZMQ_H_CONTENTS) +string(REGEX REPLACE ".*#define ZMQ_VERSION_MAJOR ([0-9]+).*" "\\1" ZMQ_VERSION_MAJOR "${_ZMQ_H_CONTENTS}") +string(REGEX REPLACE ".*#define ZMQ_VERSION_MINOR ([0-9]+).*" "\\1" ZMQ_VERSION_MINOR "${_ZMQ_H_CONTENTS}") +string(REGEX REPLACE ".*#define ZMQ_VERSION_PATCH ([0-9]+).*" "\\1" ZMQ_VERSION_PATCH "${_ZMQ_H_CONTENTS}") +set(ZMQ_VERSION "${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}") - TRY_RUN(RUN_RESULT COMPILE_RESULT - ${TRY_RUN_DIR} - ${CMAKE_SOURCE_DIR}/cmake/Modules/zmq_version.cpp - CMAKE_FLAGS - "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_SOURCE_DIR}/include" - COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT - RUN_OUTPUT_VARIABLE RUN_OUTPUT) +message(STATUS "Detected ZMQ Version - ${ZMQ_VERSION}") - IF(COMPILE_RESULT) - IF(RUN_RESULT MATCHES "FAILED_TO_RUN") - MESSAGE(STATUS "Detecting ZMQ - failed") - ELSE() - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+).*" "\\1" ZMQ_VERSION_MAJOR "${RUN_OUTPUT}") - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+).*" "\\2" ZMQ_VERSION_MINOR "${RUN_OUTPUT}") - STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+).*" "\\3" ZMQ_VERSION_PATCH "${RUN_OUTPUT}") - MESSAGE(STATUS "Detecting ZMQ - ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}") - ENDIF() - ELSE() - MESSAGE(STATUS "Check for ZMQ version - not found") - MESSAGE(STATUS "Detecting ZMQ - failed") - ENDIF() - - if(MSVC_VERSION MATCHES "1700") - set(_zmq_COMPILER "-v110") - elseif(MSVC10) - set(_zmq_COMPILER "-v100") - elseif(MSVC90) - set(_zmq_COMPILER "-v90") - else() - set(_zmq_COMPILER "") - endif() +if(MSVC_VERSION MATCHES "1700") + set(_zmq_COMPILER "-v110") +elseif(MSVC10) + set(_zmq_COMPILER "-v100") +elseif(MSVC90) + set(_zmq_COMPILER "-v90") +else() + set(_zmq_COMPILER "") +endif() From 4704159f7317b73dc779819f132516f8d273f0db Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 05:22:05 -0500 Subject: [PATCH 05/16] Fix cmake build with sun studio --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ee341a85..dd599180 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,6 +122,10 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc") zmq_check_cxx_flag_prepend("-mcpu=v9") endif() +if(${CMAKE_CXX_COMPILER_ID} MATCHES "SunPro") + zmq_check_cxx_flag_prepend("-features=zla") +endif() + if(CMAKE_SYSTEM_NAME MATCHES "SunOS" OR CMAKE_SYSTEM_NAME MATCHES "NetBSD") message(STATUS "Checking whether atomic operations can be used") From a1d6a222ede4faec7cb27c5f0b67c1f7a0321e5d Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 31 Dec 2012 18:23:25 -0500 Subject: [PATCH 06/16] Generated header is not in ../src/ --- perf/inproc_lat.cpp | 2 +- perf/inproc_thr.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/perf/inproc_lat.cpp b/perf/inproc_lat.cpp index 6c1b19ec..626d7e8e 100644 --- a/perf/inproc_lat.cpp +++ b/perf/inproc_lat.cpp @@ -26,7 +26,7 @@ #include #include -#include "../src/platform.hpp" +#include "platform.hpp" #if defined ZMQ_HAVE_WINDOWS #include diff --git a/perf/inproc_thr.cpp b/perf/inproc_thr.cpp index f5bd8a25..22116fc1 100644 --- a/perf/inproc_thr.cpp +++ b/perf/inproc_thr.cpp @@ -26,7 +26,7 @@ #include #include -#include "../src/platform.hpp" +#include "platform.hpp" #if defined ZMQ_HAVE_WINDOWS #include From 3c7d4840a1ff54b4a0de8be08481dbdf9b3c257a Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 02:25:15 -0500 Subject: [PATCH 07/16] Fix NSIS installer errors, MinGW build. The CPack NSIS installer was in a state where it would always give a useless error. I think it was using stuff intended for running cpack separately from cmake. --- CMakeLists.txt | 89 ++++++++++++++------------------ cmake/Modules/FindAsciiDoc.cmake | 7 ++- 2 files changed, 44 insertions(+), 52 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd599180..67283701 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -394,6 +394,11 @@ foreach(source ${rc-sources}) list(APPEND sources ${CMAKE_CURRENT_BINARY_DIR}/${source}) endforeach() +foreach(source ${rc-sources}) + list(APPEND sources ${CMAKE_BINARY_DIR}/${source}) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/${source}.in ${CMAKE_CURRENT_BINARY_DIR}/${source}) +endforeach() + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/platform.hpp.in ${CMAKE_CURRENT_BINARY_DIR}/platform.hpp) list(APPEND sources ${CMAKE_CURRENT_BINARY_DIR}/platform.hpp) @@ -516,8 +521,6 @@ set(perf-tools local_lat inproc_lat inproc_thr) -#get_target_property - if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") # Why? foreach(perf-tool ${perf-tools}) add_executable(${perf-tool} perf/${perf-tool}.cpp) @@ -535,7 +538,7 @@ if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") # Why? else() install(TARGETS ${perf-tool} RUNTIME DESTINATION bin - COMPONENT PerfTools) + COMPONENT PerfTools) endif() endforeach() endif() @@ -560,7 +563,7 @@ if(MSVC) else() install(TARGETS libzmq RUNTIME DESTINATION bin - PUBLIC_HEADER DESTINATION include + #PUBLIC_HEADER DESTINATION include COMPONENT Runtime) endif() else() @@ -605,25 +608,9 @@ if(MSVC) include(InstallRequiredSystemLibraries) if(CMAKE_CL_64) - set(CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}(x64)") - set(CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-x64") - set(CPACK_INSTALL_CMAKE_PROJECTS - "${CMAKE_SOURCE_DIR}/build/x64/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x64/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x64/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x64/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x64/v90;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x64/v90;ZeroMQ;ALL;/") + set(arch_name "x64") else() - set(CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}") - set(CPACK_PACKAGE_FILE_NAME "ZeroMQ-${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}-x86") - set(CPACK_INSTALL_CMAKE_PROJECTS - "${CMAKE_SOURCE_DIR}/build/x86/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x86/v110;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x86/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x86/v100;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/build/x86/v90;ZeroMQ;ALL;/" - "${CMAKE_SOURCE_DIR}/debug/x86/v90;ZeroMQ;ALL;/") + set(arch_name "x86") endif() set(CPACK_NSIS_DISPLAY_NAME "ZeroMQ ${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}(${arch_name})") @@ -674,35 +661,35 @@ if(MSVC) include(CPack) cpack_add_component_group(Development - DISPLAY_NAME "ZeroMQ software development kit" - EXPANDED) - cpack_add_component(PerfTools - DISPLAY_NAME "ZeroMQ performance tools" - INSTALL_TYPES FullInstall DevInstall) - cpack_add_component(SourceCode - DISPLAY_NAME "ZeroMQ source code" - DISABLED - INSTALL_TYPES FullInstall) - cpack_add_component(SDK - DISPLAY_NAME "ZeroMQ headers and libraries" - INSTALL_TYPES FullInstall DevInstall - GROUP Development) - if(WITH_DOC) - cpack_add_component(RefGuide - DISPLAY_NAME "ZeroMQ reference guide" - INSTALL_TYPES FullInstall DevInstall - GROUP Development) - endif(WITH_DOC) - cpack_add_component(Runtime - DISPLAY_NAME "ZeroMQ runtime files" - REQUIRED - INSTALL_TYPES FullInstall DevInstall MinInstall) - cpack_add_install_type(FullInstall - DISPLAY_NAME "Full install, including source code") - cpack_add_install_type(DevInstall - DISPLAY_NAME "Developer install, headers and libraries") - cpack_add_install_type(MinInstall - DISPLAY_NAME "Minimal install, runtime only") + DISPLAY_NAME "ZeroMQ software development kit" + EXPANDED) + cpack_add_component(PerfTools + DISPLAY_NAME "ZeroMQ performance tools" + INSTALL_TYPES FullInstall DevInstall) + cpack_add_component(SourceCode + DISPLAY_NAME "ZeroMQ source code" + DISABLED + INSTALL_TYPES FullInstall) + cpack_add_component(SDK + DISPLAY_NAME "ZeroMQ headers and libraries" + INSTALL_TYPES FullInstall DevInstall + GROUP Development) + if(WITH_DOC) + cpack_add_component(RefGuide + DISPLAY_NAME "ZeroMQ reference guide" + INSTALL_TYPES FullInstall DevInstall + GROUP Development) + endif() + cpack_add_component(Runtime + DISPLAY_NAME "ZeroMQ runtime files" + REQUIRED + INSTALL_TYPES FullInstall DevInstall MinInstall) + cpack_add_install_type(FullInstall + DISPLAY_NAME "Full install, including source code") + cpack_add_install_type(DevInstall + DISPLAY_NAME "Developer install, headers and libraries") + cpack_add_install_type(MinInstall + DISPLAY_NAME "Minimal install, runtime only") endif() # Export this for library to help build this as a sub-project diff --git a/cmake/Modules/FindAsciiDoc.cmake b/cmake/Modules/FindAsciiDoc.cmake index 168d1527..db4e418c 100644 --- a/cmake/Modules/FindAsciiDoc.cmake +++ b/cmake/Modules/FindAsciiDoc.cmake @@ -12,7 +12,12 @@ find_program(ASCIIDOC_EXECUTABLE asciidoc asciidoc.py "$ENV{PROGRAMFILES}/asciidoc" "$ENV{PROGRAMFILES(X86)}/asciidoc") -find_program(A2X_EXECUTABLE a2x) +find_program(A2X_EXECUTABLE a2x + PATHS "$ENV{ASCIIDOC_ROOT}" + "$ENV{PROGRAMW6432}/asciidoc" + "$ENV{PROGRAMFILES}/asciidoc" + "$ENV{PROGRAMFILES(X86)}/asciidoc") + include(FindPackageHandleStandardArgs) find_package_handle_standard_ARGS(AsciiDoc REQUIRED_VARS ASCIIDOC_EXECUTABLE) From 59cafecd9696817e0faa2ba00404aef75b3c1187 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 21:04:19 -0500 Subject: [PATCH 08/16] Fix MinGW32 build Fix link errors when using -m32 with MinGW --- CMakeLists.txt | 87 +++++++++++++++++++++--------------- builds/cmake/platform.hpp.in | 4 ++ 2 files changed, 56 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67283701..5aa84dad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,14 +46,17 @@ check_include_files(windows.h HAVE_WINDOWS_H) check_include_files(sys/uio.h ZMQ_HAVE_UIO) check_include_files(sys/eventfd.h ZMQ_HAVE_EVENTFD) -check_library_exists(ws2_32 WSAStartup "" HAVE_WS2_32) -check_library_exists(rpcrt4 UuidCreateSequential "" HAVE_RPCRT4) -check_library_exists(iphlpapi GetAdaptersAddresses "" HAVE_IPHLAPI) +check_library_exists(ws2_32 printf "" HAVE_WS2_32) # TODO: Why doesn't something logical like WSAStartup work? +check_library_exists(ws2 printf "" HAVE_WS2) +check_library_exists(rpcrt4 printf "" HAVE_RPCRT4) # UuidCreateSequential +check_library_exists(iphlpapi printf "" HAVE_IPHLAPI) # GetAdaptersAddresses + find_package(Threads) -if(MINGW) - if(NOT HAVE_WS2_32) - message(FATAL_ERROR "Cannot link to ws2_32") + +if(WIN32 AND NOT CYGWIN) + if(NOT HAVE_WS2_32 AND NOT HAVE_WS2) + message(FATAL_ERROR "Cannot link to ws2_32 or ws2") endif() if(NOT HAVE_RPCRT4) @@ -216,9 +219,6 @@ else() if(WITH_OPENPGM) message(FATAL_ERROR "WITH_OPENPGM not implemented") # DSO symbol visibility for openpgm - check_c_compiler_flag("-fvisibility=hidden" HAVE_FLAG_VISIBILITY_HIDDEN) - check_c_compiler_flag("-xldscope=hidden" HAVE_FLAG_LDSCOPE_HIDDEN) - if(HAVE_FLAG_VISIBILITY_HIDDEN) elseif(HAVE_FLAG_LDSCOPE_HIDDEN) @@ -259,11 +259,10 @@ set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib) if(MSVC) add_definitions( -DWIN32 - -DDLL_EXPORT + -DDLL_EXPORT # NB: May require tweaking for highly connected applications. - -DFD_SETSIZE=1024 - -D_CRT_SECURE_NO_WARNINGS - ) + -DFD_SETSIZE=1024 + -D_CRT_SECURE_NO_WARNINGS) # Parallel make. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") @@ -342,30 +341,46 @@ set(cxx-sources xpub.cpp xsub.cpp zmq.cpp - zmq_utils.cpp -) + zmq_utils.cpp) -set(rc-sources - version.rc -) +set(rc-sources version.rc) -include_directories( - include - ${CMAKE_CURRENT_BINARY_DIR} -) -set(public_headers - include/zmq.h - include/zmq_utils.h -) +if(MINGW) + # Generate the right type when using -m32 or -m64 + macro(set_rc_arch rc_target) + set(CMAKE_RC_COMPILER_INIT windres) + enable_language(RC) + set(CMAKE_RC_COMPILE_OBJECT + " --target=${rc_target} -i -o ") + endmacro() -set(readme-docs - AUTHORS - COPYING - COPYING.LESSER - MAINTAINERS - NEWS - README -) + if( ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i386" + OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i486" + OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i586" + OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i686" + # This also happens on x86_64 systems...what a worthless variable + OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86" + OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64" + OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "amd64") + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set_rc_arch("pe-x86-64") + else() + set_rc_arch("pe-i386") + endif() + endif() +endif() + +include_directories(include ${CMAKE_CURRENT_BINARY_DIR}) +set(public_headers include/zmq.h + include/zmq_utils.h) + +set(readme-docs AUTHORS + COPYING + COPYING.LESSER + MAINTAINERS + NEWS + README) #----------------------------------------------------------------------------- # optional modules @@ -504,6 +519,8 @@ endif() target_link_libraries(libzmq ${CMAKE_THREAD_LIBS_INIT}) if(HAVE_WS2_32) target_link_libraries(libzmq ws2_32) +elseif(HAVE_WS2) + target_link_libraries(libzmq ws2) endif() if(HAVE_RPCRT4) @@ -563,7 +580,7 @@ if(MSVC) else() install(TARGETS libzmq RUNTIME DESTINATION bin - #PUBLIC_HEADER DESTINATION include + PUBLIC_HEADER DESTINATION include COMPONENT Runtime) endif() else() diff --git a/builds/cmake/platform.hpp.in b/builds/cmake/platform.hpp.in index 76b0281d..5f5eb2e0 100644 --- a/builds/cmake/platform.hpp.in +++ b/builds/cmake/platform.hpp.in @@ -42,6 +42,10 @@ #define ZMQ_HAVE_CYGWIN #endif +#if defined __MINGW32__ + #define ZMQ_HAVE_MINGW32 +#endif + #if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) #define ZMQ_HAVE_FREEBSD #endif From e88dc494007e43a548c22e23b952e56832e60906 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 06:53:56 -0500 Subject: [PATCH 09/16] Fix random 3 space tabs --- CMakeLists.txt | 116 +++++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 61 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5aa84dad..5546850c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -190,30 +190,30 @@ cmake_dependent_option(WITH_DOC "Build Reference Guide documentation(requires Do if(MSVC) if(WITH_OPENPGM) # set(OPENPGM_ROOT "" CACHE PATH "Location of OpenPGM") - set(OPENPGM_VERSION_MAJOR 5) - set(OPENPGM_VERSION_MINOR 2) - set(OPENPGM_VERSION_MICRO 122) - if(CMAKE_CL_64) - find_path(OPENPGM_ROOT include/pgm/pgm.h + set(OPENPGM_VERSION_MAJOR 5) + set(OPENPGM_VERSION_MINOR 2) + set(OPENPGM_VERSION_MICRO 122) + if(CMAKE_CL_64) + find_path(OPENPGM_ROOT include/pgm/pgm.h PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" NO_DEFAULT_PATH ) - message(STATUS "OpenPGM x64 detected - ${OPENPGM_ROOT}") - else() - find_path(OPENPGM_ROOT include/pgm/pgm.h + message(STATUS "OpenPGM x64 detected - ${OPENPGM_ROOT}") + else() + find_path(OPENPGM_ROOT include/pgm/pgm.h PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Miru\\OpenPGM ${OPENPGM_VERSION_MAJOR}.${OPENPGM_VERSION_MINOR}.${OPENPGM_VERSION_MICRO}]" NO_DEFAULT_PATH ) - message(STATUS "OpenPGM x86 detected - ${OPENPGM_ROOT}") - endif(CMAKE_CL_64) - set(OPENPGM_INCLUDE_DIRS ${OPENPGM_ROOT}/include) - set(OPENPGM_LIBRARY_DIRS ${OPENPGM_ROOT}/lib) - set(OPENPGM_LIBRARIES - optimized libpgm${_zmq_COMPILER}-mt-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib - debug libpgm${_zmq_COMPILER}-mt-gd-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib) + message(STATUS "OpenPGM x86 detected - ${OPENPGM_ROOT}") + endif(CMAKE_CL_64) + set(OPENPGM_INCLUDE_DIRS ${OPENPGM_ROOT}/include) + set(OPENPGM_LIBRARY_DIRS ${OPENPGM_ROOT}/lib) + set(OPENPGM_LIBRARIES + optimized libpgm${_zmq_COMPILER}-mt-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib + debug libpgm${_zmq_COMPILER}-mt-gd-${OPENPGM_VERSION_MAJOR}_${OPENPGM_VERSION_MINOR}_${OPENPGM_VERSION_MICRO}.lib) endif() else() if(WITH_OPENPGM) @@ -386,16 +386,10 @@ set(readme-docs AUTHORS # optional modules if(WITH_OPENPGM) - add_definitions( - -DZMQ_HAVE_OPENPGM - ) - include_directories( - ${OPENPGM_INCLUDE_DIRS} - ) - link_directories( - ${OPENPGM_LIBRARY_DIRS} - ) - set(OPTIONAL_LIBRARIES ${OPENPGM_LIBRARIES}) + add_definitions(-DZMQ_HAVE_OPENPGM) + include_directories(${OPENPGM_INCLUDE_DIRS}) + link_directories(${OPENPGM_LIBRARY_DIRS}) + set(OPTIONAL_LIBRARIES ${OPENPGM_LIBRARIES}) endif(WITH_OPENPGM) #----------------------------------------------------------------------------- @@ -434,13 +428,13 @@ if(MSVC) endif() add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in - COMMAND ${CMAKE_COMMAND} - ARGS -E - copy - ${nsis-template} - ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in - DEPENDS ${nsis-template}) + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in + COMMAND ${CMAKE_COMMAND} + ARGS -E + copy + ${nsis-template} + ${CMAKE_CURRENT_BINARY_DIR}/NSIS.template.in + DEPENDS ${nsis-template}) endif() file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc) @@ -678,35 +672,35 @@ if(MSVC) include(CPack) cpack_add_component_group(Development - DISPLAY_NAME "ZeroMQ software development kit" - EXPANDED) - cpack_add_component(PerfTools - DISPLAY_NAME "ZeroMQ performance tools" - INSTALL_TYPES FullInstall DevInstall) - cpack_add_component(SourceCode - DISPLAY_NAME "ZeroMQ source code" - DISABLED - INSTALL_TYPES FullInstall) - cpack_add_component(SDK - DISPLAY_NAME "ZeroMQ headers and libraries" - INSTALL_TYPES FullInstall DevInstall - GROUP Development) - if(WITH_DOC) - cpack_add_component(RefGuide - DISPLAY_NAME "ZeroMQ reference guide" - INSTALL_TYPES FullInstall DevInstall - GROUP Development) - endif() - cpack_add_component(Runtime - DISPLAY_NAME "ZeroMQ runtime files" - REQUIRED - INSTALL_TYPES FullInstall DevInstall MinInstall) - cpack_add_install_type(FullInstall - DISPLAY_NAME "Full install, including source code") - cpack_add_install_type(DevInstall - DISPLAY_NAME "Developer install, headers and libraries") - cpack_add_install_type(MinInstall - DISPLAY_NAME "Minimal install, runtime only") + DISPLAY_NAME "ZeroMQ software development kit" + EXPANDED) + cpack_add_component(PerfTools + DISPLAY_NAME "ZeroMQ performance tools" + INSTALL_TYPES FullInstall DevInstall) + cpack_add_component(SourceCode + DISPLAY_NAME "ZeroMQ source code" + DISABLED + INSTALL_TYPES FullInstall) + cpack_add_component(SDK + DISPLAY_NAME "ZeroMQ headers and libraries" + INSTALL_TYPES FullInstall DevInstall + GROUP Development) + if(WITH_DOC) + cpack_add_component(RefGuide + DISPLAY_NAME "ZeroMQ reference guide" + INSTALL_TYPES FullInstall DevInstall + GROUP Development) + endif() + cpack_add_component(Runtime + DISPLAY_NAME "ZeroMQ runtime files" + REQUIRED + INSTALL_TYPES FullInstall DevInstall MinInstall) + cpack_add_install_type(FullInstall + DISPLAY_NAME "Full install, including source code") + cpack_add_install_type(DevInstall + DISPLAY_NAME "Developer install, headers and libraries") + cpack_add_install_type(MinInstall + DISPLAY_NAME "Minimal install, runtime only") endif() # Export this for library to help build this as a sub-project From 3ebab09ce4da3cd7e40355e5bd91a5e5a66d826b Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 03:26:31 -0500 Subject: [PATCH 10/16] Fix unused argument warnings --- CMakeLists.txt | 12 +++++++++--- src/decoder.hpp | 2 +- src/zmq.cpp | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5546850c..c6d9fc1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,9 +110,15 @@ option(LIBZMQ_PEDANTIC "" ON) option(LIBZMQ_WERROR "" OFF) if(LIBZMQ_PEDANTIC) - zmq_check_cxx_flag_prepend("-pedantic") # GCC - zmq_check_cxx_flag_prepend("-strict-ansi") # ICC - zmq_check_cxx_flag_prepend("-compat=5") # Sun Studio + zmq_check_cxx_flag_prepend("-pedantic") + + if(${CMAKE_CXX_COMPILER_ID} MATCHES "Intel") + zmq_check_cxx_flag_prepend("-strict-ansi") + endif() + + if(${CMAKE_CXX_COMPILER_ID} MATCHES "SunPro") + zmq_check_cxx_flag_prepend("-compat=5") + endif() endif() if(LIBZMQ_WERROR) diff --git a/src/decoder.hpp b/src/decoder.hpp index 4ed2eb31..7235045a 100644 --- a/src/decoder.hpp +++ b/src/decoder.hpp @@ -163,7 +163,7 @@ namespace zmq return false; } - inline bool message_ready_size (size_t msg_sz) + inline bool message_ready_size (size_t /* msg_sz */) { zmq_assert (false); return false; diff --git a/src/zmq.cpp b/src/zmq.cpp index 5e5ad58a..6a74989b 100644 --- a/src/zmq.cpp +++ b/src/zmq.cpp @@ -980,7 +980,7 @@ int zmq_proxy (void *frontend_, void *backend_, void *control_) // The deprecated device functionality -int zmq_device (int type, void *frontend_, void *backend_) +int zmq_device (int /* type */, void *frontend_, void *backend_) { return zmq::proxy ( (zmq::socket_base_t*) frontend_, @@ -989,7 +989,7 @@ int zmq_device (int type, void *frontend_, void *backend_) // Callback to free socket event data -void zmq_free_event (void *event_data, void *hint) +void zmq_free_event (void *event_data, void * /* hint */) { zmq_event_t *event = (zmq_event_t *) event_data; From edb5a05add41de964170a1b72ae8038d30a00e17 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 03:56:34 -0500 Subject: [PATCH 11/16] Fix -Wmissing-field-initializers --- src/tcp_listener.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp index 4ee88d3d..3cd29b6c 100644 --- a/src/tcp_listener.cpp +++ b/src/tcp_listener.cpp @@ -240,7 +240,8 @@ zmq::fd_t zmq::tcp_listener_t::accept () // Accept one connection and deal with different failure modes. zmq_assert (s != retired_fd); - struct sockaddr_storage ss = {}; + struct sockaddr_storage ss; + memset (&ss, 0, sizeof (ss)); #ifdef ZMQ_HAVE_HPUX int ss_len = sizeof (ss); #else From 14d3245e02f27857a80dba6ad6b7babed564a3d9 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 04:01:24 -0500 Subject: [PATCH 12/16] Fix -Wmismatched-tags --- src/i_decoder.hpp | 3 ++- src/i_msg_sink.hpp | 3 ++- src/i_msg_source.hpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/i_decoder.hpp b/src/i_decoder.hpp index 789df6de..bb53b725 100644 --- a/src/i_decoder.hpp +++ b/src/i_decoder.hpp @@ -30,8 +30,9 @@ namespace zmq // Interface to be implemented by message decoder. - struct i_decoder + class i_decoder { + public: virtual ~i_decoder () {} virtual void set_msg_sink (i_msg_sink *msg_sink_) = 0; diff --git a/src/i_msg_sink.hpp b/src/i_msg_sink.hpp index 2b1a8c40..4a86023c 100644 --- a/src/i_msg_sink.hpp +++ b/src/i_msg_sink.hpp @@ -29,8 +29,9 @@ namespace zmq // Interface to be implemented by message sink. - struct i_msg_sink + class i_msg_sink { + public: virtual ~i_msg_sink () {} // Delivers a message. Returns 0 if successful; -1 otherwise. diff --git a/src/i_msg_source.hpp b/src/i_msg_source.hpp index a6956c1c..c6d7b74c 100644 --- a/src/i_msg_source.hpp +++ b/src/i_msg_source.hpp @@ -29,8 +29,9 @@ namespace zmq // Interface to be implemented by message source. - struct i_msg_source + class i_msg_source { + public: virtual ~i_msg_source () {} // Fetch a message. Returns 0 if successful; -1 otherwise. From 1ffc5d11dce5bbea970b9d9354e70d4e40346d38 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 04:24:51 -0500 Subject: [PATCH 13/16] Fix some of the -Wshadows --- src/options.cpp | 6 +++--- src/socket_base.cpp | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/options.cpp b/src/options.cpp index 84e95f42..de5074bb 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -320,13 +320,13 @@ int zmq::options_t::setsockopt (int option_, const void *optval_, else { std::string filter_str ((const char*) optval_, optvallen_); - tcp_address_mask_t filter; - int rc = filter.resolve (filter_str.c_str (), ipv4only ? true : false); + tcp_address_mask_t mask; + int rc = mask.resolve (filter_str.c_str (), ipv4only ? true : false); if (rc != 0) { errno = EINVAL; return -1; } - tcp_accept_filters.push_back(filter); + tcp_accept_filters.push_back(mask); return 0; } diff --git a/src/socket_base.cpp b/src/socket_base.cpp index e9ea68b4..6bf550cf 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -437,14 +437,14 @@ int zmq::socket_base_t::connect (const char *addr_) // Create a bi-directional pipe to connect the peers. object_t *parents [2] = {this, peer.socket}; - pipe_t *pipes [2] = {NULL, NULL}; + pipe_t *new_pipes [2] = {NULL, NULL}; int hwms [2] = {sndhwm, rcvhwm}; bool delays [2] = {options.delay_on_disconnect, options.delay_on_close}; - int rc = pipepair (parents, pipes, hwms, delays); + int rc = pipepair (parents, new_pipes, hwms, delays); errno_assert (rc == 0); // Attach local end of the pipe to this socket object. - attach_pipe (pipes [0]); + attach_pipe (new_pipes [0]); // If required, send the identity of the local socket to the peer. if (peer.options.recv_identity) { @@ -453,9 +453,9 @@ int zmq::socket_base_t::connect (const char *addr_) errno_assert (rc == 0); memcpy (id.data (), options.identity, options.identity_size); id.set_flags (msg_t::identity); - bool written = pipes [0]->write (&id); + bool written = new_pipes [0]->write (&id); zmq_assert (written); - pipes [0]->flush (); + new_pipes [0]->flush (); } // If required, send the identity of the peer to the local socket. @@ -465,21 +465,21 @@ int zmq::socket_base_t::connect (const char *addr_) errno_assert (rc == 0); memcpy (id.data (), peer.options.identity, peer.options.identity_size); id.set_flags (msg_t::identity); - bool written = pipes [1]->write (&id); + bool written = new_pipes [1]->write (&id); zmq_assert (written); - pipes [1]->flush (); + new_pipes [1]->flush (); } // Attach remote end of the pipe to the peer socket. Note that peer's // seqnum was incremented in find_endpoint function. We don't need it // increased here. - send_bind (peer.socket, pipes [1], false); + send_bind (peer.socket, new_pipes [1], false); // Save last endpoint URI options.last_endpoint.assign (addr_); // remember inproc connections for disconnect - inprocs.insert (inprocs_t::value_type (std::string (addr_), pipes[0])); + inprocs.insert (inprocs_t::value_type (std::string (addr_), new_pipes[0])); return 0; } @@ -540,17 +540,17 @@ int zmq::socket_base_t::connect (const char *addr_) if (options.delay_attach_on_connect != 1 || icanhasall) { // Create a bi-directional pipe. object_t *parents [2] = {this, session}; - pipe_t *pipes [2] = {NULL, NULL}; + pipe_t *new_pipes [2] = {NULL, NULL}; int hwms [2] = {options.sndhwm, options.rcvhwm}; bool delays [2] = {options.delay_on_disconnect, options.delay_on_close}; - rc = pipepair (parents, pipes, hwms, delays); + rc = pipepair (parents, new_pipes, hwms, delays); errno_assert (rc == 0); // Attach local end of the pipe to the socket object. - attach_pipe (pipes [0], icanhasall); + attach_pipe (new_pipes [0], icanhasall); // Attach remote end of the pipe to the session object later on. - session->attach_pipe (pipes [1]); + session->attach_pipe (new_pipes [1]); } // Save last endpoint URI From 6ecb796e77dd5d48b65d7e78c40be6ee95696f96 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 17:16:50 -0500 Subject: [PATCH 14/16] Fix warnings with MinGW --- src/ip.cpp | 3 +++ src/signaler.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ip.cpp b/src/ip.cpp index c194f0e4..0133efa4 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -92,6 +92,8 @@ void zmq::unblock_socket (fd_t s_) void zmq::enable_ipv4_mapping (fd_t s_) { + (void) s_; + #ifdef IPV6_V6ONLY #ifdef ZMQ_HAVE_WINDOWS DWORD flag = 0; @@ -107,3 +109,4 @@ void zmq::enable_ipv4_mapping (fd_t s_) #endif #endif } + diff --git a/src/signaler.cpp b/src/signaler.cpp index fae06e35..104d0ece 100644 --- a/src/signaler.cpp +++ b/src/signaler.cpp @@ -234,8 +234,10 @@ int zmq::signaler_t::make_fdpair (fd_t *r_, fd_t *w_) return 0; #elif defined ZMQ_HAVE_WINDOWS - SECURITY_DESCRIPTOR sd = {0}; - SECURITY_ATTRIBUTES sa = {0}; + SECURITY_DESCRIPTOR sd; + SECURITY_ATTRIBUTES sa; + memset (&sd, 0, sizeof (sd)); + memset (&sa, 0, sizeof (sa)); InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(&sd, TRUE, 0, FALSE); From f770954d309c0778f1fe65a38b8e54c1063c8474 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 05:42:46 -0500 Subject: [PATCH 15/16] Fix a couple more warnings --- src/object.cpp | 1 + src/options.cpp | 7 +++++-- src/signaler.cpp | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/object.cpp b/src/object.cpp index 57e6ea81..814ec08c 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -124,6 +124,7 @@ void zmq::object_t::process_command (command_t &cmd_) process_reaped (); break; + case command_t::done: default: zmq_assert (false); } diff --git a/src/options.cpp b/src/options.cpp index de5074bb..4a371693 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -331,9 +331,12 @@ int zmq::options_t::setsockopt (int option_, const void *optval_, return 0; } } + default: + { + errno = EINVAL; + return -1; + } } - errno = EINVAL; - return -1; } int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_) diff --git a/src/signaler.cpp b/src/signaler.cpp index 104d0ece..db054b27 100644 --- a/src/signaler.cpp +++ b/src/signaler.cpp @@ -202,8 +202,8 @@ void zmq::signaler_t::recv () // one, return it back to the eventfd object. if (unlikely (dummy == 2)) { const uint64_t inc = 1; - ssize_t sz = write (w, &inc, sizeof (inc)); - errno_assert (sz == sizeof (inc)); + ssize_t sz2 = write (w, &inc, sizeof (inc)); + errno_assert (sz2 == sizeof (inc)); return; } From 6ce464414bb453a40abadaa9d79389e5e3282fda Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 1 Jan 2013 04:26:04 -0500 Subject: [PATCH 16/16] Fix typos --- src/socket_base.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/socket_base.cpp b/src/socket_base.cpp index 6bf550cf..562d4b30 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -664,7 +664,7 @@ int zmq::socket_base_t::send (msg_t *msg_, int flags_) return -1; // Compute the time when the timeout should occur. - // If the timeout is infite, don't care. + // If the timeout is infinite, don't care. int timeout = options.sndtimeo; uint64_t end = timeout < 0 ? 0 : (clock.now_ms () + timeout); @@ -746,7 +746,7 @@ int zmq::socket_base_t::recv (msg_t *msg_, int flags_) } // Compute the time when the timeout should occur. - // If the timeout is infite, don't care. + // If the timeout is infinite, don't care. int timeout = options.rcvtimeo; uint64_t end = timeout < 0 ? 0 : (clock.now_ms () + timeout);