From ec1c7669758e9a6aaa4c9914c5112f6da8e62af0 Mon Sep 17 00:00:00 2001 From: tszelei Date: Wed, 26 Jul 2017 14:35:26 +0200 Subject: [PATCH 01/24] build: fixed build on macOS and removed warning reported in #142 --- include/rpc/nonstd/optional.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/rpc/nonstd/optional.hpp b/include/rpc/nonstd/optional.hpp index e88a4318..d9888cf4 100644 --- a/include/rpc/nonstd/optional.hpp +++ b/include/rpc/nonstd/optional.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #define optional_lite_VERSION "2.0.0" @@ -1066,7 +1067,7 @@ using namespace optional_lite; namespace std { template< class T > -class hash< nonstd::optional > +struct hash< nonstd::optional > { public: std::size_t operator()( nonstd::optional const & v ) const optional_noexcept From e57b0919d5a4dcf20d9fbe612adb151e77e6c472 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Wed, 26 Jul 2017 20:40:17 +0200 Subject: [PATCH 02/24] add cmake config files and export targets Adds also the rpclib:: namespace --- CMakeLists.txt | 46 +++++++++++++++++++++++++++++++++---- cmake/rpclibConfig.cmake.in | 10 ++++++++ 2 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 cmake/rpclibConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 39bb2ee1..685a9480 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -185,9 +185,9 @@ function(set_rpclib_flags TARGET) target_link_libraries(${TARGET} ${RPCLIB_DEP_LIBRARIES}) target_include_directories( - ${TARGET} - PUBLIC include - PRIVATE include/rpc + ${TARGET} INTERFACE + $ + $ ) target_include_directories( ${TARGET} SYSTEM @@ -285,7 +285,7 @@ if (RPCLIB_MSVC_STATIC_RUNTIME) endif() -install(TARGETS ${OUTPUT_LIBRARY_NAME} DESTINATION lib) +install(TARGETS ${OUTPUT_LIBRARY_NAME} DESTINATION lib EXPORT rpclibTargets) install(DIRECTORY include/ DESTINATION include FILES_MATCHING @@ -293,7 +293,6 @@ install(DIRECTORY include/ PATTERN "*.hpp" PATTERN "*.inl" PATTERN "*.in" EXCLUDE) -install(FILES ${PROJECT_SOURCE_DIR}/include/rpc/version.h DESTINATION include/rpc) if(RPCLIB_GENERATE_COMPDB) set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") # for YCM @@ -364,6 +363,43 @@ if(RPCLIB_BUILD_EXAMPLES) endif() +################################################################################ +# +# Cmake Package +# +################################################################################ + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfigVersion.cmake" + VERSION ${RPCLIB_VERSION_MAJOR}.${RPCLIB_VERSION_MINOR}.${RPCLIB_VERSION_PATCH} + COMPATIBILITY AnyNewerVersion +) + +set(CONFIG_PACKAGE_LOCATION lib/cmake/rpclib) +set(INCLUDE_INSTALL_DIR include/ ) + +configure_package_config_file(cmake/rpclibConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfig.cmake + INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION} + PATH_VARS INCLUDE_INSTALL_DIR +) + +export(EXPORT rpclibTargets + FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibTargets.cmake" + NAMESPACE rpclib:: +) + +install(EXPORT rpclibTargets + FILE rpclibTargets.cmake + NAMESPACE rpclib:: + DESTINATION ${CONFIG_PACKAGE_LOCATION} +) +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfigVersion.cmake + DESTINATION ${CONFIG_PACKAGE_LOCATION} +) ################################################################################ # # CPack diff --git a/cmake/rpclibConfig.cmake.in b/cmake/rpclibConfig.cmake.in new file mode 100644 index 00000000..1f7c385f --- /dev/null +++ b/cmake/rpclibConfig.cmake.in @@ -0,0 +1,10 @@ +# Example usage: +# find_package(rpclib REQUIRED) +# add_executable(foo main.cpp) +# target_link_libraries(foo rpclib::rpc) + +@PACKAGE_INIT@ + +set(RPCLIB_VERSION @RPCLIB_VERSION_MAJOR@.@RPCLIB_VERSION_MINOR@.@RPCLIB_VERSION_PATCH@) + +include("${CMAKE_CURRENT_LIST_DIR}/rpclibTargets.cmake") From 9f641150c33b3e1ea842960204d570928c829f76 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Fri, 28 Jul 2017 16:16:55 +0200 Subject: [PATCH 03/24] Use PUBLIC instead of INTERFACE Thanks to https://stackoverflow.com/questions/26243169/cmake-target-include-directories-meaning-of-scope --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 685a9480..703f373d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -185,8 +185,8 @@ function(set_rpclib_flags TARGET) target_link_libraries(${TARGET} ${RPCLIB_DEP_LIBRARIES}) target_include_directories( - ${TARGET} INTERFACE - $ + ${TARGET} PUBLIC + $ $ ) target_include_directories( From 410632594f7f1dbd054ae7ffacd68d45e1774032 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Fri, 28 Jul 2017 16:17:03 +0200 Subject: [PATCH 04/24] fix test header --- tests/testutils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testutils.h b/tests/testutils.h index 6a92b006..bc8e7ccf 100644 --- a/tests/testutils.h +++ b/tests/testutils.h @@ -4,7 +4,7 @@ #define TESTUTILS_H_LHCAMVUX #include "gmock/gmock.h" -#include "msgpack.hpp" +#include "rpc/msgpack.hpp" #include #include #include From deb158f145108d3df01d613a79930523e6a80dd6 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Fri, 28 Jul 2017 16:40:56 +0200 Subject: [PATCH 05/24] export c++ version flags in PUBLIC interface Removes deprecated COMPILE_FLAGS option --- CMakeLists.txt | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 703f373d..7ffab7b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,14 +86,15 @@ function(set_rpclib_flags TARGET) # but feel free to add similar flags to GCC if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - set(RPCLIB_BUILD_FLAGS - "-Wall -pedantic -Weverything -Wno-c++98-compat\ - -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes\ - -Wno-undef -pthread") + list(APPEND RPCLIB_BUILD_FLAGS + -Wall -pedantic -Weverything -Wno-c++98-compat + -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes + -Wno-undef -pthread) + if(RPCLIB_CXX_STANDARD EQUAL 14) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -std=c++14") + target_compile_options(${TARGET} PUBLIC -std=c++14) elseif(RPCLIB_CXX_STANDARD EQUAL 11) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -std=c++11") + target_compile_options(${TARGET} PUBLIC -std=c++11) endif() if(RPCLIB_ENABLE_COVERAGE) @@ -103,20 +104,20 @@ function(set_rpclib_flags TARGET) endif() if(RPCLIB_FORCE_M32) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -m32") + list(APPEND RPCLIB_BUILD_FLAGS -m32) elseif(RPCLIB_FORCE_M64) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -m64") + list(APPEND RPCLIB_BUILD_FLAGS -m64) endif() set(RPCLIB_DEP_LIBRARIES "pthread") elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - set(RPCLIB_BUILD_FLAGS "-Wall -pedantic -pthread") + list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -pthread) if(RPCLIB_CXX_STANDARD EQUAL 14) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -std=c++14") + target_compile_options(${TARGET} PUBLIC -std=c++14) elseif(RPCLIB_CXX_STANDARD EQUAL 11) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -std=c++11") + target_compile_options(${TARGET} PUBLIC -std=c++11) endif() if(RPCLIB_ENABLE_COVERAGE) @@ -126,9 +127,9 @@ function(set_rpclib_flags TARGET) endif() if(RPCLIB_FORCE_M32) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -m32") + list(APPEND RPCLIB_BUILD_FLAGS -m32) elseif(RPCLIB_FORCE_M64) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} -m64") + list(APPEND RPCLIB_BUILD_FLAGS -m64) endif() set(RPCLIB_DEP_LIBRARIES "pthread") @@ -153,7 +154,7 @@ function(set_rpclib_flags TARGET) endif() if (RPCLIB_EXTRA_BUILD_FLAGS) - set(RPCLIB_BUILD_FLAGS "${RPCLIB_BUILD_FLAGS} ${RPCLIB_EXTRA_BUILD_FLAGS}") + list(APPEND RPCLIB_BUILD_FLAGS ${RPCLIB_EXTRA_BUILD_FLAGS}) endif() set(RPCLIB_COMPILE_DEFINITIONS @@ -172,9 +173,7 @@ function(set_rpclib_flags TARGET) endif() if(RPCLIB_BUILD_FLAGS) - set_target_properties(${TARGET} - PROPERTIES - COMPILE_FLAGS "${RPCLIB_BUILD_FLAGS}") + target_compile_options(${TARGET} PRIVATE ${RPCLIB_BUILD_FLAGS}) endif() if(RPCLIB_COMPILE_DEFINITIONS) From 4d2f2c212fc8bba9ceea7cea6ff34d9d8af3edb7 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Fri, 28 Jul 2017 17:19:51 +0200 Subject: [PATCH 06/24] fix cmake policy CMP0054 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ffab7b9..1a41a221 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,7 +84,7 @@ function(set_rpclib_flags TARGET) # clang is the compiler used for developing mainly, so # this is where I set the highest warning level # but feel free to add similar flags to GCC - if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -Weverything -Wno-c++98-compat @@ -111,7 +111,7 @@ function(set_rpclib_flags TARGET) set(RPCLIB_DEP_LIBRARIES "pthread") - elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -pthread) if(RPCLIB_CXX_STANDARD EQUAL 14) @@ -134,7 +134,7 @@ function(set_rpclib_flags TARGET) set(RPCLIB_DEP_LIBRARIES "pthread") - elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC") + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") set(RPCLIB_COMPILE_DEFINITIONS "${RPCLIB_COMPILE_DEFINITIONS}" From 800b8ea4c4aff42487733a113ab47c460d4a41a7 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Fri, 28 Jul 2017 17:20:03 +0200 Subject: [PATCH 07/24] fix test flags --- CMakeLists.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a41a221..0daac960 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -333,12 +333,11 @@ if(RPCLIB_BUILD_TESTS) # Set less strict warning for tests, since google test is not quite # warning-clean if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_FLAGS) - set_target_properties(${TEST_PROJECT_NAME} PROPERTIES COMPILE_FLAGS - "${ORIGINAL_FLAGS} -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function \ - -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default \ - -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef \ - -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion") + get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_OPTION) + target_compile_options(${TEST_PROJECT_NAME} PRIVATE -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function + -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default + -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef + -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion) endif() endif() From 8ba637f36a9768647579181177b4288c3e95920c Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sat, 29 Jul 2017 15:45:05 +0200 Subject: [PATCH 08/24] reset flags in function --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0daac960..79a1b96f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,6 +84,8 @@ function(set_rpclib_flags TARGET) # clang is the compiler used for developing mainly, so # this is where I set the highest warning level # but feel free to add similar flags to GCC + set(RPCLIB_BUILD_FLAGS "") # reset flags + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") list(APPEND RPCLIB_BUILD_FLAGS From 24d90e2afbf2b507ab7cd84b150b92a738aace8e Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sat, 29 Jul 2017 15:45:20 +0200 Subject: [PATCH 09/24] add pkg-config support --- CMakeLists.txt | 20 ++++++++++++++++++++ rpclib.pc.in | 10 ++++++++++ 2 files changed, 30 insertions(+) create mode 100644 rpclib.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 79a1b96f..3b48fe16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -400,6 +400,26 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfigVersion.cmake DESTINATION ${CONFIG_PACKAGE_LOCATION} ) + +################################################################################ +# +# Pkg-config +# +################################################################################ +if(NOT MSVC) # Don't install pkg-config files when building with MSVC + # Variables for pkg-config files + set(prefix "${CMAKE_INSTALL_PREFIX}") + set(exec_prefix "") + set(libdir "${CMAKE_INSTALL_PREFIX}/lib") + set(includedir "${CMAKE_INSTALL_PREFIX}/include") + set(rpclib_version ${RPCLIB_VERSION_MAJOR}.${RPCLIB_VERSION_MINOR}.${RPCLIB_VERSION_PATCH}) + get_target_property(rpclib_cflags ${OUTPUT_LIBRARY_NAME} COMPILE_OPTIONS) + string(REPLACE ";" " " rpclib_cflags "${rpclib_cflags}") # Convert list to string + + configure_file(rpclib.pc.in "${CMAKE_CURRENT_BINARY_DIR}/rpclib.pc" @ONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/rpclib.pc" DESTINATION "${libdir}/pkgconfig") +endif() + ################################################################################ # # CPack diff --git a/rpclib.pc.in b/rpclib.pc.in new file mode 100644 index 00000000..10e5c16d --- /dev/null +++ b/rpclib.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: rpclib +Description: rpclib is a msgpack-rpc library written using modern C++ +Version: @rpclib_version@ +Libs: -L${libdir} -l@OUTPUT_LIBRARY_NAME@ +Cflags: -I${includedir} @rpclib_cflags@ \ No newline at end of file From d37e00bd802ed5dfb1257ce9a20fccc1e5eb2e86 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sun, 30 Jul 2017 18:08:49 +0200 Subject: [PATCH 10/24] add macOS build to travis Note : only linux builds the coveralls --- .travis.yml | 66 +++++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 38 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0c83802f..ac72c79a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,53 +1,43 @@ -dist: trusty -language: cpp -compiler: - #- clang - - g++ - -branches: - only: - - master - - dev - - osx_support +language: c++ +os: + - linux + - osx env: - global: - - CI_HOME=`pwd` + matrix: + - RPCLIB_CXX_STANDARD=14 BUILD_TYPE=Debug + - RPCLIB_CXX_STANDARD=11 BUILD_TYPE=Debug + - RPCLIB_CXX_STANDARD=14 BUILD_TYPE=Release + - RPCLIB_CXX_STANDARD=11 BUILD_TYPE=Release + +compiler: + - gcc + - clang addons: apt: sources: - ubuntu-toolchain-r-test - - llvm-toolchain-precise-3.7 - - george-edison55-precise-backports packages: - - gcc-5 + - libsfml-dev - g++-5 - - cmake - - cmake-data + - gcc-5 + - clang-3.8 install: - - pip install --user cpp-coveralls - - if [ "$CXX" = "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi + - if [ "$CXX" == "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi + - if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.8" CC="clang-3.8"; fi + - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update ; fi + - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install sfml llvm@3.8 gcc@5 ; fi + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then pip install --user cpp-coveralls ; fi script: - - g++-5 --version - - gcc-5 --version - - cd $CI_HOME - - git submodule init - - git submodule update --init --recursive - - mkdir build14 && cd build14 - - cmake -DRPCLIB_ENABLE_COVERAGE=ON -DRPCLIB_BUILD_TESTS=ON -DRPCLIB_CXX_STANDARD=14 .. - - make -j2 - - cd .. - - mkdir build11 && cd build11 - - cmake -DRPCLIB_ENABLE_COVERAGE=ON -DRPCLIB_BUILD_TESTS=ON -DRPCLIB_CXX_STANDARD=11 .. - - make -j2 - - cd .. + - mkdir build ; cd build + - if [ "$TRAVIS_OS_NAME" == "osx" ]; then export COV=OFF ;else export COV=ON ; fi + - cmake -DRPCLIB_ENABLE_COVERAGE=$COV -DRPCLIB_BUILD_TESTS=ON -DRPCLIB_CXX_STANDARD=$RPCLIB_CXX_STANDARD -DCMAKE_INSTALL_PREFIX=../install .. + - cmake --build . --config $BUILD_TYPE + - cmake --build . --target install after_success: - - ./build14/output/bin/rpc_test - - ./build11/output/bin/rpc_test - - coveralls --exclude dependencies --exclude test --exclude include/rpc/msgpack --exclude include/rcp/msgpack.hpp --gcov /usr/bin/gcov-5 - - + - ./output/bin/rpc_test + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then coveralls --exclude dependencies --exclude test --exclude include/rpc/msgpack --exclude include/rcp/msgpack.hpp --gcov /usr/bin/gcov-5 ; fi From bd81ecdf344319b959b22b6d91c8dd6819c4644a Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sun, 30 Jul 2017 19:24:01 +0200 Subject: [PATCH 11/24] manually add trusty as default linux OS Trusty is planned to be default at the end of august 2017 : https://blog.travis-ci.com/2017-07-11-trusty-as-default-linux-is-coming --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index ac72c79a..c63e2ae8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,13 @@ language: c++ os: - linux - osx + +matrix: + include: + - os: linux + dist: trusty + sudo: false + env: matrix: - RPCLIB_CXX_STANDARD=14 BUILD_TYPE=Debug From 4064b4cf89e21dfd9c50cb7ef6c58bd621fdf9be Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sun, 30 Jul 2017 19:35:15 +0200 Subject: [PATCH 12/24] add llvm-toolchain-precise editing the include matrix does not seem to work --- .travis.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index c63e2ae8..b5fb754c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,12 +4,6 @@ os: - linux - osx -matrix: - include: - - os: linux - dist: trusty - sudo: false - env: matrix: - RPCLIB_CXX_STANDARD=14 BUILD_TYPE=Debug @@ -24,6 +18,7 @@ compiler: addons: apt: sources: + - llvm-toolchain-precise - ubuntu-toolchain-r-test packages: - libsfml-dev From 0f5050b22e24500bcb70f6e1d45cb2d2b2eb605f Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sun, 30 Jul 2017 19:40:47 +0200 Subject: [PATCH 13/24] add cmake 3 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b5fb754c..e992954c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,7 @@ addons: - g++-5 - gcc-5 - clang-3.8 + - cmake install: - if [ "$CXX" == "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi From 85d278f53aa50ed34bfd208549ed2cbba0285bf8 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sun, 30 Jul 2017 19:50:39 +0200 Subject: [PATCH 14/24] add missing cmake 3 repo --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index e992954c..9536bafe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,12 +20,14 @@ addons: sources: - llvm-toolchain-precise - ubuntu-toolchain-r-test + - george-edison55-precise-backports packages: - libsfml-dev - g++-5 - gcc-5 - clang-3.8 - cmake + - cmake-data install: - if [ "$CXX" == "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi From 20a24381905b9bbda7b1706da0145548ab68a141 Mon Sep 17 00:00:00 2001 From: Antoine Hoarau Date: Sun, 30 Jul 2017 21:19:47 +0200 Subject: [PATCH 15/24] trying new llvm repo --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9536bafe..de4fa969 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ compiler: addons: apt: sources: - - llvm-toolchain-precise + - llvm-toolchain-precise-3.8 - ubuntu-toolchain-r-test - george-edison55-precise-backports packages: From 28f1b3b95ddb1deb4095ee48c829df0bf37361c2 Mon Sep 17 00:00:00 2001 From: sztomi Date: Sun, 17 Sep 2017 20:46:34 +0200 Subject: [PATCH 16/24] cmake: removed TargetArch and some useless stuff (#94) --- CMakeLists.txt | 111 ++++---------------------------- cmake/TargetArch.cmake | 134 --------------------------------------- doc/pages/versions.md | 2 +- include/rpc/config.h | 2 +- include/rpc/version.h | 4 +- include/rpc/version.h.in | 6 +- 6 files changed, 19 insertions(+), 240 deletions(-) delete mode 100644 cmake/TargetArch.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b48fe16..c51b55b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ -cmake_minimum_required(VERSION 3.0.0) -project(rpc) +cmake_minimum_required(VERSION 3.9.2) +project(rpc + VERSION 3.0.0) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") @@ -14,8 +15,6 @@ option(RPCLIB_GENERATE_COMPDB "Generate compilation database. Useful for YCM." O option(RPCLIB_BUILD_EXAMPLES "Build examples." OFF) option(RPCLIB_ENABLE_LOGGING "ALlow logging in the library for debug purposes. Also usable in a release build." OFF) option(RPCLIB_ENABLE_COVERAGE "Generate coverage information" OFF) -option(RPCLIB_FORCE_M64 "Force -m64 in CXXFLAGS" OFF) -option(RPCLIB_FORCE_M32 "Force -m32 in CXXFLAGS" OFF) option(RPCLIB_MSVC_STATIC_RUNTIME "MSVC only: build with /MT instead of /MD" OFF) ################################################################################ @@ -38,36 +37,6 @@ endif() # ################################################################################ -include(TargetArch) - -set(RPCLIB_VERSION_MAJOR 2) -set(RPCLIB_VERSION_MINOR 1) -set(RPCLIB_VERSION_PATCH 0) - -target_architecture(TARGET_ARCH) - -if(RPCLIB_FORCE_M32) - message(STATUS "Compiling for 32-bit") - set(RPCLIB_ARCH_DEF "RPCLIB_ARCH_X86") - set(RPCLIB_TARGET_ARCH "x86") - set(RPCLIB_DEB_ARCH "i386") -elseif(RPCLIB_FORCE_M64) - message(STATUS "Compiling for 64-bit") - set(RPCLIB_ARCH_DEF "RPCLIB_ARCH_X64") - set(RPCLIB_TARGET_ARCH "x64") - set(RPCLIB_DEB_ARCH "amd64") -elseif (${TARGET_ARCH} STREQUAL "i386") - message(STATUS "Compiling for 32-bit") - set(RPCLIB_ARCH_DEF "RPCLIB_ARCH_X86") - set(RPCLIB_TARGET_ARCH "x86") - set(RPCLIB_DEB_ARCH "i386") -elseif(${TARGET_ARCH} STREQUAL "x86_64") - message(STATUS "Compiling for 64-bit") - set(RPCLIB_ARCH_DEF "RPCLIB_ARCH_X64") - set(RPCLIB_TARGET_ARCH "x64") - set(RPCLIB_DEB_ARCH "amd64") -endif() - if (WIN32) set(RPCLIB_OS_DEF "RPCLIB_WIN32") elseif (LINUX) @@ -105,12 +74,6 @@ function(set_rpclib_flags TARGET) LINK_FLAGS "-lgcov --coverage") endif() - if(RPCLIB_FORCE_M32) - list(APPEND RPCLIB_BUILD_FLAGS -m32) - elseif(RPCLIB_FORCE_M64) - list(APPEND RPCLIB_BUILD_FLAGS -m64) - endif() - set(RPCLIB_DEP_LIBRARIES "pthread") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") @@ -128,12 +91,6 @@ function(set_rpclib_flags TARGET) LINK_FLAGS "-lgcov --coverage") endif() - if(RPCLIB_FORCE_M32) - list(APPEND RPCLIB_BUILD_FLAGS -m32) - elseif(RPCLIB_FORCE_M64) - list(APPEND RPCLIB_BUILD_FLAGS -m64) - endif() - set(RPCLIB_DEP_LIBRARIES "pthread") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") @@ -220,17 +177,11 @@ file(GLOB_RECURSE DEP_HEADERS dependencies/include/*.h dependencies/include/*.hpp) -if(RPCLIB_NAME_SUFFIX) - set(OUTPUT_LIBRARY_NAME ${CMAKE_PROJECT_NAME}-${RPCLIB_NAME_SUFFIX}) -else() - set(OUTPUT_LIBRARY_NAME ${CMAKE_PROJECT_NAME}) -endif() - set(DEP_SOURCES dependencies/src/format.cc dependencies/src/posix.cc) -add_library(${OUTPUT_LIBRARY_NAME} +add_library(${PROJECT_NAME} lib/rpc/dispatcher.cc lib/rpc/server.cc lib/rpc/client.cc @@ -246,10 +197,9 @@ add_library(${OUTPUT_LIBRARY_NAME} ${DEP_HEADERS} ${RPCLIB_HEADERS}) +set_rpclib_flags(${PROJECT_NAME}) -set_rpclib_flags(${OUTPUT_LIBRARY_NAME}) - -target_link_libraries(${OUTPUT_LIBRARY_NAME}) +target_link_libraries(${PROJECT_NAME}) # When building via conan, respect the compilation settings. if ("${CONAN_LINK_RUNTIME}" STREQUAL "/MT") @@ -286,7 +236,7 @@ if (RPCLIB_MSVC_STATIC_RUNTIME) endif() -install(TARGETS ${OUTPUT_LIBRARY_NAME} DESTINATION lib EXPORT rpclibTargets) +install(TARGETS ${PROJECT_NAME} DESTINATION lib EXPORT rpclibTargets) install(DIRECTORY include/ DESTINATION include FILES_MATCHING @@ -297,7 +247,7 @@ install(DIRECTORY include/ if(RPCLIB_GENERATE_COMPDB) set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") # for YCM - add_custom_command(TARGET ${OUTPUT_LIBRARY_NAME} POST_BUILD + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_BINARY_DIR}/../compile_commands.json) endif() @@ -329,7 +279,7 @@ if(RPCLIB_BUILD_TESTS) target_include_directories(${TEST_PROJECT_NAME} SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests") target_link_libraries( ${TEST_PROJECT_NAME} - ${OUTPUT_LIBRARY_NAME} + ${PROJECT_NAME} ${RPCLIB_DEP_LIBRARIES}) # Set less strict warning for tests, since google test is not quite @@ -372,7 +322,7 @@ endif() include(CMakePackageConfigHelpers) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfigVersion.cmake" - VERSION ${RPCLIB_VERSION_MAJOR}.${RPCLIB_VERSION_MINOR}.${RPCLIB_VERSION_PATCH} + VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) @@ -412,48 +362,11 @@ if(NOT MSVC) # Don't install pkg-config files when building with MSVC set(exec_prefix "") set(libdir "${CMAKE_INSTALL_PREFIX}/lib") set(includedir "${CMAKE_INSTALL_PREFIX}/include") - set(rpclib_version ${RPCLIB_VERSION_MAJOR}.${RPCLIB_VERSION_MINOR}.${RPCLIB_VERSION_PATCH}) - get_target_property(rpclib_cflags ${OUTPUT_LIBRARY_NAME} COMPILE_OPTIONS) + set(rpclib_version ${PROJECT_VERSION}) + get_target_property(rpclib_cflags ${PROJECT_NAME} COMPILE_OPTIONS) string(REPLACE ";" " " rpclib_cflags "${rpclib_cflags}") # Convert list to string configure_file(rpclib.pc.in "${CMAKE_CURRENT_BINARY_DIR}/rpclib.pc" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/rpclib.pc" DESTINATION "${libdir}/pkgconfig") endif() -################################################################################ -# -# CPack -# -################################################################################ - -include(InstallRequiredSystemLibraries) - -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Modern msgpack-rpc library for C++") -set(CPACK_PACKAGE_DESCRIPTION "rpclib is a modern msgpack-rpc library for C++. It allows connecting applications through a network channel where they can talk to each other using the msgpack-rpc protocol. It provides both a client and server, which can be used independently.") -set(CPACK_PACKAGE_VENDOR "Tamás Szelei") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md") -set(CPACK_PACKAGE_VERSION_MAJOR "${RPCLIB_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${RPCLIB_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${RPCLIB_VERSION_PATCH}") -set(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_BINARY_DIR}/output/pkg") -set(CPACK_PACKAGE_EXECUTABLES "librpc" "rpc") -set(CPACK_PACKAGE_NAME "lib${CMAKE_PROJECT_NAME}_${RPCLIB_DEB_ARCH}") -set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${RPCLIB_DEB_ARCH}) -set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Tamás Szelei") -set(CPACK_DEBIAN_PACKAGE_CONTACT "Tamás Szelei") -if(WIN32) - set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}") -endif() - -if(WIN32) - #set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") - #set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe") - set(CPACK_PACKAGE_INSTALL_DIRECTORY "librpc ${RPCLIB_VERSION_MAJOR}.${RPCLIB_VERSION_MINOR}.${RPCLIB_VERSION_PATCH}") - set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} rpclib") - #set(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.my-project-home-page.org") - set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\github.com/sztomi/rpc") - #set(CPACK_NSIS_CONTACT "me@my-personal-home-page.com") - set(CPACK_NSIS_MODIFY_PATH ON) -endif() -include(CPack) diff --git a/cmake/TargetArch.cmake b/cmake/TargetArch.cmake deleted file mode 100644 index 3761e4df..00000000 --- a/cmake/TargetArch.cmake +++ /dev/null @@ -1,134 +0,0 @@ -# Based on the Qt 5 processor detection code, so should be very accurate -# https://qt.gitorious.org/qt/qtbase/blobs/master/src/corelib/global/qprocessordetection.h -# Currently handles arm (v5, v6, v7), x86 (32/64), ia64, and ppc (32/64) - -# Regarding POWER/PowerPC, just as is noted in the Qt source, -# "There are many more known variants/revisions that we do not handle/detect." - -set(archdetect_c_code " -#if defined(__arm__) || defined(__TARGET_ARCH_ARM) - #if defined(__ARM_ARCH_7__) \\ - || defined(__ARM_ARCH_7A__) \\ - || defined(__ARM_ARCH_7R__) \\ - || defined(__ARM_ARCH_7M__) \\ - || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 7) - #error cmake_ARCH armv7 - #elif defined(__ARM_ARCH_6__) \\ - || defined(__ARM_ARCH_6J__) \\ - || defined(__ARM_ARCH_6T2__) \\ - || defined(__ARM_ARCH_6Z__) \\ - || defined(__ARM_ARCH_6K__) \\ - || defined(__ARM_ARCH_6ZK__) \\ - || defined(__ARM_ARCH_6M__) \\ - || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 6) - #error cmake_ARCH armv6 - #elif defined(__ARM_ARCH_5TEJ__) \\ - || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 5) - #error cmake_ARCH armv5 - #else - #error cmake_ARCH arm - #endif -#elif defined(__i386) || defined(__i386__) || defined(_M_IX86) - #error cmake_ARCH i386 -#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64) - #error cmake_ARCH x86_64 -#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) - #error cmake_ARCH ia64 -#elif defined(__ppc__) || defined(__ppc) || defined(__powerpc__) \\ - || defined(_ARCH_COM) || defined(_ARCH_PWR) || defined(_ARCH_PPC) \\ - || defined(_M_MPPC) || defined(_M_PPC) - #if defined(__ppc64__) || defined(__powerpc64__) || defined(__64BIT__) - #error cmake_ARCH ppc64 - #else - #error cmake_ARCH ppc - #endif -#endif - -#error cmake_ARCH unknown -") - -# Set ppc_support to TRUE before including this file or ppc and ppc64 -# will be treated as invalid architectures since they are no longer supported by Apple - -function(target_architecture output_var) - if(APPLE AND CMAKE_OSX_ARCHITECTURES) - # On OS X we use CMAKE_OSX_ARCHITECTURES *if* it was set - # First let's normalize the order of the values - - # Note that it's not possible to compile PowerPC applications if you are using - # the OS X SDK version 10.6 or later - you'll need 10.4/10.5 for that, so we - # disable it by default - # See this page for more information: - # http://stackoverflow.com/questions/5333490/how-can-we-restore-ppc-ppc64-as-well-as-full-10-4-10-5-sdk-support-to-xcode-4 - - # Architecture defaults to i386 or ppc on OS X 10.5 and earlier, depending on the CPU type detected at runtime. - # On OS X 10.6+ the default is x86_64 if the CPU supports it, i386 otherwise. - - foreach(osx_arch ${CMAKE_OSX_ARCHITECTURES}) - if("${osx_arch}" STREQUAL "ppc" AND ppc_support) - set(osx_arch_ppc TRUE) - elseif("${osx_arch}" STREQUAL "i386") - set(osx_arch_i386 TRUE) - elseif("${osx_arch}" STREQUAL "x86_64") - set(osx_arch_x86_64 TRUE) - elseif("${osx_arch}" STREQUAL "ppc64" AND ppc_support) - set(osx_arch_ppc64 TRUE) - else() - message(FATAL_ERROR "Invalid OS X arch name: ${osx_arch}") - endif() - endforeach() - - # Now add all the architectures in our normalized order - if(osx_arch_ppc) - list(APPEND ARCH ppc) - endif() - - if(osx_arch_i386) - list(APPEND ARCH i386) - endif() - - if(osx_arch_x86_64) - list(APPEND ARCH x86_64) - endif() - - if(osx_arch_ppc64) - list(APPEND ARCH ppc64) - endif() - else() - file(WRITE "${CMAKE_BINARY_DIR}/arch.c" "${archdetect_c_code}") - - enable_language(C) - - # Detect the architecture in a rather creative way... - # This compiles a small C program which is a series of ifdefs that selects a - # particular #error preprocessor directive whose message string contains the - # target architecture. The program will always fail to compile (both because - # file is not a valid C program, and obviously because of the presence of the - # #error preprocessor directives... but by exploiting the preprocessor in this - # way, we can detect the correct target architecture even when cross-compiling, - # since the program itself never needs to be run (only the compiler/preprocessor) - try_run( - run_result_unused - compile_result_unused - "${CMAKE_BINARY_DIR}" - "${CMAKE_BINARY_DIR}/arch.c" - COMPILE_OUTPUT_VARIABLE ARCH - CMAKE_FLAGS CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} - ) - - # Parse the architecture name from the compiler output - string(REGEX MATCH "cmake_ARCH ([a-zA-Z0-9_]+)" ARCH "${ARCH}") - - # Get rid of the value marker leaving just the architecture name - string(REPLACE "cmake_ARCH " "" ARCH "${ARCH}") - - # If we are compiling with an unknown architecture this variable should - # already be set to "unknown" but in the case that it's empty (i.e. due - # to a typo in the code), then set it to unknown - if (NOT ARCH) - set(ARCH unknown) - endif() - endif() - - set(${output_var} "${ARCH}" PARENT_SCOPE) -endfunction() diff --git a/doc/pages/versions.md b/doc/pages/versions.md index 971a2108..7fcf6355 100644 --- a/doc/pages/versions.md +++ b/doc/pages/versions.md @@ -1,4 +1,4 @@ -You are reading the documentation of 2.1.0. +You are reading the documentation of ... If, for some reason you need the documentation of older versions, you can download them from this page. * [1.0.0](/archive/rpclib_docs_1.0.0.zip) diff --git a/include/rpc/config.h b/include/rpc/config.h index 06890879..66620ef3 100644 --- a/include/rpc/config.h +++ b/include/rpc/config.h @@ -30,7 +30,7 @@ struct constants RPCLIB_FINAL { #endif /* ifndef RPCLIB_MSGPACK */ #ifndef RPCLIB_CXX_STANDARD -#define RPCLIB_CXX_STANDARD 14 +#define RPCLIB_CXX_STANDARD 11 #endif #endif /* end of include guard: CONFIG_H_L7IVDSPZ */ diff --git a/include/rpc/version.h b/include/rpc/version.h index 54e2899e..f5c0a1df 100644 --- a/include/rpc/version.h +++ b/include/rpc/version.h @@ -5,8 +5,8 @@ namespace rpc { -static constexpr unsigned VERSION_MAJOR = 2; -static constexpr unsigned VERSION_MINOR = 1; +static constexpr unsigned VERSION_MAJOR = 3; +static constexpr unsigned VERSION_MINOR = 0; static constexpr unsigned VERSION_PATCH = 0; } /* rpc */ diff --git a/include/rpc/version.h.in b/include/rpc/version.h.in index f278fa79..d6edfd8f 100644 --- a/include/rpc/version.h.in +++ b/include/rpc/version.h.in @@ -5,9 +5,9 @@ namespace rpc { -static constexpr unsigned VERSION_MAJOR = @RPCLIB_VERSION_MAJOR@; -static constexpr unsigned VERSION_MINOR = @RPCLIB_VERSION_MINOR@; -static constexpr unsigned VERSION_PATCH = @RPCLIB_VERSION_PATCH@; +static constexpr unsigned VERSION_MAJOR = @rpc_VERSION_MAJOR@; +static constexpr unsigned VERSION_MINOR = @rpc_VERSION_MINOR@; +static constexpr unsigned VERSION_PATCH = @rpc_VERSION_PATCH@; } /* rpc */ From 2117033d94b456c656987081ba498365614a2b6b Mon Sep 17 00:00:00 2001 From: sztomi Date: Sun, 17 Sep 2017 23:17:54 +0200 Subject: [PATCH 17/24] cmake: further cleanup and reformatting (#94) --- CMakeLists.txt | 467 +++++++++++++++++++-------------------- cmake/policies.cmake | 2 + tests/rpc/client_test.cc | 12 +- 3 files changed, 236 insertions(+), 245 deletions(-) create mode 100644 cmake/policies.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c51b55b9..6510d584 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,48 +1,56 @@ cmake_minimum_required(VERSION 3.9.2) -project(rpc - VERSION 3.0.0) +project(rpc VERSION 3.0.0) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") -################################################################################ +include(policies) + # # Options # -################################################################################ - -option(RPCLIB_BUILD_TESTS "Build unit RPCLIB_BUILD_TESTS." OFF) -option(RPCLIB_GENERATE_COMPDB "Generate compilation database. Useful for YCM." OFF) -option(RPCLIB_BUILD_EXAMPLES "Build examples." OFF) -option(RPCLIB_ENABLE_LOGGING "ALlow logging in the library for debug purposes. Also usable in a release build." OFF) -option(RPCLIB_ENABLE_COVERAGE "Generate coverage information" OFF) -option(RPCLIB_MSVC_STATIC_RUNTIME "MSVC only: build with /MT instead of /MD" OFF) +option(RPCLIB_BUILD_TESTS + "Build unit RPCLIB_BUILD_TESTS." + OFF) +option(RPCLIB_GENERATE_COMPDB + "Generate compilation database. Useful for YCM." + OFF) +option(RPCLIB_BUILD_EXAMPLES + "Build examples." + OFF) +option(RPCLIB_ENABLE_LOGGING + "ALlow logging in the library for debug purposes." + OFF) +option(RPCLIB_ENABLE_COVERAGE + "Generate coverage information" + OFF) +option(RPCLIB_MSVC_STATIC_RUNTIME + "MSVC only: build with /MT instead of /MD" + OFF) -################################################################################ # # Other configuration values # -################################################################################ - -set(RPCLIB_DEFAULT_PORT 8080 CACHE STRING "Default port used for running tests and examples") -set(RPCLIB_DEFAULT_BUFFER_SIZE "1024 << 10" CACHE STRING "Default buffer size") -set(RPCLIB_CXX_STANDARD 11 CACHE STRING "C++ version used to build rpclib (Currently: Only 11 and 14 supported)") - -if(NOT ${RPCLIB_CXX_STANDARD} EQUAL 14 AND NOT ${RPCLIB_CXX_STANDARD} EQUAL 11) - message(fatal_error "Unsupported C++ standard: ${RPCLIB_CXX_STANDARD}") +set(RPCLIB_DEFAULT_PORT 8080 + CACHE STRING "Default port used for running tests and examples") +set(RPCLIB_DEFAULT_BUFFER_SIZE "1024 << 10" + CACHE STRING "Default buffer size") +set(RPCLIB_CXX_STANDARD 11 CACHE STRING + "C++ version used to build rpclib (Currently: Only 11 and 14 supported)") + +if(NOT ${RPCLIB_CXX_STANDARD} EQUAL 14 AND + NOT ${RPCLIB_CXX_STANDARD} EQUAL 11) + message(fatal_error "Unsupported C++ standard: ${RPCLIB_CXX_STANDARD}") endif() -################################################################################ # # Compile & install the library # -################################################################################ - if (WIN32) - set(RPCLIB_OS_DEF "RPCLIB_WIN32") + set(RPCLIB_OS_DEF "RPCLIB_WIN32") elseif (LINUX) - set(RPCLIB_OS_DEF "RPCLIB_LINUX") + set(RPCLIB_OS_DEF "RPCLIB_LINUX") elseif (APPLE) - set(RPCLIB_OS_DEF "RPCLIB_MAC") + set(RPCLIB_OS_DEF "RPCLIB_MAC") endif() # This function sets the rpclib-specific flags that are used for @@ -50,160 +58,149 @@ endif() # Findrpclib.cmake supplies a (possibly empty) RPCLIB_EXTRA_FLAGS variable # that you should append to your build flags. function(set_rpclib_flags TARGET) - # clang is the compiler used for developing mainly, so - # this is where I set the highest warning level - # but feel free to add similar flags to GCC - set(RPCLIB_BUILD_FLAGS "") # reset flags - - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - - list(APPEND RPCLIB_BUILD_FLAGS - -Wall -pedantic -Weverything -Wno-c++98-compat - -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes - -Wno-undef -pthread) - - if(RPCLIB_CXX_STANDARD EQUAL 14) - target_compile_options(${TARGET} PUBLIC -std=c++14) - elseif(RPCLIB_CXX_STANDARD EQUAL 11) - target_compile_options(${TARGET} PUBLIC -std=c++11) - endif() - - if(RPCLIB_ENABLE_COVERAGE) - set_target_properties(${TARGET} - PROPERTIES - LINK_FLAGS "-lgcov --coverage") - endif() - - set(RPCLIB_DEP_LIBRARIES "pthread") - - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - - list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -pthread) - if(RPCLIB_CXX_STANDARD EQUAL 14) - target_compile_options(${TARGET} PUBLIC -std=c++14) - elseif(RPCLIB_CXX_STANDARD EQUAL 11) - target_compile_options(${TARGET} PUBLIC -std=c++11) - endif() - - if(RPCLIB_ENABLE_COVERAGE) - set_target_properties(${TARGET} - PROPERTIES - LINK_FLAGS "-lgcov --coverage") - endif() - - set(RPCLIB_DEP_LIBRARIES "pthread") - - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - - set(RPCLIB_COMPILE_DEFINITIONS - "${RPCLIB_COMPILE_DEFINITIONS}" - "WIN32_LEAN_AND_MEAN" - "NOMINMAX" - "VC_EXTRALEAN" - "_CRT_SECURE_NO_WARNINGS" - "_CRT_NONSTDC_NO_DEPRECATE" - "_WIN32_WINNT=0x0501" - "_GNU_SOURCE" - "ASIO_HAS_STD_ADDRESSOF" - "ASIO_HAS_STD_ARRAY" - "ASIO_HAS_CSTDINT" - "ASIO_HAS_STD_SHARED_PTR" - "ASIO_HAS_STD_TYPE_TRAITS") - + # clang is the compiler used for developing mainly, so + # this is where I set the highest warning level + # but feel free to add similar flags to GCC + set(RPCLIB_BUILD_FLAGS "") # reset flags + + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + + list(APPEND RPCLIB_BUILD_FLAGS + -Wall -pedantic -Weverything -Wno-c++98-compat + -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes + -Wno-undef -pthread) + + if(RPCLIB_CXX_STANDARD EQUAL 14) + target_compile_options(${TARGET} PUBLIC -std=c++14) + elseif(RPCLIB_CXX_STANDARD EQUAL 11) + target_compile_options(${TARGET} PUBLIC -std=c++11) endif() - if (RPCLIB_EXTRA_BUILD_FLAGS) - list(APPEND RPCLIB_BUILD_FLAGS ${RPCLIB_EXTRA_BUILD_FLAGS}) - endif() + set(RPCLIB_DEP_LIBRARIES "pthread") - set(RPCLIB_COMPILE_DEFINITIONS - "${RPCLIB_COMPILE_DEFINITIONS}" - "${RPCLIB_ARCH_DEF}" - "${RPCLIB_OS_DEF}" - "ASIO_STANDALONE" - "RPCLIB_ASIO=clmdep_asio" - "RPCLIB_FMT=clmdep_fmt" - "RPCLIB_MSGPACK=clmdep_msgpack" - ) - - if(RPCLIB_ENABLE_LOGGING) - set(RPCLIB_COMPILE_DEFINITIONS - "${RPCLIB_COMPILE_DEFINITIONS};RPCLIB_ENABLE_LOGGING") - endif() + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - if(RPCLIB_BUILD_FLAGS) - target_compile_options(${TARGET} PRIVATE ${RPCLIB_BUILD_FLAGS}) + list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -pthread) + if(RPCLIB_CXX_STANDARD EQUAL 14) + target_compile_options(${TARGET} PUBLIC -std=c++14) + elseif(RPCLIB_CXX_STANDARD EQUAL 11) + target_compile_options(${TARGET} PUBLIC -std=c++11) endif() - if(RPCLIB_COMPILE_DEFINITIONS) - set_target_properties(${TARGET} - PROPERTIES - COMPILE_DEFINITIONS "${RPCLIB_COMPILE_DEFINITIONS}") + set(RPCLIB_DEP_LIBRARIES "pthread") + + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + + target_compile_definitions(${TARGET} PRIVATE + "WIN32_LEAN_AND_MEAN" + "NOMINMAX" + "VC_EXTRALEAN" + "_CRT_SECURE_NO_WARNINGS" + "_CRT_NONSTDC_NO_DEPRECATE" + "_WIN32_WINNT=0x0501" + "_GNU_SOURCE" + "ASIO_HAS_STD_ADDRESSOF" + "ASIO_HAS_STD_ARRAY" + "ASIO_HAS_CSTDINT" + "ASIO_HAS_STD_SHARED_PTR" + "ASIO_HAS_STD_TYPE_TRAITS") + + endif() + + if(RPCLIB_ENABLE_COVERAGE) + if(MSVC) + message(FATAL_ERROR "Coverage is only supported with non-MS compilers") endif() - - target_link_libraries(${TARGET} ${RPCLIB_DEP_LIBRARIES}) - target_include_directories( - ${TARGET} PUBLIC - $ - $ + target_compile_options(${TARGET} PUBLIC "--coverage") + # yes, this is ugly as "--coverage" is not a library, but a flag + # however, this does not work with the LINK_FLAGS target property + list(APPEND RPCLIB_DEP_LIBRARIES "--coverage") + endif() + + if (RPCLIB_EXTRA_BUILD_FLAGS) + list(APPEND RPCLIB_BUILD_FLAGS ${RPCLIB_EXTRA_BUILD_FLAGS}) + endif() + + target_compile_definitions(${TARGET} PRIVATE + "${RPCLIB_COMPILE_DEFINITIONS}" + "${RPCLIB_ARCH_DEF}" + "${RPCLIB_OS_DEF}" + "ASIO_STANDALONE" + "RPCLIB_ASIO=clmdep_asio" + "RPCLIB_FMT=clmdep_fmt") + target_compile_definitions(${TARGET} PUBLIC + "RPCLIB_MSGPACK=clmdep_msgpack") + + if(RPCLIB_ENABLE_LOGGING) + target_compile_definitions(${TARGET} PRIVATE "RPCLIB_ENABLE_LOGGING") + endif() + + if(RPCLIB_BUILD_FLAGS) + target_compile_options(${TARGET} PRIVATE ${RPCLIB_BUILD_FLAGS}) + endif() + + if(RPCLIB_COMPILE_DEFINITIONS) + set_target_properties(${TARGET} + PROPERTIES + COMPILE_DEFINITIONS "${RPCLIB_COMPILE_DEFINITIONS}") + endif() + + target_link_libraries(${TARGET} ${RPCLIB_DEP_LIBRARIES}) + target_include_directories( + ${TARGET} PUBLIC + $ + $ ) - target_include_directories( - ${TARGET} SYSTEM - PRIVATE dependencies/include + target_include_directories( + ${TARGET} SYSTEM + PRIVATE dependencies/include ) - endfunction() -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/bin) - configure_file( - "${PROJECT_SOURCE_DIR}/include/rpc/version.h.in" - "${PROJECT_SOURCE_DIR}/include/rpc/version.h") + "${PROJECT_SOURCE_DIR}/include/rpc/version.h.in" + "${PROJECT_SOURCE_DIR}/include/rpc/version.h") configure_file( - "${PROJECT_SOURCE_DIR}/include/rpc/config.h.in" - "${PROJECT_SOURCE_DIR}/include/rpc/config.h") + "${PROJECT_SOURCE_DIR}/include/rpc/config.h.in" + "${PROJECT_SOURCE_DIR}/include/rpc/config.h") configure_file( - "${PROJECT_SOURCE_DIR}/doc/pages/versions.md.in" - "${PROJECT_SOURCE_DIR}/doc/pages/versions.md") + "${PROJECT_SOURCE_DIR}/doc/pages/versions.md.in" + "${PROJECT_SOURCE_DIR}/doc/pages/versions.md") file(GLOB_RECURSE RPCLIB_HEADERS - include/rpc/*.h - include/msgpack/*.hpp) + include/rpc/*.h + include/msgpack/*.hpp) file(GLOB_RECURSE DEP_HEADERS - dependencies/include/*.h - dependencies/include/*.hpp) + dependencies/include/*.h + dependencies/include/*.hpp) set(DEP_SOURCES - dependencies/src/format.cc - dependencies/src/posix.cc) + dependencies/src/format.cc + dependencies/src/posix.cc) add_library(${PROJECT_NAME} - lib/rpc/dispatcher.cc - lib/rpc/server.cc - lib/rpc/client.cc - lib/rpc/this_handler.cc - lib/rpc/this_session.cc - lib/rpc/this_server.cc - lib/rpc/rpc_error.cc - lib/rpc/detail/server_session.cc - lib/rpc/detail/response.cc - lib/rpc/detail/client_error.cc - lib/rpc/nonstd/optional.cc - ${DEP_SOURCES} - ${DEP_HEADERS} - ${RPCLIB_HEADERS}) + lib/rpc/dispatcher.cc + lib/rpc/server.cc + lib/rpc/client.cc + lib/rpc/this_handler.cc + lib/rpc/this_session.cc + lib/rpc/this_server.cc + lib/rpc/rpc_error.cc + lib/rpc/detail/server_session.cc + lib/rpc/detail/response.cc + lib/rpc/detail/client_error.cc + lib/rpc/nonstd/optional.cc + ${DEP_SOURCES} + ${DEP_HEADERS} + ${RPCLIB_HEADERS}) set_rpclib_flags(${PROJECT_NAME}) -target_link_libraries(${PROJECT_NAME}) - # When building via conan, respect the compilation settings. if ("${CONAN_LINK_RUNTIME}" STREQUAL "/MT") - set(RPCLIB_MSVC_STATIC_RUNTIME ON) + set(RPCLIB_MSVC_STATIC_RUNTIME ON) endif() # MSVC static runtime support @@ -212,119 +209,111 @@ endif() # build with a disparity anyway. (also, CMake still has no support for this, so you # would end up doing something like this yourself). if (RPCLIB_MSVC_STATIC_RUNTIME) - # Set compiler options. - set(variables - CMAKE_C_FLAGS_DEBUG - CMAKE_C_FLAGS_MINSIZEREL - CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS_DEBUG - CMAKE_CXX_FLAGS_MINSIZEREL - CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_RELWITHDEBINFO - ) - - message(STATUS - "MSVC -> forcing use of statically-linked runtime." - ) - - foreach(variable ${variables}) - if(${variable} MATCHES "/MD") - string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}") - endif() - endforeach() + # Set compiler options. + set(variables + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO + ) + + message(STATUS + "MSVC -> forcing use of statically-linked runtime." + ) + + foreach(variable ${variables}) + if(${variable} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}") + endif() + endforeach() endif() install(TARGETS ${PROJECT_NAME} DESTINATION lib EXPORT rpclibTargets) install(DIRECTORY include/ - DESTINATION include - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.hpp" - PATTERN "*.inl" - PATTERN "*.in" EXCLUDE) + DESTINATION include + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.hpp" + PATTERN "*.inl" + PATTERN "*.in" EXCLUDE) if(RPCLIB_GENERATE_COMPDB) - set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") # for YCM - add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E - copy ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_BINARY_DIR}/../compile_commands.json) + + set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") # for YCM + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_BINARY_DIR}/../compile_commands.json) + endif() -################################################################################ # # Unit tests # -################################################################################ - if(RPCLIB_BUILD_TESTS) - set(TEST_PROJECT_NAME ${CMAKE_PROJECT_NAME}_test) - set(TEST_SOURCES - dependencies/src/gmock-gtest-all.cc - tests/testmain.cc - tests/testutils.h - tests/rpc/dispatcher_test.cc - tests/rpc/client_test.cc - tests/rpc/response_test.cc - tests/rpc/server_test.cc - tests/rpc/this_handler_test.cc - tests/rpc/this_session_test.cc - tests/rpc/server_session_test.cc - tests/rpc/this_server_test.cc) - - - add_executable(${TEST_PROJECT_NAME} ${TEST_SOURCES}) - set_rpclib_flags(${TEST_PROJECT_NAME}) - target_include_directories(${TEST_PROJECT_NAME} SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests") - target_link_libraries( - ${TEST_PROJECT_NAME} - ${PROJECT_NAME} - ${RPCLIB_DEP_LIBRARIES}) - - # Set less strict warning for tests, since google test is not quite - # warning-clean - if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_OPTION) - target_compile_options(${TEST_PROJECT_NAME} PRIVATE -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function - -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default - -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef - -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion) - endif() + set(TEST_PROJECT_NAME ${CMAKE_PROJECT_NAME}_test) + set(TEST_SOURCES + dependencies/src/gmock-gtest-all.cc + tests/testmain.cc + tests/testutils.h + tests/rpc/dispatcher_test.cc + tests/rpc/client_test.cc + tests/rpc/response_test.cc + tests/rpc/server_test.cc + tests/rpc/this_handler_test.cc + tests/rpc/this_session_test.cc + tests/rpc/server_session_test.cc + tests/rpc/this_server_test.cc) + + + add_executable(${TEST_PROJECT_NAME} ${TEST_SOURCES}) + target_include_directories(${TEST_PROJECT_NAME} + SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests" + PRIVATE "dependencies/include") + target_link_libraries( + ${TEST_PROJECT_NAME} + ${PROJECT_NAME} + ${RPCLIB_DEP_LIBRARIES}) + + # Set less strict warning for tests, since google test is not quite + # warning-clean + if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_OPTION) + target_compile_options(${TEST_PROJECT_NAME} PRIVATE -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function + -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default + -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef + -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion) + endif() endif() -################################################################################ # # Example programs # -################################################################################ - if(RPCLIB_BUILD_EXAMPLES) - set(RPCLIB_ROOT_DIR "${PROJECT_SOURCE_DIR}") - set(RPCLIB_PROJECT_NAME "${CMAKE_PROJECT_NAME}") - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/localbuild") - set(ENV{RPCLIB_DEFAULT_PORT} "${RPCLIB_DEFAULT_PORT}") - #add_subdirectory(examples/server) - #add_subdirectory(examples/client) - add_subdirectory(examples/echo) - add_subdirectory(examples/mandelbrot) - add_subdirectory(examples/calculator) + set(RPCLIB_ROOT_DIR "${PROJECT_SOURCE_DIR}") + set(RPCLIB_PROJECT_NAME "${CMAKE_PROJECT_NAME}") + set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/localbuild") + set(ENV{RPCLIB_DEFAULT_PORT} "${RPCLIB_DEFAULT_PORT}") + add_subdirectory(examples/echo) + add_subdirectory(examples/mandelbrot) + add_subdirectory(examples/calculator) endif() -################################################################################ # # Cmake Package # -################################################################################ - include(CMakePackageConfigHelpers) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion -) + ) set(CONFIG_PACKAGE_LOCATION lib/cmake/rpclib) set(INCLUDE_INSTALL_DIR include/ ) @@ -333,29 +322,27 @@ configure_package_config_file(cmake/rpclibConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfig.cmake INSTALL_DESTINATION ${CONFIG_PACKAGE_LOCATION} PATH_VARS INCLUDE_INSTALL_DIR -) + ) export(EXPORT rpclibTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibTargets.cmake" NAMESPACE rpclib:: -) + ) install(EXPORT rpclibTargets FILE rpclibTargets.cmake NAMESPACE rpclib:: DESTINATION ${CONFIG_PACKAGE_LOCATION} -) + ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/cmake/rpclibConfigVersion.cmake DESTINATION ${CONFIG_PACKAGE_LOCATION} -) + ) -################################################################################ # # Pkg-config # -################################################################################ if(NOT MSVC) # Don't install pkg-config files when building with MSVC # Variables for pkg-config files set(prefix "${CMAKE_INSTALL_PREFIX}") diff --git a/cmake/policies.cmake b/cmake/policies.cmake new file mode 100644 index 00000000..914d69a6 --- /dev/null +++ b/cmake/policies.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0054 NEW) + diff --git a/tests/rpc/client_test.cc b/tests/rpc/client_test.cc index 36363a1b..bf44e107 100644 --- a/tests/rpc/client_test.cc +++ b/tests/rpc/client_test.cc @@ -4,8 +4,8 @@ #include "rpc/server.h" #include "rpc/rpc_error.h" #include "testutils.h" -#include "format.h" +#include #include #include @@ -88,10 +88,12 @@ TEST_F(client_test, timeout_right_msg) { client.call("sleep", short_timeout + 10); FAIL() << "There was no exception thrown."; } catch (rpc::timeout &t) { - auto expected_msg = RPCLIB_FMT::format( - "rpc::timeout: Timeout of {}ms while calling RPC function '{}'", - *client.get_timeout(), "sleep"); - EXPECT_TRUE(str_match(t.what(), expected_msg)); + std::stringstream ss; + ss + << "rpc::timeout: Timeout of " + << *client.get_timeout() + << "ms while calling RPC function 'sleep'"; + EXPECT_TRUE(str_match(t.what(), ss.str())); } } From 075e528f00184878d1913cd0f3a2eada5eadc728 Mon Sep 17 00:00:00 2001 From: sztomi Date: Sun, 17 Sep 2017 23:36:48 +0200 Subject: [PATCH 18/24] cmake: modularize cmake script (#94) --- CMakeLists.txt | 46 +++++++------------------------------------- tests/CMakeLists.txt | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 39 deletions(-) create mode 100644 tests/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 6510d584..6ade3e34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,7 @@ elseif (APPLE) set(RPCLIB_OS_DEF "RPCLIB_MAC") endif() +set(RPCLIB_DEPENDENCIES "${CMAKE_CURRENT_LIST_DIR}/dependencies") # This function sets the rpclib-specific flags that are used for # development. You do not need this in your project. Instead, # Findrpclib.cmake supplies a (possibly empty) RPCLIB_EXTRA_FLAGS variable @@ -153,7 +154,7 @@ function(set_rpclib_flags TARGET) ) target_include_directories( ${TARGET} SYSTEM - PRIVATE dependencies/include + PRIVATE ${RPCLIB_DEPENDENCIES}/include ) endfunction() @@ -173,12 +174,12 @@ file(GLOB_RECURSE RPCLIB_HEADERS include/rpc/*.h include/msgpack/*.hpp) file(GLOB_RECURSE DEP_HEADERS - dependencies/include/*.h - dependencies/include/*.hpp) + ${RPCLIB_DEPENDENCIES}/include/*.h + ${RPCLIB_DEP_LIBRARIDEPENDENCIES}/include/*.hpp) set(DEP_SOURCES - dependencies/src/format.cc - dependencies/src/posix.cc) + ${RPCLIB_DEPENDENCIES}/src/format.cc + ${RPCLIB_DEPENDENCIES}/src/posix.cc) add_library(${PROJECT_NAME} lib/rpc/dispatcher.cc @@ -255,40 +256,7 @@ endif() # Unit tests # if(RPCLIB_BUILD_TESTS) - set(TEST_PROJECT_NAME ${CMAKE_PROJECT_NAME}_test) - set(TEST_SOURCES - dependencies/src/gmock-gtest-all.cc - tests/testmain.cc - tests/testutils.h - tests/rpc/dispatcher_test.cc - tests/rpc/client_test.cc - tests/rpc/response_test.cc - tests/rpc/server_test.cc - tests/rpc/this_handler_test.cc - tests/rpc/this_session_test.cc - tests/rpc/server_session_test.cc - tests/rpc/this_server_test.cc) - - - add_executable(${TEST_PROJECT_NAME} ${TEST_SOURCES}) - target_include_directories(${TEST_PROJECT_NAME} - SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests" - PRIVATE "dependencies/include") - target_link_libraries( - ${TEST_PROJECT_NAME} - ${PROJECT_NAME} - ${RPCLIB_DEP_LIBRARIES}) - - # Set less strict warning for tests, since google test is not quite - # warning-clean - if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_OPTION) - target_compile_options(${TEST_PROJECT_NAME} PRIVATE -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function - -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default - -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef - -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion) - endif() - + add_subdirectory(tests) endif() # diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 00000000..fee0fa68 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,34 @@ + set(TEST_PROJECT_NAME ${CMAKE_PROJECT_NAME}_test) + set(TEST_SOURCES + ${RPCLIB_DEPENDENCIES}/src/gmock-gtest-all.cc + testmain.cc + testutils.h + rpc/dispatcher_test.cc + rpc/client_test.cc + rpc/response_test.cc + rpc/server_test.cc + rpc/this_handler_test.cc + rpc/this_session_test.cc + rpc/server_session_test.cc + rpc/this_server_test.cc) + + + add_executable(${TEST_PROJECT_NAME} ${TEST_SOURCES}) + target_include_directories(${TEST_PROJECT_NAME} + SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests" + PRIVATE "${RPCLIB_DEPENDENCIES}/include") + target_link_libraries( + ${TEST_PROJECT_NAME} + ${PROJECT_NAME} + ${RPCLIB_DEP_LIBRARIES}) + + # Set less strict warning for tests, since google test is not quite + # warning-clean + if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_OPTION) + target_compile_options(${TEST_PROJECT_NAME} PRIVATE -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function + -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default + -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef + -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion) + endif() + From b6e62401b6a9b8db6748093a85d96a39f3e4a8f7 Mon Sep 17 00:00:00 2001 From: sztomi Date: Sun, 17 Sep 2017 23:44:41 +0200 Subject: [PATCH 19/24] cmake: removed set_rpclib_flags function (#94) --- CMakeLists.txt | 203 ++++++++++++++++++++++++------------------------- 1 file changed, 98 insertions(+), 105 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ade3e34..cc97c88a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,109 +54,6 @@ elseif (APPLE) endif() set(RPCLIB_DEPENDENCIES "${CMAKE_CURRENT_LIST_DIR}/dependencies") -# This function sets the rpclib-specific flags that are used for -# development. You do not need this in your project. Instead, -# Findrpclib.cmake supplies a (possibly empty) RPCLIB_EXTRA_FLAGS variable -# that you should append to your build flags. -function(set_rpclib_flags TARGET) - # clang is the compiler used for developing mainly, so - # this is where I set the highest warning level - # but feel free to add similar flags to GCC - set(RPCLIB_BUILD_FLAGS "") # reset flags - - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - - list(APPEND RPCLIB_BUILD_FLAGS - -Wall -pedantic -Weverything -Wno-c++98-compat - -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes - -Wno-undef -pthread) - - if(RPCLIB_CXX_STANDARD EQUAL 14) - target_compile_options(${TARGET} PUBLIC -std=c++14) - elseif(RPCLIB_CXX_STANDARD EQUAL 11) - target_compile_options(${TARGET} PUBLIC -std=c++11) - endif() - - set(RPCLIB_DEP_LIBRARIES "pthread") - - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - - list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -pthread) - if(RPCLIB_CXX_STANDARD EQUAL 14) - target_compile_options(${TARGET} PUBLIC -std=c++14) - elseif(RPCLIB_CXX_STANDARD EQUAL 11) - target_compile_options(${TARGET} PUBLIC -std=c++11) - endif() - - set(RPCLIB_DEP_LIBRARIES "pthread") - - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - - target_compile_definitions(${TARGET} PRIVATE - "WIN32_LEAN_AND_MEAN" - "NOMINMAX" - "VC_EXTRALEAN" - "_CRT_SECURE_NO_WARNINGS" - "_CRT_NONSTDC_NO_DEPRECATE" - "_WIN32_WINNT=0x0501" - "_GNU_SOURCE" - "ASIO_HAS_STD_ADDRESSOF" - "ASIO_HAS_STD_ARRAY" - "ASIO_HAS_CSTDINT" - "ASIO_HAS_STD_SHARED_PTR" - "ASIO_HAS_STD_TYPE_TRAITS") - - endif() - - if(RPCLIB_ENABLE_COVERAGE) - if(MSVC) - message(FATAL_ERROR "Coverage is only supported with non-MS compilers") - endif() - target_compile_options(${TARGET} PUBLIC "--coverage") - # yes, this is ugly as "--coverage" is not a library, but a flag - # however, this does not work with the LINK_FLAGS target property - list(APPEND RPCLIB_DEP_LIBRARIES "--coverage") - endif() - - if (RPCLIB_EXTRA_BUILD_FLAGS) - list(APPEND RPCLIB_BUILD_FLAGS ${RPCLIB_EXTRA_BUILD_FLAGS}) - endif() - - target_compile_definitions(${TARGET} PRIVATE - "${RPCLIB_COMPILE_DEFINITIONS}" - "${RPCLIB_ARCH_DEF}" - "${RPCLIB_OS_DEF}" - "ASIO_STANDALONE" - "RPCLIB_ASIO=clmdep_asio" - "RPCLIB_FMT=clmdep_fmt") - target_compile_definitions(${TARGET} PUBLIC - "RPCLIB_MSGPACK=clmdep_msgpack") - - if(RPCLIB_ENABLE_LOGGING) - target_compile_definitions(${TARGET} PRIVATE "RPCLIB_ENABLE_LOGGING") - endif() - - if(RPCLIB_BUILD_FLAGS) - target_compile_options(${TARGET} PRIVATE ${RPCLIB_BUILD_FLAGS}) - endif() - - if(RPCLIB_COMPILE_DEFINITIONS) - set_target_properties(${TARGET} - PROPERTIES - COMPILE_DEFINITIONS "${RPCLIB_COMPILE_DEFINITIONS}") - endif() - - target_link_libraries(${TARGET} ${RPCLIB_DEP_LIBRARIES}) - target_include_directories( - ${TARGET} PUBLIC - $ - $ - ) - target_include_directories( - ${TARGET} SYSTEM - PRIVATE ${RPCLIB_DEPENDENCIES}/include - ) -endfunction() configure_file( "${PROJECT_SOURCE_DIR}/include/rpc/version.h.in" @@ -197,7 +94,103 @@ add_library(${PROJECT_NAME} ${DEP_HEADERS} ${RPCLIB_HEADERS}) -set_rpclib_flags(${PROJECT_NAME}) +# clang is the compiler used for developing mainly, so +# this is where I set the highest warning level +# but feel free to add similar flags to GCC +set(RPCLIB_BUILD_FLAGS "") # reset flags + +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + + list(APPEND RPCLIB_BUILD_FLAGS + -Wall -pedantic -Weverything -Wno-c++98-compat + -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes + -Wno-undef -pthread) + + if(RPCLIB_CXX_STANDARD EQUAL 14) + target_compile_options(${PROJECT_NAME} PUBLIC -std=c++14) + elseif(RPCLIB_CXX_STANDARD EQUAL 11) + target_compile_options(${PROJECT_NAME} PUBLIC -std=c++11) + endif() + + set(RPCLIB_DEP_LIBRARIES "pthread") + +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + + list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -pthread) + if(RPCLIB_CXX_STANDARD EQUAL 14) + target_compile_options(${PROJECT_NAME} PUBLIC -std=c++14) + elseif(RPCLIB_CXX_STANDARD EQUAL 11) + target_compile_options(${PROJECT_NAME} PUBLIC -std=c++11) + endif() + + set(RPCLIB_DEP_LIBRARIES "pthread") + +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + + target_compile_definitions(${PROJECT_NAME} PRIVATE + "WIN32_LEAN_AND_MEAN" + "NOMINMAX" + "VC_EXTRALEAN" + "_CRT_SECURE_NO_WARNINGS" + "_CRT_NONSTDC_NO_DEPRECATE" + "_WIN32_WINNT=0x0501" + "_GNU_SOURCE" + "ASIO_HAS_STD_ADDRESSOF" + "ASIO_HAS_STD_ARRAY" + "ASIO_HAS_CSTDINT" + "ASIO_HAS_STD_SHARED_PTR" + "ASIO_HAS_STD_TYPE_TRAITS") + +endif() + +if(RPCLIB_ENABLE_COVERAGE) + if(MSVC) + message(FATAL_ERROR "Coverage is only supported with non-MS compilers") + endif() + target_compile_options(${PROJECT_NAME} PUBLIC "--coverage") + # yes, this is ugly as "--coverage" is not a library, but a flag + # however, this does not work with the LINK_FLAGS target property + list(APPEND RPCLIB_DEP_LIBRARIES "--coverage") +endif() + +if (RPCLIB_EXTRA_BUILD_FLAGS) + list(APPEND RPCLIB_BUILD_FLAGS ${RPCLIB_EXTRA_BUILD_FLAGS}) +endif() + +target_compile_definitions(${PROJECT_NAME} PRIVATE + "${RPCLIB_COMPILE_DEFINITIONS}" + "${RPCLIB_ARCH_DEF}" + "${RPCLIB_OS_DEF}" + "ASIO_STANDALONE" + "RPCLIB_ASIO=clmdep_asio" + "RPCLIB_FMT=clmdep_fmt") +target_compile_definitions(${PROJECT_NAME} PUBLIC + "RPCLIB_MSGPACK=clmdep_msgpack") + +if(RPCLIB_ENABLE_LOGGING) + target_compile_definitions(${PROJECT_NAME} PRIVATE "RPCLIB_ENABLE_LOGGING") +endif() + +if(RPCLIB_BUILD_FLAGS) + target_compile_options(${PROJECT_NAME} PRIVATE ${RPCLIB_BUILD_FLAGS}) +endif() + +if(RPCLIB_COMPILE_DEFINITIONS) + set_target_properties(${PROJECT_NAME} + PROPERTIES + COMPILE_DEFINITIONS "${RPCLIB_COMPILE_DEFINITIONS}") +endif() + +target_link_libraries(${PROJECT_NAME} ${RPCLIB_DEP_LIBRARIES}) +target_include_directories( + ${PROJECT_NAME} PUBLIC + $ + $ + ) +target_include_directories( + ${PROJECT_NAME} SYSTEM + PRIVATE ${RPCLIB_DEPENDENCIES}/include + ) # When building via conan, respect the compilation settings. if ("${CONAN_LINK_RUNTIME}" STREQUAL "/MT") @@ -246,7 +239,7 @@ install(DIRECTORY include/ if(RPCLIB_GENERATE_COMPDB) set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") # for YCM - add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + add_custom_command(PROJECT_NAME ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_BINARY_DIR}/../compile_commands.json) From 8b6bf8fa41c9bb876c00af2d2c94d05d92a720c3 Mon Sep 17 00:00:00 2001 From: sztomi Date: Mon, 18 Sep 2017 00:09:05 +0200 Subject: [PATCH 20/24] cmake: simplified per-compiler config --- CMakeLists.txt | 48 ++++++++++++++++-------------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc97c88a..35aa1803 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,38 +94,9 @@ add_library(${PROJECT_NAME} ${DEP_HEADERS} ${RPCLIB_HEADERS}) -# clang is the compiler used for developing mainly, so -# this is where I set the highest warning level -# but feel free to add similar flags to GCC set(RPCLIB_BUILD_FLAGS "") # reset flags -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - - list(APPEND RPCLIB_BUILD_FLAGS - -Wall -pedantic -Weverything -Wno-c++98-compat - -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes - -Wno-undef -pthread) - - if(RPCLIB_CXX_STANDARD EQUAL 14) - target_compile_options(${PROJECT_NAME} PUBLIC -std=c++14) - elseif(RPCLIB_CXX_STANDARD EQUAL 11) - target_compile_options(${PROJECT_NAME} PUBLIC -std=c++11) - endif() - - set(RPCLIB_DEP_LIBRARIES "pthread") - -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - - list(APPEND RPCLIB_BUILD_FLAGS -Wall -pedantic -pthread) - if(RPCLIB_CXX_STANDARD EQUAL 14) - target_compile_options(${PROJECT_NAME} PUBLIC -std=c++14) - elseif(RPCLIB_CXX_STANDARD EQUAL 11) - target_compile_options(${PROJECT_NAME} PUBLIC -std=c++11) - endif() - - set(RPCLIB_DEP_LIBRARIES "pthread") - -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") target_compile_definitions(${PROJECT_NAME} PRIVATE "WIN32_LEAN_AND_MEAN" @@ -141,14 +112,27 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") "ASIO_HAS_STD_SHARED_PTR" "ASIO_HAS_STD_TYPE_TRAITS") +else() + target_compile_options(${PROJECT_NAME} PUBLIC + -std=c++${RPCLIB_CXX_STANDARD}) +endif() + +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + # clang is the compiler used for developing mainly, so + # this is where I set the highest warning level + list(APPEND RPCLIB_BUILD_FLAGS + -Wall -pedantic -Weverything -Wno-c++98-compat + -Wno-c++98-compat-pedantic -Wno-padded -Wno-missing-prototypes + -Wno-undef -pthread) endif() + if(RPCLIB_ENABLE_COVERAGE) if(MSVC) message(FATAL_ERROR "Coverage is only supported with non-MS compilers") endif() target_compile_options(${PROJECT_NAME} PUBLIC "--coverage") - # yes, this is ugly as "--coverage" is not a library, but a flag + # yes, this is ugly as "--coverage" is not a library, but a flag. # however, this does not work with the LINK_FLAGS target property list(APPEND RPCLIB_DEP_LIBRARIES "--coverage") endif() @@ -164,6 +148,7 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE "ASIO_STANDALONE" "RPCLIB_ASIO=clmdep_asio" "RPCLIB_FMT=clmdep_fmt") + target_compile_definitions(${PROJECT_NAME} PUBLIC "RPCLIB_MSGPACK=clmdep_msgpack") @@ -265,7 +250,6 @@ if(RPCLIB_BUILD_EXAMPLES) add_subdirectory(examples/calculator) endif() - # # Cmake Package # From 97db6437ae8b45cdde2c550031917f64f54322ef Mon Sep 17 00:00:00 2001 From: sztomi Date: Mon, 18 Sep 2017 00:24:57 +0200 Subject: [PATCH 21/24] cmake: extracted msvc-specific logic (#94) --- CMakeLists.txt | 77 +++++++--------------------------------- cmake/msvc_support.cmake | 55 ++++++++++++++++++++++++++++ tests/CMakeLists.txt | 3 +- 3 files changed, 68 insertions(+), 67 deletions(-) create mode 100644 cmake/msvc_support.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 35aa1803..6819cb40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ project(rpc VERSION 3.0.0) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") include(policies) +include(msvc_support) # # Options @@ -27,6 +28,9 @@ option(RPCLIB_MSVC_STATIC_RUNTIME "MSVC only: build with /MT instead of /MD" OFF) +# Perform steps and checks required for MSVC support +rpclib_msvc_support() + # # Other configuration values # @@ -37,6 +41,13 @@ set(RPCLIB_DEFAULT_BUFFER_SIZE "1024 << 10" set(RPCLIB_CXX_STANDARD 11 CACHE STRING "C++ version used to build rpclib (Currently: Only 11 and 14 supported)") +if(RPCLIB_GENERATE_COMPDB) + set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") # for YCM + add_custom_command(PROJECT_NAME ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_BINARY_DIR}/../compile_commands.json) +endif() + if(NOT ${RPCLIB_CXX_STANDARD} EQUAL 14 AND NOT ${RPCLIB_CXX_STANDARD} EQUAL 11) message(fatal_error "Unsupported C++ standard: ${RPCLIB_CXX_STANDARD}") @@ -96,23 +107,7 @@ add_library(${PROJECT_NAME} set(RPCLIB_BUILD_FLAGS "") # reset flags -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - - target_compile_definitions(${PROJECT_NAME} PRIVATE - "WIN32_LEAN_AND_MEAN" - "NOMINMAX" - "VC_EXTRALEAN" - "_CRT_SECURE_NO_WARNINGS" - "_CRT_NONSTDC_NO_DEPRECATE" - "_WIN32_WINNT=0x0501" - "_GNU_SOURCE" - "ASIO_HAS_STD_ADDRESSOF" - "ASIO_HAS_STD_ARRAY" - "ASIO_HAS_CSTDINT" - "ASIO_HAS_STD_SHARED_PTR" - "ASIO_HAS_STD_TYPE_TRAITS") - -else() +if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") target_compile_options(${PROJECT_NAME} PUBLIC -std=c++${RPCLIB_CXX_STANDARD}) endif() @@ -126,11 +121,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") -Wno-undef -pthread) endif() - if(RPCLIB_ENABLE_COVERAGE) - if(MSVC) - message(FATAL_ERROR "Coverage is only supported with non-MS compilers") - endif() target_compile_options(${PROJECT_NAME} PUBLIC "--coverage") # yes, this is ugly as "--coverage" is not a library, but a flag. # however, this does not work with the LINK_FLAGS target property @@ -177,41 +168,6 @@ target_include_directories( PRIVATE ${RPCLIB_DEPENDENCIES}/include ) -# When building via conan, respect the compilation settings. -if ("${CONAN_LINK_RUNTIME}" STREQUAL "/MT") - set(RPCLIB_MSVC_STATIC_RUNTIME ON) -endif() - -# MSVC static runtime support -# -# While this pollutes global flags (when using add_library), you would not want to -# build with a disparity anyway. (also, CMake still has no support for this, so you -# would end up doing something like this yourself). -if (RPCLIB_MSVC_STATIC_RUNTIME) - # Set compiler options. - set(variables - CMAKE_C_FLAGS_DEBUG - CMAKE_C_FLAGS_MINSIZEREL - CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS_DEBUG - CMAKE_CXX_FLAGS_MINSIZEREL - CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_RELWITHDEBINFO - ) - - message(STATUS - "MSVC -> forcing use of statically-linked runtime." - ) - - foreach(variable ${variables}) - if(${variable} MATCHES "/MD") - string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}") - endif() - endforeach() - -endif() - install(TARGETS ${PROJECT_NAME} DESTINATION lib EXPORT rpclibTargets) install(DIRECTORY include/ DESTINATION include @@ -221,15 +177,6 @@ install(DIRECTORY include/ PATTERN "*.inl" PATTERN "*.in" EXCLUDE) -if(RPCLIB_GENERATE_COMPDB) - - set(CMAKE_EXPORT_COMPILE_COMMANDS "ON") # for YCM - add_custom_command(PROJECT_NAME ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E - copy ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_BINARY_DIR}/../compile_commands.json) - -endif() - # # Unit tests # diff --git a/cmake/msvc_support.cmake b/cmake/msvc_support.cmake new file mode 100644 index 00000000..a063bf8c --- /dev/null +++ b/cmake/msvc_support.cmake @@ -0,0 +1,55 @@ + +function(rpclib_msvc_support) + if(MSVC) + # When building via conan, respect the compilation settings. + if ("${CONAN_LINK_RUNTIME}" STREQUAL "/MT") + set(RPCLIB_MSVC_STATIC_RUNTIME ON) + endif() + + if(RPCLIB_ENABLE_COVERAGE) + message(FATAL_ERROR "Coverage is only supported with non-MS compilers") + endif() + + target_compile_definitions(${PROJECT_NAME} PRIVATE + "WIN32_LEAN_AND_MEAN" + "NOMINMAX" + "VC_EXTRALEAN" + "_CRT_SECURE_NO_WARNINGS" + "_CRT_NONSTDC_NO_DEPRECATE" + "_WIN32_WINNT=0x0501" + "_GNU_SOURCE" + "ASIO_HAS_STD_ADDRESSOF" + "ASIO_HAS_STD_ARRAY" + "ASIO_HAS_CSTDINT" + "ASIO_HAS_STD_SHARED_PTR" + "ASIO_HAS_STD_TYPE_TRAITS") + + # MSVC static runtime support + # + # While this pollutes global flags (when using add_library), you would not want to + # build with a disparity anyway. (also, CMake still has no support for this, so you + # would end up doing something like this yourself). + if (RPCLIB_MSVC_STATIC_RUNTIME) + set(variables + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO + ) + message(STATUS + "MSVC -> forcing use of statically-linked runtime." + ) + + foreach(variable ${variables}) + if(${variable} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}") + endif() + endforeach() + + endif() + endif() +endfunction() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index fee0fa68..0e00d15d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -19,8 +19,7 @@ PRIVATE "${RPCLIB_DEPENDENCIES}/include") target_link_libraries( ${TEST_PROJECT_NAME} - ${PROJECT_NAME} - ${RPCLIB_DEP_LIBRARIES}) + ${PROJECT_NAME}) # Set less strict warning for tests, since google test is not quite # warning-clean From 35a029933340e5ee782b2134ed655d90bd0abcca Mon Sep 17 00:00:00 2001 From: sztomi Date: Mon, 18 Sep 2017 10:31:47 +0200 Subject: [PATCH 22/24] cmake: use cmake from conan on Travis CI (#94) --- .travis.yml | 4 ++++ CMakeLists.txt | 2 +- conanfile.txt | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 conanfile.txt diff --git a/.travis.yml b/.travis.yml index de4fa969..8a12bfe4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,9 +35,13 @@ install: - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update ; fi - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install sfml llvm@3.8 gcc@5 ; fi - if [ "$TRAVIS_OS_NAME" == "linux" ]; then pip install --user cpp-coveralls ; fi + - pip install --user conan + - conan remote add conan-community https://api.bintray.com/conan/conan-community/conan script: - mkdir build ; cd build + - conan install .. -r conan-community + - . ./activate.sh - if [ "$TRAVIS_OS_NAME" == "osx" ]; then export COV=OFF ;else export COV=ON ; fi - cmake -DRPCLIB_ENABLE_COVERAGE=$COV -DRPCLIB_BUILD_TESTS=ON -DRPCLIB_CXX_STANDARD=$RPCLIB_CXX_STANDARD -DCMAKE_INSTALL_PREFIX=../install .. - cmake --build . --config $BUILD_TYPE diff --git a/CMakeLists.txt b/CMakeLists.txt index 6819cb40..7f120e4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.9.2) +cmake_minimum_required(VERSION 3.9.0) project(rpc VERSION 3.0.0) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") diff --git a/conanfile.txt b/conanfile.txt new file mode 100644 index 00000000..0911f43d --- /dev/null +++ b/conanfile.txt @@ -0,0 +1,5 @@ +[requires] +cmake_installer/1.0@conan/stable + +[generators] +virtualenv From de8eb1ebaaf3ed5dde5d1614e2b7eb450947a2aa Mon Sep 17 00:00:00 2001 From: sztomi Date: Mon, 18 Sep 2017 11:09:38 +0200 Subject: [PATCH 23/24] cmake: use pthreads when needed --- tests/CMakeLists.txt | 60 +++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0e00d15d..73e522a4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,33 +1,35 @@ - set(TEST_PROJECT_NAME ${CMAKE_PROJECT_NAME}_test) - set(TEST_SOURCES - ${RPCLIB_DEPENDENCIES}/src/gmock-gtest-all.cc - testmain.cc - testutils.h - rpc/dispatcher_test.cc - rpc/client_test.cc - rpc/response_test.cc - rpc/server_test.cc - rpc/this_handler_test.cc - rpc/this_session_test.cc - rpc/server_session_test.cc - rpc/this_server_test.cc) +set(TEST_PROJECT_NAME ${CMAKE_PROJECT_NAME}_test) +set(TEST_SOURCES + ${RPCLIB_DEPENDENCIES}/src/gmock-gtest-all.cc + testmain.cc + testutils.h + rpc/dispatcher_test.cc + rpc/client_test.cc + rpc/response_test.cc + rpc/server_test.cc + rpc/this_handler_test.cc + rpc/this_session_test.cc + rpc/server_session_test.cc + rpc/this_server_test.cc) +set(THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads REQUIRED) - add_executable(${TEST_PROJECT_NAME} ${TEST_SOURCES}) - target_include_directories(${TEST_PROJECT_NAME} - SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests" - PRIVATE "${RPCLIB_DEPENDENCIES}/include") - target_link_libraries( - ${TEST_PROJECT_NAME} - ${PROJECT_NAME}) +add_executable(${TEST_PROJECT_NAME} ${TEST_SOURCES}) - # Set less strict warning for tests, since google test is not quite - # warning-clean - if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_OPTION) - target_compile_options(${TEST_PROJECT_NAME} PRIVATE -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function - -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default - -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef - -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion) - endif() +target_include_directories(${TEST_PROJECT_NAME} + SYSTEM PRIVATE "${PROJECT_SOURCE_DIR}/tests" + PRIVATE "${RPCLIB_DEPENDENCIES}/include") + +target_link_libraries(${TEST_PROJECT_NAME} ${PROJECT_NAME} Threads::Threads) + +# Set less strict warning for tests, since google test is not quite +# warning-clean +if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") + get_target_property(ORIGINAL_FLAGS ${TEST_PROJECT_NAME} COMPILE_OPTION) + target_compile_options(${TEST_PROJECT_NAME} PRIVATE -Wno-sign-conversion -Wno-weak-vtables -Wno-unused-member-function + -Wno-global-constructors -Wno-used-but-marked-unused -Wno-covered-switch-default + -Wno-missing-variable-declarations -Wno-deprecated -Wno-unused-macros -Wno-undef + -Wno-exit-time-destructors -Wno-switch-enum -Wno-format-nonliteral -Wno-unused-parameter -Wno-disabled-macro-expansion) +endif() From 7ce6294b03d08165b0cb6f678d8ca0add663a7c4 Mon Sep 17 00:00:00 2001 From: sztomi Date: Mon, 18 Sep 2017 16:49:45 +0200 Subject: [PATCH 24/24] ci: removed osx and debug configs TravisCI OSX builds take forever to start so I'm removing them in hopes of better build times. Debug builds are removed for a similar reason. --- .travis.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8a12bfe4..45e75ae8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,12 +2,9 @@ language: c++ os: - linux - - osx env: matrix: - - RPCLIB_CXX_STANDARD=14 BUILD_TYPE=Debug - - RPCLIB_CXX_STANDARD=11 BUILD_TYPE=Debug - RPCLIB_CXX_STANDARD=14 BUILD_TYPE=Release - RPCLIB_CXX_STANDARD=11 BUILD_TYPE=Release @@ -32,9 +29,7 @@ addons: install: - if [ "$CXX" == "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi - if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.8" CC="clang-3.8"; fi - - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update ; fi - - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install sfml llvm@3.8 gcc@5 ; fi - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then pip install --user cpp-coveralls ; fi + - pip install --user cpp-coveralls - pip install --user conan - conan remote add conan-community https://api.bintray.com/conan/conan-community/conan @@ -42,11 +37,10 @@ script: - mkdir build ; cd build - conan install .. -r conan-community - . ./activate.sh - - if [ "$TRAVIS_OS_NAME" == "osx" ]; then export COV=OFF ;else export COV=ON ; fi - cmake -DRPCLIB_ENABLE_COVERAGE=$COV -DRPCLIB_BUILD_TESTS=ON -DRPCLIB_CXX_STANDARD=$RPCLIB_CXX_STANDARD -DCMAKE_INSTALL_PREFIX=../install .. - cmake --build . --config $BUILD_TYPE - cmake --build . --target install after_success: - ./output/bin/rpc_test - - if [ "$TRAVIS_OS_NAME" == "linux" ]; then coveralls --exclude dependencies --exclude test --exclude include/rpc/msgpack --exclude include/rcp/msgpack.hpp --gcov /usr/bin/gcov-5 ; fi + - coveralls --exclude dependencies --exclude test --exclude include/rpc/msgpack --exclude include/rcp/msgpack.hpp --gcov /usr/bin/gcov-5