Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae80f5ef57 | ||
|
|
b26e71f960 | ||
|
|
7a2615c231 | ||
|
|
e174831819 | ||
|
|
ac368e9dfb | ||
|
|
d1c2e2df4a | ||
|
|
04e27dc8c5 | ||
|
|
0d675cb048 | ||
|
|
45e1278acb | ||
|
|
217ab02612 | ||
|
|
e872d40223 | ||
|
|
21733eb02e | ||
|
|
a9ce4e6bbc | ||
|
|
eb8c0baa3b | ||
|
|
4e0c119391 | ||
|
|
38b2f40a9a |
@@ -16,33 +16,46 @@ set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT
|
|||||||
set(custom_compiler_flags)
|
set(custom_compiler_flags)
|
||||||
|
|
||||||
include(CheckCCompilerFlag)
|
include(CheckCCompilerFlag)
|
||||||
option(ENABLE_CUSTOM_COMPILER_FLAGS "Enables custom compiler flags for Clang and GCC" ON)
|
option(ENABLE_CUSTOM_COMPILER_FLAGS "Enables custom compiler flags" ON)
|
||||||
if (ENABLE_CUSTOM_COMPILER_FLAGS)
|
if (ENABLE_CUSTOM_COMPILER_FLAGS)
|
||||||
list(APPEND custom_compiler_flags
|
if (("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU"))
|
||||||
-std=c89
|
list(APPEND custom_compiler_flags
|
||||||
-pedantic
|
-std=c89
|
||||||
-Wall
|
-pedantic
|
||||||
-Wextra
|
-Wall
|
||||||
-Werror
|
-Wextra
|
||||||
-Wstrict-prototypes
|
-Werror
|
||||||
-Wwrite-strings
|
-Wstrict-prototypes
|
||||||
-Wshadow
|
-Wwrite-strings
|
||||||
-Winit-self
|
-Wshadow
|
||||||
-Wcast-align
|
-Winit-self
|
||||||
-Wformat=2
|
-Wcast-align
|
||||||
-Wmissing-prototypes
|
-Wformat=2
|
||||||
-Wstrict-overflow=2
|
-Wmissing-prototypes
|
||||||
-Wcast-qual
|
-Wstrict-overflow=2
|
||||||
-Wundef
|
-Wcast-qual
|
||||||
-Wswitch-default
|
-Wundef
|
||||||
-Wconversion
|
-Wswitch-default
|
||||||
-Wc++-compat
|
-Wconversion
|
||||||
-fstack-protector-strong
|
-Wc++-compat
|
||||||
-Wcomma
|
-fstack-protector-strong
|
||||||
-Wdouble-promotion
|
-Wcomma
|
||||||
-Wparentheses
|
-Wdouble-promotion
|
||||||
-Wformat-overflow
|
-Wparentheses
|
||||||
|
-Wformat-overflow
|
||||||
|
-Wunused-macros
|
||||||
|
-Wmissing-variable-declarations
|
||||||
|
-Wused-but-marked-unused
|
||||||
|
-Wswitch-enum
|
||||||
)
|
)
|
||||||
|
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
list(APPEND custom_compiler_flags
|
||||||
|
/GS
|
||||||
|
/Za
|
||||||
|
/sdl
|
||||||
|
/W4
|
||||||
|
)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(ENABLE_SANITIZERS "Enables AddressSanitizer and UndefinedBehaviorSanitizer." OFF)
|
option(ENABLE_SANITIZERS "Enables AddressSanitizer and UndefinedBehaviorSanitizer." OFF)
|
||||||
@@ -99,7 +112,17 @@ set(CJSON_LIB cjson)
|
|||||||
file(GLOB HEADERS cJSON.h)
|
file(GLOB HEADERS cJSON.h)
|
||||||
set(SOURCES cJSON.c)
|
set(SOURCES cJSON.c)
|
||||||
|
|
||||||
add_library("${CJSON_LIB}" "${HEADERS}" "${SOURCES}")
|
option(BUILD_SHARED_AND_STATIC_LIBS "Build both shared and static libraries" Off)
|
||||||
|
|
||||||
|
if (NOT BUILD_SHARED_AND_STATIC_LIBS)
|
||||||
|
add_library("${CJSON_LIB}" "${HEADERS}" "${SOURCES}")
|
||||||
|
else()
|
||||||
|
# See https://cmake.org/Wiki/CMake_FAQ#How_do_I_make_my_shared_and_static_libraries_have_the_same_root_name.2C_but_different_suffixes.3F
|
||||||
|
add_library("${CJSON_LIB}" SHARED "${HEADERS}" "${SOURCES}")
|
||||||
|
add_library("${CJSON_LIB}-static" STATIC "${HEADERS}" "${SOURCES}")
|
||||||
|
set_target_properties("${CJSON_LIB}-static" PROPERTIES OUTPUT_NAME "${CJSON_LIB}")
|
||||||
|
set_target_properties("${CJSON_LIB}-static" PROPERTIES PREFIX "lib")
|
||||||
|
endif()
|
||||||
if (NOT WIN32)
|
if (NOT WIN32)
|
||||||
target_link_libraries("${CJSON_LIB}" m)
|
target_link_libraries("${CJSON_LIB}" m)
|
||||||
endif()
|
endif()
|
||||||
@@ -110,6 +133,9 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/library_config/libcjson.pc.in"
|
|||||||
install(FILES cJSON.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cjson")
|
install(FILES cJSON.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cjson")
|
||||||
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcjson.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcjson.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||||
install(TARGETS "${CJSON_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}" EXPORT "${CJSON_LIB}")
|
install(TARGETS "${CJSON_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}" EXPORT "${CJSON_LIB}")
|
||||||
|
if (BUILD_SHARED_AND_STATIC_LIBS)
|
||||||
|
install(TARGETS "${CJSON_LIB}-static" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||||
|
endif()
|
||||||
if(ENABLE_TARGET_EXPORT)
|
if(ENABLE_TARGET_EXPORT)
|
||||||
# export library information for CMake projects
|
# export library information for CMake projects
|
||||||
install(EXPORT "${CJSON_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/cJSON")
|
install(EXPORT "${CJSON_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/cJSON")
|
||||||
@@ -128,13 +154,25 @@ if(ENABLE_CJSON_UTILS)
|
|||||||
file(GLOB HEADERS_UTILS cJSON_Utils.h)
|
file(GLOB HEADERS_UTILS cJSON_Utils.h)
|
||||||
set(SOURCES_UTILS cJSON_Utils.c)
|
set(SOURCES_UTILS cJSON_Utils.c)
|
||||||
|
|
||||||
add_library("${CJSON_UTILS_LIB}" "${HEADERS_UTILS}" "${SOURCES_UTILS}")
|
if (NOT BUILD_SHARED_AND_STATIC_LIBS)
|
||||||
target_link_libraries("${CJSON_UTILS_LIB}" "${CJSON_LIB}")
|
add_library("${CJSON_UTILS_LIB}" "${HEADERS_UTILS}" "${SOURCES_UTILS}")
|
||||||
|
target_link_libraries("${CJSON_UTILS_LIB}" "${CJSON_LIB}")
|
||||||
|
else()
|
||||||
|
add_library("${CJSON_UTILS_LIB}" SHARED "${HEADERS_UTILS}" "${SOURCES_UTILS}")
|
||||||
|
target_link_libraries("${CJSON_UTILS_LIB}" "${CJSON_LIB}")
|
||||||
|
add_library("${CJSON_UTILS_LIB}-static" STATIC "${HEADERS_UTILS}" "${SOURCES_UTILS}")
|
||||||
|
target_link_libraries("${CJSON_UTILS_LIB}-static" "${CJSON_LIB}-static")
|
||||||
|
set_target_properties("${CJSON_UTILS_LIB}-static" PROPERTIES OUTPUT_NAME "${CJSON_UTILS_LIB}")
|
||||||
|
set_target_properties("${CJSON_UTILS_LIB}-static" PROPERTIES PREFIX "lib")
|
||||||
|
endif()
|
||||||
|
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/library_config/libcjson_utils.pc.in"
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/library_config/libcjson_utils.pc.in"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/libcjson_utils.pc" @ONLY)
|
"${CMAKE_CURRENT_BINARY_DIR}/libcjson_utils.pc" @ONLY)
|
||||||
|
|
||||||
install(TARGETS "${CJSON_UTILS_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}" EXPORT "${CJSON_UTILS_LIB}")
|
install(TARGETS "${CJSON_UTILS_LIB}" DESTINATION "${CMAKE_INSTALL_LIBDIR}" EXPORT "${CJSON_UTILS_LIB}")
|
||||||
|
if (BUILD_SHARED_AND_STATIC_LIBS)
|
||||||
|
install(TARGETS "${CJSON_UTILS_LIB}-static" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||||
|
endif()
|
||||||
install(FILES cJSON_Utils.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cjson")
|
install(FILES cJSON_Utils.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/cjson")
|
||||||
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcjson_utils.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcjson_utils.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||||
if(ENABLE_TARGET_EXPORT)
|
if(ENABLE_TARGET_EXPORT)
|
||||||
|
|||||||
@@ -85,10 +85,11 @@ You can change the build process with a list of different options that you can p
|
|||||||
* `-DENABLE_CJSON_TEST=On`: Enable building the tests. (on by default)
|
* `-DENABLE_CJSON_TEST=On`: Enable building the tests. (on by default)
|
||||||
* `-DENABLE_CJSON_UTILS=On`: Enable building cJSON_Utils. (off by default)
|
* `-DENABLE_CJSON_UTILS=On`: Enable building cJSON_Utils. (off by default)
|
||||||
* `-DENABLE_TARGET_EXPORT=On`: Enable the export of CMake targets. Turn off if it makes problems. (on by default)
|
* `-DENABLE_TARGET_EXPORT=On`: Enable the export of CMake targets. Turn off if it makes problems. (on by default)
|
||||||
* `-DENABLE_CUSTOM_COMPILER_FLAGS=On`: Enable custom compiler flags (currently for Clang and GCC). Turn off if it makes problems. (on by default)
|
* `-DENABLE_CUSTOM_COMPILER_FLAGS=On`: Enable custom compiler flags (currently for Clang, GCC and MSVC). Turn off if it makes problems. (on by default)
|
||||||
* `-DENABLE_VALGRIND=On`: Run tests with [valgrind](http://valgrind.org). (off by default)
|
* `-DENABLE_VALGRIND=On`: Run tests with [valgrind](http://valgrind.org). (off by default)
|
||||||
* `-DENABLE_SANITIZERS=On`: Compile cJSON with [AddressSanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer) and [UndefinedBehaviorSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html) enabled (if possible). (off by default)
|
* `-DENABLE_SANITIZERS=On`: Compile cJSON with [AddressSanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer) and [UndefinedBehaviorSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html) enabled (if possible). (off by default)
|
||||||
* `-DBUILD_SHARED_LIBS=On`: Build the shared libraries. (on by default)
|
* `-DBUILD_SHARED_LIBS=On`: Build the shared libraries. (on by default)
|
||||||
|
* `-DBUILD_SHARED_AND_STATIC_LIBS=On`: Build both shared and static libraries. (off by default)
|
||||||
* `-DCMAKE_INSTALL_PREFIX=/usr`: Set a prefix for the installation.
|
* `-DCMAKE_INSTALL_PREFIX=/usr`: Set a prefix for the installation.
|
||||||
|
|
||||||
If you are packaging cJSON for a distribution of Linux, you would probably take these steps for example:
|
If you are packaging cJSON for a distribution of Linux, you would probably take these steps for example:
|
||||||
|
|||||||
43
cJSON.c
43
cJSON.c
@@ -23,9 +23,19 @@
|
|||||||
/* cJSON */
|
/* cJSON */
|
||||||
/* JSON parser in C. */
|
/* JSON parser in C. */
|
||||||
|
|
||||||
|
/* disable warnings about old C89 functions in MSVC */
|
||||||
|
#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER)
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#pragma GCC visibility push(default)
|
#pragma GCC visibility push(default)
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning (push)
|
||||||
|
/* disable warning about single line comments in system headers */
|
||||||
|
#pragma warning (disable : 4001)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -36,6 +46,9 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning (pop)
|
||||||
|
#endif
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#pragma GCC visibility pop
|
#pragma GCC visibility pop
|
||||||
#endif
|
#endif
|
||||||
@@ -101,7 +114,27 @@ typedef struct internal_hooks
|
|||||||
void *(*reallocate)(void *pointer, size_t size);
|
void *(*reallocate)(void *pointer, size_t size);
|
||||||
} internal_hooks;
|
} internal_hooks;
|
||||||
|
|
||||||
static internal_hooks global_hooks = { malloc, free, realloc };
|
#if defined(_MSC_VER)
|
||||||
|
/* work around MSVC error C2322: '...' address of dillimport '...' is not static */
|
||||||
|
static void *internal_malloc(size_t size)
|
||||||
|
{
|
||||||
|
return malloc(size);
|
||||||
|
}
|
||||||
|
static void internal_free(void *pointer)
|
||||||
|
{
|
||||||
|
free(pointer);
|
||||||
|
}
|
||||||
|
static void *internal_realloc(void *pointer, size_t size)
|
||||||
|
{
|
||||||
|
return realloc(pointer, size);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define internal_malloc malloc
|
||||||
|
#define internal_free free
|
||||||
|
#define internal_realloc realloc
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static internal_hooks global_hooks = { internal_malloc, internal_free, internal_realloc };
|
||||||
|
|
||||||
static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks)
|
static unsigned char* cJSON_strdup(const unsigned char* string, const internal_hooks * const hooks)
|
||||||
{
|
{
|
||||||
@@ -114,7 +147,8 @@ static unsigned char* cJSON_strdup(const unsigned char* string, const internal_h
|
|||||||
}
|
}
|
||||||
|
|
||||||
length = strlen((const char*)string) + sizeof("");
|
length = strlen((const char*)string) + sizeof("");
|
||||||
if (!(copy = (unsigned char*)hooks->allocate(length)))
|
copy = (unsigned char*)hooks->allocate(length);
|
||||||
|
if (copy == NULL)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -208,7 +242,6 @@ typedef struct
|
|||||||
|
|
||||||
/* check if the given size is left to read in a given parse buffer (starting with 1) */
|
/* check if the given size is left to read in a given parse buffer (starting with 1) */
|
||||||
#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length))
|
#define can_read(buffer, size) ((buffer != NULL) && (((buffer)->offset + size) <= (buffer)->length))
|
||||||
#define cannot_read(buffer, size) (!can_read(buffer, size))
|
|
||||||
/* check if the buffer can be accessed at the given index (starting with 0) */
|
/* check if the buffer can be accessed at the given index (starting with 0) */
|
||||||
#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length))
|
#define can_access_at_index(buffer, index) ((buffer != NULL) && (((buffer)->offset + index) < (buffer)->length))
|
||||||
#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index))
|
#define cannot_access_at_index(buffer, index) (!can_access_at_index(buffer, index))
|
||||||
@@ -1816,7 +1849,7 @@ CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSO
|
|||||||
item->type &= ~cJSON_StringIsConst;
|
item->type &= ~cJSON_StringIsConst;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__clang__) || ((__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
|
#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#endif
|
#endif
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@@ -1838,7 +1871,7 @@ CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJ
|
|||||||
item->type |= cJSON_StringIsConst;
|
item->type |= cJSON_StringIsConst;
|
||||||
cJSON_AddItemToArray(object, item);
|
cJSON_AddItemToArray(object, item);
|
||||||
}
|
}
|
||||||
#if defined (__clang__) || ((__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
|
#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5))))
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -20,13 +20,32 @@
|
|||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* disable warnings about old C89 functions in MSVC */
|
||||||
|
#if !defined(_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER)
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUCC__
|
||||||
#pragma GCC visibility push(default)
|
#pragma GCC visibility push(default)
|
||||||
|
#endif
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning (push)
|
||||||
|
/* disable warning about single line comments in system headers */
|
||||||
|
#pragma warning (disable : 4001)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning (pop)
|
||||||
|
#endif
|
||||||
|
#ifdef __GNUCC__
|
||||||
#pragma GCC visibility pop
|
#pragma GCC visibility pop
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "cJSON_Utils.h"
|
#include "cJSON_Utils.h"
|
||||||
|
|
||||||
|
|||||||
58
meson.build
Normal file
58
meson.build
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
project('cJSON', 'c', default_options: ['c_std=c89'])
|
||||||
|
version = '1.6.0'
|
||||||
|
soversion = '0'
|
||||||
|
|
||||||
|
compiler = meson.get_compiler('c')
|
||||||
|
|
||||||
|
compiler_flags = []
|
||||||
|
|
||||||
|
if (compiler.get_id() == 'clang') or (compiler.get_id() == 'gcc')
|
||||||
|
compiler_flags += [
|
||||||
|
'-pedantic',
|
||||||
|
'-Wall',
|
||||||
|
'-Wextra',
|
||||||
|
'-Werror',
|
||||||
|
'-Wstrict-prototypes',
|
||||||
|
'-Wwrite-strings',
|
||||||
|
'-Wshadow',
|
||||||
|
'-Winit-self',
|
||||||
|
'-Wcast-align',
|
||||||
|
'-Wformat=2',
|
||||||
|
'-Wmissing-prototypes',
|
||||||
|
'-Wstrict-overflow=2',
|
||||||
|
'-Wcast-qual',
|
||||||
|
'-Wundef',
|
||||||
|
'-Wswitch-default',
|
||||||
|
'-Wconversion',
|
||||||
|
'-Wc++-compat',
|
||||||
|
'-fstack-protector-strong',
|
||||||
|
'-Wcomma',
|
||||||
|
'-Wdouble-promotion',
|
||||||
|
'-Wparentheses',
|
||||||
|
'-Wformat-overflow',
|
||||||
|
'-Wunused-macros',
|
||||||
|
'-Wmissing-variable-declarations',
|
||||||
|
'-Wused-but-marked-unused',
|
||||||
|
'-Wswitch-enum'
|
||||||
|
]
|
||||||
|
endif
|
||||||
|
|
||||||
|
foreach flag : compiler_flags
|
||||||
|
if compiler.has_argument(flag)
|
||||||
|
add_project_arguments(flag, language: 'c')
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
math = compiler.find_library('m', required: false)
|
||||||
|
|
||||||
|
cjson = shared_library('cjson', 'cJSON.c', dependencies: math, version: version, soversion: soversion, install: true)
|
||||||
|
if get_option('enable_cjson_utils')
|
||||||
|
cjson_utils = shared_library('cjson_utils', 'cJSON_Utils.c', link_with: cjson, version: version, soversion: soversion, install: true)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if get_option('enable_cjson_tests')
|
||||||
|
cjson_test = executable('cjson_test', 'test.c', link_with: cjson)
|
||||||
|
test('cjson_test', cjson_test)
|
||||||
|
endif
|
||||||
|
|
||||||
|
subdir('tests')
|
||||||
2
meson_options.txt
Normal file
2
meson_options.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
option('enable_cjson_utils', type: 'boolean', value: true)
|
||||||
|
option('enable_cjson_tests', type: 'boolean', value: true)
|
||||||
@@ -25,6 +25,14 @@ if(ENABLE_CJSON_TEST)
|
|||||||
target_compile_options(unity PRIVATE "-fno-sanitize=float-divide-by-zero")
|
target_compile_options(unity PRIVATE "-fno-sanitize=float-divide-by-zero")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
# Disable -Wswitch-enum for Unity
|
||||||
|
if (FLAG_SUPPORTED_Wswitchenum)
|
||||||
|
if ("${CMAKE_VERSION}" VERSION_LESS "2.8.12")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-switch-enum")
|
||||||
|
else()
|
||||||
|
target_compile_options(unity PRIVATE "-Wno-switch-enum")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
#copy test files
|
#copy test files
|
||||||
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/inputs")
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/inputs")
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ static cJSON_bool test_apply_patch(const cJSON * const test)
|
|||||||
return successful;
|
return successful;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cJSON_bool test_generate_test(cJSON *test __attribute__((unused)))
|
static cJSON_bool test_generate_test(cJSON *test)
|
||||||
{
|
{
|
||||||
cJSON *doc = NULL;
|
cJSON *doc = NULL;
|
||||||
cJSON *patch = NULL;
|
cJSON *patch = NULL;
|
||||||
|
|||||||
58
tests/meson.build
Normal file
58
tests/meson.build
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
if get_option('enable_cjson_tests')
|
||||||
|
unity_flags = []
|
||||||
|
|
||||||
|
if (compiler.get_id() == 'clang') or (compiler.get_id() == 'gcc')
|
||||||
|
unity_flags += [
|
||||||
|
'-Wno-switch-enum',
|
||||||
|
'-Wno-error',
|
||||||
|
'-fvisibility=default',
|
||||||
|
'-fno-sanitize=float-divide-by-zero'
|
||||||
|
]
|
||||||
|
endif
|
||||||
|
|
||||||
|
unity_c_args = []
|
||||||
|
foreach flag : unity_flags
|
||||||
|
if compiler.has_argument(flag)
|
||||||
|
unity_c_args += flag
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
unity = library('unity', 'unity/src/unity.c', c_args: unity_c_args)
|
||||||
|
common = library('test_common', 'common.c')
|
||||||
|
|
||||||
|
cjson_tests = [
|
||||||
|
'parse_examples',
|
||||||
|
'parse_number',
|
||||||
|
'parse_hex4',
|
||||||
|
'parse_string',
|
||||||
|
'parse_array',
|
||||||
|
'parse_object',
|
||||||
|
'parse_value',
|
||||||
|
'print_string',
|
||||||
|
'print_number',
|
||||||
|
'print_array',
|
||||||
|
'print_object',
|
||||||
|
'print_value',
|
||||||
|
'misc_tests',
|
||||||
|
'parse_with_opts',
|
||||||
|
'compare_tests'
|
||||||
|
]
|
||||||
|
|
||||||
|
foreach cjson_test : cjson_tests
|
||||||
|
exe = executable(cjson_test, cjson_test + '.c', link_with: [common, cjson, unity])
|
||||||
|
test(cjson_test, exe, workdir: meson.current_source_dir())
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
if get_option('enable_cjson_utils')
|
||||||
|
cjson_utils_tests = [
|
||||||
|
'json_patch_tests',
|
||||||
|
'old_utils_tests',
|
||||||
|
'misc_utils_tests'
|
||||||
|
]
|
||||||
|
|
||||||
|
foreach cjson_utils_test : cjson_utils_tests
|
||||||
|
exe = executable(cjson_utils_test, cjson_utils_test + '.c', link_with: [common, cjson_utils, unity, cjson])
|
||||||
|
test(cjson_utils_test, exe, workdir: meson.current_source_dir())
|
||||||
|
endforeach
|
||||||
|
endif
|
||||||
|
endif
|
||||||
@@ -49,16 +49,16 @@ static void print_number_should_print_zero(void)
|
|||||||
|
|
||||||
static void print_number_should_print_negative_integers(void)
|
static void print_number_should_print_negative_integers(void)
|
||||||
{
|
{
|
||||||
assert_print_number("-1", -1);
|
assert_print_number("-1", -1.0);
|
||||||
assert_print_number("-32768", -32768);
|
assert_print_number("-32768", -32768.0);
|
||||||
assert_print_number("-2147483648", -2147483648.0);
|
assert_print_number("-2147483648", -2147483648.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_number_should_print_positive_integers(void)
|
static void print_number_should_print_positive_integers(void)
|
||||||
{
|
{
|
||||||
assert_print_number("1", 1);
|
assert_print_number("1", 1.0);
|
||||||
assert_print_number("32767", 32767);
|
assert_print_number("32767", 32767.0);
|
||||||
assert_print_number("2147483647", 2147483647);
|
assert_print_number("2147483647", 2147483647.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_number_should_print_positive_reals(void)
|
static void print_number_should_print_positive_reals(void)
|
||||||
@@ -68,6 +68,7 @@ static void print_number_should_print_positive_reals(void)
|
|||||||
assert_print_number("1000000000000", 10e11);
|
assert_print_number("1000000000000", 10e11);
|
||||||
assert_print_number("1.23e+129", 123e+127);
|
assert_print_number("1.23e+129", 123e+127);
|
||||||
assert_print_number("1.23e-126", 123e-128);
|
assert_print_number("1.23e-126", 123e-128);
|
||||||
|
assert_print_number("3.1415926535897931", 3.1415926535897931);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_number_should_print_negative_reals(void)
|
static void print_number_should_print_negative_reals(void)
|
||||||
|
|||||||
Reference in New Issue
Block a user