cmake_minimum_required(VERSION 3.18.0 FATAL_ERROR)
project(lxqt-clip)

set(LXQTCLIP_VERSION 2.5.0)
set(LXQT_MINIMUM_VERSION "2.5.0")
set(KF6_MINIMUM_VERSION "6.0.0")
set(QT_MINIMUM_VERSION "6.10.0")

find_package(lxqt ${LXQT_MINIMUM_VERSION} REQUIRED)
find_package(Qt6 ${QT_MINIMUM_VERSION} REQUIRED COMPONENTS Widgets DBus LinguistTools)
find_package(KF6GuiAddons ${KF6_MINIMUM_VERSION} REQUIRED)
find_package(X11 REQUIRED)

# Qt 6.10: Usage of a private Qt module Foo now requires a call to find_package(Qt6 COMPONENTS FooPrivate) to make the Qt6::FooPrivate target available.
find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)

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

include(LXQtConfigVars)
include(LXQtTranslateDesktop)
include(LXQtCompilerSettings NO_POLICY_SCOPE)
include(LXQtTranslate)

# source code and compilation
set (LXQTCLIP_HEADERS
    qkeysequencewidget/qkeysequencewidget.h
    qkeysequencewidget/qkeysequencewidget_p.h
    qmenuview/qmenuview.h
    qmenuview/qmenuview_p.h
    src/model.h
    src/preferencesdialog.h
    src/systray.h
    src/clipboardwrap.h
    src/dbusinterface.h
    src/signalhandler.h
    qxt/qxtglobalshortcut.h
)
set (LXQTCLIP_SOURCES
    qkeysequencewidget/qkeysequencewidget.cpp
    qmenuview/qmenuview.cpp
    src/main.cpp
    src/item.cpp
    src/model.cpp
    src/preferences.cpp
    src/preferencesdialog.cpp
    src/systray.cpp
    src/clipboardwrap.cpp
    src/dbusinterface.cpp
    src/signalhandler.cpp
    src/lxqt-clip.qrc
    qxt/qxtglobalshortcut.cpp
    qxt/qxtglobalshortcut_x11.cpp
)

set (LXQTCLIP_FORMS
    src/preferencesdialog.ui
)

set (LXQTCLIP_RESOURCES
    src/lxqt-clip.qrc
)

# Translations **********************************
lxqt_translate_ts(LXQTCLIP_QM
    UPDATE_TRANSLATIONS
        ${UPDATE_TRANSLATIONS}
    SOURCES
        ${LXQTCLIP_HEADERS}
        ${LXQTCLIP_SOURCES}
        ${LXQTCLIP_FORMS}
    INSTALL_DIR
        "${LXQT_TRANSLATIONS_DIR}/${PROJECT_NAME}"
)
lxqt_app_translation_loader(LXQTCLIP_QM_LOADER ${PROJECT_NAME})

lxqt_translate_desktop(LXQTCLIP_DESKTOP_FILE
    SOURCES
        lxqt-clip.desktop.in
    INSTALL_DIR
        share/applications
    COMPONENT
        Runtime
    USE_YAML
)
add_custom_target(lxqtclip_desktop_file_target ALL DEPENDS ${LXQTCLIP_DESKTOP_FILE})

lxqt_translate_desktop(DESKTOP_FILES
    SOURCES
        lxqt-clip-autostart.desktop.in
    INSTALL_DIR
        "${LXQT_ETC_XDG_DIR}/autostart"
    COMPONENT
        Runtime
    USE_YAML
)
add_custom_target(autostart_desktop_files ALL DEPENDS ${DESKTOP_FILES})
#************************************************

QT6_WRAP_UI( LXQTCLIP_UI ${LXQTCLIP_FORMS} )
QT6_WRAP_CPP( LXQTCLIP_MOC ${LXQTCLIP_HEADERS} )
QT6_ADD_RESOURCES( LXQTCLIP_RCC ${LXQTCLIP_RESOURCES} )

include_directories (
    ${CMAKE_CURRENT_SOURCE_DIR}/src
    ${CMAKE_CURRENT_BINARY_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}/src
    ${CMAKE_CURRENT_SOURCE_DIR}/qkeysequencewidget
    ${CMAKE_CURRENT_SOURCE_DIR}/qxt
    ${CMAKE_CURRENT_SOURCE_DIR}/qmenuview
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/qxt)

add_executable(lxqt-clip
    ${LXQTCLIP_SOURCES}
    ${LXQTCLIP_UI}
    ${LXQTCLIP_MOC}
    ${LXQTCLIP_RCC}
    ${LXQTCLIP_QM}
    ${LXQTCLIP_QM_LOADER}
)

target_include_directories(${PROJECT_NAME}
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/qkeysequencewidget
        ${CMAKE_CURRENT_SOURCE_DIR}/qxt
        ${CMAKE_CURRENT_SOURCE_DIR}/qmenuview
)

target_link_libraries( ${PROJECT_NAME}
    PRIVATE
        Qt6::Widgets
        Qt6::DBus
        KF6::GuiAddons
        Qt6::GuiPrivate
        X11::X11
        lxqt
)

target_compile_definitions(${PROJECT_NAME}
    PRIVATE
        "-DLXQTCLIP_VERSION=\"${LXQTCLIP_VERSION}\""
)

# installation
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
install(FILES src/icons/lxqt-clip.png DESTINATION share/icons/hicolor/128x128/apps)
