diff --git a/CMakeLists.txt b/CMakeLists.txt index d4c1b4d1..f9762d1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,38 +156,54 @@ IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND AND NOT "${MSGPACK_FUZZ_REGRESS OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF) ENDIF () -IF (DEFINED BUILD_SHARED_LIBS) - IF (BUILD_SHARED_LIBS) - IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED) - MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS") - ENDIF () - SET (MSGPACK_ENABLE_SHARED ON) - IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC) - MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS") - ENDIF () - SET (MSGPACK_ENABLE_STATIC OFF) - ELSE () - IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED) - MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS") - ENDIF () - SET (MSGPACK_ENABLE_SHARED OFF) - IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC) - MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS") - ENDIF () - SET (MSGPACK_ENABLE_STATIC ON) - ENDIF () -ELSE () - IF (NOT DEFINED MSGPACK_ENABLE_SHARED) - SET (MSGPACK_ENABLE_SHARED ON) - ENDIF () - 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) +OPTION (MSGPACK_CXX_ONLY "Build only C++ libraries (header-only)." OFF) +IF (MSGPACK_CXX_ONLY) + IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED) + MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by MSGPACK_CXX_ONLY") + ENDIF () + SET (MSGPACK_ENABLE_SHARED OFF) + IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC) + MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by MSGPACK_CXX_ONLY") + ENDIF () + SET (MSGPACK_ENABLE_STATIC OFF) + IF (DEFINED MSGPACK_ENABLE_CXX AND NOT MSGPACK_ENABLE_CXX) + MESSAGE(WARNING "MSGPACK_ENABLE_CXX is overridden to ON by MSGPACK_CXX_ONLY") + ENDIF () + SET (MSGPACK_ENABLE_CXX ON) +ELSE () + IF (DEFINED BUILD_SHARED_LIBS) + IF (BUILD_SHARED_LIBS) + IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED) + MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS") + ENDIF () + SET (MSGPACK_ENABLE_SHARED ON) + IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC) + MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS") + ENDIF () + SET (MSGPACK_ENABLE_STATIC OFF) + ELSE () + IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED) + MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS") + ENDIF () + SET (MSGPACK_ENABLE_SHARED OFF) + IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC) + MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS") + ENDIF () + SET (MSGPACK_ENABLE_STATIC ON) + ENDIF () + ELSE () + IF (NOT DEFINED MSGPACK_ENABLE_SHARED) + SET (MSGPACK_ENABLE_SHARED ON) + ENDIF () + IF (NOT DEFINED MSGPACK_ENABLE_STATIC) + SET (MSGPACK_ENABLE_STATIC ON) + ENDIF () + SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED}) + ENDIF () +ENDIF () + INCLUDE (CheckCXXSourceCompiles) CHECK_CXX_SOURCE_COMPILES (" #include @@ -380,7 +396,7 @@ FOREACH (file ${msgpackc_HEADERS}) GET_FILENAME_COMPONENT (dir ${file} PATH) INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir}) ENDFOREACH () -IF (NOT MSVC) +IF (NOT MSGPACK_CXX_ONLY AND NOT MSVC) INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) ENDIF () @@ -454,17 +470,19 @@ CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" ) -INSTALL (EXPORT msgpack-targets - FILE - msgpack-targets.cmake - DESTINATION - "${CMAKE_INSTALL_CMAKEDIR}" -) +IF (NOT MSGPACK_CXX_ONLY) + INSTALL (EXPORT msgpack-targets + FILE + msgpack-targets.cmake + DESTINATION + "${CMAKE_INSTALL_CMAKEDIR}" + ) -INSTALL ( - FILES - "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake" - DESTINATION - "${CMAKE_INSTALL_CMAKEDIR}" -) + INSTALL ( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake" + DESTINATION + "${CMAKE_INSTALL_CMAKEDIR}" + ) +ENDIF () diff --git a/Files.cmake b/Files.cmake index e23a18d1..57622049 100644 --- a/Files.cmake +++ b/Files.cmake @@ -5,14 +5,11 @@ LIST (APPEND msgpackc_SOURCES src/vrefbuffer.c src/zone.c ) + +# For both C and C++ libraries LIST (APPEND msgpackc_HEADERS - include/msgpack.h include/msgpack/fbuffer.h - include/msgpack/gcc_atomic.h include/msgpack/object.h - include/msgpack/pack.h - include/msgpack/pack_define.h - include/msgpack/pack_template.h include/msgpack/predef.h include/msgpack/predef/architecture.h include/msgpack/predef/architecture/alpha.h @@ -152,20 +149,33 @@ LIST (APPEND msgpackc_HEADERS include/msgpack/predef/platform/windows_uwp.h include/msgpack/predef/version.h include/msgpack/predef/version_number.h - include/msgpack/sbuffer.h include/msgpack/sysdep.h - include/msgpack/timestamp.h - include/msgpack/unpack.h include/msgpack/unpack_define.h - include/msgpack/unpack_template.h - include/msgpack/util.h - include/msgpack/version.h include/msgpack/version_master.h - include/msgpack/vrefbuffer.h include/msgpack/zbuffer.h include/msgpack/zone.h ) + +IF (NOT MSGPACK_CXX_ONLY) + # Only for C library + LIST (APPEND msgpackc_HEADERS + include/msgpack.h + include/msgpack/gcc_atomic.h + include/msgpack/pack.h + include/msgpack/pack_define.h + include/msgpack/pack_template.h + include/msgpack/sbuffer.h + include/msgpack/timestamp.h + include/msgpack/unpack.h + include/msgpack/unpack_template.h + include/msgpack/util.h + include/msgpack/version.h + include/msgpack/vrefbuffer.h + ) +ENDIF () + IF (MSGPACK_ENABLE_CXX) + # Only for C++ library LIST (APPEND msgpackc_HEADERS include/msgpack.hpp include/msgpack/adaptor/adaptor_base.hpp diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index ea3c7db2..0c6e66fc 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,5 +1,9 @@ -ADD_SUBDIRECTORY (c) -ADD_SUBDIRECTORY (cpp03) -ADD_SUBDIRECTORY (cpp11) -ADD_SUBDIRECTORY (boost) -ADD_SUBDIRECTORY (x3) +IF (NOT MSGPACK_CXX_ONLY) + ADD_SUBDIRECTORY (c) +ENDIF () +IF (MSGPACK_ENABLE_CXX) + ADD_SUBDIRECTORY (cpp03) + ADD_SUBDIRECTORY (cpp11) + ADD_SUBDIRECTORY (boost) + ADD_SUBDIRECTORY (x3) +ENDIF () diff --git a/example/boost/CMakeLists.txt b/example/boost/CMakeLists.txt index cf7f4f86..5c2bcfa2 100644 --- a/example/boost/CMakeLists.txt +++ b/example/boost/CMakeLists.txt @@ -27,7 +27,7 @@ FOREACH (source_file ${exec_PROGRAMS}) ) TARGET_INCLUDE_DIRECTORIES (${source_file_we} PRIVATE - $ + $ ) TARGET_LINK_LIBRARIES (${source_file_we} ${Boost_SYSTEM_LIBRARY} diff --git a/example/cpp03/CMakeLists.txt b/example/cpp03/CMakeLists.txt index 4af7f6d1..156301c2 100644 --- a/example/cpp03/CMakeLists.txt +++ b/example/cpp03/CMakeLists.txt @@ -37,7 +37,7 @@ FOREACH (source_file ${exec_PROGRAMS}) ) TARGET_INCLUDE_DIRECTORIES (${source_file_we} PRIVATE - $ + $ ) 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") @@ -59,7 +59,7 @@ FOREACH (source_file ${with_pthread_PROGRAMS}) ) TARGET_INCLUDE_DIRECTORIES (${source_file_we} PRIVATE - $ + $ ) TARGET_LINK_LIBRARIES (${source_file_we} ${CMAKE_THREAD_LIBS_INIT} @@ -88,7 +88,7 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS}) ) TARGET_INCLUDE_DIRECTORIES (${source_file_we} PRIVATE - $ + $ ) LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) TARGET_LINK_LIBRARIES (${source_file_we} diff --git a/example/cpp11/CMakeLists.txt b/example/cpp11/CMakeLists.txt index eb085ed1..a14c2d4a 100644 --- a/example/cpp11/CMakeLists.txt +++ b/example/cpp11/CMakeLists.txt @@ -22,7 +22,7 @@ IF (MSGPACK_CXX11 OR MSGPACK_CXX17) ) TARGET_INCLUDE_DIRECTORIES (${source_file_we} PRIVATE - $ + $ ) 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/example/x3/CMakeLists.txt b/example/x3/CMakeLists.txt index 05725fb1..726b8c98 100644 --- a/example/x3/CMakeLists.txt +++ b/example/x3/CMakeLists.txt @@ -20,7 +20,7 @@ IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1) ) TARGET_INCLUDE_DIRECTORIES (${source_file_we} PRIVATE - $ + $ ) 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") @@ -46,7 +46,7 @@ IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1) ) TARGET_INCLUDE_DIRECTORIES (${source_file_we} PRIVATE - $ + $ ) TARGET_LINK_LIBRARIES (${source_file_we} ${Boost_CONTEXT_LIBRARY} diff --git a/make_file_list.sh b/make_file_list.sh index 772fe20b..ba980dae 100755 --- a/make_file_list.sh +++ b/make_file_list.sh @@ -1,21 +1,48 @@ -#!/bin/sh +#!/bin/bash + +c_headers=( + include/msgpack.h + include/msgpack/gcc_atomic.h + include/msgpack/pack.h + include/msgpack/pack_define.h + include/msgpack/pack_template.h + include/msgpack/sbuffer.h + include/msgpack/timestamp.h + include/msgpack/unpack.h + include/msgpack/unpack_template.h + include/msgpack/util.h + include/msgpack/version.h + include/msgpack/vrefbuffer.h +) + +rm -f c_headers.tmp +for hdr in ${c_headers[@]}; do + echo $hdr >> c_headers.tmp +done find src -name "*.c" | sed -e 's/\s\+/\n/g' | sort > srcs.tmp -find include -name "*.h" | sed -e 's/\s\+/\n/g' | sort > c_headers.tmp +find include -name "*.h" | grep -vFf c_headers.tmp | sed -e 's/\s\+/\n/g' | sort > c_cpp_headers.tmp find include -name "*.hpp" | sed -e 's/\s\+/\n/g' | sort > cpp_headers.tmp echo 'LIST (APPEND msgpackc_SOURCES' > Files.cmake cat srcs.tmp | sed -e 's/^/ /g' >> Files.cmake -echo ')' >> Files.cmake +echo -e ')\n' >> Files.cmake -echo 'LIST (APPEND msgpackc_HEADERS' >> Files.cmake -cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake -echo ')' >> Files.cmake +echo '# For both C and C++ libraries +LIST (APPEND msgpackc_HEADERS' >> Files.cmake +cat c_cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake +echo -e ')\n' >> Files.cmake -echo 'IF (MSGPACK_ENABLE_CXX)' >> Files.cmake -echo ' LIST (APPEND msgpackc_HEADERS' >> Files.cmake +echo 'IF (NOT MSGPACK_CXX_ONLY) + # Only for C library + LIST (APPEND msgpackc_HEADERS' >> Files.cmake +cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake +echo -e ' )\nENDIF ()\n' >> Files.cmake + +echo 'IF (MSGPACK_ENABLE_CXX) + # Only for C++ library + LIST (APPEND msgpackc_HEADERS' >> Files.cmake cat cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake -echo ' )' >> Files.cmake -echo 'ENDIF ()' >> Files.cmake +echo -e ' )\nENDIF ()' >> Files.cmake -rm -f srcs.tmp c_headers.tmp cpp_headers.tmp +rm -f srcs.tmp c_headers.tmp cpp_headers.tmp c_cpp_headers.tmp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7924930c..c86bfc53 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,73 +7,84 @@ INCLUDE_DIRECTORIES ( ${ZLIB_INCLUDE_DIRS} ) -LIST (APPEND check_PROGRAMS - array_ref.cpp - buffer.cpp - carray.cpp - cases.cpp - convert.cpp - fixint.cpp +SET (tests_C fixint_c.cpp - inc_adaptor_define.cpp - json.cpp - limit.cpp - msgpack_basic.cpp msgpack_c.cpp - msgpack_container.cpp - msgpack_stream.cpp - msgpack_tuple.cpp - msgpack_vref.cpp - object.cpp - object_with_zone.cpp - pack_unpack.cpp pack_unpack_c.cpp - raw.cpp - reference.cpp - size_equal_only.cpp - streaming.cpp streaming_c.cpp - user_class.cpp - version.cpp - visitor.cpp - zone.cpp ) -IF (MSGPACK_BOOST) +IF (NOT MSGPACK_CXX_ONLY) LIST (APPEND check_PROGRAMS - boost_fusion.cpp - boost_variant.cpp - boost_optional.cpp - boost_string_ref.cpp - boost_string_view.cpp + ${tests_C} ) ENDIF () -IF (MSGPACK_USE_X3_PARSE) +IF (MSGPACK_ENABLE_CXX) LIST (APPEND check_PROGRAMS - msgpack_x3_parse.cpp + array_ref.cpp + buffer.cpp + carray.cpp + cases.cpp + convert.cpp + fixint.cpp + inc_adaptor_define.cpp + json.cpp + limit.cpp + msgpack_basic.cpp + msgpack_container.cpp + msgpack_stream.cpp + msgpack_tuple.cpp + msgpack_vref.cpp + object.cpp + object_with_zone.cpp + pack_unpack.cpp + raw.cpp + reference.cpp + size_equal_only.cpp + streaming.cpp + user_class.cpp + version.cpp + visitor.cpp + zone.cpp ) -ENDIF () -IF (MSGPACK_CXX11 OR MSGPACK_CXX17) - LIST (APPEND check_PROGRAMS - iterator_cpp11.cpp - msgpack_cpp11.cpp - reference_cpp11.cpp - reference_wrapper_cpp11.cpp - shared_ptr_cpp11.cpp - unique_ptr_cpp11.cpp + IF (MSGPACK_BOOST) + LIST (APPEND check_PROGRAMS + boost_fusion.cpp + boost_variant.cpp + boost_optional.cpp + boost_string_ref.cpp + boost_string_view.cpp + ) + ENDIF () - # fuzzers are cpp11 only - fuzz_unpack_pack_fuzzer_cpp11.cpp - ) -ENDIF () + IF (MSGPACK_USE_X3_PARSE) + LIST (APPEND check_PROGRAMS + msgpack_x3_parse.cpp + ) + ENDIF () -IF (MSGPACK_CXX17) - LIST (APPEND check_PROGRAMS - msgpack_cpp17.cpp - ) -ENDIF () + IF (MSGPACK_CXX11 OR MSGPACK_CXX17) + LIST (APPEND check_PROGRAMS + iterator_cpp11.cpp + msgpack_cpp11.cpp + reference_cpp11.cpp + reference_wrapper_cpp11.cpp + shared_ptr_cpp11.cpp + unique_ptr_cpp11.cpp + + # fuzzers are cpp11 only + fuzz_unpack_pack_fuzzer_cpp11.cpp + ) + ENDIF () + + IF (MSGPACK_CXX17) + LIST (APPEND check_PROGRAMS + msgpack_cpp17.cpp + ) + ENDIF () +ENDIF (MSGPACK_ENABLE_CXX) FOREACH (source_file ${check_PROGRAMS}) GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) @@ -81,8 +92,16 @@ FOREACH (source_file ${check_PROGRAMS}) ${source_file_we} ${source_file} ) + + LIST (FIND tests_C ${source_file} idx) + IF (idx GREATER -1) + SET (link_target msgpackc) + ELSE () + SET (link_target msgpackc-cxx) + ENDIF () + TARGET_LINK_LIBRARIES (${source_file_we} - msgpackc + ${link_target} ${GTEST_BOTH_LIBRARIES} ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} @@ -104,12 +123,14 @@ FOREACH (source_file ${check_PROGRAMS}) ENDIF () ENDFOREACH () -ADD_EXECUTABLE ( - multi_file - multi_file1.cpp multi_file2.cpp -) -TARGET_INCLUDE_DIRECTORIES (multi_file - PRIVATE - $ -) -ADD_TEST (multi_file multi_file) +IF (MSGPACK_ENABLE_CXX) + ADD_EXECUTABLE ( + multi_file + multi_file1.cpp multi_file2.cpp + ) + TARGET_INCLUDE_DIRECTORIES (multi_file + PRIVATE + $ + ) + ADD_TEST (multi_file multi_file) +ENDIF ()