cmake_minimum_required(VERSION 3.16)

# 调试多任务视图需要取消注释下面
add_definitions("-Wall -g")

project(ukui-window-switch-wlcom)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 20)

include(FeatureSummary)
find_package(ECM NO_MODULE)
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)

find_package(PkgConfig REQUIRED)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} NO_MODULE COMPONENTS Concurrent Quick Qml LinguistTools DBus REQUIRED)

if (QT_VERSION_MAJOR EQUAL "5")
    set(KF_VERSION_MAJOR "5")
    find_package(KF5 COMPONENTS Config GlobalAccel I18n REQUIRED)
    find_package(Qt5Xdg REQUIRED)
elseif (QT_VERSION_MAJOR EQUAL "6")
    set(KF_VERSION_MAJOR "6")
    find_package(KF6 COMPONENTS Config GlobalAccel I18n REQUIRED)
    find_package(Qt6Xdg REQUIRED)
    set(QT_NO_PRIVATE_MODULE_WARNING ON)
    find_package(Qt6 COMPONENTS QuickPrivate QmlPrivate REQUIRED)
endif()

find_package(EGL REQUIRED)
find_package(ukui-search REQUIRED)
find_package(ukui-quick COMPONENTS platform)

pkg_check_modules(KDK REQUIRED kysdk-sysinfo)
pkg_check_modules(DATACOLLECT REQUIRED kysdk-datacollect)
pkg_check_modules(GL REQUIRED gl)

include_directories(${KDK_INCLUDE_DIRS})
include_directories(${DATACOLLECT_INCLUDE_DIRS})
include_directories(${OPENGL_INCLUDE_DIR})
include_directories(${GL})


set(WLCSRCS main.cpp
        log-utils.h log-utils.cpp
        ../desktopbackground.cpp
        ../icontheme.cpp
        multitaskviewmanagerbywlcom.cpp
        dbusservice.cpp
        ../windowmanagerinterface.cpp
        ../multitaskviewabstractmodelhandler.h
        multitaskviewmodelbywlcomhandler.cpp
        context.cpp
        toplevel.cpp
        workspace.cpp
        output.cpp
        thumbnail.cpp
        ThumbnailItem.cpp
        ../desktoplistmodel.h
        ../desktoplistmodel.cpp
        ../appwindowlistmodel.h
        ../appwindowlistmodel.cpp
        ../appwindowfiltermodel.h
        ../appwindowfiltermodel.cpp
        ../ukui-flow.cpp
        ../ukui-flow.h
        ../screens-manager.cpp
        ../screens-manager.h
)

add_subdirectory(qtsingleapplication)
include_directories(qtsingleapplication/src)

if (QT_VERSION_MAJOR EQUAL "5")
    qt5_add_resources(WLCSRCS ../data.qrc)
else()
    qt_add_resources(WLCSRCS ../data.qrc)
endif()

add_executable(${PROJECT_NAME}
    ${WLCSRCS}
)

target_link_directories(${PROJECT_NAME} PRIVATE KF${KF_VERSION_MAJOR}::WindowSystem)

target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:DISABLE_LOG_FILE>)
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:QT_QML_DEBUG>)

target_link_libraries(
        ${PROJECT_NAME}
        PRIVATE
        Qt${QT_VERSION_MAJOR}::Core
        Qt${QT_VERSION_MAJOR}::GuiPrivate
        Qt${QT_VERSION_MAJOR}::Quick
        Qt${QT_VERSION_MAJOR}::Concurrent
        Qt${QT_VERSION_MAJOR}::DBus
        Qt${QT_VERSION_MAJOR}::Qml
        KF${KF_VERSION_MAJOR}::GlobalAccel
        qtsingleapplication
        kywc
        ${QGSettings_LIBRARIES}
        ${KDK_LINK_LIBRARIES}
        ${DATACOLLECT_LINK_LIBRARIES}
        ${OPENGL_gl_LIBRARY}
        ${EGL_LIBRARY}
        ${GL_LIBRARIES}
        Qt${QT_VERSION_MAJOR}Xdg
        ukui-search
        ukui-quick::platform
)

if (QT_VERSION_MAJOR EQUAL "5")
    target_include_directories(${PROJECT_NAME} PRIVATE ${Qt5Quick_PRIVATE_INCLUDE_DIRS})
    target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::QuickPrivate Qt::QmlPrivate)
else()
    target_link_libraries(${PROJECT_NAME} PRIVATE Qt::GuiPrivate Qt6::QuickPrivate)
endif()

install(TARGETS ukui-window-switch-wlcom DESTINATION /usr/bin)
