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

# Check for required targets - use simpler condition for INTERFACE library compatibility
IF(BUILD_TESTING AND BUILD_RTI)
  # Verify required targets exist
  SET(_required_targets ddsgen ddsdtc ddsfts ddsQoS)
  SET(_targets_found TRUE)
  FOREACH(_tgt ${_required_targets})
    IF(NOT TARGET ${_tgt})
      SET(_targets_found FALSE)
      MESSAGE(WARNING "Required target ${_tgt} not found - DDS unit tests will not be built")
    ENDIF()
  ENDFOREACH()
  
  IF(_targets_found)

SET(xml_FILE ddsut.xml)

SET(SRCS_common
  ddsut_export.h
)
# Generates ddsut.idl / ddsut_enums.idl
IF(BUILD_GRANTLEE)
CODEGEN_IDL_SVC(SRCS_common ${xml_FILE})
ELSE()
  # BUILD_GRANTLEE disabled: check for pre-generated files
  IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ddsut.idl" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ddsut_enums.idl")
    MESSAGE(STATUS "BUILD_GRANTLEE disabled: using pre-generated IDL files for ddsut")
    LIST(APPEND SRCS_common ddsut.idl ddsut_enums.idl)
  ELSE()
    MESSAGE(WARNING "BUILD_GRANTLEE disabled but no pre-generated IDL files found for ddsut. Skipping service.")
    SET(SRCS_common "")
  ENDIF()
ENDIF()
# Generate *.cpp/*.hpp from ddsut_enums.idl / ddsut.idl
IF(BUILD_GRANTLEE OR (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ddsut.idl" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ddsut_enums.idl"))
RTIDDSGEN(SRCS_common ddsut_enums.idl)
RTIDDSGEN(SRCS_common ddsut.idl)
ENDIF()
# Generate ddsut_dt[s,c]_types.h, ddsut_ft[s,c]_types.h
CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE})
# generate ddsut_[d|f]tc.h
IF(BUILD_GRANTLEE)
CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE})
ELSE()
  # Check for pre-generated files
  IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ddsut_dtc.h" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ddsut_ftc.h")
    MESSAGE(STATUS "BUILD_GRANTLEE disabled: using pre-generated DTC/FTC files for ddsut")
    LIST(APPEND SRCS_common ddsut_dtc.h ddsut_ftc.h)
  ELSE()
    MESSAGE(WARNING "BUILD_GRANTLEE disabled but no pre-generated DTC/FTC files found for ddsut")
  ENDIF()
ENDIF()

NGL_ADD_LIBRARY2(ALL ddsut_common SHARED ${SRCS_common})
IF(BUILD_RTI)
NGL_TARGET_LINK_LIBRARIES(ddsut_common
  PRIVATE
    NGLLogger
  PUBLIC
    LtsUtilsCoreHeaderOnly
    Qt6::Core
    RTI::nddsc
    RTI::nddscore
    RTI::nddscpp2
    ddscore
)
ENDIF(BUILD_RTI)
NGL_TARGET_INCLUDE_DIRECTORIES(ddsut_common
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/../
    ${CMAKE_CURRENT_BINARY_DIR}/../
)

# -----------------------------------------------------------------------------------
# Testing DataWriter/DataReader without DTS/DTC
# -----------------------------------------------------------------------------------
SET(SRCS_TEST1
  generic_data_tests.cpp
  generic_data_tests.h
  initialisation.cpp
  initialisation.h
)

# -----------------------------------------------------------------------------------
# Testing DataTopic Functionality (DTS/DTC)
# -----------------------------------------------------------------------------------
SET(SRCS_TEST2
  data_topic_tests_main.cpp
  data_topic_tests_main.h
  data_topic_tests.cpp
  data_topic_tests.h
)

# -----------------------------------------------------------------------------------
# Testing FunctionTopic Functionality (FTS/FTC)
# -----------------------------------------------------------------------------------
SET(SRCS_TEST3
  function_topic_tests.cpp
  function_topic_tests.h
)


# Testing DataWriter/DataReader without DTS/DTC
ADD_EXECUTABLE(ddsGenericDataTests ${SRCS_TEST1})
TARGET_LINK_LIBRARIES(ddsGenericDataTests
  ddsgen
  ddsdtc
  ddsQoS
  nglcoreapplication
  NGLLogger
  ProjectConfig
  Qt6::Core
  Qt6::Test
  ddsut_common
)
TARGET_INCLUDE_DIRECTORIES(ddsGenericDataTests PRIVATE
  ${CMAKE_SOURCE_DIR}
  ${CMAKE_SOURCE_DIR}/Lts/DDS
)
ADD_TEST(NAME ddsGenericDataTests COMMAND $<TARGET_FILE:ddsGenericDataTests>)

# Testing DataTopic Functionality (DTS/DTC)
ADD_EXECUTABLE(ddsDataTopicTests ${SRCS_TEST2})
TARGET_LINK_LIBRARIES(ddsDataTopicTests
  nglcoreapplication
  NGLLogger
  RTI::nddscpp2
  ddsgen
  ddsdts
  ddsdtc
  ddsQoS
  ProjectConfig
  Qt6::Core
  Qt6::Test
  ddsut_common
)
TARGET_INCLUDE_DIRECTORIES(ddsDataTopicTests PRIVATE
  ${CMAKE_SOURCE_DIR}
  ${CMAKE_SOURCE_DIR}/Lts
  ${CMAKE_SOURCE_DIR}/Lts/DDS
)
ADD_TEST(NAME ddsDataTopicTests COMMAND $<TARGET_FILE:ddsDataTopicTests>)

# Testing FunctionTopic Functionality (FTS/FTC)
ADD_EXECUTABLE(ddsFunctionTopicTests ${SRCS_TEST3})
TARGET_LINK_LIBRARIES(ddsFunctionTopicTests
  ddsgen
  ddsfts
  ddsftc
  ddsQoS
  ddsconnector
  nglcoreapplication
  NGLLogger
  ngltools
  Qt6::Core
  Qt6::Test
  ddsut_common
)
TARGET_INCLUDE_DIRECTORIES(ddsFunctionTopicTests PRIVATE
  ${CMAKE_SOURCE_DIR}
  ${CMAKE_SOURCE_DIR}/Lts
  ${CMAKE_SOURCE_DIR}/Lts/DDS
)
ADD_TEST(NAME ddsFunctionTopicTests COMMAND $<TARGET_FILE:ddsFunctionTopicTests>)

  ENDIF() # _targets_found

IF(NOT BUILD_RPM)
 NGL_INSTALL(AAR SV TARGETS ddsut_common            DESTINATION bin/test)
 NGL_INSTALL(AAR SV TARGETS ddsGenericDataTests     DESTINATION bin/test)
 NGL_INSTALL(AAR SV TARGETS ddsDataTopicTests       DESTINATION bin/test)
 NGL_INSTALL(AAR SV TARGETS ddsFunctionTopicTests   DESTINATION bin/test)

 NGL_INSTALL(AAR SV FILES log4cxx_ddsUnitTests.props DESTINATION bin/test)
ENDIF()
ENDIF()

