if(QT_VERSION_MAJOR GREATER_EQUAL 6)
    set(LSF_CLIENT_NAME lomiri-storage-framework-qt${QT_VERSION_MAJOR}-client-${LSF_CLIENT_API_VERSION})
    set(LSF_CLIENT_INCLUDE_NAME ${LSF_CLIENT_NAME})
    set(LSF_CLIENT_DEPS_PRIVATE "Qt6Core Qt6Network")
else()
    set(LSF_CLIENT_NAME lomiri-storage-framework-qt-client-${LSF_CLIENT_API_VERSION})
    set(LSF_CLIENT_INCLUDE_NAME lomiri-storage-framework-client-${LSF_CLIENT_API_VERSION})
    set(LSF_CLIENT_DEPS_PRIVATE "Qt5Core Qt5Network")
endif()

if(NOT ENABLE_QT6)
    add_subdirectory(client)
endif()

set_source_files_properties(${CMAKE_SOURCE_DIR}/data/provider.xml PROPERTIES
    CLASSNAME ProviderInterface
    INCLUDE lomiri/storage/internal/dbusmarshal.h
)
qt_add_dbus_interface(generated_files
    ${CMAKE_SOURCE_DIR}/data/provider.xml
    ProviderInterface
)

set_source_files_properties(${CMAKE_SOURCE_DIR}/data/registry.xml PROPERTIES
    CLASSNAME RegistryInterface
    INCLUDE lomiri/storage/internal/AccountDetails.h
)
qt_add_dbus_interface(generated_files
    ${CMAKE_SOURCE_DIR}/data/registry.xml
    RegistryInterface
)

set_source_files_properties(${generated_files} dbusmarshal.cpp PROPERTIES
    COMPILE_FLAGS "-Wno-ctor-dtor-privacy -Wno-missing-field-initializers"
    GENERATED TRUE
)

# Sources for remote client V2 library.
set(QT_CLIENT_LIB_V2_SRC
    Account.cpp
    AccountsJob.cpp
    Downloader.cpp
    Item.cpp
    ItemJob.cpp
    ItemListJob.cpp
    Runtime.cpp
    StorageError.cpp
    Uploader.cpp
    VoidJob.cpp
    internal/AccountImpl.cpp
    internal/AccountsJobImpl.cpp
    internal/DownloaderImpl.cpp
    internal/HandlerBase.cpp
    internal/ItemImpl.cpp
    internal/ItemJobImpl.cpp
    internal/ItemListJobImpl.cpp
    internal/ListJobImplBase.cpp
    internal/MultiItemJobImpl.cpp
    internal/MultiItemListJobImpl.cpp
    internal/RuntimeImpl.cpp
    internal/StorageErrorImpl.cpp
    internal/unmarshal_error.cpp
    internal/validate.cpp
    internal/UploaderImpl.cpp
    internal/VoidJobImpl.cpp
    ${generated_files}
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/Account.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/AccountsJob.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/Downloader.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/Item.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/ItemJob.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/ItemListJob.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/Runtime.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/StorageError.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/Uploader.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/VoidJob.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/DownloaderImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/AccountsJobImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/HandlerBase.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/ItemJobImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/ItemListJobImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/ListJobImplBase.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/MultiItemJobImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/MultiItemListJobImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/UploaderImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/StorageErrorImpl.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/internal/VoidJobImpl.h
)

add_library(lomiri-storage-framework-qt-client-v2 SHARED
    ${QT_CLIENT_LIB_V2_SRC}
    ${generated_files}
)
set_target_properties(lomiri-storage-framework-qt-client-v2 PROPERTIES
    AUTOMOC TRUE
    LINK_FLAGS "-Wl,--no-undefined"
    OUTPUT_NAME ${LSF_CLIENT_NAME}
    SOVERSION ${LSF_CLIENT_SOVERSION}
    VERSION ${LSF_CLIENT_LIBVERSION}
)
target_link_libraries(lomiri-storage-framework-qt-client-v2
    lomiri-storage-framework-common-internal
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Network
)
install(
    TARGETS lomiri-storage-framework-qt-client-v2
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

configure_file(
    lomiri-storage-framework-qt-client.pc.in
    ${LSF_CLIENT_NAME}.pc
)
install(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/${LSF_CLIENT_NAME}.pc
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
