cmake_minimum_required(VERSION 2.8)

if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Os -fvisibility=hidden")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Os -fvisibility=hidden")
endif()

set(PAHO_SOURCE_FILES
    src/paho/Clients.c
    src/paho/Heap.c
    src/paho/LinkedList.c
    src/paho/Log.c
    src/paho/Messages.c
    #src/paho/MQTTAsync.c
    src/paho/MQTTClient.c
    src/paho/MQTTPacket.c
    src/paho/MQTTPacketOut.c
    src/paho/MQTTPersistence.c
    src/paho/MQTTPersistenceDefault.c
    src/paho/MQTTProtocolClient.c
    src/paho/MQTTProtocolOut.c
    #src/paho/MQTTVersion.c
    src/paho/Socket.c
    src/paho/SocketBuffer.c
    #src/paho/StackTrace.c
    src/paho/Thread.c
    src/paho/Tree.c
    src/paho/utf-8.c)

set(PAHO_HEADER_FILES
    include/paho/Clients.h
    include/paho/Heap.h
    include/paho/LinkedList.h
    include/paho/Log.h
    include/paho/Messages.h
    #include/paho/MQTTAsync.h
    include/paho/MQTTClient.h
    include/paho/MQTTClientPersistence.h
    include/paho/MQTTPacket.h
    include/paho/MQTTPacketOut.h
    include/paho/MQTTPersistence.h
    include/paho/MQTTPersistenceDefault.h
    include/paho/MQTTProtocol.h
    include/paho/MQTTProtocolClient.h
    include/paho/MQTTProtocolOut.h
    include/paho/Socket.h
    include/paho/SocketBuffer.h
    include/paho/StackTrace.h
    include/paho/Thread.h
    include/paho/Tree.h
    include/paho/utf-8.h)

set(MESSENGER_SOURCE_FILES
    src/messenger/Client.cpp
    src/messenger/Common.cpp
    src/messenger/Messages.cpp
    src/messenger/Messenger.cpp
    src/messenger/MqttConfiguration.cpp
    src/messenger/MqttLogger.cpp
    src/messenger/MqttClient.cpp
    src/messenger/MqttMessage.cpp
    src/messenger/Network.cpp
    src/messenger/NetworkProxy.cpp
    src/messenger/User.cpp
    src/messenger/Publishing.cpp
    src/messenger/Runners.cpp)

set(MESSENGER_HEADER_FILES
    include/messenger/Client.h
    include/messenger/Common.h
    include/messenger/Logging.h
    include/messenger/Messages.h
    include/messenger/Messenger.h
    include/messenger/MqttConfiguration.h
    include/messenger/MqttClient.h
    include/messenger/MqttLogger.h
    include/messenger/MqttMessage.h
    include/messenger/Network.h
    include/messenger/NetworkProxy.h
    include/messenger/User.h
    include/messenger/Publishing.h
    include/messenger/Runners.h)

list(APPEND OBLO_MESSENGER_INCLUDE_DIRS
        ${CMAKE_CURRENT_SOURCE_DIR}/include
        ${CMAKE_CURRENT_SOURCE_DIR}/include/paho
    )

if(WITH_POCO_STATIC)
    # Force static library
    set(WITH_STATIC_MESSENGER ON)
endif()

if(WITH_STATIC_MESSENGER)
    add_definitions(-DPOCO_STATIC)
    message(STATUS "Using static messenger library.")
endif()

add_definitions(-DNOSTACKTRACE)
add_definitions(-DNO_PERSISTENCE)

if (WITH_OPENSSL)
    set (PAHO_SOURCE_FILES ${PAHO_SOURCE_FILES} src/paho/SSLSocket.c)
    set (PAHO_HEADER_FILES ${PAHO_HEADER_FILES} include/paho/SSLSocket.h)
    add_definitions(-DOPENSSL)
endif()

include_directories(${OBLO_MESSENGER_INCLUDE_DIRS})
link_directories(${OBLO_MESSENGER_LINK_DIRS})

if(WITH_STATIC_MESSENGER)
    add_library(oblomessenger STATIC
                ${PAHO_SOURCE_FILES} ${PAHO_HEADER_FILES}
                ${MESSENGER_SOURCE_FILES} ${MESSENGER_HEADER_FILES})
else()
    add_library(oblomessenger SHARED
                ${PAHO_SOURCE_FILES} ${PAHO_HEADER_FILES}
                ${MESSENGER_SOURCE_FILES} ${MESSENGER_HEADER_FILES})
endif()

target_link_libraries(oblomessenger ${OBLO_MESSENGER_LIBS})

set_target_properties(oblomessenger
            PROPERTIES
            ARCHIVE_OUTPUT_DIRECTORY  ${CMAKE_CURRENT_SOURCE_DIR}/lib
            LIBRARY_OUTPUT_DIRECTORY  ${CMAKE_CURRENT_SOURCE_DIR}/lib)

if(WITH_DEV_MESSENGER)
    install(TARGETS oblomessenger
            DESTINATION "${CMAKE_INSTALL_PREFIX}/lib")
    install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/"
            DESTINATION "${CMAKE_INSTALL_PREFIX}/include")
endif()
