From cf62b17d5899335645637f23863f149a7b2baa76 Mon Sep 17 00:00:00 2001 From: berrux_dev Date: Mon, 21 Sep 2026 02:42:27 +0200 Subject: [PATCH] Reworks CMake wiring for Qt6 codegen include order Adds missing toolchain packages and include dirs so generated headers resolve. --- qt6-after/qt6-migrated-legatus/CMakeLists.txt | 71 ++++++++++++++- .../Lts/Common/LtsElevation/CMakeLists.txt | 12 ++- .../Lts/DDS/DDSConnector/CMakeLists.txt | 4 + .../Lts/DDS/FTS/CMakeLists.txt | 4 + .../Lts/Proxies/Buildings/CMakeLists.txt | 16 ++-- .../Proxies/ComponentMonitor/CMakeLists.txt | 8 ++ .../Lts/Proxies/GuezNasat/CMakeLists.txt | 5 ++ .../Proxies/TrainingAreaBase/CMakeLists.txt | 7 ++ .../Proxies/TrainingAreaBaseOC/CMakeLists.txt | 7 ++ .../AreaEffectSimulation/CMakeLists.txt | 14 ++- .../Services/AssetManagement/CMakeLists.txt | 5 ++ .../AudioVideoManagement/CMakeLists.txt | 15 ++++ .../ExerciseEventManagement/CMakeLists.txt | 22 ++++- .../ExerciseManagement/CMakeLists.txt | 11 ++- .../Services/FilterManagement/CMakeLists.txt | 5 ++ .../InfrastructureManagement/CMakeLists.txt | 38 ++++---- .../NotificationManagement/CMakeLists.txt | 10 +++ .../OperatorManagement/CMakeLists.txt | 11 ++- .../ParticipantManagement/CMakeLists.txt | 17 +++- .../ProjectDataManagement/CMakeLists.txt | 35 ++------ .../Services/ReportManagement/CMakeLists.txt | 10 +++ .../Services/SituationReplay/CMakeLists.txt | 15 ++++ .../SituationMap/ElevationMap/CMakeLists.txt | 37 ++++++++ .../cmake/MacroCodeGenIdl.cmake | 5 ++ .../qt6-migrated-legatus/docker_build.sh | 88 ++++++++++++++++++- 25 files changed, 388 insertions(+), 84 deletions(-) create mode 100644 qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/ElevationMap/CMakeLists.txt diff --git a/qt6-after/qt6-migrated-legatus/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/CMakeLists.txt index 4b2cb9b07..332118f96 100755 --- a/qt6-after/qt6-migrated-legatus/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/CMakeLists.txt @@ -75,6 +75,12 @@ ENDIF() ADD_DEFINITIONS(-DAPP6C) SET(CMAKE_INCLUDE_CURRENT_DIR ON) +# Resolve and other framework includes to the real headers under +# Lts/ BEFORE the migration stub tree in include/. The stub tree shadows them +# otherwise and opens namespace DDSGeneric around framework includes, which +# pulls Qt/std definitions into that namespace and breaks every consumer. +# (The qt5 legacy has no include/ tree; Lts/ is the real include root.) +include_directories(BEFORE ${CMAKE_SOURCE_DIR}/Lts) include_directories(${CMAKE_SOURCE_DIR}/include) # Include directory for generated export headers include_directories(${CMAKE_BINARY_DIR}) @@ -108,6 +114,11 @@ include_directories(${CMAKE_BINARY_DIR}/Lts/Services/ReportManagement) include_directories(${CMAKE_SOURCE_DIR}/include/ReportManagement) include_directories(${CMAKE_BINARY_DIR}/Lts/Services/SituationReplay) include_directories(${CMAKE_SOURCE_DIR}/include/SituationReplay) +# Evaluations' generated evl_db_structs.h includes by bare name, and that +# header is consumed from OcBaseDownload as well, so its build dir must be visible tree-wide +# like the services above. There is no include/Evaluations stub tree, so only the build dir +# is added (same shape as FileManagement above, which has no stub tree either). +include_directories(${CMAKE_BINARY_DIR}/Lts/Services/Evaluations) include_directories(${CMAKE_SOURCE_DIR}/include/Buildings) include_directories(${CMAKE_SOURCE_DIR}/Lts/Proxies/GuezNasat) include_directories(${CMAKE_SOURCE_DIR}/Lts/DDS) @@ -117,12 +128,43 @@ include_directories(${CMAKE_SOURCE_DIR}/include/DDS/Generic) include_directories(${CMAKE_SOURCE_DIR}/include/TrainingAreaBaseOC) # Generated DDS headers (BUILD_RTI=ON) include_directories(${CMAKE_BINARY_DIR}/Lts) +# consumers (LtsCoordinate, AES/CES, HLA proxies) resolve the +# rtiddsgen-generated core.hpp from the DDS build dir (the qt5 include order); +# the OFF-era stub copies in include/Core/ have been removed. +include_directories(${CMAKE_BINARY_DIR}/Lts/DDS) include_directories(${CMAKE_SOURCE_DIR}/Lts/Common) include_directories(${CMAKE_SOURCE_DIR}/Lts/Common/LtsUtils) include_directories(${CMAKE_BINARY_DIR}/Lts/Common/LtsUtils/LtsUtilsCore) +# LtsUtilsSettings's generated ltsutilssettings_export.h is included by bare name from +# settings.h. Consumer targets that reach settings.h transitively (without linking +# LtsUtilsSettings themselves) cannot see it through the target's PUBLIC interface, so the +# directory holding the generated header has to be visible tree-wide. The directory contains +# only that generated header, so appending it cannot shadow an existing include. +include_directories(${CMAKE_BINARY_DIR}/Lts/Common/LtsUtils/LtsUtilsSettings) +# DDSConnector's generated ddsconnector_export.h is included by bare name from +# dds_connector.h and pub_sub_base.h, and reaches targets (the AES ModuleTests) that include +# DDSConnector headers without linking ddsconnector. Same shape as LtsUtilsSettings above: the +# directory holds only the generated header. +include_directories(${CMAKE_BINARY_DIR}/Lts/DDS/DDSConnector) +# The generated msg_db_structs.h includes by bare name, and Messaging is +# reached transitively from OcBaseDownload and the proxy handlers, so its build dir must be +# visible tree-wide like the services above. Unlike them there is no include/Messaging stub +# tree, so only the build dir is added. +include_directories(${CMAKE_BINARY_DIR}/Lts/Services/Messaging) include_directories(${CMAKE_SOURCE_DIR}/Z/src/NGLLogger) include_directories(${CMAKE_SOURCE_DIR}/include/Viewer/SituationMap) include_directories(${CMAKE_SOURCE_DIR}/include/OperatorManagement) +# The generated opm_db_structs.h includes by bare name and is reached +# transitively from OcBaseDownload, so the OperatorManagement build dir has to be visible +# tree-wide next to its include/ stub tree above. +include_directories(${CMAKE_BINARY_DIR}/Lts/Services/OperatorManagement) +# The plugin interface headers live under Lts/Plugins// and are included both as +# /x.h> (the qt5 spelling, resolved through the Lts/ root) and, since the +# migration dropped the leading segment, as /x.h>. Lts/Plugins is therefore needed on +# the path. It is appended last so it can only ever resolve includes that were unresolvable +# before: every include that resolves today is found in an earlier directory, so no existing +# resolution can change. +include_directories(${CMAKE_SOURCE_DIR}/Lts/Plugins) include_directories(${CMAKE_SOURCE_DIR}/forward-declarations) SET(CMAKE_CXX_STANDARD 17) SET(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -311,6 +353,13 @@ if(NOT TARGET Qt6::Gui AND EXISTS "${QT6_LIB_DIR}/libQt6Gui.so.6") ) endif() +# Set variable for legacy code that uses ${Qt6_Gui} — like Qt6_Widgets below, +# subdirectory CMakeLists contain `set(Qt6_Gui ${Qt6_Gui})` optional-guard +# no-ops that keep this root-scope value. +if(TARGET Qt6::Gui) + set(Qt6_Gui Qt6::Gui) +endif() + # Qt6::Widgets - create manual target (find_package fails without OpenGL) if(EXISTS "${QT6_LIB_DIR}/libQt6Widgets.so.6") if(NOT TARGET Qt6::Widgets) @@ -475,6 +524,13 @@ if(NOT TARGET Qt6::WebSockets) message(STATUS "Created stub target for Qt6::WebSockets (library not available)") endif() +# Set variable for legacy code that uses ${Qt6_WebSockets} — subdirectory +# CMakeLists contain `set(Qt6_WebSockets ${Qt6_WebSockets})` optional-guard +# no-ops that keep this root-scope value. +if(TARGET Qt6::WebSockets) + set(Qt6_WebSockets Qt6::WebSockets) +endif() + # The real Qt6 WebSockets module is available (either via find_package or the # manual import above): enable the real websocket code paths in httq, # LtsWebSocket and the migrated services (they check this macro; without it @@ -526,7 +582,20 @@ IF(BUILD_RTI) # RTI Include-Pfade auch an MOC weitergeben (für Q_OBJECT Header mit RTI Types) SET(CMAKE_AUTOMOC_INCLUDE_DIRECTORIES ${CMAKE_AUTOMOC_INCLUDE_DIRECTORIES} ${RTI_INCLUDE_DIRS}) - + + # The generated _topic_type_plugin.h / _record_replay_plugin.h + # headers use Q_INTERFACES(DDSGeneric::TopicTypePlugin), so moc must see + # the Q_DECLARE_INTERFACE in Lts/DDS/... (resolved through the Lts include + # root). Without this path every TopicTypePlugin fails with + # "Undefined interface" even though the compiler sees the header. + SET(CMAKE_AUTOMOC_INCLUDE_DIRECTORIES ${CMAKE_AUTOMOC_INCLUDE_DIRECTORIES} ${CMAKE_SOURCE_DIR}/Lts) + + # The ElevationMapManager stub header (include/Viewer/SituationMap/ElevationMap/) + # lives apart from its source (src/...), so moc needs its directory explicitly. + # NOTE: this must be set at root scope - subdir-scope appends do not reach + # the AutogenInfo MOC_INCLUDES. + SET(CMAKE_AUTOMOC_INCLUDE_DIRECTORIES ${CMAKE_AUTOMOC_INCLUDE_DIRECTORIES} ${CMAKE_SOURCE_DIR}/include/Viewer/SituationMap/ElevationMap) + # IMPORTED Targets für RTI Libraries erstellen # Debug und Release Varianten korrekt konfigurieren FOREACH(lib nddsc nddscore nddscpp nddscpp2 nddsctesthelpers) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Common/LtsElevation/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Common/LtsElevation/CMakeLists.txt index fe4348a65..a10601ca6 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Common/LtsElevation/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Common/LtsElevation/CMakeLists.txt @@ -31,9 +31,6 @@ if(QT6_GUI_AVAILABLE) PRIVATE NGLLogger ## LtsSessionDataDds - ## ExmDataPluginInterface # External dependency - missing - ## situationMapCommon # External dependency - missing - ## situationMapElevationMap # External dependency - missing PUBLIC LtsUtilsCoreHeaderOnly Qt6::Core @@ -42,7 +39,14 @@ if(QT6_GUI_AVAILABLE) endif() if(BUILD_RTI) - target_link_libraries(LtsElevation PRIVATE AsmDataPluginInterface) + # All ElevationMapManager / resource_path / exm-dtc usages live inside + # #ifdef BUILD_RTI in lts_elevation_manager.cpp (Qt5 dependencies restored). + target_link_libraries(LtsElevation PRIVATE + AsmDataPluginInterface + ExmDataPluginInterface + situationMapCommon + situationMapElevationMap + ) endif() ADD_SUBDIRECTORY(UnitTest_Elevation) diff --git a/qt6-after/qt6-migrated-legatus/Lts/DDS/DDSConnector/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/DDS/DDSConnector/CMakeLists.txt index 92f4818de..c501f4ea2 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/DDS/DDSConnector/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/DDS/DDSConnector/CMakeLists.txt @@ -22,6 +22,10 @@ NGL_ADD_LIBRARY2(AAR SV WS HLA ddsconnector SHARED ${SRCS}) NGL_TARGET_INCLUDE_DIRECTORIES(ddsconnector PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../ + # dds_connector.h includes the generated ddsconnector_export.h with a + # quoted include; consumers (svcFilterManagement etc.) resolve it only + # if the binary dir with the GENERATE_EXPORT_HEADER output is exported. + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR} ) NGL_TARGET_LINK_LIBRARIES(ddsconnector diff --git a/qt6-after/qt6-migrated-legatus/Lts/DDS/FTS/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/DDS/FTS/CMakeLists.txt index 782c7d6c8..8d35163f1 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/DDS/FTS/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/DDS/FTS/CMakeLists.txt @@ -31,6 +31,10 @@ NGL_ADD_LIBRARY2(WS AAR SV HLA ddsfts SHARED ${SRCS}) NGL_TARGET_INCLUDE_DIRECTORIES(ddsfts PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../ + # generic_fts_internal.h includes the generated ddsfts_export.h with a + # quoted include; consumers (the generated *_topic_type_plugin.cpp) + # resolve it only if the binary dir with the export header is exported. + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/../../Proxies/TrainingAreaBase ) NGL_TARGET_LINK_LIBRARIES(ddsfts diff --git a/qt6-after/qt6-migrated-legatus/Lts/Proxies/Buildings/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Proxies/Buildings/CMakeLists.txt index 0820205c4..62f621d67 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Proxies/Buildings/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Proxies/Buildings/CMakeLists.txt @@ -6,7 +6,7 @@ # Make ${Qt6_Gui} optional if(QT6_GUI_AVAILABLE AND TARGET Qt6::Gui) - set(Qt6_Gui ${Qt6_Gui}) + set(Qt6_Gui Qt6::Gui) else() set(Qt6_Gui "") endif() @@ -42,12 +42,6 @@ CODEGEN_DATABASE(SRCS_common ${xml_FILE}) # Generate *.cpp/*.hpp from idl RTIDDSGEN(SRCS_common bld_enums.idl) -# Stub file for compilation (fallback when no IDL exists) -CONFIGURE_FILE( - ${CMAKE_SOURCE_DIR}/include/Buildings/bld_enums.hpp.stub - ${CMAKE_BINARY_DIR}/Lts/Proxies/Buildings/bld_enums.hpp - COPYONLY -) RTIDDSGEN(SRCS_common bld.idl) # Generate bld_dt[s,c]_types.h, bld_ft[s,c]_types.h @@ -85,6 +79,11 @@ SET(SRCS_client CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE}) NGL_ADD_LIBRARY2(AAR SV WS svcBldClient SHARED ${SRCS_client}) +# NGL_ADD_LIBRARY2 (unlike NGL_ADD_LIBRARY) does not define the +# MAKE__LIB compile guard, but the generated bld_[d|f]tc_impl.h +# headers that this target compiles carry such a guard — same situation as +# ddscore, which defines MAKE_DDSCORE_LIB explicitly for the same reason. +TARGET_COMPILE_DEFINITIONS(svcBldClient PRIVATE MAKE_SVCBLDCLIENT_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcBldClient PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ @@ -113,6 +112,9 @@ SET(SRCS_server CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE}) NGL_ADD_LIBRARY2(AAR SV svcBldServer SHARED ${SRCS_server}) +# Same guard rationale as svcBldClient above: the generated +# bld_[d|f]ts_impl.h headers require MAKE_SVCBLDSERVER_LIB. +TARGET_COMPILE_DEFINITIONS(svcBldServer PRIVATE MAKE_SVCBLDSERVER_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcBldServer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ diff --git a/qt6-after/qt6-migrated-legatus/Lts/Proxies/ComponentMonitor/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Proxies/ComponentMonitor/CMakeLists.txt index 7a05ee20c..cc4abc115 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Proxies/ComponentMonitor/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Proxies/ComponentMonitor/CMakeLists.txt @@ -61,6 +61,11 @@ SET(SRCS_client CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE}) NGL_ADD_LIBRARY2(SV WS svcCmoClient SHARED ${SRCS_client}) +# NGL_ADD_LIBRARY2 (unlike NGL_ADD_LIBRARY) does not define the +# MAKE__LIB compile guard, but the generated cmo_[d|f]tc_impl.h +# headers that this target compiles carry such a guard — same situation as +# ddscore, which defines MAKE_DDSCORE_LIB explicitly for the same reason. +TARGET_COMPILE_DEFINITIONS(svcCmoClient PRIVATE MAKE_SVCCMOCLIENT_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcCmoClient PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ @@ -90,6 +95,9 @@ SET(SRCS_server CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE}) NGL_ADD_LIBRARY2(SV svcCmoServer SHARED ${SRCS_server}) +# Same guard rationale as svcCmoClient above: the generated +# cmo_[d|f]ts_impl.h headers require MAKE_SVCCMOSERVER_LIB. +TARGET_COMPILE_DEFINITIONS(svcCmoServer PRIVATE MAKE_SVCCMOSERVER_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcCmoServer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ diff --git a/qt6-after/qt6-migrated-legatus/Lts/Proxies/GuezNasat/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Proxies/GuezNasat/CMakeLists.txt index d9eeae2a4..2bd1c82c8 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Proxies/GuezNasat/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Proxies/GuezNasat/CMakeLists.txt @@ -66,6 +66,11 @@ SET(SRCS_client CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE}) NGL_ADD_LIBRARY2(AAR SV WS svcGnaClient SHARED ${SRCS_client}) +# NGL_ADD_LIBRARY2 (unlike NGL_ADD_LIBRARY) does not define the +# MAKE__LIB compile guard, but the generated gna_[d|f]tc_impl.h +# headers that this target compiles carry such a guard — same situation as +# ddscore, which defines MAKE_DDSCORE_LIB explicitly for the same reason. +TARGET_COMPILE_DEFINITIONS(svcGnaClient PRIVATE MAKE_SVCGNACLIENT_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcGnaClient PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ diff --git a/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBase/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBase/CMakeLists.txt index 1940f7f4a..1c5f359f7 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBase/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBase/CMakeLists.txt @@ -152,6 +152,11 @@ IF(BUILD_RTI) ENDIF() NGL_ADD_LIBRARY2(AAR SV WS HLA svcTabClient SHARED ${SRCS_client}) +# NGL_ADD_LIBRARY2 (unlike NGL_ADD_LIBRARY) does not define the +# MAKE__LIB compile guard, but the generated tab_[d|f]tc_impl.h +# headers require MAKE_SVCTABCLIENT_LIB — same situation as +# svcCoreClient/ddscore, which define their guards explicitly. +TARGET_COMPILE_DEFINITIONS(svcTabClient PRIVATE MAKE_SVCTABCLIENT_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcTabClient PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ @@ -184,6 +189,8 @@ IF(BUILD_RTI) ENDIF() NGL_ADD_LIBRARY2(AAR HLA SV svcTabServer SHARED ${SRCS_server}) # NGL_ADD_LIBRARY2 won't work here - no time for investigations +# Generated tab_[d|f]ts_impl.h require MAKE_SVCTABSERVER_LIB (see svcTabClient above). +TARGET_COMPILE_DEFINITIONS(svcTabServer PRIVATE MAKE_SVCTABSERVER_LIB) if(BUILD_SV OR BUILD_HLA) GENERATE_EXPORT_HEADER(svcTabServer) # FIXME: quick workaround endif() diff --git a/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBaseOC/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBaseOC/CMakeLists.txt index f9763f680..9ec089060 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBaseOC/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Proxies/TrainingAreaBaseOC/CMakeLists.txt @@ -72,6 +72,11 @@ SET(SRCS_client CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE}) NGL_ADD_LIBRARY2(AAR SV WS svcTabocClient SHARED ${SRCS_client}) +# NGL_ADD_LIBRARY2 (unlike NGL_ADD_LIBRARY) does not define the +# MAKE__LIB compile guard, but the generated taboc_[d|f]tc_impl.h +# headers require MAKE_SVCTABOCCLIENT_LIB — same situation as +# svcTabClient/svcCoreClient, which define their guards explicitly. +TARGET_COMPILE_DEFINITIONS(svcTabocClient PRIVATE MAKE_SVCTABOCCLIENT_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcTabocClient PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ @@ -102,6 +107,8 @@ CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE}) #CODEGEN_DATABASE(SRCS_server ${xml_FILE}) NGL_ADD_LIBRARY2(AAR SV svcTabocServer SHARED ${SRCS_server}) +# Generated taboc_[d|f]ts_impl.h require MAKE_SVCTABOCSERVER_LIB (see svcTabocClient above). +TARGET_COMPILE_DEFINITIONS(svcTabocServer PRIVATE MAKE_SVCTABOCSERVER_LIB) NGL_TARGET_INCLUDE_DIRECTORIES(svcTabocServer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../ diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/AreaEffectSimulation/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/AreaEffectSimulation/CMakeLists.txt index 4ec51188e..28592f92e 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/AreaEffectSimulation/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/AreaEffectSimulation/CMakeLists.txt @@ -6,14 +6,14 @@ # Make ${Qt6_Gui} optional if(QT6_GUI_AVAILABLE AND TARGET Qt6::Gui) - set(Qt6_Gui ${Qt6_Gui}) + set(Qt6_Gui Qt6::Gui) else() set(Qt6_Gui "") endif() # Make ${Qt6_Widgets} optional if(QT6_GUI_AVAILABLE AND TARGET Qt6::Widgets) - set(Qt6_Widgets ${Qt6_Widgets}) + set(Qt6_Widgets Qt6::Widgets) else() set(Qt6_Widgets "") endif() @@ -70,12 +70,10 @@ LIST(APPEND SRCS_common ${in_file_sql} ${out_file_sql}) # Generate aes_enums.idl / aes.idl / aes_enums.cpp/aes_enums.h IF(BUILD_RTI) CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) -# Stub enum header for tests when BUILD_RTI=ON but no IDL -IF(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/aes_enums.idl") - CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/AreaEffectSimulation/aes_enums.hpp.stub" - "${CMAKE_CURRENT_BINARY_DIR}/aes_enums.hpp" - COPYONLY) -ENDIF() + # The former stub copy for aes_enums.hpp ran unconditionally here: its + # IF(NOT EXISTS) guard checked the source dir, but CODEGEN_IDL_SVC writes + # aes_enums.idl into the build dir, so the stub always overwrote the + # rtiddsgen-generated header on re-configure. Removed for the ON build. ENDIF() # Generate aes_db_structs.cpp/.h CODEGEN_DATABASE_STRUCTS(SRCS_common ${xml_FILE}) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/AssetManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/AssetManagement/CMakeLists.txt index 5eaccf49d..a7ca7d07b 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/AssetManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/AssetManagement/CMakeLists.txt @@ -26,6 +26,10 @@ ENDIF() IF(BUILD_RTI) CODEGEN_DATABASE(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy asm_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/AssetManagement/asm_enums.hpp.stub @@ -34,6 +38,7 @@ CONFIGURE_FILE( ) +ENDIF() # Generate *.cpp/*.hpp from idl RTIDDSGEN(SRCS_common asm_enums.idl) RTIDDSGEN(SRCS_common asm.idl) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/AudioVideoManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/AudioVideoManagement/CMakeLists.txt index 97b11f228..9b3efe0cc 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/AudioVideoManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/AudioVideoManagement/CMakeLists.txt @@ -122,12 +122,17 @@ SET_SOURCE_FILES_PROPERTIES(list_response_collector.cpp PROPERTIES SKIP_UNITY_BU IF(BUILD_RTI) CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Stub file for compilation (fallback when no IDL exists) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/AudioVideoManagement/avm_enums.hpp.stub ${CMAKE_BINARY_DIR}/Lts/Services/AudioVideoManagement/avm_enums.hpp COPYONLY ) +ENDIF() # Generate avm_db.h, avm_db_impl.cpp/.h CODEGEN_DATABASE_SQL(SRCS_common ${xml_FILE}) @@ -136,6 +141,10 @@ IF(BUILD_RTI) RTIDDSGEN(SRCS_common avm_enums.idl) RTIDDSGEN(SRCS_common avm.idl) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy avm_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/AudioVideoManagement/avm_enums.hpp.stub @@ -144,6 +153,7 @@ CONFIGURE_FILE( ) +ENDIF() # Generate avm_dt[s,c]_types.h, avm_ft[s,c]_types.h IF(BUILD_RTI) CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE}) @@ -152,6 +162,10 @@ ENDIF() IF(BUILD_RTI) CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy avm_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/AudioVideoManagement/avm_enums.hpp.stub @@ -160,6 +174,7 @@ CONFIGURE_FILE( ) +ENDIF() # Generate avm_db_structs.cpp/.h CODEGEN_DATABASE_STRUCTS(SRCS_common ${xml_FILE}) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseEventManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseEventManagement/CMakeLists.txt index 6ba905e7d..2b6199e74 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseEventManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseEventManagement/CMakeLists.txt @@ -4,9 +4,15 @@ # $Author$ # -# Make ${Qt6_WebSockets} optional -if(QT6_GUI_AVAILABLE AND TARGET Qt6::WebSockets) - set(Qt6_WebSockets ${Qt6_WebSockets}) +# Link the real WebSockets module whenever the websocket code path is +# compiled: QT6_WEBSOCKETS_AVAILABLE (root CMakeLists) and the manual +# Qt6::WebSockets import are set when the real module was found. The old +# QT6_GUI_AVAILABLE condition never holds in this environment (Qt6 +# discovery takes the minimal path) and the Qt6_WebSockets variable was +# never defined, so the websocket code compiled without the module on the +# link line and failed only at link time. +if(QT6_WEBSOCKETS_REAL_FOUND OR Qt6WebSockets_FOUND) + set(Qt6_WebSockets Qt6::WebSockets) else() set(Qt6_WebSockets "") endif() @@ -30,6 +36,10 @@ SET(SRCS_common IF(BUILD_RTI) CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Stub file for compilation (fallback when no IDL exists) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/ExerciseEventManagement/eem_enums.hpp.stub @@ -37,6 +47,7 @@ CONFIGURE_FILE( COPYONLY ) +ENDIF() # Generate eem_db_structs.cpp/.h CODEGEN_DATABASE_STRUCTS(SRCS_common ${xml_FILE}) # Generate eem_db_impl.cpp/.h @@ -47,6 +58,10 @@ IF(BUILD_RTI) RTIDDSGEN(SRCS_common eem_enums.idl) RTIDDSGEN(SRCS_common eem.idl) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy eem_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/ExerciseEventManagement/eem_enums.hpp.stub @@ -55,6 +70,7 @@ CONFIGURE_FILE( ) +ENDIF() # Generate eem_dt[s,c]_types.h, eem_ft[s,c]_types.h IF(BUILD_RTI) CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE}) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseManagement/CMakeLists.txt index 364cac6bc..b1d335957 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/ExerciseManagement/CMakeLists.txt @@ -18,6 +18,10 @@ SET(SRCS_common logger.h ) +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy stub file to build directory (fallback when IDL files don't exist) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/ExerciseManagement/exm_enums.hpp.stub @@ -25,6 +29,7 @@ CONFIGURE_FILE( COPYONLY ) +ENDIF() IF(BUILD_RTI) # Generate exm_enums.idl / exm.idl CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) @@ -37,12 +42,6 @@ IF(BUILD_RTI) CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE}) # generate exm_[d|f]tc.h CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE}) -ELSE() - # BUILD_RTI=OFF: Use manual stub headers from include/ - LIST(APPEND SRCS_common - ${CMAKE_SOURCE_DIR}/include/ExerciseManagement/exm_db.h - ${CMAKE_SOURCE_DIR}/include/ExerciseManagement/exm_enums.hpp - ) ENDIF() NGL_ADD_LIBRARY(AAR SV WS HLA svcExmCommon SHARED ${SRCS_common}) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/FilterManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/FilterManagement/CMakeLists.txt index 822d34801..7da8e0acc 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/FilterManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/FilterManagement/CMakeLists.txt @@ -158,6 +158,11 @@ NGL_TARGET_LINK_LIBRARIES(svcFilterManagement LtsCommandLineParser svcCoreClient svcFltServer + # main_handler.cpp includes ; the + # ddsconnector link in svcFltClient/svcFltServer is PRIVATE and does not + # propagate its exported include dirs (with ddsconnector_export.h) to + # this executable's own TUs. + $,ddsconnector,> ) NGL_INSTALL_TARGET(svcFilterManagement) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/InfrastructureManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/InfrastructureManagement/CMakeLists.txt index 2da4a1b51..63a571667 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/InfrastructureManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/InfrastructureManagement/CMakeLists.txt @@ -7,7 +7,7 @@ # Make ${Qt6_Gui} optional if(QT6_GUI_AVAILABLE AND TARGET Qt6::Gui) - set(Qt6_Gui ${Qt6_Gui}) + set(Qt6_Gui Qt6::Gui) else() set(Qt6_Gui "") endif() @@ -32,6 +32,10 @@ SET(SRCS_common # Generate ism_enums.idl / ism.idl IF(BUILD_RTI) CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Stub file for compilation (fallback when no IDL exists) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/InfrastructureManagement/ism_enums.hpp.stub @@ -39,10 +43,15 @@ CONFIGURE_FILE( COPYONLY ) ENDIF() +ENDIF() # Generate ism_db_impl.cpp/.h, ism_db.h IF(BUILD_RTI) CODEGEN_DATABASE(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy ism_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/InfrastructureManagement/ism_enums.hpp.stub @@ -51,11 +60,16 @@ CONFIGURE_FILE( ) +ENDIF() # Generate *.cpp/*.hpp from idl IF(BUILD_RTI) RTIDDSGEN(SRCS_common ism_enums.idl) RTIDDSGEN(SRCS_common ism.idl) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy ism_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/InfrastructureManagement/ism_enums.hpp.stub @@ -64,21 +78,17 @@ CONFIGURE_FILE( ) +ENDIF() # Generate ism_dt[s,c]_types.h, ism_ft[s,c]_types.h IF(BUILD_RTI) CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE}) ENDIF() # Generate ism_[d|f]tc.h +# The former BUILD_GRANTLEE=OFF fallback copied handwritten ism_dtc.h / +# ism_ftc.h onto the CODEGEN_CLIENT_TOPICS_IFC output paths; those fake +# generated files were removed (the qt5 legacy has no such source files). IF(BUILD_GRANTLEE) CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE}) -ELSEIF(BUILD_RTI) - # Use pre-generated files when BUILD_GRANTLEE=OFF - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ism_dtc.h ${CMAKE_CURRENT_BINARY_DIR}/ism_dtc.h COPYONLY) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ism_ftc.h ${CMAKE_CURRENT_BINARY_DIR}/ism_ftc.h COPYONLY) - LIST(APPEND SRCS_common - ${CMAKE_CURRENT_BINARY_DIR}/ism_dtc.h - ${CMAKE_CURRENT_BINARY_DIR}/ism_ftc.h - ) ENDIF() NGL_ADD_LIBRARY(AAR SV WS HLA svcIsmCommon SHARED ${SRCS_common}) @@ -111,16 +121,10 @@ SET(SRCS_client parse_building_xml.h ) # generate ism_[d|f]tc_impl.[cpp|h] +# ism_dtc_impl_custom.cpp/.h are real service sources (as in the qt5 legacy); +# the BUILD_GRANTLEE=OFF copy of them onto codegen output paths was removed. IF(BUILD_GRANTLEE) CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE}) -ELSEIF(BUILD_RTI) - # Use pre-generated files when BUILD_GRANTLEE=OFF - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ism_dtc_impl_custom.cpp ${CMAKE_CURRENT_BINARY_DIR}/ism_dtc_impl_custom.cpp COPYONLY) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ism_dtc_impl_custom.h ${CMAKE_CURRENT_BINARY_DIR}/ism_dtc_impl_custom.h COPYONLY) - LIST(APPEND SRCS_client - ${CMAKE_CURRENT_BINARY_DIR}/ism_dtc_impl_custom.cpp - ${CMAKE_CURRENT_BINARY_DIR}/ism_dtc_impl_custom.h - ) ENDIF() NGL_ADD_LIBRARY(AAR SV WS HLA svcIsmClient SHARED ${SRCS_client}) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/NotificationManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/NotificationManagement/CMakeLists.txt index bd24dc0cd..793d5c06c 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/NotificationManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/NotificationManagement/CMakeLists.txt @@ -22,6 +22,10 @@ SET(SRCS_common IF(BUILD_RTI) CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Stub file for compilation (fallback when no IDL exists) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/NotificationManagement/nom_enums.hpp.stub @@ -29,10 +33,15 @@ CONFIGURE_FILE( COPYONLY ) +ENDIF() # Generate nom_db_impl.cpp/.h, nom_db.h IF(BUILD_RTI) CODEGEN_DATABASE(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy nom_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/NotificationManagement/nom_enums.hpp.stub @@ -41,6 +50,7 @@ CONFIGURE_FILE( ) +ENDIF() # Generate *.cpp/*.hpp from idl RTIDDSGEN(SRCS_common nom_enums.idl) RTIDDSGEN(SRCS_common nom.idl) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/CMakeLists.txt index 4b5c2bb99..17de171c1 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/CMakeLists.txt @@ -18,6 +18,10 @@ SET(SRCS_common logger.h ) +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy stub file to build directory (fallback when IDL files don't exist) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/OperatorManagement/opm_enums.hpp.stub @@ -25,6 +29,7 @@ CONFIGURE_FILE( COPYONLY ) +ENDIF() IF(BUILD_RTI) # Generate opm_enums.idl / opm.idl CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) @@ -37,12 +42,6 @@ IF(BUILD_RTI) CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE}) # generate opm_[d|f]tc.h CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE}) -ELSE() - # BUILD_RTI=OFF: Use manual stub headers from include/ - LIST(APPEND SRCS_common - ${CMAKE_SOURCE_DIR}/include/OperatorManagement/opm_db.h - ${CMAKE_SOURCE_DIR}/include/OperatorManagement/opm_enums.hpp - ) ENDIF() NGL_ADD_LIBRARY(AAR SV WS svcOpmCommon SHARED ${SRCS_common}) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/ParticipantManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/ParticipantManagement/CMakeLists.txt index 11f535947..dc3e7a7ba 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/ParticipantManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/ParticipantManagement/CMakeLists.txt @@ -11,9 +11,15 @@ else() set(Qt6_Gui "") endif() -# Make ${Qt6_WebSockets} optional -if(QT6_GUI_AVAILABLE AND TARGET Qt6::WebSockets) - set(Qt6_WebSockets ${Qt6_WebSockets}) +# Link the real WebSockets module whenever the websocket code path is +# compiled: QT6_WEBSOCKETS_AVAILABLE (root CMakeLists) and the manual +# Qt6::WebSockets import are set when the real module was found. The old +# QT6_GUI_AVAILABLE condition never holds in this environment (Qt6 +# discovery takes the minimal path) and the Qt6_WebSockets variable was +# never defined, so the websocket code compiled without the module on the +# link line and failed only at link time. +if(QT6_WEBSOCKETS_REAL_FOUND OR Qt6WebSockets_FOUND) + set(Qt6_WebSockets Qt6::WebSockets) else() set(Qt6_WebSockets "") endif() @@ -44,6 +50,10 @@ IF(BUILD_RTI) RTIDDSGEN(SRCS_common ppm_enums.idl) RTIDDSGEN(SRCS_common ppm.idl) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Stub file for compilation (fallback when no IDL exists) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/ParticipantManagement/ppm_enums.hpp.stub @@ -51,6 +61,7 @@ CONFIGURE_FILE( COPYONLY ) +ENDIF() # Generate ppm_db_structs.cpp/.h CODEGEN_DATABASE_STRUCTS(SRCS_common ${xml_FILE}) # Generate ppm_db.cpp, ppm_db_impl.cpp/.h diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/ProjectDataManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/ProjectDataManagement/CMakeLists.txt index 0193bc713..936002528 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/ProjectDataManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/ProjectDataManagement/CMakeLists.txt @@ -20,35 +20,14 @@ SET(SRCS_common logger.h ) -# Copy pdm_types.h to build directory -CONFIGURE_FILE( - ${CMAKE_CURRENT_SOURCE_DIR}/../../../include/ProjectDataManagement/pdm_types.h - ${CMAKE_CURRENT_BINARY_DIR}/pdm_types.h - COPYONLY -) +# pdm_types.h was a migration-scaffolding stub with no qt5 counterpart and +# no consumer; the stub in include/ was removed and the copy with it. -# Copy pdm_translation.h to build directory -# Only when BUILD_GRANTLEE=OFF (stub header). With BUILD_GRANTLEE=ON the -# codegen writes the real pdm_translation.h to the same build-dir path -# (see "Generating ... pdm_translation.h" in CODEGEN_IDL_SVC); copying the -# stub here would overwrite the generated file on every cmake re-configure -# and break incremental builds. Same guard pattern as pdm_enums.hpp below. -IF(NOT BUILD_GRANTLEE) - CONFIGURE_FILE( - ${CMAKE_CURRENT_SOURCE_DIR}/../../../include/ProjectDataManagement/pdm_translation.h - ${CMAKE_CURRENT_BINARY_DIR}/pdm_translation.h - COPYONLY - ) -ENDIF() - -# Copy pdm_enums.hpp to build directory (when BUILD_RTI=OFF) -IF(NOT BUILD_RTI) - CONFIGURE_FILE( - ${CMAKE_CURRENT_SOURCE_DIR}/../../../include/ProjectDataManagement/pdm_enums.hpp - ${CMAKE_CURRENT_BINARY_DIR}/pdm_enums.hpp - COPYONLY - ) -ENDIF() +# pdm_translation.h and pdm_enums.hpp stub copies (OFF-variant fallbacks whose +# include/ sources were removed together with the other shadowing stubs): +# with BUILD_GRANTLEE=ON and BUILD_RTI=ON the codegen writes the real files to +# these build-dir paths, so the copies are gone rather than kept for forbidden +# OFF variants. # Add current binary dir to include path for generated headers NGL_TARGET_INCLUDE_DIRECTORIES(${PDM_COMMON_TARGET} diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/ReportManagement/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/ReportManagement/CMakeLists.txt index 7a8193b40..55d3db061 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/ReportManagement/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/ReportManagement/CMakeLists.txt @@ -20,6 +20,10 @@ SET(SRCS_common IF(BUILD_RTI) CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Stub file for compilation (fallback when no IDL exists) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/ReportManagement/rep_enums.hpp.stub @@ -27,10 +31,15 @@ CONFIGURE_FILE( COPYONLY ) +ENDIF() # Generate rep_db_impl.cpp/.h, rep_db.h IF(BUILD_RTI) CODEGEN_DATABASE(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy rep_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/ReportManagement/rep_enums.hpp.stub @@ -39,6 +48,7 @@ CONFIGURE_FILE( ) +ENDIF() # Generate *.cpp/*.hpp from idl RTIDDSGEN(SRCS_common rep_enums.idl) RTIDDSGEN(SRCS_common rep.idl) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/SituationReplay/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Services/SituationReplay/CMakeLists.txt index 6e5d3d518..9bf333e00 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/SituationReplay/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/SituationReplay/CMakeLists.txt @@ -22,6 +22,10 @@ SET(SRCS_common IF(BUILD_RTI) CODEGEN_IDL_SVC(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Stub file for compilation (fallback when no IDL exists) CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/SituationReplay/srp_enums.hpp.stub @@ -29,10 +33,15 @@ CONFIGURE_FILE( COPYONLY ) +ENDIF() # Generate srp_db_impl.cpp/.h, srp_db.h IF(BUILD_RTI) CODEGEN_DATABASE(SRCS_common ${xml_FILE}) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy srp_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/SituationReplay/srp_enums.hpp.stub @@ -41,11 +50,16 @@ CONFIGURE_FILE( ) +ENDIF() # Generate *.cpp/*.hpp from idl IF(BUILD_RTI) RTIDDSGEN(SRCS_common srp_enums.idl) RTIDDSGEN(SRCS_common srp.idl) ENDIF() +# The enums stub copy below would overwrite the rtiddsgen-generated +# _enums.hpp (RTIDDSGEN on _enums.idl writes the same build-dir +# path) on every cmake re-configure. Only keep it for BUILD_RTI=OFF. +IF(NOT BUILD_RTI) # Copy srp_enums.hpp.stub to build directory for compilation CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/include/SituationReplay/srp_enums.hpp.stub @@ -54,6 +68,7 @@ CONFIGURE_FILE( ) +ENDIF() # Generate srp_dt[s,c]_types.h, srp_ft[s,c]_types.h IF(BUILD_RTI) CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE}) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/ElevationMap/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/ElevationMap/CMakeLists.txt new file mode 100644 index 000000000..d17e3cb0b --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap/ElevationMap/CMakeLists.txt @@ -0,0 +1,37 @@ +# +# $Id$ +# $HeadURL$ +# $Author$ +# + +# The GDAL-based ElevationMap module is not yet migrated to Qt6 (see the +# commented-out entries in ../CMakeLists.txt). LtsElevation still needs an +# ElevationMapManager, so build the compatibility stub that lives in the +# src/ + include/ scaffolding (same API as the Qt5 class, no GDAL). +NGL_ADD_LIBRARY(WS AAR HLA SV situationMapElevationMap SHARED + ${CMAKE_SOURCE_DIR}/src/Viewer/SituationMap/ElevationMap/elevation_map_manager.cpp + # The header lives in include/Viewer/SituationMap/ElevationMap, apart from + # the cpp. AUTOMOC only mocs headers that are target sources (or sit next + # to one); MOC_INCLUDES merely feeds moc's own -I flags, not header + # discovery. Listed explicitly, otherwise the vtable/staticMetaObject are + # undefined and the link of libsituationMapElevationMap.so fails. + ${CMAKE_SOURCE_DIR}/include/Viewer/SituationMap/ElevationMap/elevation_map_manager.h +) + +# The stub's ElevationMapManager is a Q_OBJECT class; without AUTOMOC the +# moc symbols (staticMetaObject/vtable) are missing and the link of +# libsituationMapElevationMap.so fails, cascading to every target that +# links it (same pattern as LtsSessionDataDds). +set_target_properties(situationMapElevationMap PROPERTIES AUTOMOC ON) + +NGL_TARGET_INCLUDE_DIRECTORIES(situationMapElevationMap + PUBLIC + # The stub cpp does #include "elevation_map_manager.h" - it lives in + # include/Viewer/SituationMap/ElevationMap/, not next to the source. + ${CMAKE_SOURCE_DIR}/include/Viewer/SituationMap/ElevationMap + ${CMAKE_SOURCE_DIR}/include +) +NGL_TARGET_LINK_LIBRARIES(situationMapElevationMap + PUBLIC + Qt6::Core +) diff --git a/qt6-after/qt6-migrated-legatus/cmake/MacroCodeGenIdl.cmake b/qt6-after/qt6-migrated-legatus/cmake/MacroCodeGenIdl.cmake index 4f540b1fa..49ad69e3d 100755 --- a/qt6-after/qt6-migrated-legatus/cmake/MacroCodeGenIdl.cmake +++ b/qt6-after/qt6-migrated-legatus/cmake/MacroCodeGenIdl.cmake @@ -446,6 +446,11 @@ MACRO(CREATE_TOPIC_TYPE_PLUGIN xmlFile_in) topic_type_plugin routing_plugin ddscore + ddsftccore + # The generated *_topic_type_plugin.cpp includes generic_fts_impl.h + # -> generic_fts_internal.h -> "ddsfts_export.h". Linking ddsfts also + # propagates its exported include dirs (source and binary dir). + ddsfts ${_commonLib} ) NGL_INSTALL_TARGET(${svcNameOut}TopicTypePlugin) diff --git a/qt6-after/qt6-migrated-legatus/docker_build.sh b/qt6-after/qt6-migrated-legatus/docker_build.sh index c9fccf7d0..1d6987b42 100755 --- a/qt6-after/qt6-migrated-legatus/docker_build.sh +++ b/qt6-after/qt6-migrated-legatus/docker_build.sh @@ -44,18 +44,21 @@ docker run --rm \ apt-get install -y -qq \ build-essential \ cmake \ + libboost-dev \ libkf6texttemplate-dev \ libqt6core6 \ libqt6gui6 \ libqt6widgets6 \ qt6-base-dev \ qt6-websockets-dev \ + qt6-serialport-dev \ qt6-tools-dev-tools \ qt6-tools-dev \ qt6-l10n-tools \ libgtest-dev \ libpq-dev \ postgresql-server-dev-all \ + libqt6sql6-psql \ libvlc-dev \ vlc-plugin-base \ git > /dev/null 2>&1 @@ -80,7 +83,90 @@ docker run --rm \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_BUILD_TYPE=Release - make -j8 ddscore ddsftccore ddsQoS ddsconnector ddsfts migration_tests NGLLogger nglapplication nglcompression nglcoreapplication ngldb nglguiapplication nglsettings nglsingleapplication nglsinglecoreapplication ngltools ngltranslator nglwidgets qtsingleapplication qtsinglecoreapplication wms_json_ds tcpserver svcFileManagement svcFilterManagement flmTests 2>&1 | tee build.log + # Validation builds the full service set, not only the two services that + # happened to be migrated first: every service library, the per-service + # test executables, and the shared libraries they need. Targets that are + # known blocked for reasons outside this migration are excluded below, so + # a green run means every migratable service actually compiles. + # + # Excluded, each for a dependency this migration cannot supply: + # svcTargetManagement - needs SituationMap::ElevationMap / + # LineOfSightCalculation, the GDAL module + # whose CMakeLists states it was never + # migrated (main_handler.h:18 includes + # ). + # svcExerciseManagement - needs QStateMachine / QState, moved from + # svcInfrastructureManagement QtCore to the Qt SCXML module in Qt6 + # exmStateMachineTest (Qt6::StateMachine). No qt6-scxml-dev in + # the image and qstatemachine.h is absent. + make -j8 \ + ddscore ddsftccore ddsQoS ddsconnector ddsfts migration_tests \ + NGLLogger nglapplication nglcompression nglcoreapplication ngldb \ + nglguiapplication nglsettings nglsingleapplication nglsinglecoreapplication \ + ngltools ngltranslator nglwidgets qtsingleapplication qtsinglecoreapplication \ + wms_json_ds tcpserver \ + svcAesClient svcAesCommon svcAesServer \ + svcAlmClient svcAlmCommon svcAlmServer \ + svcAreaEffectSimulation \ + svcAsmClient svcAsmCommon svcAsmServer svcAssetManagement \ + svcAudioVideoManagement \ + svcAvmClient svcAvmCommon svcAvmServer \ + svcBldClient svcBldCommon svcBldServer svcBuildings \ + svcCentralEffectSimulation \ + svcCesClient svcCesCommon svcCesDDSCommon svcCesGeoPairingImpl svcCesServer \ + svcCmoClient svcCmoCommon svcCmoServer \ + svcCnrHelper svcCodClient svcCodCommon svcCodServer \ + svcCombatNetRadio svcComponentMonitor svcCoreClient svcDifferentialGPS \ + svcEemClient svcEemCommon svcEemServer \ + svcEffectShowClient \ + svcEscClient svcEscCommon svcEscServer \ + svcEsmClient svcEsmCommon svcEsmServer \ + svcEvlClient svcEvlCommon svcEvlServer \ + svcExerciseEventManagement \ + svcExmClient svcExmCommon svcExmServer \ + svcFileManagement svcFilterManagement \ + svcFlmClient svcFlmCommon svcFlmServer \ + svcFltClient svcFltCommon svcFltServer \ + svcGimClient svcGimCommon svcGimServer svcGmpServer \ + svcGnaClient svcGnaCommon svcGnaServer \ + svcGuezIedManagement \ + svcIsmClient svcIsmCommon svcIsmServer \ + svcMapDummy \ + svcMdmClient svcMdmCommon svcMdmServer \ + svcMessaging svcMeteoDataManagement \ + svcMrkClient svcMrkCommon svcMrkServer \ + svcMsgClient svcMsgCommon svcMsgServer \ + svcNomClient svcNomCommon svcNomServer svcNotificationManagement \ + svcObdClient svcObdCommon svcObdServer \ + svcOcBaseDownload svcOcSituationClient svcOcSituationServer \ + svcOperatorManagement \ + svcOpmClient svcOpmCommon svcOpmServer \ + svcOreDummy \ + svcOscClient svcOscCommon svcOscServer \ + svcOssClient svcOssCommon svcOssServer \ + svcParticipantManagement \ + svcPdmClient svcPdmCommon svcPdmServer svcPedDummy \ + svcPpmClient svcPpmCommon svcPpmServer \ + svcPreClient svcPreCommon svcPreServer svcProjectDataManagement svcPwsCommon \ + svcRecCommon svcRecordingManagement \ + svcRepClient svcRepCommon svcRepCommonExecutable svcRepServer \ + svcReportAnalyzer svcReportGenerator \ + svcScmClient svcScmCommon svcScmServer svcScrDummy \ + svcServiceManagement svcSituationReplay svcSmoDummy \ + svcSomClient svcSomCommon svcSomServer svcSoundManagement svcSrmCommon \ + svcSrpClient svcSrpCommon svcSrpServer \ + svcTabClient svcTabCommon svcTabServer \ + svcTabocClient svcTabocCommon svcTabocServer \ + svcTgtClient svcTgtCommon svcTgtServer \ + svcTrainingAreaBase svcTrainingAreaBaseOC \ + svcVideoOverlayManagement \ + svcWarehouseGuez svcWarehouseManagement \ + svcWhgClient svcWhgCommon svcWhgServer \ + asmTests avmFtTests avmTests avmVcaTests cesTests eemTests evlTests \ + exmDtUnitTest exmTests flmTests gmpTests ismTests \ + mrkTests mvsTests nomTests opmTests pdmTests ppmTests preTests repTests \ + scmDtUnitTest srpFtTests tgtTests whgTests \ + 2>&1 | tee build.log # Run the CTest unit tests as an explicit validation step. # We are already inside build4 (cd build4 above), so --test-dir is the