Settings now shows Proclamations, Audio Options, System Settings, System Logs, and Back. The new SystemSettingsPage groups Email Address, License Key, WiFi Setup, Time Zone Setup, and Date Format, driven by the pure settings::systemSettingEntries() list so future entries need one row, not new menu plumbing. Adds unit tests for the entry list.
311 lines
10 KiB
CMake
311 lines
10 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(RadiantWave VERSION 0.1.0 LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
# App version string shown at the top of the Home footer. Defaults to the
|
|
# project version; override at configure time with:
|
|
# cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DAPP_VERSION="1.2.3"
|
|
# or by exporting APP_VERSION in the environment (the `nix develop` shell does
|
|
# this; the env var only seeds a fresh configure, -D wins on reconfigure).
|
|
if(DEFINED ENV{APP_VERSION})
|
|
set(APP_VERSION "$ENV{APP_VERSION}" CACHE STRING
|
|
"Version string shown in the Home footer (override at configure time)")
|
|
else()
|
|
set(APP_VERSION "${PROJECT_VERSION}" CACHE STRING
|
|
"Version string shown in the Home footer (override at configure time)")
|
|
endif()
|
|
|
|
find_package(SDL3 REQUIRED)
|
|
find_package(SDL3_ttf REQUIRED)
|
|
find_package(SDL3_image REQUIRED)
|
|
find_package(SDL3_mixer REQUIRED)
|
|
find_package(SDL3_net REQUIRED)
|
|
find_package(SQLite3 REQUIRED)
|
|
find_package(CURL REQUIRED)
|
|
find_package(OpenSSL REQUIRED)
|
|
find_package(GTest REQUIRED)
|
|
include(GoogleTest)
|
|
|
|
# Network manager dependencies (Linux only)
|
|
if(UNIX AND NOT APPLE)
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(SDBUS REQUIRED libsystemd)
|
|
endif()
|
|
|
|
add_executable(radiantwave
|
|
src/main.cpp
|
|
src/page_manager.cpp
|
|
src/home.cpp
|
|
src/settings.cpp
|
|
src/settings_menu.cpp
|
|
src/system_settings_page.cpp
|
|
src/wifi_setup_page.cpp
|
|
src/audio_settings_page.cpp
|
|
src/audio/audio_manager.cpp
|
|
src/audio/audio_downloader.cpp
|
|
src/timezone_page.cpp
|
|
src/timezone_helper.cpp
|
|
src/log_viewer_page.cpp
|
|
src/logger/logger.cpp
|
|
src/keybind_manager.cpp
|
|
src/provisioning.cpp
|
|
src/network/nm_connection.cpp
|
|
src/network/nm_device.cpp
|
|
src/network/network_manager.cpp
|
|
src/network/json.cpp
|
|
src/network/api_client.cpp
|
|
src/network/license_service.cpp
|
|
src/network/license_status.cpp
|
|
src/config/yaml_parser.cpp
|
|
src/config/config_manager.cpp
|
|
src/db/database_manager.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/proclamation_options_page.cpp
|
|
src/email_address_page.cpp
|
|
src/license_key_page.cpp
|
|
src/license_blocked_page.cpp
|
|
src/validation.cpp
|
|
src/date_format.cpp
|
|
src/date_format_page.cpp
|
|
src/fibonacci_line_pattern.cpp
|
|
src/scroller_streams.cpp
|
|
src/scroller_page.cpp
|
|
src/scramble/fibonacci_scrambler.cpp
|
|
)
|
|
|
|
target_compile_definitions(radiantwave PRIVATE
|
|
APP_VERSION="${APP_VERSION}"
|
|
)
|
|
|
|
target_include_directories(radiantwave PRIVATE src)
|
|
target_link_libraries(radiantwave PRIVATE
|
|
SDL3::SDL3
|
|
SDL3_ttf::SDL3_ttf
|
|
SDL3_image::SDL3_image
|
|
SDL3_mixer::SDL3_mixer
|
|
SDL3_net::SDL3_net
|
|
SQLite3::SQLite3
|
|
CURL::libcurl
|
|
OpenSSL::Crypto
|
|
)
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
target_link_libraries(radiantwave PRIVATE ${SDBUS_LIBRARIES} resolv)
|
|
target_include_directories(radiantwave PRIVATE ${SDBUS_INCLUDE_DIRS})
|
|
target_compile_definitions(radiantwave PRIVATE HAS_DBUS=1)
|
|
endif()
|
|
|
|
install(TARGETS radiantwave RUNTIME DESTINATION bin)
|
|
|
|
add_executable(tests
|
|
tests/test_page_manager.cpp
|
|
tests/test_keybind_manager.cpp
|
|
src/page_manager.cpp
|
|
src/keybind_manager.cpp
|
|
)
|
|
target_include_directories(tests PRIVATE src)
|
|
target_link_libraries(tests PRIVATE SDL3::SDL3)
|
|
|
|
# Provisioning walkthrough logic tests (pure functions, no app linkage)
|
|
add_executable(test_provisioning
|
|
tests/test_provisioning.cpp
|
|
)
|
|
target_include_directories(test_provisioning PRIVATE src)
|
|
# provisioning.h pulls in app_state.h, so the test compiles against the SDL3,
|
|
# SDL3_mixer, and SQLite headers transitively (app_state.h -> audio_manager.h ->
|
|
# SDL3_mixer; app_state.h -> database_manager.h -> sqlite3.h).
|
|
target_link_libraries(test_provisioning PRIVATE
|
|
SDL3::SDL3
|
|
SDL3_mixer::SDL3_mixer
|
|
SQLite3::SQLite3
|
|
)
|
|
|
|
add_executable(test_assets
|
|
tests/test_assets.cpp
|
|
)
|
|
target_include_directories(test_assets PRIVATE src)
|
|
|
|
# Network manager unit tests
|
|
add_executable(test_network_unit
|
|
tests/network/test_nm_connection.cpp
|
|
src/network/nm_connection.cpp
|
|
)
|
|
target_include_directories(test_network_unit PRIVATE src)
|
|
target_link_libraries(test_network_unit PRIVATE GTest::gtest_main)
|
|
|
|
# Access point parsing unit tests (pure mapping; the sd-bus reads are Linux-only)
|
|
add_executable(test_nm_device
|
|
tests/network/test_nm_device.cpp
|
|
src/network/nm_device.cpp
|
|
src/network/nm_connection.cpp
|
|
src/logger/logger.cpp
|
|
)
|
|
target_include_directories(test_nm_device PRIVATE src)
|
|
target_link_libraries(test_nm_device PRIVATE GTest::gtest_main)
|
|
if(UNIX AND NOT APPLE)
|
|
target_link_libraries(test_nm_device PRIVATE ${SDBUS_LIBRARIES})
|
|
target_include_directories(test_nm_device PRIVATE ${SDBUS_INCLUDE_DIRS})
|
|
endif()
|
|
|
|
# Config unit tests
|
|
add_executable(test_config
|
|
tests/test_config.cpp
|
|
src/config/yaml_parser.cpp
|
|
src/config/config_manager.cpp
|
|
)
|
|
target_include_directories(test_config PRIVATE src)
|
|
target_link_libraries(test_config PRIVATE GTest::gtest_main)
|
|
|
|
# Database unit tests
|
|
add_executable(test_db
|
|
tests/test_db.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_db PRIVATE src)
|
|
target_link_libraries(test_db PRIVATE GTest::gtest_main SQLite3::SQLite3)
|
|
|
|
# Proclamation sync unit tests
|
|
add_executable(test_proclamation_sync
|
|
tests/test_proclamation_sync.cpp
|
|
src/db/database_manager.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/network/json.cpp
|
|
src/network/api_client.cpp
|
|
)
|
|
target_include_directories(test_proclamation_sync PRIVATE src)
|
|
target_link_libraries(test_proclamation_sync PRIVATE GTest::gtest_main SQLite3::SQLite3 CURL::libcurl)
|
|
|
|
# Portal API client unit tests (offline parse tests + live-API tests)
|
|
add_executable(test_api_client
|
|
tests/test_api_client.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_api_client PRIVATE src)
|
|
target_link_libraries(test_api_client PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|
|
|
|
# License validation service unit tests (offline + live-API tests)
|
|
add_executable(test_license_service
|
|
tests/test_license_service.cpp
|
|
src/network/license_service.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_license_service PRIVATE src)
|
|
target_link_libraries(test_license_service PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|
|
|
|
# License status tracker unit tests (offline mapping + worker lifecycle)
|
|
add_executable(test_license_status
|
|
tests/test_license_status.cpp
|
|
src/network/license_status.cpp
|
|
src/network/license_service.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_license_status PRIVATE src)
|
|
target_link_libraries(test_license_status PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|
|
|
|
# Validation/format unit tests
|
|
add_executable(test_validation
|
|
tests/test_validation.cpp
|
|
src/validation.cpp
|
|
)
|
|
target_include_directories(test_validation PRIVATE src)
|
|
target_link_libraries(test_validation PRIVATE GTest::gtest_main)
|
|
|
|
# Date/time format unit tests
|
|
add_executable(test_date_format
|
|
tests/test_date_format.cpp
|
|
src/date_format.cpp
|
|
)
|
|
target_include_directories(test_date_format PRIVATE src)
|
|
target_link_libraries(test_date_format PRIVATE GTest::gtest_main)
|
|
|
|
# System Settings menu entry list (pure data, no SDL linkage)
|
|
add_executable(test_settings_menu
|
|
tests/test_settings_menu.cpp
|
|
src/settings_menu.cpp
|
|
)
|
|
target_include_directories(test_settings_menu PRIVATE src)
|
|
target_link_libraries(test_settings_menu PRIVATE GTest::gtest_main)
|
|
|
|
# TimeZone unit tests
|
|
add_executable(test_timezone
|
|
tests/test_timezone.cpp
|
|
src/timezone_helper.cpp
|
|
)
|
|
target_include_directories(test_timezone PRIVATE src)
|
|
target_link_libraries(test_timezone PRIVATE GTest::gtest_main)
|
|
|
|
# Logger unit tests
|
|
add_executable(test_logger
|
|
tests/test_logger.cpp
|
|
src/logger/logger.cpp
|
|
)
|
|
target_include_directories(test_logger PRIVATE src)
|
|
target_link_libraries(test_logger PRIVATE GTest::gtest_main)
|
|
|
|
# Audio unit tests
|
|
add_executable(test_audio
|
|
tests/test_audio.cpp
|
|
src/audio/audio_manager.cpp
|
|
src/db/database_manager.cpp
|
|
src/config/yaml_parser.cpp
|
|
src/config/config_manager.cpp
|
|
src/logger/logger.cpp
|
|
)
|
|
target_include_directories(test_audio PRIVATE src)
|
|
target_link_libraries(test_audio PRIVATE GTest::gtest_main SDL3_mixer::SDL3_mixer SDL3::SDL3 SQLite3::SQLite3)
|
|
|
|
# Audio downloader unit tests
|
|
add_executable(test_audio_downloader
|
|
tests/test_audio_downloader.cpp
|
|
src/audio/audio_downloader.cpp
|
|
src/db/database_manager.cpp
|
|
src/logger/logger.cpp
|
|
)
|
|
target_include_directories(test_audio_downloader PRIVATE src)
|
|
target_link_libraries(test_audio_downloader PRIVATE GTest::gtest_main CURL::libcurl OpenSSL::Crypto SQLite3::SQLite3)
|
|
|
|
# Scroller Fibonacci pattern unit tests
|
|
add_executable(test_fibonacci_pattern
|
|
tests/test_fibonacci_pattern.cpp
|
|
src/fibonacci_line_pattern.cpp
|
|
)
|
|
target_include_directories(test_fibonacci_pattern PRIVATE src)
|
|
target_link_libraries(test_fibonacci_pattern PRIVATE GTest::gtest_main)
|
|
|
|
# Scroller streams unit tests
|
|
add_executable(test_scroller_streams
|
|
tests/test_scroller_streams.cpp
|
|
src/scroller_streams.cpp
|
|
)
|
|
target_include_directories(test_scroller_streams PRIVATE src)
|
|
target_link_libraries(test_scroller_streams PRIVATE GTest::gtest_main SQLite3::SQLite3)
|
|
|
|
# Fibonacci affine image scrambler unit tests
|
|
add_executable(test_fibonacci_scrambler
|
|
tests/test_fibonacci_scrambler.cpp
|
|
src/scramble/fibonacci_scrambler.cpp
|
|
)
|
|
target_include_directories(test_fibonacci_scrambler PRIVATE src)
|
|
target_link_libraries(test_fibonacci_scrambler PRIVATE GTest::gtest_main)
|
|
|
|
# Color palette API + storage unit tests (readiness: not wired into the app yet)
|
|
add_executable(test_color_palettes
|
|
tests/test_color_palettes.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_color_palettes PRIVATE src)
|
|
target_link_libraries(test_color_palettes PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|