add MSGPACK_CXX_ONLY option to build c++ libraries only

This commit is contained in:
yuangongji 2020-02-08 17:51:49 +08:00
parent d04520044f
commit d9c5978958
9 changed files with 221 additions and 141 deletions

View File

@ -156,6 +156,23 @@ 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) OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF)
ENDIF () 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 (DEFINED BUILD_SHARED_LIBS)
IF (BUILD_SHARED_LIBS) IF (BUILD_SHARED_LIBS)
IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED) IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED)
@ -185,8 +202,7 @@ ELSE ()
ENDIF () ENDIF ()
SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED}) SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED})
ENDIF () ENDIF ()
ENDIF ()
OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
INCLUDE (CheckCXXSourceCompiles) INCLUDE (CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES (" CHECK_CXX_SOURCE_COMPILES ("
@ -380,7 +396,7 @@ FOREACH (file ${msgpackc_HEADERS})
GET_FILENAME_COMPONENT (dir ${file} PATH) GET_FILENAME_COMPONENT (dir ${file} PATH)
INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir}) INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
ENDFOREACH () 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) INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
ENDIF () ENDIF ()
@ -454,6 +470,7 @@ CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
) )
IF (NOT MSGPACK_CXX_ONLY)
INSTALL (EXPORT msgpack-targets INSTALL (EXPORT msgpack-targets
FILE FILE
msgpack-targets.cmake msgpack-targets.cmake
@ -468,3 +485,4 @@ INSTALL (
DESTINATION DESTINATION
"${CMAKE_INSTALL_CMAKEDIR}" "${CMAKE_INSTALL_CMAKEDIR}"
) )
ENDIF ()

View File

@ -5,14 +5,11 @@ LIST (APPEND msgpackc_SOURCES
src/vrefbuffer.c src/vrefbuffer.c
src/zone.c src/zone.c
) )
# For both C and C++ libraries
LIST (APPEND msgpackc_HEADERS LIST (APPEND msgpackc_HEADERS
include/msgpack.h
include/msgpack/fbuffer.h include/msgpack/fbuffer.h
include/msgpack/gcc_atomic.h
include/msgpack/object.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.h
include/msgpack/predef/architecture.h include/msgpack/predef/architecture.h
include/msgpack/predef/architecture/alpha.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/platform/windows_uwp.h
include/msgpack/predef/version.h include/msgpack/predef/version.h
include/msgpack/predef/version_number.h include/msgpack/predef/version_number.h
include/msgpack/sbuffer.h
include/msgpack/sysdep.h include/msgpack/sysdep.h
include/msgpack/timestamp.h
include/msgpack/unpack.h
include/msgpack/unpack_define.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/version_master.h
include/msgpack/vrefbuffer.h
include/msgpack/zbuffer.h include/msgpack/zbuffer.h
include/msgpack/zone.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) IF (MSGPACK_ENABLE_CXX)
# Only for C++ library
LIST (APPEND msgpackc_HEADERS LIST (APPEND msgpackc_HEADERS
include/msgpack.hpp include/msgpack.hpp
include/msgpack/adaptor/adaptor_base.hpp include/msgpack/adaptor/adaptor_base.hpp

View File

@ -1,5 +1,9 @@
IF (NOT MSGPACK_CXX_ONLY)
ADD_SUBDIRECTORY (c) ADD_SUBDIRECTORY (c)
ENDIF ()
IF (MSGPACK_ENABLE_CXX)
ADD_SUBDIRECTORY (cpp03) ADD_SUBDIRECTORY (cpp03)
ADD_SUBDIRECTORY (cpp11) ADD_SUBDIRECTORY (cpp11)
ADD_SUBDIRECTORY (boost) ADD_SUBDIRECTORY (boost)
ADD_SUBDIRECTORY (x3) ADD_SUBDIRECTORY (x3)
ENDIF ()

View File

@ -27,7 +27,7 @@ FOREACH (source_file ${exec_PROGRAMS})
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we} TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}
${Boost_SYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY}

View File

@ -37,7 +37,7 @@ FOREACH (source_file ${exec_PROGRAMS})
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we} TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 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") 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} TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}
${CMAKE_THREAD_LIBS_INIT} ${CMAKE_THREAD_LIBS_INIT}
@ -88,7 +88,7 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS})
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we} TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}

View File

@ -22,7 +22,7 @@ IF (MSGPACK_CXX11 OR MSGPACK_CXX17)
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we} TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 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") SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")

View File

@ -20,7 +20,7 @@ IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1)
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we} TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 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") 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} TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}
${Boost_CONTEXT_LIBRARY} ${Boost_CONTEXT_LIBRARY}

View File

@ -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 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 find include -name "*.hpp" | sed -e 's/\s\+/\n/g' | sort > cpp_headers.tmp
echo 'LIST (APPEND msgpackc_SOURCES' > Files.cmake echo 'LIST (APPEND msgpackc_SOURCES' > Files.cmake
cat srcs.tmp | sed -e 's/^/ /g' >> 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 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 (NOT MSGPACK_CXX_ONLY)
# Only for C library
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
echo ')' >> Files.cmake echo -e ' )\nENDIF ()\n' >> Files.cmake
echo 'IF (MSGPACK_ENABLE_CXX)' >> Files.cmake echo 'IF (MSGPACK_ENABLE_CXX)
echo ' LIST (APPEND msgpackc_HEADERS' >> Files.cmake # Only for C++ library
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
cat cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake cat cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
echo ' )' >> Files.cmake echo -e ' )\nENDIF ()' >> Files.cmake
echo 'ENDIF ()' >> 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

View File

@ -7,6 +7,20 @@ INCLUDE_DIRECTORIES (
${ZLIB_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}
) )
SET (tests_C
fixint_c.cpp
msgpack_c.cpp
pack_unpack_c.cpp
streaming_c.cpp
)
IF (NOT MSGPACK_CXX_ONLY)
LIST (APPEND check_PROGRAMS
${tests_C}
)
ENDIF ()
IF (MSGPACK_ENABLE_CXX)
LIST (APPEND check_PROGRAMS LIST (APPEND check_PROGRAMS
array_ref.cpp array_ref.cpp
buffer.cpp buffer.cpp
@ -14,12 +28,10 @@ LIST (APPEND check_PROGRAMS
cases.cpp cases.cpp
convert.cpp convert.cpp
fixint.cpp fixint.cpp
fixint_c.cpp
inc_adaptor_define.cpp inc_adaptor_define.cpp
json.cpp json.cpp
limit.cpp limit.cpp
msgpack_basic.cpp msgpack_basic.cpp
msgpack_c.cpp
msgpack_container.cpp msgpack_container.cpp
msgpack_stream.cpp msgpack_stream.cpp
msgpack_tuple.cpp msgpack_tuple.cpp
@ -27,12 +39,10 @@ LIST (APPEND check_PROGRAMS
object.cpp object.cpp
object_with_zone.cpp object_with_zone.cpp
pack_unpack.cpp pack_unpack.cpp
pack_unpack_c.cpp
raw.cpp raw.cpp
reference.cpp reference.cpp
size_equal_only.cpp size_equal_only.cpp
streaming.cpp streaming.cpp
streaming_c.cpp
user_class.cpp user_class.cpp
version.cpp version.cpp
visitor.cpp visitor.cpp
@ -74,6 +84,7 @@ IF (MSGPACK_CXX17)
msgpack_cpp17.cpp msgpack_cpp17.cpp
) )
ENDIF () ENDIF ()
ENDIF (MSGPACK_ENABLE_CXX)
FOREACH (source_file ${check_PROGRAMS}) FOREACH (source_file ${check_PROGRAMS})
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
@ -81,8 +92,16 @@ FOREACH (source_file ${check_PROGRAMS})
${source_file_we} ${source_file_we}
${source_file} ${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} TARGET_LINK_LIBRARIES (${source_file_we}
msgpackc ${link_target}
${GTEST_BOTH_LIBRARIES} ${GTEST_BOTH_LIBRARIES}
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT} ${CMAKE_THREAD_LIBS_INIT}
@ -104,12 +123,14 @@ FOREACH (source_file ${check_PROGRAMS})
ENDIF () ENDIF ()
ENDFOREACH () ENDFOREACH ()
IF (MSGPACK_ENABLE_CXX)
ADD_EXECUTABLE ( ADD_EXECUTABLE (
multi_file multi_file
multi_file1.cpp multi_file2.cpp multi_file1.cpp multi_file2.cpp
) )
TARGET_INCLUDE_DIRECTORIES (multi_file TARGET_INCLUDE_DIRECTORIES (multi_file
PRIVATE PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
) )
ADD_TEST (multi_file multi_file) ADD_TEST (multi_file multi_file)
ENDIF ()