# Create an OBJECT library for the files that are used by both
# local and remote client libraries, so we don't compile them twice.

add_library(qt-client-lib-common OBJECT
    Account.cpp
    Downloader.cpp
    Exceptions.cpp
    File.cpp
    Folder.cpp
    Item.cpp
    Root.cpp
    Runtime.cpp
    Uploader.cpp
    internal/AccountBase.cpp
    internal/DownloaderBase.cpp
    internal/FileBase.cpp
    internal/FolderBase.cpp
    internal/ItemBase.cpp
    internal/RootBase.cpp
    internal/RuntimeBase.cpp
    internal/UploaderBase.cpp
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/client/internal/DownloaderBase.h
    ${CMAKE_SOURCE_DIR}/include/lomiri/storage/qt/client/internal/UploaderBase.h
)
set_target_properties(qt-client-lib-common PROPERTIES
    AUTOMOC TRUE
    POSITION_INDEPENDENT_CODE TRUE
)
target_link_libraries(qt-client-lib-common PUBLIC
    Qt${QT_VERSION_MAJOR}::Concurrent
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Network
    ${Boost_LIBRARIES}
    PkgConfig::GLIB_DEPS
)

# We build both local and remote client libraries here instead
# of creating OBJECT libraries for them because cmake 3.0.2 (which
# is in the Vivid overlay) cannot handle .moc files in OBJECT libraries.

# Descend into the child directories first. The CMakeLists.txt files
# there set QT_CLIENT_LIB_LOCAL_SRC and QT_CLIENT_LIB_REMOTE_SRC.
add_subdirectory(internal)

# Build the local loopback client library
add_library(lomiri-storage-framework-qt-local-client SHARED
    ${QT_CLIENT_LIB_LOCAL_SRC}
)
set_target_properties(lomiri-storage-framework-qt-local-client PROPERTIES
    AUTOMOC TRUE
    LINK_FLAGS "-Wl,--no-undefined"
    OUTPUT_NAME "lomiri-storage-framework-qt-local-client-1"
    SOVERSION 0
    VERSION 0.0.1
)
target_link_libraries(lomiri-storage-framework-qt-local-client
    qt-client-lib-common
    lomiri-storage-framework-common-internal
    PkgConfig::LIBLOMIRI_API_DEPS
)
install(
    TARGETS lomiri-storage-framework-qt-local-client
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

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

# Build the remote client library
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(${generated_files} PROPERTIES
    COMPILE_FLAGS "-Wno-ctor-dtor-privacy -Wno-missing-field-initializers"
    GENERATED TRUE
)

add_library(lomiri-storage-framework-qt-client SHARED
    ${QT_CLIENT_LIB_REMOTE_SRC}
    ${generated_files}
)
set_target_properties(lomiri-storage-framework-qt-client PROPERTIES
    AUTOMOC TRUE
    LINK_FLAGS "-Wl,--no-undefined"
    OUTPUT_NAME "lomiri-storage-framework-qt-client-1"
    SOVERSION 0
    VERSION 0.0.1
)
target_link_libraries(lomiri-storage-framework-qt-client
    qt-client-lib-common
    lomiri-storage-framework-common-internal
    PkgConfig::ONLINEACCOUNTS_DEPS
)
install(
    TARGETS lomiri-storage-framework-qt-client
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

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