cmake_minimum_required(VERSION 3.16)

project(kazv)

include(FeatureSummary)

set(kazv_VERSION_MAJOR 0)
set(kazv_VERSION_MINOR 7)
set(kazv_VERSION_PATCH 0)
set(kazv_VERSION_STRING ${kazv_VERSION_MAJOR}.${kazv_VERSION_MINOR}.${kazv_VERSION_PATCH})

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
set(CMAKE_CXX_STANDARD 20)

if(NOT kazv_KF_QT_MAJOR_VERSION)
  set(kazv_KF_QT_MAJOR_VERSION 6)
endif()
message(STATUS "KF/Qt major version: ${kazv_KF_QT_MAJOR_VERSION}")
if(NOT kazv_KF_QT_MAJOR_VERSION EQUAL 6)
  message(FATAL_ERROR "KF/Qt major version must be 6")
endif()
set(QT_MAJOR_VERSION ${kazv_KF_QT_MAJOR_VERSION})
set(KF_MAJOR_VERSION ${kazv_KF_QT_MAJOR_VERSION})
set(QT_MIN_VERSION 6.9.0)
set(KF_MIN_VERSION 6.0.0)

option(kazv_LINK_BREEZE_ICONS "Link to Breeze icons library" OFF)
option(kazv_BUILD_TESTS "Build tests" ON)
option(kazv_ENABLE_APPIUM_TESTS "Run appium tests" "")
set(kazv_LINK_BREEZE_ICONS_MACRO 0)
if(kazv_LINK_BREEZE_ICONS)
  set(kazv_LINK_BREEZE_ICONS_MACRO 1)
endif()
find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
set(KDE_SKIP_NULLPTR_WARNINGS_SETTINGS ON)
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMSetupVersion)
include(ECMGenerateHeaders)
include(ECMPoQmTools)
include(ECMAddTests)
include(ECMQtDeclareLoggingCategory)
include(ECMDeprecationSettings)
include(ECMQmlModule)
if(ANDROID)
  find_package(Perl 5.12 REQUIRED)
  include(ECMAddAndroidApk)
endif()

ecm_set_disabled_deprecation_versions(
  QT 5.15.14
  KF 5.116.0
  KCOREADDONS 5.116.0
)

find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS
  Core Gui Qml QuickControls2 Svg Concurrent Widgets
  Multimedia Test Network QuickTest HttpServer Sql
  )
qt6_policy(SET QTP0001 NEW)
find_package(QCoro6 REQUIRED COMPONENTS Core)
qcoro_enable_coroutines()

set(kazv_KF_EXTRA_MODULES)
if(kazv_LINK_BREEZE_ICONS)
  list(APPEND kazv_KF_EXTRA_MODULES BreezeIcons)
endif()

find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami Config Notifications CoreAddons ${kazv_KF_EXTRA_MODULES})
find_package(KF6KirigamiAddons)

find_package(Threads REQUIRED)
find_package(nlohmann_json REQUIRED)
find_package(libkazv REQUIRED)

find_package(cmark)
set(CMARK_TARGET_NAME cmark::cmark)
if(NOT cmark_FOUND)
  # CMark 0.29.0 on Ubuntu 20.04 has cmark.cmake instead of cmark-config.cmake
  # But that is not usable, so we fall back to pkgconfig
  find_package(PkgConfig REQUIRED)
  pkg_search_module(cmark libcmark IMPORTED_TARGET GLOBAL)
  set(CMARK_TARGET_NAME cmark)
endif()
if(ANDROID)
  find_package(OpenSSL REQUIRED)
endif()

if(${kazv_ENABLE_APPIUM_TESTS} STREQUAL "")
  find_package(SeleniumWebDriverATSPI)
  if(SeleniumWebDriverATSPI_FOUND)
    message(STATUS "Enabling appium tests because selenium-webdriver-at-spi is found. To turn it off, explicitly set kazv_ENABLE_APPIUM_TESTS to OFF")
    set(kazv_ENABLE_APPIUM_TESTS ON)
  endif()
elseif(kazv_ENABLE_APPIUM_TESTS)
  find_package(SeleniumWebDriverATSPI REQUIRED)
endif()

kde_enable_exceptions()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -foperator-names -DQT_NO_EMIT")

add_subdirectory(src)

install(PROGRAMS moe.kazv.mxc.kazv.desktop DESTINATION ${KDE_INSTALL_APPDIR})
install(FILES moe.kazv.mxc.kazv.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
install(FILES kazv.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})
install(FILES icons/kazvlogo-256.png DESTINATION ${KDE_INSTALL_ICONDIR}/hicolor/256x256/apps RENAME moe.kazv.mxc.kazv.png)

feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
