|
| 1 | +cmake_minimum_required(VERSION 2.6) |
| 2 | + |
| 3 | +project(msgpack2json) |
| 4 | + |
| 5 | +set(CONTRIB_DIR ${CMAKE_BINARY_DIR}/contrib) |
| 6 | +file(MAKE_DIRECTORY ${CONTRIB_DIR}) |
| 7 | + |
| 8 | +if(NOT CMAKE_BUILD_TYPE) |
| 9 | + message(STATUS "No build type selected, default to Release") |
| 10 | + set(CMAKE_BUILD_TYPE "Release") |
| 11 | +endif() |
| 12 | + |
| 13 | +if(CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 14 | + set(CMAKE_VERBOSE_MAKEFILE ON) |
| 15 | +endif() |
| 16 | + |
| 17 | +if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)") |
| 18 | + # Windows support is not implemented yet |
| 19 | + add_definitions(/W2) |
| 20 | +else() |
| 21 | + set(FLAGS "-std=c99 -Wall -Wextra") |
| 22 | + set(CMAKE_C_FLAGS_DEBUG "${FLAGS} -g -O0 -DDEBUG") |
| 23 | + set(CMAKE_C_FLAGS_RELEASE "${FLAGS} -O3 -flto -DNDEBUG -fPIC -DPIC") |
| 24 | + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fwhole-program -s") |
| 25 | +endif() |
| 26 | + |
| 27 | + |
| 28 | +# mpack |
| 29 | + |
| 30 | +set(MPACK_VERSION "0.5.1") |
| 31 | +set(MPACK_FILE "mpack-amalgamation-${MPACK_VERSION}.tar.gz") |
| 32 | +set(MPACK_DIR "${CONTRIB_DIR}/mpack-amalgamation-${MPACK_VERSION}") |
| 33 | + |
| 34 | +execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_SOURCE_DIR}/contrib/${MPACK_FILE} WORKING_DIRECTORY ${CONTRIB_DIR}) |
| 35 | + |
| 36 | +file(COPY ${MPACK_DIR}/src/mpack-config.h.sample DESTINATION ${CMAKE_BINARY_DIR}) |
| 37 | +file(RENAME ${CMAKE_BINARY_DIR}/mpack-config.h.sample ${CMAKE_BINARY_DIR}/mpack-config.h) |
| 38 | + |
| 39 | +file(GLOB_RECURSE MPACK_SRCS ${MPACK_DIR}/src/*.c) |
| 40 | +include_directories(SYSTEM ${CMAKE_BINARY_DIR} ${MPACK_DIR}/src) |
| 41 | + |
| 42 | + |
| 43 | +# yajl |
| 44 | + |
| 45 | +set(YAJL_COMMIT "78764146789a0aa263f2c10316cab1b651166cd7") |
| 46 | +set(YAJL_VERSION "2.1.1") |
| 47 | +set(YAJL_FILE "yajl-${YAJL_COMMIT}.tar.gz") |
| 48 | +set(YAJL_DIR "${CONTRIB_DIR}/yajl-${YAJL_COMMIT}") |
| 49 | + |
| 50 | +execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf "${CMAKE_SOURCE_DIR}/contrib/${YAJL_FILE}" WORKING_DIRECTORY "${CONTRIB_DIR}") |
| 51 | + |
| 52 | +execute_process(COMMAND ./configure WORKING_DIRECTORY ${YAJL_DIR}) |
| 53 | + |
| 54 | +file(GLOB_RECURSE YAJL_SRCS ${YAJL_DIR}/src/*.c) |
| 55 | +include_directories(SYSTEM ${YAJL_DIR}/build/yajl-${YAJL_VERSION}/include) |
| 56 | + |
| 57 | + |
| 58 | +# libb64 |
| 59 | + |
| 60 | +set(LIBB64_VERSION "1.2.1") |
| 61 | +set(LIBB64_FILE "libb64-${LIBB64_VERSION}.zip") |
| 62 | +set(LIBB64_DIR "${CONTRIB_DIR}/libb64-${LIBB64_VERSION}") |
| 63 | + |
| 64 | +execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_SOURCE_DIR}/contrib/${LIBB64_FILE}" WORKING_DIRECTORY "${CONTRIB_DIR}") |
| 65 | + |
| 66 | +# Remove libb64's newlines |
| 67 | +set(LIBB64_CENCODE_FILE ${LIBB64_DIR}/src/cencode.c) |
| 68 | +file(READ ${LIBB64_CENCODE_FILE} LIBB64_CENCODE) |
| 69 | +string(REPLACE "*codechar++ = '\\n';" "/* *codechar++ = '\\n'; */" LIBB64_CENCODE "${LIBB64_CENCODE}") |
| 70 | +file(WRITE ${LIBB64_CENCODE_FILE} "${LIBB64_CENCODE}") |
| 71 | + |
| 72 | +file(GLOB_RECURSE LIBB64_SRCS ${LIBB64_DIR}/src/*.c) |
| 73 | +include_directories(SYSTEM ${LIBB64_DIR}/include) |
| 74 | + |
| 75 | + |
| 76 | +# targets |
| 77 | + |
| 78 | +add_executable(msgpack2json src/msgpack2json.c ${MPACK_SRCS} ${YAJL_SRCS} ${LIBB64_SRCS}) |
| 79 | +add_executable(json2msgpack src/json2msgpack.c ${MPACK_SRCS} ${YAJL_SRCS} ${LIBB64_SRCS}) |
| 80 | + |
| 81 | +install(TARGETS msgpack2json json2msgpack DESTINATION bin) |
| 82 | + |
| 83 | +install(FILES ${CMAKE_SOURCE_DIR}/docs/msgpack2json.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1) |
| 84 | +install(FILES ${CMAKE_SOURCE_DIR}/docs/json2msgpack.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1) |
| 85 | + |
| 86 | + |
| 87 | +# testing |
| 88 | + |
| 89 | +set(TESTS_DIR "${CMAKE_SOURCE_DIR}/tests") |
| 90 | +set(TEST_COMPARE_SCRIPT "${CMAKE_SOURCE_DIR}/tools/test-compare.sh") |
| 91 | +set(TEST_FAIL_SCRIPT "${CMAKE_SOURCE_DIR}/tools/test-fail.sh") |
| 92 | + |
| 93 | +enable_testing() |
| 94 | + |
| 95 | +add_test("json2msgpack-basic" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/basic.mp ./json2msgpack -i ${TESTS_DIR}/basic.json) |
| 96 | +add_test("json2msgpack-basic-min" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/basic.mp ./json2msgpack -i ${TESTS_DIR}/basic-min.json) |
| 97 | +add_test("json2msgpack-basic-lax" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/basic.mp ./json2msgpack -li ${TESTS_DIR}/basic-lax.json) |
| 98 | +add_test("json2msgpack-basic-strict-fail" ${TEST_FAIL_SCRIPT} ./json2msgpack -i ${TESTS_DIR}/basic-lax.json) |
| 99 | +add_test("json2msgpack-basic-base64" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/basic.mp ./json2msgpack -B 22 -bi ${TESTS_DIR}/basic.json) |
| 100 | + |
| 101 | +add_test("msgpack2json-basic-min" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/basic-min.json ./msgpack2json -i ${TESTS_DIR}/basic.mp) |
| 102 | +add_test("msgpack2json-basic" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/basic.json ./msgpack2json -pi ${TESTS_DIR}/basic.mp) |
| 103 | +add_test("msgpack2json-basic-debug" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/basic.json ./msgpack2json -di ${TESTS_DIR}/basic.mp) |
| 104 | + |
| 105 | +add_test("json2msgpack-base64-str-prefix" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-str-prefix.mp ./json2msgpack -i ${TESTS_DIR}/base64-prefix.json) |
| 106 | +add_test("json2msgpack-base64-bin" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin-ext.mp ./json2msgpack -bi ${TESTS_DIR}/base64-prefix.json) |
| 107 | +add_test("json2msgpack-base64-bin-lax" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin-ext.mp ./json2msgpack -bli ${TESTS_DIR}/base64-prefix-lax.json) |
| 108 | + |
| 109 | +add_test("json2msgpack-base64-detect-str" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-str.mp ./json2msgpack -B 200 -i ${TESTS_DIR}/base64-detect.json) |
| 110 | +add_test("json2msgpack-base64-detect-partial" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-partial.mp ./json2msgpack -B 50 -i ${TESTS_DIR}/base64-detect.json) |
| 111 | +add_test("json2msgpack-base64-detect-bin" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin.mp ./json2msgpack -B 22 -i ${TESTS_DIR}/base64-detect.json) |
| 112 | +add_test("json2msgpack-base64-detect-bin-one" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin.mp ./json2msgpack -B 1 -i ${TESTS_DIR}/base64-detect.json) |
| 113 | + |
| 114 | +add_test("json2msgpack-base64-mixed-partial" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-partial-ext.mp ./json2msgpack -bB 50 -i ${TESTS_DIR}/base64-mixed.json) |
| 115 | +add_test("json2msgpack-base64-mixed-bin" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin-ext.mp ./json2msgpack -bB 22 -i ${TESTS_DIR}/base64-mixed.json) |
| 116 | + |
| 117 | +#add_test("json2msgpack-base64-bin" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin.mp ./json2msgpack -bi ${TESTS_DIR}/base64-prefix.json) |
| 118 | +#add_test("json2msgpack-base64-bin-lax" ${TEST_COMPARE_SCRIPT} ${TESTS_DIR}/base64-bin.mp ./json2msgpack -lbi ${TESTS_DIR}/base64-prefix-lax.json) |
0 commit comments