Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests/CMakeLists.txt
T
berrux-dev e8d07af320 Adapts shared tests and common code to generated rtiddsgen API
Updates test suites and Lts/Common consumers to plain member access.
2026-09-21 02:44:07 +02:00

322 lines
15 KiB
CMake

# CMakeLists.txt für Qt6-Migrationstests
# Diese Tests validieren BUILD_RTI Guards, Qt6-Kompatibilität und RTI-Integration
cmake_minimum_required(VERSION 3.16)
# Qt6 finden (wird vom Hauptprojekt gesetzt, aber sicherheitshalber hier auch)
if(QT6_GUI_AVAILABLE)
# Check if targets already exist from parent CMakeLists.txt
if(TARGET Qt6::Core AND TARGET Qt6::Gui AND TARGET Qt6::Widgets AND TARGET Qt6::Test)
# Already found by parent - use existing targets
elseif(NOT TARGET Qt6::Gui OR NOT TARGET Qt6::Widgets)
# Manual fallback: create imported targets when standard find fails due to OpenGL
if(NOT TARGET Qt6::Gui)
add_library(Qt6::Gui SHARED IMPORTED)
set_target_properties(Qt6::Gui PROPERTIES
IMPORTED_LOCATION "/usr/lib/x86_64-linux-gnu/libQt6Gui.so.6"
INTERFACE_INCLUDE_DIRECTORIES "/usr/include/x86_64-linux-gnu/qt6/QtGui;/usr/include/x86_64-linux-gnu/qt6"
)
endif()
if(NOT TARGET Qt6::Widgets)
add_library(Qt6::Widgets SHARED IMPORTED)
set_target_properties(Qt6::Widgets PROPERTIES
IMPORTED_LOCATION "/usr/lib/x86_64-linux-gnu/libQt6Widgets.so.6"
INTERFACE_INCLUDE_DIRECTORIES "/usr/include/x86_64-linux-gnu/qt6/QtWidgets;/usr/include/x86_64-linux-gnu/qt6"
INTERFACE_LINK_LIBRARIES "Qt6::Gui;Qt6::Core"
)
endif()
else()
# Try standard find_package first, fall back to manual targets if OpenGL missing
find_package(Qt6 QUIET COMPONENTS Core Gui Widgets Test)
endif()
# Ensure Core and Test are found
if(NOT TARGET Qt6::Core)
find_package(Qt6 REQUIRED COMPONENTS Core Test)
endif()
else()
if(NOT TARGET Qt6::Core OR NOT TARGET Qt6::Test)
find_package(Qt6 REQUIRED COMPONENTS Core Test)
endif()
endif()
# Nur bauen wenn BUILD_TESTING aktiviert ist
if(BUILD_TESTING)
# Try to find system-wide GTest first, fallback to FetchContent
find_package(GTest QUIET)
if(NOT TARGET GTest::gtest_main)
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.13.0
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
endif()
# Collect all test source files dynamically
file(GLOB MIGRATION_TEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/test_*.cpp")
if(MIGRATION_TEST_SOURCES)
set(EXISTING_SOURCES ${MIGRATION_TEST_SOURCES})
# Exclude tests for non-existent or commented-out components
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_lts_app_descriptor_editor\\.cpp")
# Exclude Qt Test-based tests (conflict with gtest main())
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_lts_app_descriptor\\.cpp")
# Exclude Grantlee-related tests when BUILD_GRANTLEE is OFF
if(NOT BUILD_GRANTLEE)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_.*Grantlee.*\\.cpp")
message(STATUS "Migration tests: Grantlee support disabled (BUILD_GRANTLEE=OFF), excluded Grantlee tests")
endif()
# Exclude CodeGen tests when CodeGen targets aren't available (MIGRATE_MODULE restricts scope)
if(NOT TARGET codegen_base)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_StructBuilder\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_SqlGenerator\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_XmlReader\\.cpp")
message(STATUS "Migration tests: CodeGen targets not available, excluded CodeGen tests")
endif()
# Exclude LtsTimelineClassic tests when LtsTimelineClassic target isn't available
if(NOT TARGET LtsTimelineClassic)
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_abstracttimelinemodel\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_event\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_eventdelegate\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_eventgraphic\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_eventlist\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_eventtools\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_item\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_ltsclassicdatamodel\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_ltsclassicfilterproxymodel\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_passiveeventcontainer\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_testtimelinemodel\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_timelineheaderview\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_timelineindicator\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_timelineview\\.cpp")
list(FILTER EXISTING_SOURCES EXCLUDE REGEX "test_timelinewidget\\.cpp")
message(STATUS "Migration tests: LtsTimelineClassic target not available, excluded LtsTimelineClassic tests")
endif()
if(NOT EXISTING_SOURCES)
message(WARNING "No migration test sources found after filtering - skipping migration_tests target")
return()
endif()
add_executable(migration_tests ${EXISTING_SOURCES})
# FLM/FLT tests include build-tree generated headers (flm_[dtc|ftc|enums],
# flt_[dtc|ftc|enums]) - make sure codegen of these services ran first.
if(TARGET svcFlmCommon)
add_dependencies(migration_tests svcFlmCommon)
endif()
if(TARGET svcFltCommon)
add_dependencies(migration_tests svcFltCommon)
endif()
# The *_dtc/*_enums tests include the rtiddsgen/codegen outputs of
# the migrated services from ${CMAKE_BINARY_DIR}/Lts/Services. The
# OFF-era stub copies these tests used to resolve (include/ and
# Lts/Services source stubs) were removed, so the codegen of each
# service must run before migration_tests compiles - the same
# ordering the svcFlmCommon/svcFltCommon blocks above provide.
# Nothing else in the docker_build.sh make list builds these
# service targets, so without these deps the generated headers are
# missing on a fresh build.
foreach(_svc_common IN ITEMS
svcAesCommon svcAlmCommon svcAsmCommon svcAvmCommon svcCodCommon
svcEemCommon svcEsmCommon svcEscCommon svcEvlCommon svcExmCommon
svcGimCommon svcIsmCommon svcMdmCommon svcMsgCommon svcMrkCommon
svcNomCommon svcOpmCommon svcOssCommon svcPdmCommon svcPpmCommon
svcPreCommon svcRepCommon svcSomCommon svcSrmCommon svcSrpCommon
svcTgtCommon svcWhgCommon)
if(TARGET ${_svc_common})
add_dependencies(migration_tests ${_svc_common})
endif()
endforeach()
# test_core_enums includes Lts/DDS/Core/core_enums.hpp, an rtiddsgen
# output built by ddscore. ddscore is in the make target list, but a
# parallel make gives no ordering between it and migration_tests.
if(TARGET ddscore)
add_dependencies(migration_tests ddscore)
endif()
# test_tab_dtc includes the TrainingAreaBase rtiddsgen/codegen
# outputs (tab.hpp, tab_dtc.h) from build4/Lts/Proxies - same
# ordering requirement as the service blocks above.
if(TARGET svcTabCommon)
add_dependencies(migration_tests svcTabCommon)
endif()
# test_taboc_dtc includes the TrainingAreaBaseOC outputs
# (taboc.hpp, taboc_dtc.h) from build4/Lts/Proxies likewise.
if(TARGET svcTabocCommon)
add_dependencies(migration_tests svcTabocCommon)
endif()
# test_bld_dtc / test_bld_enums include the Buildings outputs
# (bld.hpp, bld_dtc.h, bld_enums.hpp) from build4/Lts/Proxies
# likewise (the CONFIGURE_FILE stub copy was removed).
if(TARGET svcBldCommon)
add_dependencies(migration_tests svcBldCommon)
endif()
# Enable Qt Meta-Object Compiler for tests with Q_OBJECT
set_target_properties(migration_tests PROPERTIES AUTOMOC ON)
target_compile_features(migration_tests PRIVATE cxx_std_17)
# BEFORE: the root CMakeLists' include_directories() puts include/ early
# on the path, so the BUILD_RTI=OFF stub variant of DDS/Generic would
# shadow the real DDS framework headers that the generated flm/flt
# service headers pull in — same fix the service CMakeLists enforce
# with include_directories(BEFORE ${CMAKE_SOURCE_DIR}/Lts).
target_include_directories(migration_tests BEFORE PRIVATE
${CMAKE_SOURCE_DIR}/Lts
)
target_include_directories(migration_tests PRIVATE
${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/include
${CMAKE_BINARY_DIR}/Lts
${CMAKE_BINARY_DIR}/Lts/Common
${CMAKE_BINARY_DIR}/Lts/Common/CodeGen
${CMAKE_BINARY_DIR}/Lts/Common/LtsTimeline
${CMAKE_SOURCE_DIR}/Lts/Common/LtsTimelineClassic
${CMAKE_BINARY_DIR}/Lts/Services
${CMAKE_SOURCE_DIR}/Lts/Services
${CMAKE_SOURCE_DIR}/Lts/Proxies
${CMAKE_BINARY_DIR}/Lts/Proxies
# Source headers under Lts/DDS/DDSConnector and
# Lts/Common/LtsCoordTrans include their build-tree export
# headers by bare quoted name (ddsconnector_export.h,
# ltscoordtrans_export.h); the OFF-stub copies under include/
# that used to satisfy those includes were removed.
${CMAKE_BINARY_DIR}/Lts/DDS/DDSConnector
${CMAKE_BINARY_DIR}/Lts/Common/LtsCoordTrans
${CMAKE_SOURCE_DIR}/Z/src/NGLLogger
)
# test_flm_dtc_impl_custom.cpp includes flm_dtc_impl_custom.h, which
# pulls in the generated flm_dtc_impl.h. Its include guard requires
# MAKE_SVCFLMCLIENT_LIB (defined by NGL_ADD_LIBRARY on svcFlmClient,
# which compiles flm_dtc_impl_custom.cpp).
target_compile_definitions(migration_tests PRIVATE MAKE_SVCFLMCLIENT_LIB)
# test_CppTopicGeneratorGrantlee.cpp bootstraps the NGL root logger
# before constructing the generator. The <NGLLogger/...> headers
# resolve via Z/src, the generated ngllogger_export.h via the
# library's binary dir.
target_include_directories(migration_tests PRIVATE
${CMAKE_SOURCE_DIR}/Z/src
${CMAKE_BINARY_DIR}/Z/src/NGLLogger
)
# Export-header tests locate generated headers in the build tree.
# The directory name is not stable across pipeline stages (build4),
# so the path is passed in instead of being hardcoded.
target_compile_definitions(migration_tests PRIVATE MIGRATION_TEST_BUILD_DIR="${CMAKE_BINARY_DIR}")
# Link against Qt6 components (Qt6::Test not needed - using gtest)
if(QT6_GUI_AVAILABLE)
target_link_libraries(migration_tests PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Widgets
GTest::gtest_main
)
else()
target_link_libraries(migration_tests PRIVATE
Qt6::Core
GTest::gtest_main
)
endif()
# Link against Z-module libraries for integration tests
# These are the core NGL libraries migrated to Qt6
if(TARGET NGLLogger)
target_link_libraries(migration_tests PRIVATE NGLLogger)
endif()
if(TARGET ngltools)
target_link_libraries(migration_tests PRIVATE ngltools)
endif()
if(TARGET ngldb)
target_link_libraries(migration_tests PRIVATE ngldb)
endif()
if(TARGET nglsettings)
target_link_libraries(migration_tests PRIVATE nglsettings)
endif()
if(TARGET ngltranslator)
target_link_libraries(migration_tests PRIVATE ngltranslator)
endif()
if(TARGET nglcompression)
target_link_libraries(migration_tests PRIVATE nglcompression)
endif()
if(TARGET tcpserver)
target_link_libraries(migration_tests PRIVATE tcpserver)
endif()
if(TARGET nglapplication)
target_link_libraries(migration_tests PRIVATE nglapplication)
endif()
if(TARGET qtsingleapplication)
target_link_libraries(migration_tests PRIVATE qtsingleapplication)
endif()
if(TARGET wms_json_ds)
target_link_libraries(migration_tests PRIVATE wms_json_ds)
endif()
if(TARGET nglwidgets AND QT6_GUI_AVAILABLE)
target_link_libraries(migration_tests PRIVATE nglwidgets)
endif()
# FLM/FLT service tests include the Q_OBJECT custom headers of the
# migrated services (flm_db_impl_custom.h, flm_dtc_impl_custom.h).
# Their moc output references the generated bases' staticMetaObject
# (DatabaseInterface, DtcImpl) defined in the service libraries.
if(TARGET svcFlmCommon)
target_link_libraries(migration_tests PRIVATE svcFlmCommon)
endif()
if(TARGET svcFlmClient)
target_link_libraries(migration_tests PRIVATE svcFlmClient)
endif()
# Link against LtsTimelineClassic only if it exists (may not exist with MIGRATE_MODULE)
if(TARGET LtsTimelineClassic)
target_link_libraries(migration_tests PRIVATE LtsTimelineClassic)
add_dependencies(migration_tests LtsTimelineClassic)
else()
message(STATUS "LtsTimelineClassic target not available - skipping link (MIGRATE_MODULE may restrict scope)")
endif()
# Grantlee tests require BUILD_GRANTLEE=ON
if(BUILD_GRANTLEE)
target_link_libraries(migration_tests PRIVATE codegen_grantlee)
target_include_directories(migration_tests PRIVATE
${CMAKE_SOURCE_DIR}/Lts/Common/CodeGen
)
message(STATUS "Migration tests: Grantlee support enabled")
endif()
# RTI libraries if BUILD_RTI is ON
if(BUILD_RTI)
find_package(RTI QUIET)
if(RTI_FOUND)
target_include_directories(migration_tests PRIVATE ${RTI_INCLUDE_DIRS})
target_link_libraries(migration_tests PRIVATE ${RTI_LIBRARIES})
target_compile_definitions(migration_tests PRIVATE BUILD_RTI=1)
message(STATUS "RTI found: ${RTI_LIBRARIES}")
else()
message(STATUS "BUILD_RTI=ON but RTI not found - building tests without RTI")
endif()
endif()
# Register with CTest
include(GoogleTest)
gtest_discover_tests(migration_tests)
message(STATUS "Migration tests enabled: ${EXISTING_SOURCES}")
else()
message(WARNING "No migration test sources found in ${CMAKE_CURRENT_SOURCE_DIR}")
endif()
endif()