# Expose internal headers under sensible paths to the impl.
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/messaging ${PROCESS_CPP_INCLUDE_DIRS} ${LibPhoneNumber_INCLUDE_DIRS})

qt5_wrap_cpp(MESSAGING_FW_MOCS ${CMAKE_SOURCE_DIR}/include/messaging/qt/network_monitor.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/protocol.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/connection.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/text_channel.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable_internal.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_roles.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_roles_internal.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_subject.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_subject_internal.h
                               ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/channel_interface_roles_adaptor.h)

set(
    MESSAGING_FW_SRCS

    messaging/associative_connector_factory.cpp
    messaging/boost/variant.cpp
    messaging/broadcast.cpp
    messaging/chat.cpp
    messaging/group.cpp
    messaging/group_manager.cpp
    messaging/has_interfaces.cpp
    messaging/connection.cpp
    messaging/connector_factory_initializer.cpp
    messaging/dynamic_library.cpp
    messaging/member.cpp
    messaging/message.cpp
    messaging/messenger.cpp
    messaging/parameter.cpp
    messaging/plugin_connector.cpp
    messaging/presence.cpp
    messaging/presence_manager.cpp
    messaging/presence_status_not_supported.cpp
    messaging/recipient.cpp
    messaging/user.cpp
    messaging/utils.cpp

    messaging/qt/network_monitor.cpp
    messaging/qt/runtime.cpp
    messaging/qt/variant.cpp
    messaging/qt/variant_map_facade.cpp

    messaging/qt/tp/adapter.cpp
    messaging/qt/tp/connection.cpp
    messaging/qt/tp/initializer.cpp
    messaging/qt/tp/protocol.cpp
    messaging/qt/tp/text_channel.cpp

    messaging/qt/tp/interfaces/base_channel_destroyable.cpp
    messaging/qt/tp/interfaces/base_channel_roles.cpp
    messaging/qt/tp/interfaces/base_channel_subject.cpp
    messaging/qt/tp/interfaces/channel_interface_roles_adaptor.cpp

    messaging/runner.cpp
)

# The general messaging-framework shared library.
add_library(
    messaging-framework SHARED

    ${MESSAGING_FW_MOCS}
    ${MESSAGING_FW_SRCS}
)

set_target_properties(
    messaging-framework

    PROPERTIES
    OUTPUT_NAME "messaging-framework${API_VERSION}"
    VERSION ${LIB_VERSION}
    SOVERSION ${SO_VERSION}
)

target_link_libraries(
    messaging-framework

    ${Boost_LIBRARIES}
    ${CMAKE_THREAD_LIBS_INIT}
    ${GLog_LIBRARY}
    ${PROCESS_CPP_LDFLAGS}
    ${LibPhoneNumber_LIBRARIES}

    Qt5::Core
    Qt5::DBus
    Qt5::Xml

    ${TP_QT5_LDFLAGS}
    telepathy-qt5-service
    Qt5::Network

    dl)

install(
    TARGETS messaging-framework
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

# messaging-framework-runner is the standalone executable for executing
# a given messaging::Connector.
add_executable(messaging-framework-runner messaging/runner_main.cpp)
# We keep the Runner::main symbol evolvable by putting it into the main so.
target_link_libraries(messaging-framework-runner messaging-framework ${TP_QT5_LDFLAGS})
# We install the runner to the libdir as it is not meant to be run by a user.
install(
    TARGETS messaging-framework-runner
    RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR})
