diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0046a7c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,33 @@ +# Travis CI script + +language: c + +os: +- linux +#- osx + +dist: trusty + +cache: ccache + +env: + matrix: +# - BUILD_TYPE=cmake DRAFT=enabled + - BUILD_TYPE=cmake + +matrix: + include: + # - env: BUILD_TYPE=cmake DO_CLANG_FORMAT_CHECK=1 CLANG_FORMAT=/usr/local/clang-5.0.0/bin/clang-format + # os: linux + # addons: + # apt: + # sources: + # - llvm-toolchain-trusty-5.0 + # packages: + # - clang-5.0 + +sudo: required + +# Build and check this project according to the BUILD_TYPE +script: + - ./ci_build.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 16b2f55..6937b37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,12 @@ cmake_minimum_required(VERSION 3.0.0) -project(cppzmq) -find_package(ZeroMQ QUIET) +list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +include (DetectCPPZMQVersion) + +project(cppzmq VERSION ${DETECTED_CPPZMQ_VERSION}) + +find_package(ZeroMQ) # libzmq autotools install: fallback to pkg-config if(NOT ZeroMQ_FOUND) @@ -14,8 +19,7 @@ if (ZeroMQ_FOUND AND (NOT TARGET libzmq OR NOT TARGET libzmq-static)) message(FATAL_ERROR "ZeroMQ version not supported!") endif() -set (${PROJECT_NAME}_VERSION ${ZeroMQ_VERSION}) -message(STATUS "cppzmq v${${PROJECT_NAME}_VERSION}") +message(STATUS "cppzmq v${CPPZMQ_VERSION}") set(CPPZMQ_HEADERS zmq.hpp @@ -43,15 +47,13 @@ install(FILES ${CPPZMQ_HEADERS} # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share". set(CPPZMQ_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for cppzmqConfig.cmake") -if (NOT CMAKE_VERSION VERSION_LESS 3.0) - export(EXPORT ${PROJECT_NAME}-targets - FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") -endif() +export(EXPORT ${PROJECT_NAME}-targets + FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") configure_package_config_file(${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}) write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${${PROJECT_NAME}_VERSION} + VERSION ${CPPZMQ_VERSION}} COMPATIBILITY AnyNewerVersion) install(EXPORT ${PROJECT_NAME}-targets FILE ${PROJECT_NAME}Targets.cmake diff --git a/ci_build.sh b/ci_build.sh new file mode 100755 index 0000000..d10224d --- /dev/null +++ b/ci_build.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +set -x + +install_zeromq() { + pushd . + + mkdir libzmq + cd libzmq + curl -L https://github.com/zeromq/libzmq/releases/download/v${ZMQ_VERSION}/zeromq-${ZMQ_VERSION}.tar.gz >zeromq.tar.gz + tar -xvzf zeromq.tar.gz + cd zeromq-${ZMQ_VERSION} + + mkdir build + cd build + cmake .. + sudo make -j4 install + + popd +} + +# build zeromq first + +if [ "${ZMQ_VERSION}" != "" ] ; then install_zeromq ; fi + +# build cppzmq + +mkdir build +cd build +cmake .. +sudo make -j4 install + +# build cppzmq tests +# cd tests +# mkdir build +# cd build +# cmake .. +# make -j5 test ARGS="-V" diff --git a/cmake/DetectCPPZMQVersion.cmake b/cmake/DetectCPPZMQVersion.cmake new file mode 100644 index 0000000..99ed9bf --- /dev/null +++ b/cmake/DetectCPPZMQVersion.cmake @@ -0,0 +1,8 @@ + +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/zmq.hpp" _CPPZMQ_H_CONTENTS) +string(REGEX REPLACE ".*#define CPPZMQ_VERSION_MAJOR ([0-9]+).*" "\\1" DETECTED_CPPZMQ_VERSION_MAJOR "${_CPPZMQ_H_CONTENTS}") +string(REGEX REPLACE ".*#define CPPZMQ_VERSION_MINOR ([0-9]+).*" "\\1" DETECTED_CPPZMQ_VERSION_MINOR "${_CPPZMQ_H_CONTENTS}") +string(REGEX REPLACE ".*#define CPPZMQ_VERSION_PATCH ([0-9]+).*" "\\1" DETECTED_CPPZMQ_VERSION_PATCH "${_CPPZMQ_H_CONTENTS}") +set(DETECTED_CPPZMQ_VERSION "${DETECTED_CPPZMQ_VERSION_MAJOR}.${DETECTED_CPPZMQ_VERSION_MINOR}.${DETECTED_CPPZMQ_VERSION_PATCH}") + +message(STATUS "Detected CPPZMQ Version - ${DETECTED_CPPZMQ_VERSION}") diff --git a/version.sh b/version.sh new file mode 100755 index 0000000..f7d9eb6 --- /dev/null +++ b/version.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# This script extracts the 0MQ version from zmq.hpp, which is the master +# location for this information. +# +if [ ! -f zmq.hpp ]; then + echo "version.sh: error: zmq.hpp does not exist" 1>&2 + exit 1 +fi +MAJOR=$(grep '^#define CPPZMQ_VERSION_MAJOR \+[0-9]\+' zmq.hpp) +MINOR=$(grep '^#define CPPZMQ_VERSION_MINOR \+[0-9]\+' zmq.hpp) +PATCH=$(grep '^#define CPPZMQ_VERSION_PATCH \+[0-9]\+' zmq.hpp) +if [ -z "$MAJOR" -o -z "$MINOR" -o -z "$PATCH" ]; then + echo "version.sh: error: could not extract version from zmq.hpp" 1>&2 + exit 1 +fi +MAJOR=$(echo $MAJOR | awk '{ print $3 }') +MINOR=$(echo $MINOR | awk '{ print $3 }') +PATCH=$(echo $PATCH | awk '{ print $3 }') +echo $MAJOR.$MINOR.$PATCH | tr -d '\n\r' + diff --git a/zmq.hpp b/zmq.hpp index 71a6c81..3af536b 100644 --- a/zmq.hpp +++ b/zmq.hpp @@ -53,6 +53,13 @@ #include #include +/* Version macros for compile-time API version detection */ +#define CPPZMQ_VERSION_MAJOR 4 +#define CPPZMQ_VERSION_MINOR 3 +#define CPPZMQ_VERSION_PATCH 0 + +#define CPPZMQ_VERSION \ + ZMQ_MAKE_VERSION (CPPZMQ_VERSION_MAJOR, CPPZMQ_VERSION_MINOR, CPPZMQ_VERSION_PATCH) #ifdef ZMQ_CPP11 #include