CMakeLists.txt 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. CMAKE_MINIMUM_REQUIRED (VERSION 2.8.12)
  2. IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR
  3. (CMAKE_VERSION VERSION_EQUAL 3.1))
  4. CMAKE_POLICY(SET CMP0054 NEW)
  5. ENDIF ()
  6. PROJECT (msgpack)
  7. FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents)
  8. STRING (REGEX MATCH "#define MSGPACK_VERSION_MAJOR *([0-9a-zA-Z_]*)" NULL_OUT ${contents})
  9. SET (VERSION_MAJOR ${CMAKE_MATCH_1})
  10. STRING (REGEX MATCH "#define MSGPACK_VERSION_MINOR *([0-9a-zA-Z_]*)" NULL_OUT ${contents})
  11. SET (VERSION_MINOR ${CMAKE_MATCH_1})
  12. STRING (REGEX MATCH "#define MSGPACK_VERSION_REVISION *([0-9a-zA-Z_]*)" NULL_OUT ${contents})
  13. SET (VERSION_REVISION ${CMAKE_MATCH_1})
  14. SET (VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION})
  15. SET (prefix ${CMAKE_INSTALL_PREFIX})
  16. SET (exec_prefix "\${prefix}")
  17. SET (libdir "\${exec_prefix}/lib")
  18. SET (includedir "\${prefix}/include")
  19. SET (GNUCXX_STD_SUPPORT_VERSION "4.3")
  20. OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF)
  21. OPTION (MSGPACK_32BIT "32bit compile" OFF)
  22. OPTION (MSGPACK_BOOST "Using boost libraries" OFF)
  23. IF (APPLE)
  24. SET(CMAKE_MACOSX_RPATH ON)
  25. SET(CMAKE_SKIP_BUILD_RPATH FALSE)
  26. SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
  27. SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
  28. SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
  29. LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
  30. IF ("${isSystemDir}" STREQUAL "-1")
  31. SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
  32. ENDIF ()
  33. ENDIF ()
  34. IF (MSGPACK_USE_X3_PARSE)
  35. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  36. SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}")
  37. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  38. SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}")
  39. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  40. SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE ${CMAKE_CXX_FLAGS}")
  41. IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
  42. MESSAGE ( FATAL_ERROR "MSVC doesn't support C++14.")
  43. ENDIF ()
  44. ENDIF ()
  45. ELSE ()
  46. IF (MSGPACK_CXX17)
  47. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  48. SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}")
  49. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  50. SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}")
  51. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  52. MESSAGE ( FATAL_ERROR "MSVC doesn't support C++17.")
  53. ENDIF ()
  54. ELSEIF (MSGPACK_CXX11)
  55. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  56. SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
  57. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  58. SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
  59. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  60. IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
  61. MESSAGE ( FATAL_ERROR "MSVC doesn't support C++11.")
  62. ENDIF ()
  63. ENDIF ()
  64. ELSE ()
  65. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  66. IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_STD_SUPPORT_VERSION}) OR
  67. (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_STD_SUPPORT_VERSION}))
  68. SET (CMAKE_CXX_FLAGS "-std=c++98 ${CMAKE_CXX_FLAGS}")
  69. ENDIF ()
  70. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  71. SET (CMAKE_CXX_FLAGS "-std=c++98 ${CMAKE_CXX_FLAGS}")
  72. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  73. IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18)
  74. SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_CPP03 ${CMAKE_CXX_FLAGS}")
  75. ENDIF ()
  76. ENDIF ()
  77. ENDIF ()
  78. ENDIF ()
  79. IF (MSGPACK_32BIT)
  80. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  81. SET (CMAKE_CXX_FLAGS "-m32 ${CMAKE_CXX_FLAGS}")
  82. SET (CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}")
  83. SET (CMAKE_EXE_LINKER_FLAGS "-m32 ${CMAKE_EXE_LINKER_FLAGS}")
  84. ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  85. SET (CMAKE_CXX_FLAGS "-m32 ${CMAKE_CXX_FLAGS}")
  86. SET (CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}")
  87. SET (CMAKE_EXE_LINKER_FLAGS "-m32 ${CMAKE_EXE_LINKER_FLAGS}")
  88. ENDIF ()
  89. ENDIF ()
  90. OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON)
  91. IF (MSGPACK_BOOST)
  92. SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}")
  93. SET (Boost_USE_MULTITHREADED ON)
  94. SET (Boost_USE_STATIC_RUNTIME OFF)
  95. FIND_PACKAGE (Boost REQUIRED COMPONENTS chrono context system timer)
  96. INCLUDE_DIRECTORIES (
  97. ${Boost_INCLUDE_DIRS}
  98. )
  99. LINK_DIRECTORIES (
  100. ${Boost_LIBRARY_DIRS}
  101. )
  102. IF (MSGPACK_BOOST_DIR)
  103. INCLUDE_DIRECTORIES (
  104. ${MSGPACK_BOOST_DIR}
  105. )
  106. ENDIF ()
  107. ENDIF ()
  108. IF (MSGPACK_CHAR_SIGN)
  109. SET (CMAKE_C_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_C_FLAGS}")
  110. SET (CMAKE_CXX_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_CXX_FLAGS}")
  111. ENDIF ()
  112. IF (MSGPACK_DEFAULT_API_VERSION)
  113. SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=${MSGPACK_DEFAULT_API_VERSION} ${CMAKE_CXX_FLAGS}")
  114. ELSE ()
  115. SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=3 ${CMAKE_CXX_FLAGS}")
  116. ENDIF ()
  117. FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h)
  118. FOREACH (F ${PREDEF_FILES})
  119. SET(M "Converting ${F}")
  120. MESSAGE(STATUS ${M})
  121. FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT)
  122. STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT})
  123. STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT})
  124. FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT})
  125. ENDFOREACH ()
  126. FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp)
  127. FOREACH (F ${PREPROCESSOR_FILES})
  128. SET(M "Converting ${F}")
  129. MESSAGE(STATUS ${M})
  130. FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT)
  131. STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT})
  132. STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT})
  133. FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT})
  134. ENDFOREACH ()
  135. FIND_PACKAGE (GTest)
  136. FIND_PACKAGE (ZLIB)
  137. FIND_PACKAGE (Threads)
  138. IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND AND NOT "${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON")
  139. OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." ON)
  140. ENDIF ()
  141. IF (DEFINED BUILD_SHARED_LIBS)
  142. IF (BUILD_SHARED_LIBS)
  143. IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED)
  144. MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS")
  145. ENDIF ()
  146. SET (MSGPACK_ENABLE_SHARED ON)
  147. IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC)
  148. MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS")
  149. ENDIF ()
  150. SET (MSGPACK_ENABLE_STATIC OFF)
  151. ELSE ()
  152. IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED)
  153. MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS")
  154. ENDIF ()
  155. SET (MSGPACK_ENABLE_SHARED OFF)
  156. IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC)
  157. MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS")
  158. ENDIF ()
  159. SET (MSGPACK_ENABLE_STATIC ON)
  160. ENDIF ()
  161. ELSE ()
  162. IF (NOT DEFINED MSGPACK_ENABLE_SHARED)
  163. SET (MSGPACK_ENABLE_SHARED ON)
  164. ENDIF ()
  165. IF (NOT DEFINED MSGPACK_ENABLE_STATIC)
  166. SET (MSGPACK_ENABLE_STATIC ON)
  167. ENDIF ()
  168. ENDIF ()
  169. OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
  170. INCLUDE (CheckCXXSourceCompiles)
  171. CHECK_CXX_SOURCE_COMPILES ("
  172. #include <bits/atomicity.h>
  173. int atomic_sub(int i) { return __gnu_cxx::__exchange_and_add(&i, -1) - 1; }
  174. int atomic_add(int i) { return __gnu_cxx::__exchange_and_add(&i, 1) + 1; }
  175. int main(int argc, char * argv[])
  176. {
  177. atomic_sub(1);
  178. atomic_add(1);
  179. }
  180. " MSGPACK_ENABLE_GCC_CXX_ATOMIC)
  181. INCLUDE (Files.cmake)
  182. EXECUTE_PROCESS (
  183. COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack
  184. )
  185. CONFIGURE_FILE (
  186. msgpack.pc.in
  187. msgpack.pc
  188. @ONLY
  189. )
  190. IF (MSGPACK_ENABLE_SHARED)
  191. ADD_LIBRARY (msgpackc SHARED
  192. ${msgpackc_SOURCES}
  193. ${msgpackc_HEADERS}
  194. )
  195. SET_TARGET_PROPERTIES (msgpackc PROPERTIES SOVERSION 2 VERSION 2.0.0)
  196. TARGET_INCLUDE_DIRECTORIES (msgpackc
  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. ENDIF ()
  205. IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSION VERSION_EQUAL 3.0)))
  206. ADD_LIBRARY (msgpackc-cxx INTERFACE)
  207. TARGET_INCLUDE_DIRECTORIES (msgpackc-cxx
  208. INTERFACE
  209. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  210. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
  211. $<INSTALL_INTERFACE:include>
  212. )
  213. ENDIF ()
  214. IF (MSGPACK_ENABLE_STATIC)
  215. ADD_LIBRARY (msgpackc-static STATIC
  216. ${msgpackc_SOURCES}
  217. ${msgpackc_HEADERS}
  218. )
  219. TARGET_INCLUDE_DIRECTORIES (msgpackc-static
  220. PUBLIC
  221. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  222. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
  223. $<INSTALL_INTERFACE:include>
  224. PRIVATE
  225. ${CMAKE_CURRENT_SOURCE_DIR}
  226. )
  227. IF (NOT MSGPACK_ENABLE_SHARED)
  228. # Add alias for subdirectories
  229. ADD_LIBRARY (msgpackc ALIAS msgpackc-static)
  230. ENDIF ()
  231. SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc")
  232. IF (MSGPACK_ENABLE_SHARED)
  233. IF (MSVC)
  234. SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX "_import.lib")
  235. ELSEIF (MINGW)
  236. SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX ".dll.a")
  237. ENDIF ()
  238. ENDIF ()
  239. ENDIF ()
  240. # enable regression testing
  241. IF ("${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON" AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  242. SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}")
  243. SET (Boost_USE_MULTITHREADED ON)
  244. SET (Boost_USE_STATIC_RUNTIME OFF)
  245. enable_testing ()
  246. ADD_SUBDIRECTORY (fuzz)
  247. SET (MSGPACK_BUILD_EXAMPLES OFF)
  248. ENDIF ()
  249. IF (MSGPACK_BUILD_TESTS)
  250. ENABLE_TESTING ()
  251. # MEMORYCHECK_COMMAND_OPTIONS needs to place prior to CTEST_MEMORYCHECK_COMMAND
  252. SET (MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --show-leak-kinds=definite,possible --error-exitcode=1")
  253. FIND_PROGRAM(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
  254. INCLUDE(Dart)
  255. ADD_SUBDIRECTORY (test)
  256. ENDIF ()
  257. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  258. IF (MSGPACK_ENABLE_SHARED)
  259. SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra -DPIC")
  260. ENDIF ()
  261. IF (MSGPACK_ENABLE_STATIC)
  262. SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra" )
  263. ENDIF ()
  264. ENDIF ()
  265. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  266. IF (MSGPACK_ENABLE_SHARED)
  267. SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
  268. ENDIF ()
  269. IF (MSGPACK_ENABLE_STATIC)
  270. SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
  271. ENDIF ()
  272. ENDIF ()
  273. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  274. IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
  275. STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  276. ELSE ()
  277. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
  278. ENDIF ()
  279. ENDIF ()
  280. IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10")
  281. SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX)
  282. ENDIF ()
  283. IF ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "sparc")
  284. SET (CMAKE_C_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_C_FLAGS}")
  285. SET (CMAKE_CXX_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_CXX_FLAGS}")
  286. ENDIF ()
  287. IF (NOT DEFINED CMAKE_INSTALL_BINDIR)
  288. SET(CMAKE_INSTALL_BINDIR bin)
  289. ENDIF ()
  290. IF (NOT DEFINED CMAKE_INSTALL_LIBDIR)
  291. SET(CMAKE_INSTALL_LIBDIR lib)
  292. ENDIF ()
  293. IF (MSGPACK_BUILD_EXAMPLES)
  294. ADD_SUBDIRECTORY (example)
  295. ENDIF ()
  296. IF (MSGPACK_ENABLE_SHARED)
  297. SET (MSGPACK_INSTALLTARGETS msgpackc)
  298. ENDIF ()
  299. IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSION VERSION_EQUAL 3.0)))
  300. LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-cxx)
  301. ENDIF ()
  302. IF (MSGPACK_ENABLE_STATIC)
  303. LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-static)
  304. ENDIF ()
  305. INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets
  306. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  307. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  308. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  309. )
  310. FOREACH (file ${msgpackc_HEADERS})
  311. GET_FILENAME_COMPONENT (dir ${file} PATH)
  312. INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
  313. ENDFOREACH ()
  314. IF (NOT MSVC)
  315. INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
  316. ENDIF ()
  317. # Doxygen
  318. FIND_PACKAGE (Doxygen)
  319. IF (DOXYGEN_FOUND)
  320. LIST (APPEND Doxyfile_c_CONTENT
  321. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  322. COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.h" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  323. COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc_c" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  324. COMMAND ${CMAKE_COMMAND} -E echo "INPUT = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  325. COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  326. COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = \"MessagePack for C\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  327. COMMAND ${CMAKE_COMMAND} -E echo "STRIP_FROM_PATH = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  328. )
  329. IF (DOXYGEN_DOT_FOUND)
  330. LIST (APPEND Doxyfile_c_CONTENT
  331. COMMAND ${CMAKE_COMMAND} -E echo "HAVE_DOT = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  332. )
  333. ENDIF ()
  334. ADD_CUSTOM_TARGET (
  335. doxygen_c
  336. ${Doxyfile_c_CONTENT}
  337. COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
  338. VERBATIM
  339. )
  340. LIST (APPEND Doxyfile_cpp_CONTENT
  341. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  342. COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.hpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  343. COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc_cpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  344. COMMAND ${CMAKE_COMMAND} -E echo "INPUT = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  345. COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  346. COMMAND ${CMAKE_COMMAND} -E echo "STRIP_FROM_PATH = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  347. )
  348. IF (DOXYGEN_DOT_FOUND)
  349. LIST (APPEND Doxyfile_cpp_CONTENT
  350. COMMAND ${CMAKE_COMMAND} -E echo "HAVE_DOT = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  351. )
  352. ENDIF ()
  353. ADD_CUSTOM_TARGET (
  354. doxygen_cpp
  355. ${Doxyfile_cpp_CONTENT}
  356. COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = \"MessagePack for C++\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  357. COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
  358. VERBATIM
  359. )
  360. ADD_CUSTOM_TARGET (
  361. doxygen
  362. DEPENDS doxygen_c doxygen_cpp
  363. )
  364. ENDIF ()
  365. INCLUDE (CMakePackageConfigHelpers)
  366. SET (CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/msgpack")
  367. WRITE_BASIC_PACKAGE_VERSION_FILE (
  368. msgpack-config-version.cmake
  369. VERSION ${VERSION}
  370. COMPATIBILITY SameMajorVersion
  371. )
  372. IF (NOT CMAKE_VERSION VERSION_LESS 3.0)
  373. EXPORT (EXPORT msgpack-targets
  374. FILE "${CMAKE_CURRENT_BINARY_DIR}/msgpack-targets.cmake"
  375. )
  376. ENDIF ()
  377. CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in
  378. msgpack-config.cmake
  379. INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
  380. )
  381. INSTALL (EXPORT msgpack-targets
  382. FILE
  383. msgpack-targets.cmake
  384. DESTINATION
  385. "${CMAKE_INSTALL_CMAKEDIR}"
  386. )
  387. INSTALL (
  388. FILES
  389. "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
  390. "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
  391. DESTINATION
  392. "${CMAKE_INSTALL_CMAKEDIR}"
  393. )