diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cbfb35..100c786 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,18 +10,14 @@ include_directories("${INCLUDE_PATH}") set(RJP_LIBFLAGS "-lrjp") -configure_file( - "${INCLUDE_PATH}/config.h.in" - "${INCLUDE_PATH}/config.h" -) -configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc.cmake.in" - "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc" - @ONLY -) option(ENABLE_DIAGNOSTICS "Print diagnostic messages when parsing json to help identify issues" ON) -option(ENABLE_SHARED "Build shared library" OFF) +option(ENABLE_SHARED "Build shared library" ON) +option(ENABLE_COMMENTS "Allow C++ style comments in JSON" ON) +option(ENABLE_TRAILING_COMMA "Allow a comma after the last element of an array/object" OFF) option(ENABLE_C++ "Build C++ wrapper library" ON) +option(BUILD_TESTS "Build test programs" OFF) +option(ENABLE_PROFILING "Enable asan" OFF) +mark_as_advanced(ENABLE_PROFILING) set(SOURCE_LIST "src/rjp_ordered_object.c" "src/rjp_unordered_object.c" "src/input.c" "src/output.c" "src/rjp_array.c" "src/rjp.c" "src/rjp_object.c" "src/rjp_string.c" "src/tree.c") if(ENABLE_SHARED) @@ -31,11 +27,22 @@ else() add_library(rjp STATIC ${SOURCE_LIST}) endif() +if(ENABLE_COMMENTS) + set(RJP_ENABLE_COMMENTS 1) +endif() +if(ENABLE_TRAILING_COMMA) + set(RJP_ENABLE_TRAILING_COMMA 1) +endif() +if(ENABLE_DIAGNOSTICS) + set(RJP_ENABLE_DIAGNOSTICS 1) +endif() +if(ENABLE_PROFILING) + target_compile_options(rjp PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls) + target_link_options(rjp PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls) +endif() + set_target_properties(rjp PROPERTIES PUBLIC_HEADER ${INCLUDE_PATH}/rjp.h) target_compile_options(rjp PRIVATE -Wall -Wextra -pedantic) -if(ENABLE_DIAGNOSTICS) - target_compile_definitions(rjp PRIVATE RJP_DIAGNOSTICS) -endif() install(TARGETS rjp ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -49,5 +56,24 @@ if(ENABLE_C++) add_subdirectory(rjp++) endif() +if(BUILD_TESTS) + add_executable(tester src/test/test.c) + target_compile_options(tester PRIVATE -Wall -Wextra -pedantic) + target_link_libraries(tester rjp) + if(ENABLE_PROFILING) + target_compile_options(tester PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls) + target_link_options(tester PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls) + endif() +endif() + +configure_file( + "${INCLUDE_PATH}/config.h.in" + "${INCLUDE_PATH}/config.h" +) +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc.cmake.in" + "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc" + @ONLY +) add_custom_target(uninstall cat install_manifest.txt | xargs rm) diff --git a/include/config.h.in b/include/config.h.in index 4e9b489..987c7ac 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -23,5 +23,9 @@ #define RJP_VERSION_MINOR @rjp_VERSION_MINOR@ #define RJP_VERSION_REVISION @rjp_VERSION_REVISION@ +#cmakedefine RJP_ENABLE_COMMENTS +#cmakedefine RJP_ENABLE_TRAILING_COMMA +#cmakedefine RJP_ENABLE_DIAGNOSTICS + #endif