project(ukui-panel LANGUAGES C CXX)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

add_subdirectory(common)

set(PRIV_HEADERS
    panelpluginsmodel.h
    ukuipanel.h
    ukuipanelapplication.h
    ukuipanelapplication_p.h
    ukuipanellayout.h
    plugin.h
    pluginsettings_p.h
    contextmenu.h
)

# using UKUi namespace in the public headers.
set(PUB_HEADERS
    ukuipanelglobals.h
    pluginsettings.h
    iukuipanelplugin.h
    iukuipanel.h
    common/ukuisettings.h
    common/ukuiplugininfo.h
    common/common.h
    common/ukuigridlayout.h
    common/ukuiglobals.h
    common_fun/listengsettings.h
    common_fun/ukuipanel_infomation.h
    common_fun/dbus-adaptor.h
    common_fun/panel_commission.h
    customstyle.h
    xdg-desktop-file/xdgdesktopfile_p.h
    xdg-desktop-file/xdgdesktopfile.h
    xdg-desktop-file/xdgdirs.h
    xdg-desktop-file/xdgmacros.h
)

set(SOURCES
    main.cpp
    panelpluginsmodel.cpp
    windownotifier.cpp
    ukuipanel.cpp
    ukuipanelapplication.cpp
    ukuipanellayout.cpp
    plugin.cpp
    pluginsettings.cpp
    contextmenu.cpp
    common/ukuiplugininfo.cpp
    common/ukuisettings.cpp
    common/ukuigridlayout.cpp
    common_fun/listengsettings.cpp
    common_fun/ukuipanel_infomation.cpp
    common_fun/dbus-adaptor.cpp
    common_fun/panel_commission.cpp
    customstyle.cpp
    xdg-desktop-file/desktopenvironment_p.cpp
    xdg-desktop-file/xdgdesktopfile.cpp
    xdg-desktop-file/xdgdirs.cpp
)

set(PLUGIN_DESKTOPS_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/ukui/${PROJECT_NAME}")
set(QTX_LIBRARIES Qt5::Widgets Qt5::Xml Qt5::DBus)
set(UKUI_PANEL_MAN ../man/ukui-panel.1)
set(DESKTOP_FILE resources/ukui-panel.desktop)
set(IMAGE_DIR ./img/)
set(GSETTINGS_FILE resources/org.ukui.panel.settings.gschema.xml)
set(PANEL_GLOBAL_CONFIG_FILES resources/panel-commission.ini)
set(PANEL_GLOBAL_CONFIG_EXEC_FILES resources/panel-commission.sh
                            resources/ukui-panel-reset.sh resources/ukui-panel-config.sh)
file(GLOB UKUI_PANEL_CONFIG_FILES resources/*.conf)

add_definitions(-DCOMPILE_UKUI_PANEL)
add_definitions(-DPLUGIN_DESKTOPS_DIR=\"${PLUGIN_DESKTOPS_DIR}\")

if (WITH_SCREENSAVER_FALLBACK)
    message(STATUS "Building with conversion of deprecated 'screensaver' plugin")
    add_definitions(-DWITH_SCREENSAVER_FALLBACK "-DUKUI_LOCK_DESKTOP=\"${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications/ukui-lockscreen.desktop\"")
endif ()


set_property(SOURCE ${DBUS_INTERFACE_SRCS} ${DBUS_ADAPTOR_SRCS} PROPERTY SKIP_AUTOGEN ON)
list(APPEND SOURCES "${DBUS_INTERFACE_SRCS}" "${DBUS_ADAPTOR_SRCS}")

QT5_ADD_DBUS_INTERFACE(libqtxdg_DBUS_INTERFACE_SRCS
    xdg-desktop-file/dbus/org.freedesktop.Application.xml
    application_interface
)

# 翻译文件
file(GLOB TS_FILES "translation/*.ts")
# 更新翻译并创建.qm文件
qt5_create_translation(QM_FILES ${PROJECT_SOURCE_DIR} ${TS_FILES})
add_executable(${PROJECT_NAME}
    ${PUB_HEADERS}
    ${PRIV_HEADERS}
    ${QM_FILES}
    ${SOURCES}
    ${libqtxdg_DBUS_INTERFACE_SRCS}
)

find_package(PkgConfig)
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
pkg_check_modules(GIO2 REQUIRED gio-2.0)
pkg_check_modules(Gsetting REQUIRED gsettings-qt)
include_directories(${GLIB2_INCLUDE_DIRS})
include_directories(${GIO2_INCLUDE_DIRS})
include_directories(${Gsetting_INCLUDE_DIRS})

find_package(PkgConfig REQUIRED)
find_package(KF5WindowSystem)
find_package(KF5Screen)
pkg_check_modules(KYSDKWAYLANDHELPER_PKG kysdk-waylandhelper)

#ADD_DEFINITIONS(-DQT_NO_KEYWORDS)
target_link_libraries(${PROJECT_NAME}
    ${LIBRARIES}
    ${QTX_LIBRARIES}
    KF5::WindowSystem
    ${STATIC_PLUGINS}
    ${GLIB2_LIBRARIES}
    ${GIO2_LIBRARIES}
    ${Gsetting_LIBRARIES}
    Qt${QT_VERSION_MAJOR}::Quick
    KF5::Screen
)

target_include_directories(${PROJECT_NAME} PRIVATE ${KYSDKWAYLANDHELPER_PKG_INCLUDE_DIRS})
target_link_directories(${PROJECT_NAME} PRIVATE ${KYSDKWAYLANDHELPER_PKG_LIBRARY_DIRS} KF5::WindowSystem)
target_link_libraries(${PROJECT_NAME} ${KYSDKWAYLANDHELPER_PKG_LIBRARIES})

target_compile_definitions(${PROJECT_NAME}
    PRIVATE
        "UKUI_RELATIVE_SHARE_DIR=\"${UKUI_RELATIVE_SHARE_DIR}\""
        "UKUI_RELATIVE_SHARE_TRANSLATIONS_DIR=\"${UKUI_RELATIVE_TRANSLATIONS_DIR}\""
        "UKUI_SHARE_TRANSLATIONS_DIR=\"${UKUI_TRANSLATIONS_DIR}\""
        "UKUI_GRAPHICS_DIR=\"${UKUI_GRAPHICS_DIR}\""
        "UKUI_DATA_DIR=\"${UKUI_DATA_DIR}\""   
        "UKUI_INSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\""
)

#安装ukui-panel
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
#DESKTOP FILE
install(FILES ${DESKTOP_FILE} DESTINATION "/etc/xdg/autostart/" COMPONENT Runtime)
install(FILES ${UKUI_PANEL_CONFIG_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/ukui)
install(FILES ${PUB_HEADERS} DESTINATION include/ukui)
install(FILES ${UKUI_PANEL_MAN} DESTINATION "${CMAKE_INSTALL_MANDIR}/man1" COMPONENT Runtime)
install(FILES ${GSETTINGS_FILE} DESTINATION "/usr/share/glib-2.0/schemas" COMPONENT Runtime)
install(FILES ${PANEL_GLOBAL_CONFIG_FILES} DESTINATION "/usr/share/ukui/ukui-panel" COMPONENT Runtime
    PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_READ WORLD_WRITE)
install(FILES ${PANEL_GLOBAL_CONFIG_EXEC_FILES} DESTINATION "/usr/share/ukui/ukui-panel" COMPONENT Runtime
    PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ GROUP_WRITE WORLD_READ WORLD_WRITE WORLD_EXECUTE)
install(DIRECTORY ${IMAGE_DIR} DESTINATION "${PACKAGE_DATA_DIR}/panel/img")

set(PLUGIN panel)
set(PANEL_TRANSLATION_DIR "${PACKAGE_DATA_DIR}/panel/translation")
add_compile_definitions(PANEL_TRANSLATION_DIR="${PANEL_TRANSLATION_DIR}")
install(FILES ${QM_FILES} DESTINATION "${PANEL_TRANSLATION_DIR}")

