diff --git a/.travis.yml b/.travis.yml index c1375672..c5f16fa9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,85 +1,206 @@ language: cpp -cache: - - apt -before_install: - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.8 main'; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update; fi +sudo: false + install: - - - if [ "$CXX" == "clang++" ]; then export CXXFLAGS="-stdlib=libc++"; fi - - if [ "$CXX" == "clang++" ]; then svn co --quiet http://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_380/final libcxx; fi - - if [ "$CXX" == "clang++" ]; then cd libcxx/lib && bash buildit; fi - - if [ "$CXX" == "clang++" ]; then sudo cp ./libc++.so.1.0 /usr/lib/; fi - - if [ "$CXX" == "clang++" ]; then sudo mkdir /usr/include/c++/v1; fi - - if [ "$CXX" == "clang++" ]; then cd .. && sudo cp -r include/* /usr/include/c++/v1/; fi - - if [ "$CXX" == "clang++" ]; then cd /usr/lib && sudo ln -sf libc++.so.1.0 libc++.so; fi - - if [ "$CXX" == "clang++" ]; then sudo ln -sf libc++.so.1.0 libc++.so.1 && cd $cwd; fi - - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq gcc-5-multilib g++-5-multilib; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.8; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 90; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 90; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32gcc1; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-i386; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32z1-dev; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32stdc++6-6-dbg; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y bzip2; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-dbg; fi - - wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure && make && sudo make install && cd ..; fi - - - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew unlink boost; fi - - if [ "$BOOST" == "boost" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.zip && unzip -q boost_1_62_0.zip && cd boost_1_62_0 && ./bootstrap.sh && ./b2 --with-timer --with-chrono address-model="$ARCH" > /dev/null && sudo ./b2 --with-timer --with-chrono address-model="$ARCH" install > /dev/null && cd ..; fi - - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then unzip -q googletest-release-1.7.0.zip && cd googletest-release-1.7.0 && sudo cp -r include/gtest /usr/local/include && g++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && g++ -m32 src/gtest-all.cc -I. -Iinclude -c && g++ -m32 src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mkdir /usr/local/lib32 && sudo mv *.a /usr/local/lib32 && cd ..; fi - - if [ "$TRAVIS_OS_NAME" == "osx" ]; then unzip -q googletest-release-1.7.0.zip && cd googletest-release-1.7.0 && sudo cp -r include/gtest /usr/local/include && clang++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && cd ..; fi - -before_script: - - export PATH=/usr/local/bin:$PATH && rm -rf install + - export BASE=`pwd` + - mkdir ${BASE}/usr + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget --no-check-certificate https://cmake.org/files/v3.7/cmake-3.7.1-Linux-x86_64.sh -O cmake-3.7.1-Linux-x86_64.sh; fi + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then chmod a+x cmake-3.7.1-Linux-x86_64.sh; fi + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then ./cmake-3.7.1-Linux-x86_64.sh --prefix=${BASE}/usr --skip-license; fi + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH="${BASE}/usr/bin:$PATH"; fi + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi + - if [ "$CXX" = "g++" ]; then export CXX="g++-6" CC="gcc-6"; fi + - if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi +#gtest + - wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip + - unzip -q googletest-release-1.7.0.zip + - cd googletest-release-1.7.0 + - $CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c + - $CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c + - ar -rv libgtest.a gtest-all.o + - ar -rv libgtest_main.a gtest_main.o + - mkdir -p ${BASE}/usr/include + - cp -r include/gtest ${BASE}/usr/include + - mkdir -p ${BASE}/usr/lib + - mv *.a ${BASE}/usr/lib + - cd .. +# valgrind + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure --prefix=${BASE}/usr > /dev/null && make -j3 > /dev/null && make install > /dev/null && cd ..; fi +# boost + - if [ "$BOOST" == "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.zip && unzip -q boost_1_63_0.zip && cd boost_1_63_0 && ./bootstrap.sh && ./b2 -j3 --prefix=${BASE}/usr --with-timer --with-chrono address-model=${ARCH} install > /dev/null && cd ..; fi matrix: include: - os: osx compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" API_VERSION="1" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1" - os: osx compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="signed" API_VERSION="2" X3_PARSE="ON" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" X3_PARSE="ON" - os: osx compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="signed" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" - os: osx compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="unsigned" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" ARCH="64" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2" - os: linux compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" API_VERSION="1" + env: ACTION="ci/build_cmake.sh" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.7 + - llvm-toolchain-precise + packages: + - g++-multilib + - gcc-multilib + - gcc-5-multilib + - g++-5-multilib + - bzip2 + - clang-3.7 + - libc6-dbg - os: linux compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" CHAR_SIGN="signed" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" ARCH="32" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.7 + - llvm-toolchain-precise + packages: + - g++-multilib + - gcc-multilib + - gcc-5-multilib + - g++-5-multilib + - lib32stdc++6-6-dbg + - lib32gcc1 + - libc6-i386 + - lib32z1-dev + - bzip2 + - clang-3.7 + - libc6-dbg - os: linux compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="signed" API_VERSION="2" X3_PARSE="ON" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" X3_PARSE="ON" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.7 + - llvm-toolchain-precise + packages: + - g++-multilib + - gcc-multilib + - gcc-5-multilib + - g++-5-multilib + - bzip2 + - clang-3.7 + - libc6-dbg - os: linux compiler: clang - env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" SHARED="OFF" CHAR_SIGN="unsigned" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="32" SHARED="OFF" CHAR_SIGN="unsigned" API_VERSION="2" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-precise-3.7 + - llvm-toolchain-precise + packages: + - g++-multilib + - gcc-multilib + - gcc-5-multilib + - g++-5-multilib + - lib32stdc++6-6-dbg + - lib32gcc1 + - libc6-i386 + - lib32z1-dev + - bzip2 + - clang-3.7 + - libc6-dbg - os: linux compiler: gcc - env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="signed" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-multilib + - gcc-multilib + - gcc-6-multilib + - g++-6-multilib + - bzip2 + - libc6-dbg - os: linux compiler: gcc - env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" API_VERSION="2" X3_PARSE="ON" + env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="32" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2" X3_PARSE="ON" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-multilib + - gcc-multilib + - gcc-6-multilib + - g++-6-multilib + - lib32stdc++6-6-dbg + - lib32gcc1 + - libc6-i386 + - lib32z1-dev + - bzip2 + - libc6-dbg - os: linux compiler: gcc - env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="unsigned" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" ARCH="64" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-multilib + - gcc-multilib + - gcc-6-multilib + - g++-6-multilib + - bzip2 + - libc6-dbg - os: linux compiler: gcc - env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="1" + env: ACTION="ci/build_cmake.sh" ARCH="32" BOOST="ON" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="1" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-multilib + - gcc-multilib + - gcc-6-multilib + - g++-6-multilib + - lib32stdc++6-6-dbg + - lib32gcc1 + - libc6-i386 + - lib32z1-dev + - bzip2 + - libc6-dbg - os: linux compiler: gcc - env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="2" + env: ACTION="ci/build_cmake.sh" ARCH="32" BOOST="ON" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="2" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-multilib + - gcc-multilib + - gcc-6-multilib + - g++-6-multilib + - lib32stdc++6-6-dbg + - lib32gcc1 + - libc6-i386 + - lib32z1-dev + - bzip2 + - libc6-dbg script: - - git clean -xdf && CMAKE_LIBRARY_PATH=${LIBPATH} ${ACTION} ${VERSION} ${ARCH} ${BOOST} ${BOOST_INC} + - CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" BOOST_ROOT="${BASE}/usr" ${ACTION} diff --git a/CMakeLists.txt b/CMakeLists.txt index 1763ff30..61d3ce13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,9 +40,9 @@ ENDIF () IF (MSGPACK_USE_X3_PARSE) IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++1y ${CMAKE_CXX_FLAGS}") + SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}") ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++1y ${CMAKE_CXX_FLAGS}") + SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}") ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE ${CMAKE_CXX_FLAGS}") IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) @@ -94,6 +94,11 @@ IF (MSGPACK_BOOST) SET (Boost_USE_MULTITHREADED ON) SET (Boost_USE_STATIC_RUNTIME OFF) FIND_PACKAGE (Boost COMPONENTS chrono timer system) + IF (Boost_INCLUDE_DIRS) + INCLUDE_DIRECTORIES ( + ${Boost_INCLUDE_DIRS} + ) + ENDIF () INCLUDE_DIRECTORIES ( ${MSGPACK_BOOST_DIR} ) diff --git a/ci/build_cmake.sh b/ci/build_cmake.sh index 06649d2c..9dd03066 100755 --- a/ci/build_cmake.sh +++ b/ci/build_cmake.sh @@ -16,42 +16,14 @@ then exit $ret fi -if [ $1 = "cpp11" ] +if [ "${ARCH}" == "32" ] then - cpp11="-DMSGPACK_CXX11=ON" + export BIT32="ON" else - cpp11="" + export BIT32="OFF" fi -if [ $2 = "32" ] -then - bit32="-DMSGPACK_32BIT=ON" -else - bit32="" -fi - -if [ $3 = "boost" ] -then - boost="-DMSGPACK_BOOST=ON" -else - boost="" -fi - -if [ "$4" != "" ] -then - boost_dir="-DMSGPACK_BOOST_DIR=$4" -else - boost_dir="" -fi - -if [ "$5" = "OFF" ] -then - shared="-DMSGPACK_ENABLE_SHARED=OFF" -else - shared="" -fi - -cmake $cpp11 $bit32 $boost $boost_dir $shared -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} .. +cmake -DMSGPACK_CXX11=${CXX11} -DMSGPACK_32BIT=${BIT32} -DMSGPACK_BOOST=${BOOST} -DMSGPACK_ENABLE_SHARED=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} .. ret=$? if [ $ret -ne 0 ] @@ -59,7 +31,7 @@ then exit $ret fi -make msgpack_x3_parse VERBOSE=1 +make ret=$? if [ $ret -ne 0 ] @@ -67,7 +39,6 @@ then exit $ret fi -test/msgpack_x3_parse make test ret=$? @@ -84,7 +55,7 @@ then exit $ret fi -if [ "$2" != "32" ] && [ `uname` = "Linux" ] +if [ "${ARCH}" != "32" ] && [ `uname` = "Linux" ] then ctest -T memcheck | tee memcheck.log diff --git a/example/c/CMakeLists.txt b/example/c/CMakeLists.txt index 91c90c28..dea2c1d8 100644 --- a/example/c/CMakeLists.txt +++ b/example/c/CMakeLists.txt @@ -1,6 +1,9 @@ -INCLUDE_DIRECTORIES ( - ../include -) +IF (MSGPACK_ENABLE_SHARED) + SET (MSGPACK_LIB msgpackc) +ELSE () + SET (MSGPACK_LIB msgpackc-static) +ENDIF () + LIST (APPEND exec_PROGRAMS lib_buffer_unpack.c @@ -17,7 +20,7 @@ FOREACH (source_file ${exec_PROGRAMS}) ${source_file} ) TARGET_LINK_LIBRARIES (${source_file_we} - msgpackc + ${MSGPACK_LIB} ) IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") diff --git a/example/cpp11/CMakeLists.txt b/example/cpp11/CMakeLists.txt index 43816cbc..46c263e6 100644 --- a/example/cpp11/CMakeLists.txt +++ b/example/cpp11/CMakeLists.txt @@ -6,9 +6,14 @@ IF (MSGPACK_CXX11) LIST (APPEND exec_PROGRAMS container.cpp non_def_con_class.cpp - socket_stream_example.cpp ) + IF ("${MSGPACK_DEFAULT_API_VERSION}" GREATER "1") + LIST (APPEND exec_PROGRAMS + socket_stream_example.cpp + ) + ENDIF () + FOREACH (source_file ${exec_PROGRAMS}) GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) ADD_EXECUTABLE (