cmake_minimum_required(VERSION 3.16)

project(qt6-ukui-platformtheme)

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

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(QT_MIN_VERSION "6.2.0")
set(KF5_MIN_VERSION "5.66.0")

find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
    DBus
    Widgets
    Gui
    Quick
    QuickControls2
    LinguistTools
    # 移除私有模块的直接 find_package 引用，改为通过目标属性获取
)
# 显式查找 Qt6 私有模块（Qt6 正确的私有模块引用方式）
find_package(Qt6 REQUIRED COMPONENTS GuiPrivate WidgetsPrivate)

message("Qt6Widgets_INCLUDE: ${Qt6Widgets_INCLUDE_DIRS}")

# 修正变量名：Qt6Widgets_PRIVATE_INCLUDE → Qt6Widgets_PRIVATE_INCLUDES
get_target_property(Qt6Gui_PRIVATE_INCLUDES Qt6::Gui INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(Qt6Widgets_PRIVATE_INCLUDES Qt6::Widgets INTERFACE_INCLUDE_DIRECTORIES)

foreach(_dir ${Qt6Gui_PRIVATE_INCLUDES})
    message(${_dir})

    string(REGEX MATCHALL "QtGui" matches "${_dir}")
    list(LENGTH matches match_count)
    if(${match_count} EQUAL 2)
        string(REPLACE "QtGui" "QtThemeSupport" ThemeSupport_string "${_dir}")
    endif()
endforeach()
include_directories(${ThemeSupport_string})

# 修正变量名：Qt6Widgets_PRIVATE_INCLUDE → Qt6Widgets_PRIVATE_INCLUDES
include_directories(${Qt6Widgets_PRIVATE_INCLUDES})
include_directories(${Qt6Gui_PRIVATE_INCLUDES})

# 修正变量名输出
message("Qt6Widgets_PRIVATE_INCLUDES: ${Qt6Widgets_PRIVATE_INCLUDES}")
message("Qt6Gui_PRIVATE_INCLUDES: ${Qt6Gui_PRIVATE_INCLUDES}")

find_package(X11)

find_package(PkgConfig)
pkg_check_modules(QGSETTINGS REQUIRED gsettings-qt6)
pkg_check_modules(FONTCONFIG REQUIRED fontconfig)
pkg_check_modules(FREETYPE2 REQUIRED freetype2)
pkg_check_modules(GLIB2 REQUIRED glib-2.0 gio-2.0)

include_directories(
    ${QGSETTINGS_INCLUDE_DIRS}
    ${GLIB2_INCLUDE_DIRS}
    ../libqt6-ukui-style/
    ../ukui-styles/
)

if (FONTCONFIG_FOUND)
    include_directories(${FONTCONFIG_INCLUDE_DIRS})
    link_directories(${FONTCONFIG_LIBRARY_DIRS})
endif()
if (FREETYPE2_FOUND)
    include_directories(${FREETYPE2_INCLUDE_DIRS})
    link_directories(${FREETYPE2_LIBRARY_DIRS})
endif()
if (KYSDKWAYLANDHELPER_FOUND)
    include_directories(${KYSDKWAYLANDHELPER_INCLUDE_DIRS})
    link_directories(${KYSDKWAYLANDHELPER_LIBRARY_DIRS})
endif()
if (QGSETTINGS_FOUND)
    include_directories(${QGSETTINGS_INCLUDE_DIRS})
    link_directories(${QGSETTINGS_LIBRARY_DIRS})
endif()
if (UKUIWINDOWHELPER_FOUND)
    include_directories(${UKUIWINDOWHELPER_INCLUDE_DIRS})
    link_directories(${UKUIWINDOWHELPER_LIBRARY_DIRS})
endif()

file(GLOB_RECURSE ConfigSources
    ../ukui-styles/readconfig.cpp
)
file(GLOB_RECURSE ConfigHeaders
    ../ukui-styles/readconfig.h
)

set(sources
    main.cpp
    platform-theme-fontdata.cpp
    platform-theme-fontdata.h
    qt5-ukui-platform-theme.cpp
    qt5-ukui-platformtheme_global.h
    qt5-ukui-platform-theme.h
    xatom-helper.cpp
    xatom-helper.h
    widget/filedialog/xdgdesktopportalfiledialog.cpp
    widget/filedialog/xdgdesktopportalfiledialog_p.h
)

set(Json
    ukui.json
)

file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/translations/*.ts")

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${sources} ${Json} ${TS_FILES})

set(UKUI_TRANSLATIONS_DIR "/usr/share/qt6-ukui-platformtheme")
add_definitions(-DUKUI_TRANSLATIONS_DIR="${UKUI_TRANSLATIONS_DIR}")

if (NOT DEFINED UPDATE_TRANSLATIONS)
    set(UPDATE_TRANSLATIONS "No")
endif()

if (UPDATE_TRANSLATIONS)
    qt6_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
else()
    qt6_add_translation(QM_FILES ${TS_FILES})
endif()

add_custom_target(themetranslations ALL DEPENDS ${QM_FILES})

add_library(qt6-ukui-platformtheme MODULE
    ${sources}
    ${Json}
    ${TS_FILES}
    ${ConfigSources} ${ConfigHeaders}
)

target_link_libraries(qt6-ukui-platformtheme PRIVATE
    Qt6::Widgets
    Qt6::DBus
    Qt6::Gui
    Qt6::Quick
    Qt6::QuickControls2
    ${UKUIWINDOWHELPER_LIBRARIES}
    ${QGSETTINGS_LIBRARIES}
    xcb
    glib-2.0
    ${X11_LIBRARIES}
    qt6-ukui-style
    ${FONTCONFIG_LIBRARIES}
    ${FREETYPE2_LIBRARIES}
    ${KYSDKWAYLANDHELPER_LIBRARIES}
    # 确保私有模块正确链接
    Qt6::GuiPrivate
    Qt6::WidgetsPrivate
)

target_compile_definitions(qt6-ukui-platformtheme PRIVATE
    -DQT5UKUIPLATFORMTHEME_LIBRARY
    -DQT_DEPRECATED_WARNINGS
    -DQT_MESSAGELOGCONTEXT
    -DQT_DISABLE_DEPRECATED_BEFORE=0x060000
)

set(TARGET_PATH "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/qt6/plugins")

set(UKUIPLATFORMTHEME_DIR ${TARGET_PATH})
target_compile_definitions(qt6-ukui-platformtheme PRIVATE
    UKUIPLATFORMTHEME_DIR="${UKUIPLATFORMTHEME_DIR}"
)

if(UNIX)
    MESSAGE("libqt6-ukui-platformtheme TARGET_PATH: ${TARGET_PATH}")
    install(TARGETS ${PROJECT_NAME} DESTINATION ${TARGET_PATH}/platformthemes/)
    install(FILES ${QM_FILES} DESTINATION "${UKUI_TRANSLATIONS_DIR}")
endif()

