Skip to content

Commit d9c5978

Browse files
committed
add MSGPACK_CXX_ONLY option to build c++ libraries only
1 parent d045200 commit d9c5978

File tree

9 files changed

+216
-136
lines changed

9 files changed

+216
-136
lines changed

CMakeLists.txt

Lines changed: 57 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -156,38 +156,54 @@ IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND AND NOT "${MSGPACK_FUZZ_REGRESS
156156
OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF)
157157
ENDIF ()
158158

159-
IF (DEFINED BUILD_SHARED_LIBS)
160-
IF (BUILD_SHARED_LIBS)
161-
IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED)
162-
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS")
163-
ENDIF ()
164-
SET (MSGPACK_ENABLE_SHARED ON)
165-
IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC)
166-
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS")
159+
OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
160+
161+
OPTION (MSGPACK_CXX_ONLY "Build only C++ libraries (header-only)." OFF)
162+
IF (MSGPACK_CXX_ONLY)
163+
IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED)
164+
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by MSGPACK_CXX_ONLY")
165+
ENDIF ()
166+
SET (MSGPACK_ENABLE_SHARED OFF)
167+
IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC)
168+
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by MSGPACK_CXX_ONLY")
169+
ENDIF ()
170+
SET (MSGPACK_ENABLE_STATIC OFF)
171+
IF (DEFINED MSGPACK_ENABLE_CXX AND NOT MSGPACK_ENABLE_CXX)
172+
MESSAGE(WARNING "MSGPACK_ENABLE_CXX is overridden to ON by MSGPACK_CXX_ONLY")
173+
ENDIF ()
174+
SET (MSGPACK_ENABLE_CXX ON)
175+
ELSE ()
176+
IF (DEFINED BUILD_SHARED_LIBS)
177+
IF (BUILD_SHARED_LIBS)
178+
IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED)
179+
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS")
180+
ENDIF ()
181+
SET (MSGPACK_ENABLE_SHARED ON)
182+
IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC)
183+
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS")
184+
ENDIF ()
185+
SET (MSGPACK_ENABLE_STATIC OFF)
186+
ELSE ()
187+
IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED)
188+
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS")
189+
ENDIF ()
190+
SET (MSGPACK_ENABLE_SHARED OFF)
191+
IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC)
192+
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS")
193+
ENDIF ()
194+
SET (MSGPACK_ENABLE_STATIC ON)
167195
ENDIF ()
168-
SET (MSGPACK_ENABLE_STATIC OFF)
169196
ELSE ()
170-
IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED)
171-
MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS")
197+
IF (NOT DEFINED MSGPACK_ENABLE_SHARED)
198+
SET (MSGPACK_ENABLE_SHARED ON)
172199
ENDIF ()
173-
SET (MSGPACK_ENABLE_SHARED OFF)
174-
IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC)
175-
MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS")
200+
IF (NOT DEFINED MSGPACK_ENABLE_STATIC)
201+
SET (MSGPACK_ENABLE_STATIC ON)
176202
ENDIF ()
177-
SET (MSGPACK_ENABLE_STATIC ON)
178-
ENDIF ()
179-
ELSE ()
180-
IF (NOT DEFINED MSGPACK_ENABLE_SHARED)
181-
SET (MSGPACK_ENABLE_SHARED ON)
203+
SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED})
182204
ENDIF ()
183-
IF (NOT DEFINED MSGPACK_ENABLE_STATIC)
184-
SET (MSGPACK_ENABLE_STATIC ON)
185-
ENDIF ()
186-
SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED})
187205
ENDIF ()
188206

189-
OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
190-
191207
INCLUDE (CheckCXXSourceCompiles)
192208
CHECK_CXX_SOURCE_COMPILES ("
193209
#include <bits/atomicity.h>
@@ -380,7 +396,7 @@ FOREACH (file ${msgpackc_HEADERS})
380396
GET_FILENAME_COMPONENT (dir ${file} PATH)
381397
INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
382398
ENDFOREACH ()
383-
IF (NOT MSVC)
399+
IF (NOT MSGPACK_CXX_ONLY AND NOT MSVC)
384400
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
385401
ENDIF ()
386402

@@ -454,17 +470,19 @@ CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in
454470
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
455471
)
456472

457-
INSTALL (EXPORT msgpack-targets
458-
FILE
459-
msgpack-targets.cmake
460-
DESTINATION
461-
"${CMAKE_INSTALL_CMAKEDIR}"
462-
)
473+
IF (NOT MSGPACK_CXX_ONLY)
474+
INSTALL (EXPORT msgpack-targets
475+
FILE
476+
msgpack-targets.cmake
477+
DESTINATION
478+
"${CMAKE_INSTALL_CMAKEDIR}"
479+
)
463480

464-
INSTALL (
465-
FILES
466-
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
467-
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
468-
DESTINATION
469-
"${CMAKE_INSTALL_CMAKEDIR}"
470-
)
481+
INSTALL (
482+
FILES
483+
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
484+
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
485+
DESTINATION
486+
"${CMAKE_INSTALL_CMAKEDIR}"
487+
)
488+
ENDIF ()

Files.cmake

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,11 @@ LIST (APPEND msgpackc_SOURCES
55
src/vrefbuffer.c
66
src/zone.c
77
)
8+
9+
# For both C and C++ libraries
810
LIST (APPEND msgpackc_HEADERS
9-
include/msgpack.h
1011
include/msgpack/fbuffer.h
11-
include/msgpack/gcc_atomic.h
1212
include/msgpack/object.h
13-
include/msgpack/pack.h
14-
include/msgpack/pack_define.h
15-
include/msgpack/pack_template.h
1613
include/msgpack/predef.h
1714
include/msgpack/predef/architecture.h
1815
include/msgpack/predef/architecture/alpha.h
@@ -152,20 +149,33 @@ LIST (APPEND msgpackc_HEADERS
152149
include/msgpack/predef/platform/windows_uwp.h
153150
include/msgpack/predef/version.h
154151
include/msgpack/predef/version_number.h
155-
include/msgpack/sbuffer.h
156152
include/msgpack/sysdep.h
157-
include/msgpack/timestamp.h
158-
include/msgpack/unpack.h
159153
include/msgpack/unpack_define.h
160-
include/msgpack/unpack_template.h
161-
include/msgpack/util.h
162-
include/msgpack/version.h
163154
include/msgpack/version_master.h
164-
include/msgpack/vrefbuffer.h
165155
include/msgpack/zbuffer.h
166156
include/msgpack/zone.h
167157
)
158+
159+
IF (NOT MSGPACK_CXX_ONLY)
160+
# Only for C library
161+
LIST (APPEND msgpackc_HEADERS
162+
include/msgpack.h
163+
include/msgpack/gcc_atomic.h
164+
include/msgpack/pack.h
165+
include/msgpack/pack_define.h
166+
include/msgpack/pack_template.h
167+
include/msgpack/sbuffer.h
168+
include/msgpack/timestamp.h
169+
include/msgpack/unpack.h
170+
include/msgpack/unpack_template.h
171+
include/msgpack/util.h
172+
include/msgpack/version.h
173+
include/msgpack/vrefbuffer.h
174+
)
175+
ENDIF ()
176+
168177
IF (MSGPACK_ENABLE_CXX)
178+
# Only for C++ library
169179
LIST (APPEND msgpackc_HEADERS
170180
include/msgpack.hpp
171181
include/msgpack/adaptor/adaptor_base.hpp

example/CMakeLists.txt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
ADD_SUBDIRECTORY (c)
2-
ADD_SUBDIRECTORY (cpp03)
3-
ADD_SUBDIRECTORY (cpp11)
4-
ADD_SUBDIRECTORY (boost)
5-
ADD_SUBDIRECTORY (x3)
1+
IF (NOT MSGPACK_CXX_ONLY)
2+
ADD_SUBDIRECTORY (c)
3+
ENDIF ()
4+
IF (MSGPACK_ENABLE_CXX)
5+
ADD_SUBDIRECTORY (cpp03)
6+
ADD_SUBDIRECTORY (cpp11)
7+
ADD_SUBDIRECTORY (boost)
8+
ADD_SUBDIRECTORY (x3)
9+
ENDIF ()

example/boost/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ FOREACH (source_file ${exec_PROGRAMS})
2727
)
2828
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
2929
PRIVATE
30-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
30+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
3131
)
3232
TARGET_LINK_LIBRARIES (${source_file_we}
3333
${Boost_SYSTEM_LIBRARY}

example/cpp03/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ FOREACH (source_file ${exec_PROGRAMS})
3737
)
3838
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
3939
PRIVATE
40-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
40+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
4141
)
4242
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
4343
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")
@@ -59,7 +59,7 @@ FOREACH (source_file ${with_pthread_PROGRAMS})
5959
)
6060
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
6161
PRIVATE
62-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
62+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
6363
)
6464
TARGET_LINK_LIBRARIES (${source_file_we}
6565
${CMAKE_THREAD_LIBS_INIT}
@@ -88,7 +88,7 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS})
8888
)
8989
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
9090
PRIVATE
91-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
91+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
9292
)
9393
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
9494
TARGET_LINK_LIBRARIES (${source_file_we}

example/cpp11/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ IF (MSGPACK_CXX11 OR MSGPACK_CXX17)
2222
)
2323
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
2424
PRIVATE
25-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
25+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
2626
)
2727
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
2828
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")

example/x3/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1)
2020
)
2121
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
2222
PRIVATE
23-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
23+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
2424
)
2525
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
2626
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)
4646
)
4747
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
4848
PRIVATE
49-
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
49+
$<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES>
5050
)
5151
TARGET_LINK_LIBRARIES (${source_file_we}
5252
${Boost_CONTEXT_LIBRARY}

make_file_list.sh

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,48 @@
1-
#!/bin/sh
1+
#!/bin/bash
2+
3+
c_headers=(
4+
include/msgpack.h
5+
include/msgpack/gcc_atomic.h
6+
include/msgpack/pack.h
7+
include/msgpack/pack_define.h
8+
include/msgpack/pack_template.h
9+
include/msgpack/sbuffer.h
10+
include/msgpack/timestamp.h
11+
include/msgpack/unpack.h
12+
include/msgpack/unpack_template.h
13+
include/msgpack/util.h
14+
include/msgpack/version.h
15+
include/msgpack/vrefbuffer.h
16+
)
17+
18+
rm -f c_headers.tmp
19+
for hdr in ${c_headers[@]}; do
20+
echo $hdr >> c_headers.tmp
21+
done
222

323
find src -name "*.c" | sed -e 's/\s\+/\n/g' | sort > srcs.tmp
4-
find include -name "*.h" | sed -e 's/\s\+/\n/g' | sort > c_headers.tmp
24+
find include -name "*.h" | grep -vFf c_headers.tmp | sed -e 's/\s\+/\n/g' | sort > c_cpp_headers.tmp
525
find include -name "*.hpp" | sed -e 's/\s\+/\n/g' | sort > cpp_headers.tmp
626

727
echo 'LIST (APPEND msgpackc_SOURCES' > Files.cmake
828
cat srcs.tmp | sed -e 's/^/ /g' >> Files.cmake
9-
echo ')' >> Files.cmake
29+
echo -e ')\n' >> Files.cmake
30+
31+
echo '# For both C and C++ libraries
32+
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
33+
cat c_cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
34+
echo -e ')\n' >> Files.cmake
1035

11-
echo 'LIST (APPEND msgpackc_HEADERS' >> Files.cmake
12-
cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
13-
echo ')' >> Files.cmake
36+
echo 'IF (NOT MSGPACK_CXX_ONLY)
37+
# Only for C library
38+
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
39+
cat c_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
40+
echo -e ' )\nENDIF ()\n' >> Files.cmake
1441

15-
echo 'IF (MSGPACK_ENABLE_CXX)' >> Files.cmake
16-
echo ' LIST (APPEND msgpackc_HEADERS' >> Files.cmake
42+
echo 'IF (MSGPACK_ENABLE_CXX)
43+
# Only for C++ library
44+
LIST (APPEND msgpackc_HEADERS' >> Files.cmake
1745
cat cpp_headers.tmp | sed -e 's/^/ /g' >> Files.cmake
18-
echo ' )' >> Files.cmake
19-
echo 'ENDIF ()' >> Files.cmake
46+
echo -e ' )\nENDIF ()' >> Files.cmake
2047

21-
rm -f srcs.tmp c_headers.tmp cpp_headers.tmp
48+
rm -f srcs.tmp c_headers.tmp cpp_headers.tmp c_cpp_headers.tmp

0 commit comments

Comments
 (0)