2026-06-17 18:57:54 -05:00
|
|
|
cmake_minimum_required(VERSION 3.16)
|
|
|
|
|
|
|
|
|
|
project(ikvxx VERSION 0.1.0 LANGUAGES C CXX)
|
|
|
|
|
|
|
|
|
|
option(IKVXX_BUILD_TESTS "Build iKvxx unit tests" ON)
|
|
|
|
|
option(IKVXX_INSTALL "Install iKvxx" ON)
|
|
|
|
|
|
2026-06-17 19:07:51 -05:00
|
|
|
if(IKVXX_BUILD_TESTS)
|
|
|
|
|
include(CTest)
|
|
|
|
|
endif()
|
|
|
|
|
|
2026-06-17 18:57:54 -05:00
|
|
|
set(IKV_BUILD_DEMOS OFF CACHE BOOL "" FORCE)
|
2026-06-17 19:07:51 -05:00
|
|
|
set(IKV_BUILD_TESTS ${IKVXX_BUILD_TESTS} CACHE BOOL "" FORCE)
|
2026-06-17 18:57:54 -05:00
|
|
|
set(IKV_INSTALL OFF CACHE BOOL "" FORCE)
|
|
|
|
|
add_subdirectory(third_party/iKv)
|
|
|
|
|
set_target_properties(ikv PROPERTIES
|
|
|
|
|
PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/third_party/iKv/include/ikv.h")
|
|
|
|
|
|
|
|
|
|
add_library(ikvxx src/value.cpp)
|
|
|
|
|
add_library(ikvxx::ikvxx ALIAS ikvxx)
|
|
|
|
|
target_compile_features(ikvxx PUBLIC cxx_std_17)
|
|
|
|
|
target_include_directories(ikvxx PUBLIC
|
|
|
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
|
|
|
$<INSTALL_INTERFACE:include>)
|
|
|
|
|
target_link_libraries(ikvxx PUBLIC ikv::ikv)
|
|
|
|
|
|
|
|
|
|
if(MSVC)
|
|
|
|
|
target_compile_options(ikvxx PRIVATE /W4 /permissive-)
|
|
|
|
|
else()
|
|
|
|
|
target_compile_options(ikvxx PRIVATE -Wall -Wextra -Wpedantic)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(IKVXX_BUILD_TESTS)
|
|
|
|
|
add_executable(ikvxx_tests tests/value_tests.cpp)
|
|
|
|
|
target_link_libraries(ikvxx_tests PRIVATE ikvxx::ikvxx)
|
|
|
|
|
target_compile_features(ikvxx_tests PRIVATE cxx_std_17)
|
2026-06-17 19:07:51 -05:00
|
|
|
|
|
|
|
|
set(IKVXX_TEST_CASES
|
|
|
|
|
construction_and_type_inspection
|
|
|
|
|
assignments_and_conversions
|
|
|
|
|
objects_members_and_lookup_overloads
|
|
|
|
|
arrays_and_index_overloads
|
|
|
|
|
text_parsing_and_files
|
|
|
|
|
binary_memory_and_files
|
|
|
|
|
refresh_and_ownership)
|
|
|
|
|
|
|
|
|
|
foreach(IKVXX_TEST_CASE IN LISTS IKVXX_TEST_CASES)
|
|
|
|
|
add_test(
|
|
|
|
|
NAME "ikvxx.${IKVXX_TEST_CASE}"
|
|
|
|
|
COMMAND ikvxx_tests --case "${IKVXX_TEST_CASE}")
|
|
|
|
|
endforeach()
|
2026-06-17 18:57:54 -05:00
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(IKVXX_INSTALL)
|
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
|
install(TARGETS ikv ikvxx EXPORT ikvxxTargets)
|
|
|
|
|
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
|
|
|
install(EXPORT ikvxxTargets NAMESPACE ikvxx:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ikvxx)
|
|
|
|
|
configure_package_config_file(cmake/ikvxxConfig.cmake.in
|
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfig.cmake"
|
|
|
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ikvxx)
|
|
|
|
|
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfigVersion.cmake"
|
|
|
|
|
VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
|
|
|
|
|
install(FILES
|
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfig.cmake"
|
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/ikvxxConfigVersion.cmake"
|
|
|
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ikvxx)
|
|
|
|
|
endif()
|