cmake_minimum_required(VERSION 3.16)

project(qt6-ukui-style)

# 设置共享库的版本号
set(QT5_UKUI-STYLE_VERSION_MAJOR 1)
set(QT5_UKUI-STYLE_VERSION_MINOR 0)
set(QT5_UKUI-STYLE_VERSION_PATCH 0)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# Qt6 推荐使用 C++17 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Qt6 最低版本要求
set(QT_MIN_VERSION "6.4.2")
set(KF5_MIN_VERSION "5.66.0")

# 查找 Qt6 组件
find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
    Widgets
    Concurrent
)

# 获取 Qt6 库路径
get_target_property(LIB_PATH Qt6::Widgets IMPORTED_LOCATION)
get_filename_component(PARENT_PATH "${LIB_PATH}" PATH)
message("libqt5-ukui-style PARENT_PATH: ${PARENT_PATH}")

find_package(X11)

find_package(PkgConfig)
pkg_check_modules(GLIB2 REQUIRED glib-2.0 gio-2.0)
pkg_check_modules(Qsettings REQUIRED gsettings-qt6)
pkg_check_modules(KYSDKCONF2 REQUIRED kysdk-conf2)

include_directories(
    ${Qsettings_INCLUDE_DIRS}
    ${GLIB2_INCLUDE_DIRS}
)
if (KYSDKCONF2_FOUND)
    include_directories(${KYSDKCONF2_INCLUDE_DIRS})
    link_directories(${KYSDKCONF2_LIBRARY_DIRS})
endif()

# 手动指定需要包含的源文件和头文件（排除 gestures 目录）
file(GLOB_RECURSE Header
    "animations/*.h" "animations/*.hpp"
    "effects/*.h" "effects/*.hpp"
    "internal-styles/*.h" "internal-styles/*.hpp"
    "settings/*.h" "settings/*.hpp"
)
file(GLOB_RECURSE Sources
    "animations/*.cpp" "animations/*.c" "animations/*.ui"
    "effects/*.cpp" "effects/*.c" "effects/*.ui"
    "internal-styles/*.cpp" "internal-styles/*.c" "internal-styles/*.ui"
    "settings/*.cpp" "settings/*.c" "settings/*.ui"
)
file(GLOB_RECURSE XML "org.ukui.style.gschema.xml")

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${Header} ${Sources} ${XML})

add_library(qt6-ukui-style SHARED ${Sources} ${Header} ${XML})

# 设置共享库的命名规则
set_target_properties(qt6-ukui-style PROPERTIES
    OUTPUT_NAME "qt6-ukui-style"
    VERSION ${QT5_UKUI-STYLE_VERSION_MAJOR}.${QT5_UKUI-STYLE_VERSION_MINOR}.${QT5_UKUI-STYLE_VERSION_PATCH}
    SOVERSION ${QT5_UKUI-STYLE_VERSION_MAJOR}
)

# 链接 Qt6 目标
target_link_libraries(qt6-ukui-style PRIVATE
    Qt6::Widgets
    Qt6::Concurrent
    gsettings-qt6
    gio-2.0
    ${KYSDKCONF2_LIBRARIES}
)

add_definitions(-DLIBQT5UKUISTYLE_LIBRARY)
add_definitions(-DQT_DEPRECATED_WARNINGS)
add_definitions(-DQT_MESSAGELOGCONTEXT)
# 添加 Qt6 兼容性宏
add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000)

if(UNIX)
    set(TARGET_PATH "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}")

    install(TARGETS ${PROJECT_NAME} DESTINATION ${TARGET_PATH})

    set(GSCHEMA_PATH "/usr/share/glib-2.0/schemas")
    set(GSCHEMA_FILE "${CMAKE_CURRENT_SOURCE_DIR}/settings/org.ukui.style.gschema.xml")
    install(FILES ${GSCHEMA_FILE} DESTINATION ${GSCHEMA_PATH})

    set(KCONF2_PATH "/etc/kylin-config/basic/")
    set(KCONF2_FILE "${CMAKE_CURRENT_SOURCE_DIR}/settings/org.ukui.style.yaml")
    install(FILES ${KCONF2_FILE} DESTINATION ${KCONF2_PATH})

    set(PKGCONFIG_PATH "${TARGET_PATH}/pkgconfig")
    set(PKGCONFIG_FILE "${CMAKE_CURRENT_SOURCE_DIR}/development-files/qt6-ukui.pc")
    install(FILES ${PKGCONFIG_FILE} DESTINATION ${PKGCONFIG_PATH})

    install(FILES ${Header} DESTINATION "/usr/include/qt6-ukui/")
endif()
