cmake_minimum_required(VERSION 3.26)
project(
card_collection
VERSION 0.1.0
LANGUAGES CXX
)
option(
CARD_COLLECTION_BUILD_TESTS
"Build the Card Collection test suite"
ON
)
include(cmake/dependencies.cmake)
add_executable(
card_collection
src/app.cpp
src/asset_store.cpp
src/authentication.cpp
src/authorization.cpp
src/card_pool.cpp
src/card_service.cpp
src/clock.cpp
src/collection.cpp
src/config.cpp
src/data.cpp
src/data_sqlite.cpp
src/email_address.cpp
src/email_sender_file.cpp
src/email_sender_mailjet.cpp
src/game_field.cpp
src/game_service.cpp
src/image_processor.cpp
src/markdown_renderer.cpp
src/main.cpp
src/multipart_reader.cpp
src/non_secret_random.cpp
src/public_id.cpp
src/series_service.cpp
src/secret_token.cpp
src/startup.cpp
src/username.cpp
src/user_service.cpp
src/url_builder.cpp
)
target_compile_features(card_collection PRIVATE cxx_std_23)
target_compile_definitions(
card_collection
PRIVATE
CARD_COLLECTION_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
)
set_target_properties(
card_collection
PROPERTIES
CXX_EXTENSIONS OFF
)
if(MSVC)
target_compile_options(card_collection PRIVATE /W4 /permissive-)
else()
target_compile_options(
card_collection
PRIVATE
-Wall
-Wextra
-Wpedantic
)
endif()
target_link_libraries(
card_collection
PRIVATE
ImageMagick::Magick++
ImageMagick::MagickWand
ImageMagick::MagickCore
MacroDown::MacroDown
mw::http-server
mw::crypto
mw::mw
mw::sqlite
mw::url
nlohmann_json::nlohmann_json
pantor::inja
spdlog::spdlog
tomlplusplus::tomlplusplus
uni-algo::uni-algo
)
if(CARD_COLLECTION_BUILD_TESTS)
include(CTest)
enable_testing()
add_executable(
data_mock_test
src/data.cpp
tests/data_mock_test.cpp
)
target_compile_features(data_mock_test PRIVATE cxx_std_23)
set_target_properties(data_mock_test PROPERTIES CXX_EXTENSIONS OFF)
target_include_directories(
data_mock_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
tests
)
target_link_libraries(
data_mock_test
PRIVATE
GTest::gmock_main
mw::mw
)
include(GoogleTest)
gtest_discover_tests(data_mock_test)
add_executable(
mvp_primitives_test
src/authorization.cpp
src/card_pool.cpp
src/clock.cpp
src/email_address.cpp
src/email_sender_file.cpp
src/secret_token.cpp
src/username.cpp
tests/mvp_primitives_test.cpp
)
target_compile_features(mvp_primitives_test PRIVATE cxx_std_23)
set_target_properties(
mvp_primitives_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
mvp_primitives_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
mvp_primitives_test
PRIVATE
GTest::gmock_main
mw::crypto
mw::mw
mw::url
uni-algo::uni-algo
)
gtest_discover_tests(mvp_primitives_test)
add_executable(
game_field_test
src/game_field.cpp
tests/game_field_test.cpp
)
target_compile_features(game_field_test PRIVATE cxx_std_23)
set_target_properties(game_field_test PROPERTIES CXX_EXTENSIONS OFF)
target_include_directories(
game_field_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
game_field_test
PRIVATE
GTest::gtest_main
mw::mw
)
gtest_discover_tests(game_field_test)
add_executable(
game_service_test
src/authorization.cpp
src/data.cpp
src/data_sqlite.cpp
src/game_field.cpp
src/game_service.cpp
src/markdown_renderer.cpp
src/startup.cpp
tests/game_service_test.cpp
)
target_compile_features(game_service_test PRIVATE cxx_std_23)
set_target_properties(
game_service_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
game_service_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
game_service_test
PRIVATE
GTest::gtest_main
MacroDown::MacroDown
mw::mw
mw::sqlite
mw::url
spdlog::spdlog
)
gtest_discover_tests(game_service_test)
add_executable(
user_collection_test
src/card_pool.cpp
src/clock.cpp
src/collection.cpp
src/data.cpp
src/data_sqlite.cpp
src/game_field.cpp
src/startup.cpp
src/username.cpp
src/user_service.cpp
tests/user_collection_test.cpp
)
target_compile_features(user_collection_test PRIVATE cxx_std_23)
set_target_properties(
user_collection_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
user_collection_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
user_collection_test
PRIVATE
GTest::gmock_main
mw::crypto
mw::mw
mw::sqlite
spdlog::spdlog
uni-algo::uni-algo
)
gtest_discover_tests(user_collection_test)
add_executable(
authentication_test
src/authentication.cpp
src/clock.cpp
src/data.cpp
src/data_sqlite.cpp
src/email_address.cpp
src/game_field.cpp
src/secret_token.cpp
src/startup.cpp
tests/authentication_test.cpp
)
target_compile_features(authentication_test PRIVATE cxx_std_23)
set_target_properties(
authentication_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
authentication_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
authentication_test
PRIVATE
GTest::gmock_main
mw::crypto
mw::mw
mw::sqlite
mw::url
spdlog::spdlog
)
gtest_discover_tests(authentication_test)
add_executable(
email_sender_mailjet_test
src/email_sender_mailjet.cpp
tests/email_sender_mailjet_test.cpp
)
target_compile_features(email_sender_mailjet_test PRIVATE cxx_std_23)
set_target_properties(
email_sender_mailjet_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
email_sender_mailjet_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
email_sender_mailjet_test
PRIVATE
GTest::gmock_main
mw::mw
mw::url
nlohmann_json::nlohmann_json
)
gtest_discover_tests(email_sender_mailjet_test)
add_executable(
config_test
src/config.cpp
src/email_address.cpp
src/non_secret_random.cpp
tests/config_test.cpp
)
target_compile_features(config_test PRIVATE cxx_std_23)
set_target_properties(config_test PROPERTIES CXX_EXTENSIONS OFF)
target_include_directories(
config_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
config_test
PRIVATE
GTest::gtest_main
mw::http-server
mw::mw
mw::url
tomlplusplus::tomlplusplus
uni-algo::uni-algo
)
gtest_discover_tests(config_test)
add_executable(
markdown_renderer_test
src/markdown_renderer.cpp
tests/markdown_renderer_test.cpp
)
target_compile_features(markdown_renderer_test PRIVATE cxx_std_23)
set_target_properties(
markdown_renderer_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
markdown_renderer_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
markdown_renderer_test
PRIVATE
GTest::gtest_main
MacroDown::MacroDown
mw::mw
mw::url
)
gtest_discover_tests(markdown_renderer_test)
add_executable(
app_test
src/app.cpp
src/asset_store.cpp
src/authentication.cpp
src/authorization.cpp
src/card_pool.cpp
src/card_service.cpp
src/clock.cpp
src/collection.cpp
src/data.cpp
src/email_address.cpp
src/email_sender_file.cpp
src/email_sender_mailjet.cpp
src/game_field.cpp
src/game_service.cpp
src/non_secret_random.cpp
src/data_fake.cpp
src/image_processor.cpp
src/markdown_renderer.cpp
src/multipart_reader.cpp
src/public_id.cpp
src/series_service.cpp
src/secret_token.cpp
src/username.cpp
src/user_service.cpp
src/url_builder.cpp
tests/app_test.cpp
)
target_compile_features(app_test PRIVATE cxx_std_23)
set_target_properties(app_test PROPERTIES CXX_EXTENSIONS OFF)
target_include_directories(
app_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
app_test
PRIVATE
GTest::gtest_main
ImageMagick::Magick++
ImageMagick::MagickWand
ImageMagick::MagickCore
MacroDown::MacroDown
mw::http-server
mw::crypto
mw::mw
mw::sqlite
mw::url
nlohmann_json::nlohmann_json
pantor::inja
spdlog::spdlog
uni-algo::uni-algo
)
target_compile_definitions(
app_test
PRIVATE
CARD_COLLECTION_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
)
gtest_discover_tests(app_test)
add_executable(
app_integration_test
src/app.cpp
src/asset_store.cpp
src/authentication.cpp
src/authorization.cpp
src/card_pool.cpp
src/card_service.cpp
src/clock.cpp
src/collection.cpp
src/data.cpp
src/data_sqlite.cpp
src/email_address.cpp
src/email_sender_file.cpp
src/email_sender_mailjet.cpp
src/game_field.cpp
src/game_service.cpp
src/image_processor.cpp
src/markdown_renderer.cpp
src/multipart_reader.cpp
src/non_secret_random.cpp
src/public_id.cpp
src/series_service.cpp
src/secret_token.cpp
src/startup.cpp
src/username.cpp
src/user_service.cpp
src/url_builder.cpp
tests/app_integration_test.cpp
)
target_compile_features(app_integration_test PRIVATE cxx_std_23)
set_target_properties(
app_integration_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
app_integration_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_compile_definitions(
app_integration_test
PRIVATE
CARD_COLLECTION_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
)
target_link_libraries(
app_integration_test
PRIVATE
GTest::gtest_main
ImageMagick::Magick++
ImageMagick::MagickWand
ImageMagick::MagickCore
MacroDown::MacroDown
mw::http-server
mw::crypto
mw::mw
mw::sqlite
mw::url
nlohmann_json::nlohmann_json
pantor::inja
spdlog::spdlog
uni-algo::uni-algo
)
gtest_discover_tests(app_integration_test)
add_executable(
data_fake_test
src/data.cpp
src/data_fake.cpp
tests/data_fake_test.cpp
)
target_compile_features(data_fake_test PRIVATE cxx_std_23)
set_target_properties(data_fake_test PROPERTIES CXX_EXTENSIONS OFF)
target_include_directories(
data_fake_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
data_fake_test
PRIVATE
GTest::gtest_main
mw::mw
)
gtest_discover_tests(data_fake_test)
add_executable(
data_sqlite_test
src/data.cpp
src/data_sqlite.cpp
src/game_field.cpp
src/startup.cpp
tests/data_sqlite_test.cpp
)
target_compile_features(data_sqlite_test PRIVATE cxx_std_23)
set_target_properties(data_sqlite_test PROPERTIES CXX_EXTENSIONS OFF)
target_include_directories(
data_sqlite_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
data_sqlite_test
PRIVATE
GTest::gtest_main
mw::mw
mw::sqlite
spdlog::spdlog
)
gtest_discover_tests(data_sqlite_test)
add_executable(
card_service_test
src/asset_store.cpp
src/authorization.cpp
src/card_service.cpp
src/data.cpp
src/data_sqlite.cpp
src/game_field.cpp
src/image_processor.cpp
src/markdown_renderer.cpp
src/multipart_reader.cpp
src/non_secret_random.cpp
src/public_id.cpp
src/series_service.cpp
src/startup.cpp
tests/card_service_test.cpp
)
target_compile_features(card_service_test PRIVATE cxx_std_23)
set_target_properties(
card_service_test
PROPERTIES CXX_EXTENSIONS OFF
)
target_include_directories(
card_service_test
PRIVATE
${libmw_SOURCE_DIR}/includes
src
)
target_link_libraries(
card_service_test
PRIVATE
GTest::gtest_main
ImageMagick::Magick++
ImageMagick::MagickWand
ImageMagick::MagickCore
MacroDown::MacroDown
mw::http-server
mw::mw
mw::sqlite
spdlog::spdlog
)
gtest_discover_tests(card_service_test)
find_program(NODE_EXECUTABLE node)
if(NODE_EXECUTABLE)
add_test(
NAME CardFormLogicTest
COMMAND ${NODE_EXECUTABLE} --test
${CMAKE_CURRENT_SOURCE_DIR}/tests/card_form_logic_test.js
)
add_test(
NAME CardPreviewMathTest
COMMAND ${NODE_EXECUTABLE} --test
${CMAKE_CURRENT_SOURCE_DIR}/tests/card_preview_math_test.js
)
add_test(
NAME GameFieldFormLogicTest
COMMAND ${NODE_EXECUTABLE} --test
${CMAKE_CURRENT_SOURCE_DIR}/tests/game_field_form_logic_test.js
)
endif()
endif()