project(Analyser VERSION 0.3 LANGUAGES C CXX)
set(APPLICATION_NAME "掌静脉测试工具")

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Quick QuickTemplates2 SerialPort JpegPrivate BundledLibjpeg)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Quick QuickTemplates2 SerialPort JpegPrivate BundledLibjpeg)

qt_standard_project_setup(REQUIRES 6.5)

configure_file(Configuration.h.in Configuration.h)

qt_add_executable(Analyser Analyser.rc
    main.cpp
    Application.h Application.cpp
    CategoryLogSinkBackend.h CategoryLogSinkBackend.cpp
    ImageDecoder.h ImageDecoder.cpp
    ModuleCommunication.h ModuleCommunication.cpp
    PalmFeatureTableModel.h PalmFeatureTableModel.cpp
    VideoFrameProvider.h VideoFrameProvider.cpp
    VideoPlayer.h VideoPlayer.cpp
)

qt_add_qml_module(Analyser
    URI Analyser
    VERSION 1.0
    QML_FILES
        qml/Main.qml
        qml/ConnectionItem.qml
        qml/OperationItem.qml
        qml/OtaPage.qml
        qml/EnrollVerifyOperations.qml
        qml/ExtendedOperations.qml
    RESOURCES
        resources/successfull.svg
        resources/warning.svg
        resources/palm-middle.png
)

target_compile_definitions(Analyser
    PRIVATE _CRT_SECURE_NO_WARNINGS
)

if(UNIX)
    set_target_properties(Analyser PROPERTIES
        SUFFIX .AppImage
    )
    set(EXECUTABLE_NAME Analyser.AppImage)
else()
    set(EXECUTABLE_NAME Analyser.exe)
endif()
if(CMAKE_BUILD_TYPE STREQUAL  "Release")
    set_property(TARGET Analyser PROPERTY
        WIN32_EXECUTABLE true
    )
endif()

target_include_directories(Analyser
    PRIVATE ${FFmpeg_INCLUDE_DIR}
    PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
)

target_link_directories(Analyser
    PRIVATE ${FFmpeg_LIB_DIR}
)

target_link_libraries(Analyser
    PRIVATE Fluent
    PRIVATE Fluentplugin
    PRIVATE Encrypt
    PRIVATE Database
    PRIVATE Peripheral
    PRIVATE avcodec
    PRIVATE swscale
    PRIVATE avutil
    PRIVATE avdevice
    PRIVATE avformat
    $<$<PLATFORM_ID:Windows>:Ws2_32>
    PRIVATE Qt${QT_VERSION_MAJOR}::Quick
    PRIVATE Qt${QT_VERSION_MAJOR}::QuickTemplates2
    PRIVATE Qt${QT_VERSION_MAJOR}::SerialPort
    PRIVATE Qt${QT_VERSION_MAJOR}::JpegPrivate
    PRIVATE Qt${QT_VERSION_MAJOR}::BundledLibjpeg
)

install(TARGETS Analyser
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

configure_file(
    ${CMAKE_SOURCE_DIR}/resources/run.sh.in
    ${CMAKE_CURRENT_BINARY_DIR}/scripts/${EXECUTABLE_NAME}
    @ONLY
)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/scripts/${EXECUTABLE_NAME} DESTINATION .)

qt_generate_deploy_qml_app_script(
    TARGET Analyser
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
    NO_TRANSLATIONS
    DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
install(SCRIPT ${deploy_script})