From 5f1d5e87220caa70a98dd7926e7b909e7a78712e Mon Sep 17 00:00:00 2001 From: James Nugent Date: Wed, 15 Jul 2015 18:06:59 -0500 Subject: [PATCH 1/3] Add MSGPACK_ENABLE_SHARED option, defaulting to ON This allows building just static libraries using the CMake build, which is useful if your product is entirely statically linked. By default there is no change to the output - MSGPACK_ENABLE_SHARED must be explicitly set to false to disable building the shared library. --- CMakeLists.txt | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bf0f32b5..99b0267c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,7 @@ IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND) ENDIF () OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON) +OPTION (MSGPACK_ENABLE_SHARED "Build shared libaries in addition to static libraries." ON) INCLUDE (CheckCXXSourceCompiles) CHECK_CXX_SOURCE_COMPILES (" @@ -177,10 +178,12 @@ INCLUDE_DIRECTORIES ( ${MSGPACK_BOOST_DIR} ) -ADD_LIBRARY (msgpack SHARED - ${msgpack_SOURCES} - ${msgpack_HEADERS} -) +IF (MSGPACK_ENABLE_SHARED) + ADD_LIBRARY (msgpack SHARED + ${msgpack_SOURCES} + ${msgpack_HEADERS} + ) +ENDIF () ADD_LIBRARY (msgpack-static STATIC ${msgpack_SOURCES} @@ -188,8 +191,10 @@ ADD_LIBRARY (msgpack-static STATIC ) SET_TARGET_PROPERTIES (msgpack-static PROPERTIES OUTPUT_NAME "msgpack") -SET_TARGET_PROPERTIES (msgpack PROPERTIES IMPORT_SUFFIX "_import.lib") -SET_TARGET_PROPERTIES (msgpack PROPERTIES SOVERSION 3 VERSION 4.0.0) +IF (MSGPACK_ENABLE_SHARED) + SET_TARGET_PROPERTIES (msgpack PROPERTIES IMPORT_SUFFIX "_import.lib") + SET_TARGET_PROPERTIES (msgpack PROPERTIES SOVERSION 3 VERSION 4.0.0) +ENDIF () IF (MSGPACK_BUILD_TESTS) ENABLE_TESTING () @@ -201,7 +206,9 @@ IF (MSGPACK_BUILD_TESTS) ENDIF () IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - SET_PROPERTY (TARGET msgpack APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 -DPIC") + IF (MSGPACK_ENABLE_SHARED) + SET_PROPERTY (TARGET msgpack APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 -DPIC") + ENDIF () SET_PROPERTY (TARGET msgpack-static APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3" ) ENDIF () IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") @@ -220,7 +227,13 @@ IF (NOT DEFINED CMAKE_INSTALL_LIBDIR) SET(CMAKE_INSTALL_LIBDIR lib) ENDIF () -INSTALL (TARGETS msgpack msgpack-static DESTINATION ${CMAKE_INSTALL_LIBDIR}) +IF (MSGPACK_ENABLE_SHARED) + SET (MSGPACK_INSTALLTARGETS msgpack msgpack-static) +ELSE() + SET (MSGPACK_INSTALLTARGETS msgpack-static) +ENDIF () + +INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} DESTINATION ${CMAKE_INSTALL_LIBDIR}) INSTALL (DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX}) INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) From 60e737f6228e1caf4ba57c29a97605a70810860f Mon Sep 17 00:00:00 2001 From: James Nugent Date: Thu, 23 Jul 2015 22:10:41 -0400 Subject: [PATCH 2/3] Link against msgpack-static when shared disabled This commit causes the tests to be linked against the msgpack-static target if MSGPACK_ENABLE_SHARED is set to OFF. --- test/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 63ed6115..e7e27ce2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -50,6 +50,12 @@ IF (MSGPACK_CXX11) ) ENDIF () +IF (MSGPACK_ENABLE_SHARED) + SET (MSGPACK_TEST_LIB msgpack) +ELSE () + SET (MSGPACK_TEST_LIB msgpack-static) +ENDIF () + FOREACH (source_file ${check_PROGRAMS}) GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) ADD_EXECUTABLE ( @@ -57,7 +63,7 @@ FOREACH (source_file ${check_PROGRAMS}) ${source_file} ) TARGET_LINK_LIBRARIES (${source_file_we} - msgpack + ${MSGPACK_TEST_LIB} ${GTEST_BOTH_LIBRARIES} ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} From 840101640b8c54ca548cad68ebb9ac983cd09004 Mon Sep 17 00:00:00 2001 From: James Nugent Date: Thu, 23 Jul 2015 22:15:35 -0400 Subject: [PATCH 3/3] Extend CMake CI to build static libs only --- .travis.yml | 5 +++++ ci/build_cmake.sh | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f7009acd..6fde4714 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,6 +41,11 @@ env: - ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" - ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" - ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" + - ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" + - ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" SHARED="OFF" + - ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" + - ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" SHARED="OFF" + before_script: - export PATH=/usr/local/bin:$PATH diff --git a/ci/build_cmake.sh b/ci/build_cmake.sh index 1fca59c8..4f9505e7 100755 --- a/ci/build_cmake.sh +++ b/ci/build_cmake.sh @@ -44,7 +44,14 @@ else boost_dir="" fi -cmake $cpp11 $bit32 $boost $boost_dir .. +if [ "$5" = "OFF" ] +then + shared="-DMSGPACK_ENABLE_SHARED=OFF" +else + shared="" +fi + +cmake $cpp11 $bit32 $boost $boost_dir $shared .. ret=$? if [ $ret -ne 0 ]