cmake_minimum_required(VERSION "4.0.0") project("libturns" LANGUAGES C CXX DESCRIPTION "The core library for 'Turns, the simple turn order tracker'" VERSION "1.0.0" ) include("FetchContent") include("GlibMkenums") find_package("PkgConfig" REQUIRED) #Dependencies pkg_check_modules("glib" IMPORTED_TARGET REQUIRED "glib-2.0>=${TURNS_GLIB_MINIMUM_VERSION}" "gio-2.0>=${TURNS_GLIB_MINIMUM_VERSION}" "gobject-2.0>=${TURNS_GLIB_MINIMUM_VERSION}" ) pkg_check_modules("glibmm" IMPORTED_TARGET REQUIRED "giomm-2.68>=${TURNS_GLIB_MINIMUM_VERSION}" "glibmm-2.68>=${TURNS_GLIB_MINIMUM_VERSION}" ) # Testing Dependencies FetchContent_Declare( "Catch2" URL "https://github.com/catchorg/Catch2/archive/refs/tags/v3.6.0.tar.gz" URL_HASH "SHA256=485932259a75c7c6b72d4b874242c489ea5155d17efa345eb8cc72159f49f356" EXCLUDE_FROM_ALL SYSTEM FIND_PACKAGE_ARGS ) FetchContent_MakeAvailable("Catch2") include("Catch") # Library set(HEADERS "src/turns-disposition.h" "src/turns-init.h" "src/turns-participant.h" "src/turns-turn-order.h" "src/turns.h" ) set(SOURCES "src/turns-init.cpp" "src/turns-participant.cpp" "src/turns-turn-order.cpp" ) add_library("lib" ${SOURCES}) add_library("turns::lib" ALIAS "lib") target_sources("lib" PUBLIC FILE_SET HEADERS BASE_DIRS "src" FILES ${HEADERS} ) target_compile_options("lib" PUBLIC "$<$:-Wall>" "$<$:-Wextra>" "$<$:-Werror>" "$<$:-pedantic-errors>" "$<$:-Wall>" "$<$:-Wextra>" "$<$:-Werror>" "$<$:-pedantic-errors>" ) target_compile_features("lib" PUBLIC "c_std_23" "cxx_std_23" ) target_include_directories("lib" PUBLIC "src") target_link_libraries("lib" PUBLIC "PkgConfig::glib" ) set_target_properties("lib" PROPERTIES OUTPUT_NAME "turns" SOVERSION "${PROJECT_VERSION_MAJOR}" VERSION "${PROJECT_VERSION}" INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}" C_EXTENSIONS OFF CXX_EXTENSIONS OFF ) target_add_glib_enums("lib" HEADER_TEMPLATE "src/turns-enums.h.in" SOURCE_TEMPLATE "src/turns-enums.c.in" OUTPUT_NAME "turns-enums" HEADERS ${HEADERS} ) enable_coverage("lib") install(TARGETS "lib" FILE_SET HEADERS DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/turns") # C++ Wrapper set(CXX_HEADERS "src/turnsmm/enums.hpp" "src/turnsmm/init.hpp" "src/turnsmm/participant.hpp" "src/turnsmm/turn-order.hpp" "src/turnsmm.hpp" "src/turnsmm/private/participant_p.hpp" "src/turnsmm/private/turn-order_p.hpp" ) set(CXX_SOURCES "src/turnsmm/enums.cpp" "src/turnsmm/init.cpp" "src/turnsmm/participant.cpp" "src/turnsmm/turn-order.cpp" ) add_library("libmm" ${CXX_SOURCES}) add_library("turns::mm" ALIAS "libmm") target_sources("libmm" PUBLIC FILE_SET HEADERS BASE_DIRS "src" FILES ${CXX_HEADERS} ) target_compile_options("libmm" PUBLIC "$<$:-Wall>" "$<$:-Wextra>" "$<$:-Werror>" "$<$:-pedantic-errors>" ) target_include_directories("libmm" PUBLIC "src") target_link_libraries("libmm" PUBLIC "PkgConfig::glibmm" "turns::lib" ) set_target_properties("libmm" PROPERTIES OUTPUT_NAME "turnsmm" SOVERSION "${PROJECT_VERSION_MAJOR}" VERSION "${PROJECT_VERSION}" INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}" C_EXTENSIONS OFF CXX_EXTENSIONS OFF ) enable_coverage("libmm") install(TARGETS "libmm" FILE_SET HEADERS DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/turnsmm") # Tests enable_testing() add_executable("lib-tests" "tests/runtime_init.cpp" "tests/turns-participant.cpp" "tests/turns-turn-order.cpp" ) target_link_libraries("lib-tests" PRIVATE "Catch2::Catch2WithMain" "turns::lib" ) target_link_options("lib-tests" PRIVATE "$<$,$>:--coverage>") set_target_properties("lib-tests" PROPERTIES INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}" C_EXTENSIONS OFF CXX_EXTENSIONS OFF ) catch_discover_tests("lib-tests") # C++ Wrapper Tests enable_testing() add_executable("libmm-tests" "tests/turnsmm/runtime_init.cpp" "tests/turnsmm/participant.cpp" "tests/turnsmm/turn-order.cpp" ) target_link_libraries("libmm-tests" PRIVATE "Catch2::Catch2WithMain" "turns::mm" ) target_link_options("libmm-tests" PRIVATE "$<$,$>:--coverage>") set_target_properties("libmm-tests" PROPERTIES INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}" C_EXTENSIONS OFF CXX_EXTENSIONS OFF ) catch_discover_tests("libmm-tests")