Skip to content

Commit 89b8f4e

Browse files
authored
Merge pull request #580 from herbrechtsmeier/config
Add cmake package config support
2 parents 10c1917 + 3d82c2d commit 89b8f4e

File tree

7 files changed

+121
-17
lines changed

7 files changed

+121
-17
lines changed

CMakeLists.txt

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.6)
1+
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.12)
22

33
IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR
44
(CMAKE_VERSION VERSION_EQUAL 3.1))
@@ -172,24 +172,41 @@ CONFIGURE_FILE (
172172
@ONLY
173173
)
174174

175-
INCLUDE_DIRECTORIES (
176-
./
177-
include/
178-
${CMAKE_CURRENT_BINARY_DIR}/include/
179-
)
180-
181175
IF (MSGPACK_ENABLE_SHARED)
182176
ADD_LIBRARY (msgpackc SHARED
183177
${msgpackc_SOURCES}
184178
${msgpackc_HEADERS}
185179
)
180+
181+
TARGET_INCLUDE_DIRECTORIES (msgpackc
182+
PUBLIC
183+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
184+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
185+
$<INSTALL_INTERFACE:include>
186+
PRIVATE
187+
${CMAKE_CURRENT_SOURCE_DIR}
188+
)
186189
ENDIF ()
187190

188191
ADD_LIBRARY (msgpackc-static STATIC
189192
${msgpackc_SOURCES}
190193
${msgpackc_HEADERS}
191194
)
192195

196+
TARGET_INCLUDE_DIRECTORIES (msgpackc-static
197+
PUBLIC
198+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
199+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
200+
$<INSTALL_INTERFACE:include>
201+
PRIVATE
202+
${CMAKE_CURRENT_SOURCE_DIR}
203+
)
204+
205+
IF (NOT MSGPACK_ENABLE_SHARED)
206+
# Add alias for subdirectories
207+
ADD_LIBRARY (msgpackc ALIAS msgpackc-static)
208+
ENDIF ()
209+
193210
SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc")
194211
IF (MSGPACK_ENABLE_SHARED)
195212
IF (MSVC)
@@ -253,9 +270,11 @@ ELSE()
253270
SET (MSGPACK_INSTALLTARGETS msgpackc-static)
254271
ENDIF ()
255272

256-
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
257-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
258-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
273+
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets
274+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
275+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
276+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
277+
)
259278
FOREACH (file ${msgpackc_HEADERS})
260279
GET_FILENAME_COMPONENT (dir ${file} PATH)
261280
INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
@@ -310,3 +329,39 @@ IF (DOXYGEN_FOUND)
310329
DEPENDS doxygen_c doxygen_cpp
311330
)
312331
ENDIF ()
332+
333+
INCLUDE (CMakePackageConfigHelpers)
334+
335+
SET (CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/msgpack")
336+
337+
WRITE_BASIC_PACKAGE_VERSION_FILE (
338+
msgpack-config-version.cmake
339+
VERSION ${VERSION}
340+
COMPATIBILITY SameMajorVersion
341+
)
342+
343+
IF (NOT CMAKE_VERSION VERSION_LESS 3.0)
344+
EXPORT (EXPORT msgpack-targets
345+
FILE "${CMAKE_CURRENT_BINARY_DIR}/msgpack-targets.cmake"
346+
)
347+
ENDIF ()
348+
349+
CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in
350+
msgpack-config.cmake
351+
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
352+
)
353+
354+
INSTALL (EXPORT msgpack-targets
355+
FILE
356+
msgpack-targets.cmake
357+
DESTINATION
358+
"${CMAKE_INSTALL_CMAKEDIR}"
359+
)
360+
361+
INSTALL (
362+
FILES
363+
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
364+
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
365+
DESTINATION
366+
"${CMAKE_INSTALL_CMAKEDIR}"
367+
)

example/boost/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ FOREACH (source_file ${exec_PROGRAMS})
1111
${source_file_we}
1212
${source_file}
1313
)
14+
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
15+
PRIVATE
16+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
17+
)
1418
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
1519
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3")
1620
ENDIF ()

example/cpp03/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ FOREACH (source_file ${exec_PROGRAMS})
3535
${source_file_we}
3636
${source_file}
3737
)
38+
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
39+
PRIVATE
40+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
41+
)
3842
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
3943
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3")
4044
ENDIF ()
@@ -53,6 +57,10 @@ FOREACH (source_file ${with_pthread_PROGRAMS})
5357
${source_file_we}
5458
${source_file}
5559
)
60+
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
61+
PRIVATE
62+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
63+
)
5664
TARGET_LINK_LIBRARIES (${source_file_we}
5765
${CMAKE_THREAD_LIBS_INIT}
5866
)
@@ -78,6 +86,10 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS})
7886
${source_file_we}
7987
${source_file}
8088
)
89+
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
90+
PRIVATE
91+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
92+
)
8193
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
8294
TARGET_LINK_LIBRARIES (${source_file_we}
8395
${Boost_TIMER_LIBRARY}

example/cpp11/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ IF (MSGPACK_CXX11)
2020
${source_file_we}
2121
${source_file}
2222
)
23+
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
24+
PRIVATE
25+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
26+
)
2327
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
2428
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 ")
2529
ENDIF ()

example/x3/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ IF (MSGPACK_USE_X3_PARSE)
1818
${source_file_we}
1919
${source_file}
2020
)
21+
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
22+
PRIVATE
23+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
24+
)
2125
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
2226
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g ")
2327
ENDIF ()
@@ -40,6 +44,10 @@ IF (MSGPACK_USE_X3_PARSE)
4044
${source_file_we}
4145
${source_file}
4246
)
47+
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
48+
PRIVATE
49+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
50+
)
4351
TARGET_LINK_LIBRARIES (${source_file_we}
4452
${Boost_CONTEXT_LIBRARY}
4553
${Boost_SYSTEM_LIBRARY}

msgpack-config.cmake.in

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#.rst:
2+
# msgpack
3+
# -------
4+
#
5+
# The following import targets are created
6+
#
7+
# ::
8+
#
9+
# msgpackc-static
10+
# msgpackc
11+
#
12+
13+
@PACKAGE_INIT@
14+
15+
include(CMakeFindDependencyMacro)
16+
17+
if(NOT TARGET msgpackc AND NOT TARGET msgpackc-static)
18+
include("${CMAKE_CURRENT_LIST_DIR}/msgpack-targets.cmake")
19+
20+
if(NOT @MSGPACK_ENABLE_SHARED@)
21+
add_library(msgpackc ALIAS msgpackc-static)
22+
endif()
23+
endif()

test/CMakeLists.txt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,14 @@ IF (MSGPACK_CXX11)
6666
)
6767
ENDIF ()
6868

69-
IF (MSGPACK_ENABLE_SHARED)
70-
SET (MSGPACK_TEST_LIB msgpackc)
71-
ELSE ()
72-
SET (MSGPACK_TEST_LIB msgpackc-static)
73-
ENDIF ()
74-
7569
FOREACH (source_file ${check_PROGRAMS})
7670
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
7771
ADD_EXECUTABLE (
7872
${source_file_we}
7973
${source_file}
8074
)
8175
TARGET_LINK_LIBRARIES (${source_file_we}
82-
${MSGPACK_TEST_LIB}
76+
msgpackc
8377
${GTEST_BOTH_LIBRARIES}
8478
${ZLIB_LIBRARIES}
8579
${CMAKE_THREAD_LIBS_INIT}
@@ -105,4 +99,8 @@ ADD_EXECUTABLE (
10599
multi_file
106100
multi_file1.cpp multi_file2.cpp
107101
)
102+
TARGET_INCLUDE_DIRECTORIES (multi_file
103+
PRIVATE
104+
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
105+
)
108106
ADD_TEST (multi_file multi_file)

0 commit comments

Comments
 (0)