# SPDX-FileCopyrightText: 2024 Open Mobile Platform LLC <community@omp.ru>
# SPDX-License-Identifier: BSD-3-Clause

cmake_minimum_required(VERSION 3.5)

project(ru.auroraos.RemoteDesktopClient)

find_package (
    Qt5
    COMPONENTS Core Network Qml Gui Quick LinguistTools Sql
    REQUIRED)

include(FindPkgConfig)
pkg_search_module(AURORA auroraapp REQUIRED)
pkg_search_module(AURORA auroraapp_i18n REQUIRED)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "/usr/share/${PROJECT_NAME}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)

add_definitions(-DXK_CYRILLIC -DXK_PUBLISHING)

set(short_name RemoteDesktopClient)

FILE(GLOB TsFiles "translations/*.ts")
qt5_create_translation(QmFiles ${CMAKE_SOURCE_DIR} ${TsFiles})

set(SOURCES
    src/main.cpp
    src/eventlogger.cpp
    src/remotedesktopview.cpp
    src/remotescreenbuffer.cpp
    src/configuration.cpp
    src/configurationmodel.cpp
    src/dataaccessobject.cpp
    src/freerdpeventloop.cpp
    src/registertypes.cpp
    src/proxies/freerdpclientproxy.cpp
    src/proxies/vncclientproxy.cpp
    src/proxies/clientproxy.cpp
    src/clients/freerdpclient.cpp
    src/clients/remoteclient.cpp
    src/clients/vncclient.cpp
    src/controllers/clientproxycontroller.cpp
    src/controllers/connectionpagecontroller.cpp
    src/controllers/cursorcontroller.cpp
    src/controllers/screenzoomcontroller.cpp
    src/controllers/remotedesktoppagecontroller.cpp
    src/controllers/configurationselectionpagecontroller.cpp
    src/controllers/configurationpagecontroller.cpp
)

set(HEADERS
    src/eventlogger.h
    src/remotedesktopview.h
    src/remotescreenbuffer.h
    src/configuration.h
    src/configurationmodel.h
    src/dataaccessobject.h
    src/freerdpeventloop.h
    src/registertypes.h
    src/bitmaprectanglesink.h
    src/types/mouseoperationtypes.h
    src/proxies/freerdpclientproxy.h
    src/proxies/vncclientproxy.h
    src/proxies/clientproxy.h
    src/clients/freerdpclient.h
    src/clients/remoteclient.h
    src/clients/vncclient.h
    src/controllers/clientproxycontroller.h
    src/controllers/connectionpagecontroller.h
    src/controllers/cursorcontroller.h
    src/controllers/screenzoomcontroller.h
    src/controllers/remotedesktoppagecontroller.h
    src/controllers/configurationselectionpagecontroller.h
    src/controllers/configurationpagecontroller.h
)

add_executable(${PROJECT_NAME}
    ${SOURCES}
    ${HEADERS}
    ${QmFiles}
)

add_dependencies(${PROJECT_NAME}
    winpr
    freerdp-client
    freerdp
    vncclient
)

target_compile_definitions(${PROJECT_NAME} PRIVATE
    $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>
)

target_include_directories(${PROJECT_NAME} PRIVATE
    $<BUILD_INTERFACE:
    ${AURORA_INCLUDE_DIRS}
    >
    ${PROJECT_SOURCE_DIR}/src/
    ${PROJECT_SOURCE_DIR}/src/clients
    ${PROJECT_SOURCE_DIR}/src/controllers
    ${PROJECT_SOURCE_DIR}/src/proxies
    ${CMAKE_SOURCE_DIR}/vnc/libvncserver/
    ${CMAKE_BINARY_DIR}/vnc/libvncserver/
    ${CMAKE_SOURCE_DIR}/rdp/FreeRDP/include
    ${CMAKE_SOURCE_DIR}/rdp/FreeRDP/winpr/include
    ${CMAKE_BINARY_DIR}/rdp/FreeRDP/winpr/include
)

target_link_directories(
    ${PROJECT_NAME}
    PRIVATE
    ${CMAKE_BINARY_DIR}/rdp/FreeRDP/libfreerdp
    ${CMAKE_BINARY_DIR}/rdp/FreeRDP/client/common
    ${CMAKE_BINARY_DIR}/rdp/FreeRDP/winpr/libwinpr
    ${CMAKE_BINARY_DIR}/vnc/libvncserver/
)

target_link_libraries(${PROJECT_NAME}
    Qt5::Quick
    Qt5::Sql
    ${AURORA_LDFLAGS}
    winpr2
    freerdp-client2
    freerdp2
    vncclient
)

install(TARGETS ${PROJECT_NAME}
    RUNTIME DESTINATION bin
)
install(DIRECTORY qml
    DESTINATION share/ru.auroraos.RemoteDesktopClient
)

foreach(_file IN LISTS QmFiles)
    get_filename_component(_filename "${_file}" NAME)
    string(REPLACE "${short_name}" "${PROJECT_NAME}" _full_filename "${_filename}")
    install(FILES ${_file} DESTINATION share/ru.auroraos.RemoteDesktopClient/translations RENAME ${_full_filename})
endforeach()

install(FILES ru.auroraos.RemoteDesktopClient.desktop
    DESTINATION share/applications
)
install(FILES icons/86x86/ru.auroraos.RemoteDesktopClient.png
    DESTINATION share/icons/hicolor/86x86/apps
)
install(FILES icons/108x108/ru.auroraos.RemoteDesktopClient.png
    DESTINATION share/icons/hicolor/108x108/apps
)
install(FILES icons/128x128/ru.auroraos.RemoteDesktopClient.png
    DESTINATION share/icons/hicolor/128x128/apps
)
install(FILES icons/172x172/ru.auroraos.RemoteDesktopClient.png
    DESTINATION share/icons/hicolor/172x172/apps
)

# Get the other files reachable from the project tree in Qt Creator
FILE(GLOB TsFiles "translations/*.ts")
FILE(GLOB QmlFiles "qml/**/*.qml" "qml/*.qml")
add_custom_target(distfiles
    SOURCES
        ru.auroraos.RemoteDesktopClient.desktop
        ${QmlFiles}
        ${TsFiles})

file(WRITE "${CMAKE_BINARY_DIR}/QtCreatorDeployment.txt"
    "${CMAKE_INSTALL_PREFIX}
${CMAKE_BINARY_DIR}/ru.auroraos.RemoteDesktopClient:bin
")

