cmake_minimum_required(VERSION 3.22) project(Kompanion LANGUAGES CXX) set(PROJECT_VERSION "0.0.1") set(QT_MIN_VERSION "6.8.0") set(KF6_MIN_VERSION "6.8.0") set(KDE_COMPILERSETTINGS_LEVEL "5.82") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMMarkAsTest) include(ECMMarkNonGuiExecutable) include(FeatureSummary) include(CheckIncludeFile) include(CheckIncludeFiles) include(CheckSymbolExists) include(ECMOptionalAddSubdirectory) include(KDEClangFormat) include(ECMDeprecationSettings) include(KDEGitCommitHooks) find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Sql ) option(KOMPANION_USE_GUI "Build optional GUI components using Qt6Gui" ON) if (KOMPANION_USE_GUI) find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Gui) endif() set(KOMPANION_KCONFIG_TARGET "") find_package(KF6Config ${KF6_MIN_VERSION} QUIET) if (KF6Config_FOUND) set(KOMPANION_KCONFIG_TARGET KF6::ConfigCore) else() find_package(KF5Config QUIET) if (KF5Config_FOUND) set(KOMPANION_KCONFIG_TARGET KF5::ConfigCore) endif() endif() add_feature_info("KConfig" NOT (KOMPANION_KCONFIG_TARGET STREQUAL "") "Persist settings via KConfig if available.") find_package(Qt6Test ${QT_MIN_VERSION} CONFIG QUIET) set_package_properties(Qt6Test PROPERTIES PURPOSE "Required for tests" TYPE OPTIONAL ) add_feature_info("Qt6Test" Qt6Test_FOUND "Required for building tests") set(KOMPANION_DB_INIT_INSTALL_DIR "${KDE_INSTALL_FULL_DATADIR}/kompanion/db/init") install(DIRECTORY db/init/ DESTINATION ${KDE_INSTALL_DATADIR}/kompanion/db/init FILES_MATCHING PATTERN "*.sql") option(BUILD_KOMPANION_CLI "Build Kompanion Qt command-line client" ON) add_subdirectory(src/dal) add_executable(kom_mcp src/main.cpp ) target_include_directories(kom_mcp PRIVATE src) target_link_libraries(kom_mcp PRIVATE kom_dal) if (NOT KOMPANION_KCONFIG_TARGET STREQUAL "") target_link_libraries(kom_mcp PRIVATE ${KOMPANION_KCONFIG_TARGET}) target_compile_definitions(kom_mcp PRIVATE HAVE_KCONFIG) endif() target_compile_options(kom_mcp PRIVATE -fexceptions) target_compile_definitions(kom_mcp PRIVATE PROJECT_SOURCE_DIR="${CMAKE_SOURCE_DIR}" KOMPANION_DB_INIT_INSTALL_DIR="${KOMPANION_DB_INIT_INSTALL_DIR}" ) install(TARGETS kom_mcp RUNTIME DESTINATION bin) option(BUILD_TESTS "Build tests" ON) if (BUILD_KOMPANION_CLI) add_executable(kompanion src/cli/KompanionApp.cpp ) target_include_directories(kompanion PRIVATE src) target_link_libraries(kompanion PRIVATE Qt6::Core Qt6::Sql kom_dal ) target_compile_definitions(kompanion PRIVATE PROJECT_SOURCE_DIR="${CMAKE_SOURCE_DIR}" KOMPANION_DB_INIT_INSTALL_DIR="${KOMPANION_DB_INIT_INSTALL_DIR}" ) if (NOT KOMPANION_KCONFIG_TARGET STREQUAL "") target_link_libraries(kompanion PRIVATE ${KOMPANION_KCONFIG_TARGET}) target_compile_definitions(kompanion PRIVATE HAVE_KCONFIG) endif() target_compile_options(kompanion PRIVATE -fexceptions -Wno-unused-function) install(TARGETS kompanion RUNTIME DESTINATION bin) endif() if (BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)