From 6046d5c6666133f7ae36ffa13002b2c571e88650 Mon Sep 17 00:00:00 2001 From: Stefan Herbrechtsmeier Date: Sun, 25 Aug 2019 14:39:18 +0200 Subject: [PATCH 1/2] cmake: Remove alias from package config The cmake target of an alias may not be an Imported Target. Always build the msgpackc target and only build the msgpackc-static target if both should be build to fix issue #801. Thereby the type (shared or static) of the msgpackc target depends on the build configuration. --- CMakeLists.txt | 25 +++++++++++-------------- example/c/CMakeLists.txt | 11 +---------- msgpack-config.cmake.in | 7 ++----- 3 files changed, 14 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 01f31225..e16d63b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,6 +181,7 @@ ELSE () IF (NOT DEFINED MSGPACK_ENABLE_STATIC) SET (MSGPACK_ENABLE_STATIC ON) ENDIF () + SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED}) ENDIF () OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON) @@ -209,8 +210,9 @@ CONFIGURE_FILE ( @ONLY ) -IF (MSGPACK_ENABLE_SHARED) - ADD_LIBRARY (msgpackc SHARED + +IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) + ADD_LIBRARY (msgpackc ${msgpackc_SOURCES} ${msgpackc_HEADERS} ) @@ -238,7 +240,7 @@ IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSIO ) ENDIF () -IF (MSGPACK_ENABLE_STATIC) +IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) ADD_LIBRARY (msgpackc-static STATIC ${msgpackc_SOURCES} ${msgpackc_HEADERS} @@ -253,11 +255,6 @@ IF (MSGPACK_ENABLE_STATIC) ${CMAKE_CURRENT_SOURCE_DIR} ) - IF (NOT MSGPACK_ENABLE_SHARED) - # Add alias for subdirectories - ADD_LIBRARY (msgpackc ALIAS msgpackc-static) - ENDIF () - SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc") IF (MSGPACK_ENABLE_SHARED) @@ -291,19 +288,19 @@ IF (MSGPACK_BUILD_TESTS) ENDIF () IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - IF (MSGPACK_ENABLE_SHARED) + IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra -DPIC") ENDIF () - IF (MSGPACK_ENABLE_STATIC) + IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra" ) ENDIF () ENDIF () IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - IF (MSGPACK_ENABLE_SHARED) + IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") ENDIF () - IF (MSGPACK_ENABLE_STATIC) + IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") ENDIF () ENDIF () @@ -337,7 +334,7 @@ IF (MSGPACK_BUILD_EXAMPLES) ADD_SUBDIRECTORY (example) ENDIF () -IF (MSGPACK_ENABLE_SHARED) +IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) SET (MSGPACK_INSTALLTARGETS msgpackc) ENDIF () @@ -345,7 +342,7 @@ IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSIO LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-cxx) ENDIF () -IF (MSGPACK_ENABLE_STATIC) +IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-static) ENDIF () diff --git a/example/c/CMakeLists.txt b/example/c/CMakeLists.txt index eee47a60..9333cb54 100644 --- a/example/c/CMakeLists.txt +++ b/example/c/CMakeLists.txt @@ -1,12 +1,3 @@ -IF (MSGPACK_ENABLE_SHARED) - SET (MSGPACK_LIB msgpackc) -ENDIF () - -IF (MSGPACK_ENABLE_STATIC) - SET (MSGPACK_LIB msgpackc-static) -ENDIF () - - LIST (APPEND exec_PROGRAMS lib_buffer_unpack.c simple_c.c @@ -22,7 +13,7 @@ FOREACH (source_file ${exec_PROGRAMS}) ${source_file} ) TARGET_LINK_LIBRARIES (${source_file_we} - ${MSGPACK_LIB} + msgpackc ) 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") diff --git a/msgpack-config.cmake.in b/msgpack-config.cmake.in index c35e75b1..d93987a5 100644 --- a/msgpack-config.cmake.in +++ b/msgpack-config.cmake.in @@ -6,8 +6,9 @@ # # :: # -# msgpackc-static # msgpackc +# msgpackc-cxx +# msgpackc-static (optional) # @PACKAGE_INIT@ @@ -16,8 +17,4 @@ include(CMakeFindDependencyMacro) if(NOT TARGET msgpackc AND NOT TARGET msgpackc-static) include("${CMAKE_CURRENT_LIST_DIR}/msgpack-targets.cmake") - - if(NOT @MSGPACK_ENABLE_SHARED@) - add_library(msgpackc ALIAS msgpackc-static) - endif() endif() From 7761497778d084eb0172541b8517fa33fbb55dfd Mon Sep 17 00:00:00 2001 From: Stefan Herbrechtsmeier Date: Fri, 20 Sep 2019 22:45:37 +0200 Subject: [PATCH 2/2] ci: add cmake tests for installed and embedded build --- .travis.yml | 19 ++++++++++++ ci/build_cmake.sh | 35 +++++++++++++++++++++ ci/build_cmake_embedded.sh | 59 ++++++++++++++++++++++++++++++++++++ example/cmake/CMakeLists.txt | 17 +++++++++++ 4 files changed, 130 insertions(+) create mode 100755 ci/build_cmake_embedded.sh create mode 100644 example/cmake/CMakeLists.txt diff --git a/.travis.yml b/.travis.yml index 70068371..57243144 100644 --- a/.travis.yml +++ b/.travis.yml @@ -232,6 +232,25 @@ matrix: - clang-5.0 script: - CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}" GTEST_ROOT="${BASE}/gtest" BOOST_ROOT="${BASE}/boost" CTEST_OUTPUT_ON_FAILURE=1 MSGPACK_SAN="${SAN}" ci/build_regression.sh + - os: linux + compiler: gcc + env: ACTION="ci/build_cmake_embedded.sh" ARCH="64" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-multilib + - gcc-multilib + - gcc-7-multilib + - g++-7-multilib + - lib32stdc++6-6-dbg + - lib32gcc1 + - libc6-i386 + - lib32z1-dev + - zlib1g-dev + - bzip2 + - libc6-dbg script: diff --git a/ci/build_cmake.sh b/ci/build_cmake.sh index 820ec543..b78a44d8 100755 --- a/ci/build_cmake.sh +++ b/ci/build_cmake.sh @@ -72,4 +72,39 @@ then fi fi +if [ "${ARCH}" != "32" ] +then + mkdir install-test + + ret=$? + if [ $ret -ne 0 ] + then + exit $ret + fi + + cd install-test + + ret=$? + if [ $ret -ne 0 ] + then + exit $ret + fi + + cmake -DCMAKE_PREFIX_PATH=`pwd`/../install/usr/local/lib/cmake ../../example/cmake + + ret=$? + if [ $ret -ne 0 ] + then + exit $ret + fi + + make + + ret=$? + if [ $ret -ne 0 ] + then + exit $ret + fi +fi + exit 0 diff --git a/ci/build_cmake_embedded.sh b/ci/build_cmake_embedded.sh new file mode 100755 index 00000000..ed94f4e6 --- /dev/null +++ b/ci/build_cmake_embedded.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +cd example/cmake + +ret=$? +if [ $ret -ne 0 ] +then + exit $ret +fi + +rm -f msgpack-c + +ret=$? +if [ $ret -ne 0 ] +then + exit $ret +fi + +ln -s ../.. msgpack-c + +ret=$? +if [ $ret -ne 0 ] +then + exit $ret +fi + +mkdir build + +ret=$? +if [ $ret -ne 0 ] +then + exit $ret +fi + +cd build + +ret=$? +if [ $ret -ne 0 ] +then + exit $ret +fi + +cmake -DEXAMPLE_MSGPACK_EMBEDDED=ON .. + +ret=$? +if [ $ret -ne 0 ] +then + exit $ret +fi + +make example example-static + +ret=$? +if [ $ret -ne 0 ] +then + exit $ret +fi + +exit 0 diff --git a/example/cmake/CMakeLists.txt b/example/cmake/CMakeLists.txt new file mode 100644 index 00000000..8c885ea5 --- /dev/null +++ b/example/cmake/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required (VERSION 3.0) +project (example) + +if(EXAMPLE_MSGPACK_EMBEDDED) + add_subdirectory(msgpack-c) + set(msgpack_DIR ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c) +endif() + +find_package(msgpack REQUIRED) + +add_executable (${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c) +target_link_libraries(${PROJECT_NAME} msgpackc) + +if(TARGET msgpackc-static) + add_executable (${PROJECT_NAME}-static ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c) + target_link_libraries(${PROJECT_NAME}-static msgpackc-static) +endif()