#
# $Id$
# $HeadURL$
# $Author$
#

# Uncomment if necessary
#ADD_SUBDIRECTORY(UnitTests)
#ADD_SUBDIRECTORY(ModuleTests)

INCLUDE(MacroRTIDDSGen)
INCLUDE(MacroCodeGenIdl)

SET(xml_FILE taboc_service.xml)

#
# --- Library svcTabocCommon --------------------------------------------------------------------------------
#
SET(SRCS_common
  logger.cpp
  logger.h
  taboc_export.h
)

# Generate taboc_enums.idl / taboc.idl
CODEGEN_IDL_SVC(SRCS_common ${xml_FILE})

# Generate *.cpp/*.hpp from idl
RTIDDSGEN(SRCS_common taboc_enums.idl)
RTIDDSGEN(SRCS_common taboc.idl)

# Generate taboc_dt[s,c]_types.h, taboc_ft[s,c]_types.h
CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE})
# generate taboc_[d|f]tc.h
CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE})

NGL_ADD_LIBRARY(AAR SV WS svcTabocCommon SHARED  ${SRCS_common})
NGL_TARGET_INCLUDE_DIRECTORIES(svcTabocCommon
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/../
    ${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcTabocCommon
  PRIVATE
    RTI::nddscpp2
  PUBLIC
    Qt5::Core
    ddscore
    NGLLogger
    LtsUtilsCoreHeaderOnly
    svcPdmCommon
)
NGL_INSTALL_TARGET(svcTabocCommon)

#
# --- Library svcTabocClient --------------------------------------------------------------------------------
#
SET(SRCS_client
  taboc_export.h
)
# generate taboc_[d|f]tc_impl.[cpp|h]
CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE})

NGL_ADD_LIBRARY(AAR SV WS svcTabocClient SHARED ${SRCS_client})
NGL_TARGET_INCLUDE_DIRECTORIES(svcTabocClient
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/../
    ${CMAKE_CURRENT_BINARY_DIR}/../
)

NGL_TARGET_LINK_LIBRARIES(svcTabocClient
  PRIVATE
    RTI::nddscpp2
    ddsconnector
  PUBLIC
    svcTabocCommon
    ddsftc
)
NGL_INSTALL_TARGET(svcTabocClient)

#
# --- Library svcTabocServer --------------------------------------------------------------------------------
#
SET(SRCS_server
  taboc_export.h
)
# generate taboc_[d|f]ts.h, taboc_[d|f]ts_impl.[cpp|h]
CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE})
# Generate taboc_db_impl.cpp/.h, taboc_db.h
#CODEGEN_DATABASE(SRCS_server ${xml_FILE})

NGL_ADD_LIBRARY(AAR SV svcTabocServer SHARED ${SRCS_server})
NGL_TARGET_INCLUDE_DIRECTORIES(svcTabocServer
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/../
    ${CMAKE_CURRENT_BINARY_DIR}/../
)

NGL_TARGET_LINK_LIBRARIES(svcTabocServer
  PRIVATE
    RTI::nddscpp2
    ddsconnector
  PUBLIC
    svcTabocCommon
    ngldb
    ddsfts
)
NGL_INSTALL_TARGET(svcTabocServer)

#
# --- Topic Type Plugin --------------------------------------------------------------
#
IF(BUILD_SV)
  CREATE_TOPIC_TYPE_PLUGIN(${xml_FILE})
ENDIF()

#
# --- Executable svcTrainingAreaBaseOC (sTABOC) -------------------------------------------------
#
SET(SRCS_exe
  dds_handler.cpp
  dds_handler.h
  main.cpp
  main_handler.cpp
  main_handler.h
  connection_handler.cpp
  connection_handler.h
  connection_handler_tcp.cpp
  connection_handler_tcp.h
  connection_handler_serial.cpp
  connection_handler_serial.h
  connection_handler_tcp_ttci.cpp
  connection_handler_tcp_ttci.h
  websocket_handler.cpp
  websocket_handler.h
  canag_handler.cpp
  canag_handler.h
  handler_aes_data.cpp
  handler_aes_data.h
  recv_from_dds_fts.cpp
  recv_from_dds_fts.h
  recv_from_tab.h
  send_to_dds.cpp
  send_to_dds.h
  send_to_tab.h
  settings.cpp
  settings.h
  taboc_export.h
  oc_telegrams.h
  taboc.dat
  ttci_channel.cpp
  ttci_channel.h
  ttci_device.cpp
  ttci_device.h

  log4cxx_taboc.props
  ${xml_FILE}
)

# Generate taboc.sql, taboc.xml
#CODEGEN_SQL(SRCS_exe ${xml_FILE})

NGL_ADD_SVC_ICON(SRCS_exe)
NGL_ADD_EXECUTABLE(AAR SV svcTrainingAreaBaseOC ${SRCS_exe})
NGL_TARGET_LINK_LIBRARIES(svcTrainingAreaBaseOC
  Qt5::Core
  Qt5::Network
  Qt5::SerialPort
  Qt5::WebSockets
  LtsCoordTrans
  LtsSerialPortQuerry
  LtsCommandLineParser
  LtsPluginLoader
  LtsUtilsCore
  svcCoreClient
  svcTabocCommon
  svcTabocClient
  svcTabocServer
  svcTabServer
  svcAesClient
  svcPdmClient
  ddsconnector
  nglsettings
  ProjectConfig
  NGLLogger
  nglcoreapplication
  ngltools
  tabTelegrams
)
NGL_INSTALL_TARGET(svcTrainingAreaBaseOC)
NGL_INSTALL(AAR SV FILES log4cxx_taboc.props DESTINATION bin)
NGL_INSTALL(AAR SV FILES taboc.dat DESTINATION bin)
NGL_ADD_TARGET_LINK(svcTrainingAreaBaseOC sTABOC)

# --- Executable serialtest -------------------------------------------------

IF(BUILD_TESTING)
  SET(TEST_SRC
    connection_handler.cpp
    connection_handler.h
    connection_handler_serial.cpp
    connection_handler_serial.h
    connection_handler_tcp_ttci.cpp
    connection_handler_tcp_ttci.h
    connection_handler_tcp.cpp
    connection_handler_tcp.h
    settings.cpp
    settings.h
    testmain.cpp
    ttci_channel.cpp
    ttci_channel.h
    ttci_device.cpp
    ttci_device.h)

  NGL_ADD_EXECUTABLE(AAR SV serialtest ${TEST_SRC})
  NGL_TARGET_LINK_LIBRARIES(serialtest
    Qt5::Core
    Qt5::SerialPort
    Qt5::Network
    LtsSerialPortQuerry
    svcTabocCommon
    LtsUtilsCore
    nglcoreapplication
    nglsettings
    ngltools
    NGLLogger)

  IF(NOT BUILD_RPM)
    NGL_INSTALL(AAR SV TARGETS serialtest DESTINATION bin)
  ENDIF()
ENDIF()
