rjp/CMakeLists.txt
2021-01-03 10:15:52 -08:00

72 lines
2.2 KiB
CMake

project(rjp)
cmake_minimum_required(VERSION 3.0.2)
include(GNUInstallDirs)
set(rjp_VERSION_MAJOR 1)
set(rjp_VERSION_MINOR 0)
set(rjp_VERSION_REVISION 0)
set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include)
include_directories("${INCLUDE_PATH}")
set(RJP_LIBFLAGS "-lrjp")
option(ENABLE_DIAGNOSTICS "Print diagnostic messages when parsing json to help identify issues" ON)
option(ENABLE_SHARED "Build shared library" ON)
option(ENABLE_C++ "Build C++ wrapper library" OFF)
option(BUILD_TESTS "Build test programs" OFF)
option(ENABLE_PROFILING "Enable asan" OFF)
mark_as_advanced(ENABLE_PROFILING)
set(SOURCE_LIST "src/rjp_lex.c" "src/rjp_ordered_object.c" "src/rjp_unordered_object.c" "src/rjp_parse.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)
add_library(rjp SHARED ${SOURCE_LIST})
set_target_properties(rjp PROPERTIES SOVERSION "${rjp_VERSION_MAJOR}.${rjp_VERSION_MINOR}.${rjp_VERSION_REVISION}")
else()
add_library(rjp STATIC ${SOURCE_LIST})
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)
install(TARGETS rjp
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)
if(ENABLE_C++)
add_subdirectory(rjp++)
endif()
if(BUILD_TESTS)
enable_testing()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
--force-new-ctest-process
--verbose
--output-on-failure
)
add_subdirectory(tests)
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)