project(LomiriOnlineAccountsPluginQML LANGUAGES CXX)

pkg_check_modules(ACCOUNTSQT accounts-qt${QT_VERSION} REQUIRED)

set(PLUGIN_MODULE LomiriOnlineAccountsPluginQML)
set(API_VERSION 1.0)
set(API_URI Lomiri.OnlineAccounts.Plugin)

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.hpp.in ${CMAKE_CURRENT_BINARY_DIR}/config.hpp @ONLY)

if(ENABLE_QT6)
    qt_add_qml_module(${PLUGIN_MODULE}
        URI ${API_URI}
        VERSION ${API_VERSION}
        SOURCES plugin.cpp plugin.h
            qml-loopback-server.cpp qml-loopback-server.h
        PLUGIN_TARGET ${PLUGIN_MODULE}
        CLASS_NAME Plugin
        QML_FILES
            qml6/ChromedWebView.qml
            qml6/DuplicateAccount.qml
            qml6/ErrorItem.qml
            qml6/KeyboardRectangle.qml
            qml6/OAuthMain.qml
            qml6/OAuth.qml
            qml6/Options.qml
            qml6/RemovalConfirmation.qml
            qml6/ServiceItem.qml
            qml6/ServiceItemBase.qml
            qml6/ServiceSwitches.qml
            qml6/StandardAnimation.qml
            qml6/WebView.qml
        NO_GENERATE_PLUGIN_SOURCE
        NO_PLUGIN_OPTIONAL)
    qt_query_qml_module(${PLUGIN_MODULE}
        PLUGIN_TARGET module_plugin_target
        TARGET_PATH module_target_path
        QML_FILES module_qml_files
        QMLDIR module_qmldir
        TYPEINFO module_typeinfo
    )
    set_target_properties(${PLUGIN_MODULE} PROPERTIES
        LINK_FLAGS -Wl,--no-undefined
    )
    target_compile_options(${PLUGIN_MODULE} PRIVATE
        ${ACCOUNTSQT_CFLAGS}
    )
    target_include_directories(${PLUGIN_MODULE} PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_BINARY_DIR}
        ${LomiriOnlineAccountsPlugin_SOURCE_DIR}/..
    )
    target_link_libraries(${PLUGIN_MODULE} PRIVATE
        Qt${QT_VERSION}::Core
        Qt${QT_VERSION}::Qml
        Qt${QT_VERSION}::Quick
        lomiri-online-accounts-plugin${LIB_SUFFIX}
        ${ACCOUNTSQT_LDFLAGS}
    )

    set(PLUGIN_IMPORTS_DIR "${QT_INSTALL_QML}/${module_target_path}")
    install(TARGETS ${module_plugin_target} DESTINATION "${PLUGIN_IMPORTS_DIR}")
    install(FILES ${module_qml_files} DESTINATION "${PLUGIN_IMPORTS_DIR}")
    install(FILES ${module_qmldir} DESTINATION "${PLUGIN_IMPORTS_DIR}")
    # install(FILES ${module_typeinfo} DESTINATION "${PLUGIN_IMPORTS_DIR}")
else()
    include_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_BINARY_DIR}
        ${LomiriOnlineAccountsPlugin_SOURCE_DIR}/..
    )

    add_definitions(
        ${ACCOUNTSQT_CFLAGS}
    )

    add_library(${PLUGIN_MODULE} MODULE
        plugin.cpp
        qml-loopback-server.cpp
    )

    set_target_properties(${PLUGIN_MODULE} PROPERTIES
        LINK_FLAGS -Wl,--no-undefined
    )

    target_link_libraries(${PLUGIN_MODULE}
        Qt${QT_VERSION}::Core
        Qt${QT_VERSION}::Qml
        Qt${QT_VERSION}::Quick
        lomiri-online-accounts-plugin
        ${ACCOUNTSQT_LDFLAGS}
    )

    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/qmldir.in ${CMAKE_CURRENT_BINARY_DIR}/qmldir @ONLY)

    set(QML_FILES_PLUGIN_MODULE
        qml5/ChromedWebView.qml
        qml5/DuplicateAccount.qml
        qml5/ErrorItem.qml
        qml5/KeyboardRectangle.qml
        qml5/OAuthMain.qml
        qml5/OAuth.qml
        qml5/Options.qml
        qml5/RemovalConfirmation.qml
        qml5/ServiceItem.qml
        qml5/ServiceItemBase.qml
        qml5/ServiceSwitches.qml
        qml5/StandardAnimation.qml
        qml5/WebView.qml
    )

    # Module install

    set(PLUGIN_IMPORTS_DIR "${QT_INSTALL_QML}/Lomiri/OnlineAccounts/Plugin")
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir DESTINATION ${PLUGIN_IMPORTS_DIR})
    install(TARGETS ${PLUGIN_MODULE} DESTINATION ${PLUGIN_IMPORTS_DIR})
    install(FILES ${QML_FILES_PLUGIN_MODULE} DESTINATION ${PLUGIN_IMPORTS_DIR})

    if(NOT ${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
      # copy qml files over to build dir to be able to import them uninstalled
      foreach(_file ${QML_FILES_PLUGIN_MODULE})
        add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}
                           DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_file}
                           COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${_file} ${CMAKE_CURRENT_BINARY_DIR}/${_file})
      endforeach(_file)
      add_custom_target(${PLUGIN_MODULE}_copy_files_to_build_dir DEPENDS ${QML_FILES_PLUGIN_MODULE})
      add_dependencies(${PLUGIN_MODULE} ${PLUGIN_MODULE}_copy_files_to_build_dir)
    endif()
endif()
