@@ -6,6 +6,17 @@ include(CheckCXXCompilerFlag)
66
77project (msgpack2json)
88
9+ # compat with cmake > 3.0, this should be autodetected with the git command (tag) or a released file
10+ set (PROJECT_VERSION_MAJOR 0)
11+ set (PROJECT_VERSION_MINOR 5)
12+ set (PROJECT_VERSION_PATCH 0)
13+
14+ if (PROJECT_VERSION_PATCH STREQUAL "0" )
15+ set (PROJECT_VERSION "${PROJECT_VERSION_MAJOR} .${PROJECT_VERSION_MINOR} " )
16+ else ()
17+ set (PROJECT_VERSION "${PROJECT_VERSION_MAJOR} .${PROJECT_VERSION_MINOR} .${PROJECT_VERSION_PATCH} " )
18+ endif ()
19+
920set (CONTRIB_DIR ${CMAKE_BINARY_DIR} /contrib)
1021file (MAKE_DIRECTORY ${CONTRIB_DIR} )
1122
@@ -33,14 +44,14 @@ else()
3344endif ()
3445
3546set (MPACK_COMMIT "8c13a0d7f8a1232a189634768b94740861cbaf3e" )
36- set (RAPIDJSON_COMMIT "75d0e4ff652769309052bbbb3745da12a572af9a " )
47+ set (RAPIDJSON_COMMIT "369de87e5d7da05786731a712f25ab9b46c4b0ce " )
3748set (LIBB64_VERSION "1.2.1" )
3849
3950if (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)" )
4051 # Windows support is not implemented yet
4152 add_definitions (/W2)
4253else ()
43- set (FLAGS "-Wall -Wextra -DLIBB64_VERSION=\\\" ${LIBB64_VERSION} \\\" " )
54+ set (FLAGS "-Wall -Wextra -DVERSION= \\\" ${PROJECT_VERSION} \\\" - DLIBB64_VERSION=\\\" ${LIBB64_VERSION} \\\" " )
4455 set (CMAKE_C_FLAGS_DEBUG "${C_FLAGS} ${FLAGS} -g -O0 -DDEBUG" )
4556 set (CMAKE_C_FLAGS_RELEASE "${C_FLAGS} ${FLAGS} -O3 -DNDEBUG -fPIC -DPIC" )
4657 set (CMAKE_CXX_FLAGS_DEBUG "${CXX_FLAGS} ${FLAGS} -g -O0 -DDEBUG" )
@@ -53,9 +64,16 @@ endif()
5364
5465set (MPACK_FILE "mpack-${MPACK_COMMIT} .tar.gz" )
5566set (MPACK_DIR "${CONTRIB_DIR} /mpack-${MPACK_COMMIT} " )
67+ set (MPACK_URL "https://github.com/ludocode/mpack/archive/${MPACK_COMMIT} .tar.gz" )
5668
57- if (NOT EXISTS "${CMAKE_SOURCE_DIR} /contrib/${MPACK_FILE} " )
58- message (FATAL_ERROR "\n MPack source is missing: contrib/${MPACK_FILE} \n To build from the repository, you need to fetch dependencies with tools/fetch.sh" )
69+ if (EXISTS "${CMAKE_SOURCE_DIR} /contrib/${MPACK_FILE} " )
70+ message (STATUS "Found package: ${MPACK_FILE} " )
71+ else ()
72+ message (STATUS "Downloading: ${MPACK_FILE} " )
73+ file (DOWNLOAD ${MPACK_URL} "${CMAKE_SOURCE_DIR} /contrib/${MPACK_FILE} " )
74+ if (NOT EXISTS "${CMAKE_SOURCE_DIR} /contrib/${MPACK_FILE} " )
75+ message (FATAL_ERROR "\n Failed to download source file: ${MPACK_FILE} \n From: ${MPACK_URL} " )
76+ endif ()
5977endif ()
6078
6179execute_process (COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_SOURCE_DIR} /contrib/${MPACK_FILE} WORKING_DIRECTORY ${CONTRIB_DIR} )
@@ -68,9 +86,16 @@ include_directories(SYSTEM ${CMAKE_BINARY_DIR} ${MPACK_DIR}/src)
6886
6987set (RAPIDJSON_FILE "rapidjson-${RAPIDJSON_COMMIT} .tar.gz" )
7088set (RAPIDJSON_DIR "${CONTRIB_DIR} /rapidjson-${RAPIDJSON_COMMIT} " )
89+ set (RAPIDJSON_URL "https://github.com/miloyip/rapidjson/archive/${RAPIDJSON_COMMIT} .tar.gz" )
7190
72- if (NOT EXISTS "${CMAKE_SOURCE_DIR} /contrib/${RAPIDJSON_FILE} " )
73- message (FATAL_ERROR "\n RapidJSON source is missing: contrib/${RAPIDJSON_FILE} \n To build from the repository, you need to fetch dependencies with tools/fetch.sh" )
91+ if (EXISTS "${CMAKE_SOURCE_DIR} /contrib/${RAPIDJSON_FILE} " )
92+ message (STATUS "Found package: ${RAPIDJSON_FILE} " )
93+ else ()
94+ message (STATUS "Downloading: ${RAPIDJSON_FILE} " )
95+ file (DOWNLOAD ${RAPIDJSON_URL} "${CMAKE_SOURCE_DIR} /contrib/${RAPIDJSON_FILE} " )
96+ if (NOT EXISTS "${CMAKE_SOURCE_DIR} /contrib/${RAPIDJSON_FILE} " )
97+ message (FATAL_ERROR "\n Failed to download source file: ${RAPIDJSON_FILE} \n From: ${RAPIDJSON_URL} " )
98+ endif ()
7499endif ()
75100
76101execute_process (COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_SOURCE_DIR} /contrib/${RAPIDJSON_FILE} WORKING_DIRECTORY ${CONTRIB_DIR} )
@@ -82,9 +107,16 @@ include_directories(SYSTEM ${RAPIDJSON_DIR}/include)
82107
83108set (LIBB64_FILE "libb64-${LIBB64_VERSION} .zip" )
84109set (LIBB64_DIR "${CONTRIB_DIR} /libb64-${LIBB64_VERSION} " )
110+ set (LIBB64_URL "http://downloads.sourceforge.net/project/libb64/libb64/libb64/${LIBB64_FILE} ?use_mirror=autoselect" )
85111
86- if (NOT EXISTS "${CMAKE_SOURCE_DIR} /contrib/${LIBB64_FILE} " )
87- message (FATAL_ERROR "\n libb64 source is missing: contrib/${LIBB64_FILE} \n To build from the repository, you need to fetch dependencies with tools/fetch.sh" )
112+ if (EXISTS "${CMAKE_SOURCE_DIR} /contrib/${LIBB64_FILE} " )
113+ message (STATUS "Found package: ${LIBB64_FILE} " )
114+ else ()
115+ message (STATUS "Downloading: ${LIBB64_FILE} " )
116+ file (DOWNLOAD ${LIBB64_URL} "${CMAKE_SOURCE_DIR} /contrib/${LIBB64_FILE} " )
117+ if (NOT EXISTS "${CMAKE_SOURCE_DIR} /contrib/${LIBB64_FILE} " )
118+ message (FATAL_ERROR "\n Failed to download source file: ${LIBB64_FILE} \n From: ${LIBB64_URL} " )
119+ endif ()
88120endif ()
89121
90122execute_process (COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_SOURCE_DIR} /contrib/${LIBB64_FILE} " WORKING_DIRECTORY "${CONTRIB_DIR} " )
@@ -99,21 +131,52 @@ file(GLOB_RECURSE LIBB64_SRCS ${LIBB64_DIR}/src/*.c)
99131include_directories (SYSTEM ${LIBB64_DIR} /include )
100132
101133
102- # targets
134+ # executable targets
103135
104136add_executable (msgpack2json src/msgpack2json.cpp ${MPACK_SRCS} ${LIBB64_SRCS} )
105137add_executable (json2msgpack src/json2msgpack.cpp ${MPACK_SRCS} ${LIBB64_SRCS} )
106138
107139install (TARGETS msgpack2json json2msgpack DESTINATION bin)
108140
109- install (FILES ${CMAKE_SOURCE_DIR} /docs/msgpack2json.1 DESTINATION ${CMAKE_INSTALL_PREFIX} /share/man/man1)
110- install (FILES ${CMAKE_SOURCE_DIR} /docs/json2msgpack.1 DESTINATION ${CMAKE_INSTALL_PREFIX} /share/man/man1)
111141
112- if (NOT EXISTS "${CMAKE_SOURCE_DIR} /docs/msgpack2json.1" )
113- message (FATAL_ERROR "\n msgpack2json man page is missing: docs/msgpack2json.1\n To build from the repository, you need to generate manpages with tools/man.sh" )
114- endif ()
115- if (NOT EXISTS "${CMAKE_SOURCE_DIR} /docs/json2msgpack.1" )
116- message (FATAL_ERROR "\n json2msgpack man page is missing: docs/json2msgpack.1\n To build from the repository, you need to generate manpages with tools/man.sh" )
142+ # manpages
143+
144+ if (EXISTS "${CMAKE_SOURCE_DIR} /docs/msgpack2json.1" AND EXISTS "${CMAKE_SOURCE_DIR} /docs/json2msgpack.1" )
145+ # install pre-generated pages
146+ message (STATUS "Found pre-generated man pages: docs/msgpack2json.1 docs/json2msgpack.1" )
147+ install (FILES ${CMAKE_SOURCE_DIR} /docs/msgpack2json.1 DESTINATION ${CMAKE_INSTALL_PREFIX} /share/man/man1)
148+ install (FILES ${CMAKE_SOURCE_DIR} /docs/json2msgpack.1 DESTINATION ${CMAKE_INSTALL_PREFIX} /share/man/man1)
149+ else ()
150+
151+ # try to find md2man-roff
152+ find_program (MD2MAN-ROFF md2man-roff)
153+ if (MD2MAN-ROFF STREQUAL "MD2MAN-ROFF-NOTFOUND" )
154+ message (WARNING "\n md2man-roff is not installed. Man pages will not be created!\n See: https://github.com/sunaku/md2man" )
155+ else ()
156+
157+ # add custom commands to build man pages
158+ # cmake is insanely verbose for creating custom builders
159+
160+ message (STATUS "Found md2man-roff: ${MD2MAN-ROFF}" )
161+ add_custom_command (
162+ OUTPUT ${CMAKE_BINARY_DIR} /msgpack2json.1
163+ MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR} /docs/msgpack2json.md
164+ COMMAND cat ${CMAKE_SOURCE_DIR} /docs/msgpack2json.md | sed "s/\$ version/${PROJECT_VERSION} /" | ${MD2MAN-ROFF} > ${CMAKE_BINARY_DIR} /msgpack2json.1
165+ VERBATIM )
166+ add_custom_target (msgpack2json-man DEPENDS ${CMAKE_BINARY_DIR} /msgpack2json.1)
167+ add_dependencies (msgpack2json msgpack2json-man)
168+ install (FILES ${CMAKE_BINARY_DIR} /msgpack2json.1 DESTINATION share/man/man1)
169+
170+ add_custom_command (
171+ OUTPUT ${CMAKE_BINARY_DIR} /json2msgpack.1
172+ MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR} /docs/json2msgpack.md
173+ COMMAND cat ${CMAKE_SOURCE_DIR} /docs/json2msgpack.md | sed "s/\$ version/${PROJECT_VERSION} /" | ${MD2MAN-ROFF} > ${CMAKE_BINARY_DIR} /json2msgpack.1
174+ VERBATIM )
175+ add_custom_target (json2msgpack-man DEPENDS ${CMAKE_BINARY_DIR} /json2msgpack.1)
176+ add_dependencies (json2msgpack json2msgpack-man)
177+ install (FILES ${CMAKE_BINARY_DIR} /json2msgpack.1 DESTINATION share/man/man1)
178+
179+ endif ()
117180endif ()
118181
119182
@@ -148,5 +211,23 @@ add_test("json2msgpack-base64-detect-bin-one" ${COMPARE} ${TESTS_DIR}/base64-bin
148211add_test ("json2msgpack-base64-mixed-partial" ${COMPARE} ${TESTS_DIR} /base64-partial-ext .mp ${VALGRIND} ./json2msgpack -bB 50 -i ${TESTS_DIR} /base64-mixed.json)
149212add_test ("json2msgpack-base64-mixed-bin" ${COMPARE} ${TESTS_DIR} /base64-bin-ext .mp ${VALGRIND} ./json2msgpack -bB 22 -i ${TESTS_DIR} /base64-mixed.json)
150213
151- #add_test("json2msgpack-base64-bin" ${COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin.mp valgrind ./json2msgpack -bi ${TESTS_DIR}/base64-prefix.json)
152- #add_test("json2msgpack-base64-bin-lax" ${COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin.mp valgrind ./json2msgpack -lbi ${TESTS_DIR}/base64-prefix-lax.json)
214+ add_test ("json2msgpack-value-string" ${COMPARE} ${TESTS_DIR} /value -string .mp ${VALGRIND} ./json2msgpack -i ${TESTS_DIR} /value -string .json)
215+ add_test ("json2msgpack-value-int" ${COMPARE} ${TESTS_DIR} /value -int.mp ${VALGRIND} ./json2msgpack -i ${TESTS_DIR} /value -int.json)
216+ add_test ("msgpack2json-value-string" ${COMPARE} ${TESTS_DIR} /value -string .json ${VALGRIND} ./msgpack2json -i ${TESTS_DIR} /value -string .mp)
217+ add_test ("msgpack2json-value-int" ${COMPARE} ${TESTS_DIR} /value -int.json ${VALGRIND} ./msgpack2json -i ${TESTS_DIR} /value -int.mp)
218+
219+
220+ # packaging
221+
222+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND EXISTS "/etc/debian_version" )
223+ message (STATUS "Debian-based Linux OS detected" )
224+ set (CPACK_GENERATOR "DEB" )
225+ set (CPACK_PACKAGE_NAME "msgpack-tools" )
226+ set (CPACK_PACKAGE_VERSION "${PROJECT_VERSION} " )
227+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME} -${PROJECT_VERSION} -${CMAKE_SYSTEM_PROCESSOR} " )
228+ set (CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/ludocode/msgpack-tools" )
229+ set (CPACK_DEBIAN_PACKAGE_MAINTAINER "Jerry Jacobs" )
230+ set (CPACK_PACKAGE_CONTACT
"[email protected] " )
231+ set (CPACK_DEBIAN_PACKAGE_DESCRIPTION "Command-line tools for converting between MessagePack and JSON" )
232+ include (CPack)
233+ endif ()
0 commit comments