9.4 KiB
DDS/RTI Migration - Continuation Prompt
Context
This prompt continues the Qt6 migration work for the Lts/DDS module with RTI Connext DDS 7.7 integration. The core DDS targets (ddscore, ddsftccore, ddsQoS, ddsconnector, ddsgen) have been successfully migrated and build with BUILD_RTI=ON.
Current Blocker: ddsfts module blocked by IDL duplicate symbol definitions in ProjectDataManagement module.
Current Status (Updated)
✅ Completed
- Docker build environment configured (Ubuntu 26.04, Qt 6.10.2, RTI 7.7.0)
- KF6TextTemplate dependency installed (replaces Grantlee5)
- Qt6 linguist tool stubs created (lconvert, lprodump, lpregen)
- Missing test stub files created (coordTransTests_*.cpp)
- DDS core targets build successfully:
- ddscore
- ddsftccore
- ddsQoS
- ddsconnector
- ddsgen (IDL generator)
❌ Blocked
- ddsfts: Blocked by ProjectDataManagement IDL conflicts (duplicate symbols)
- ProjectDataManagement module: Not yet migrated to Qt6
📋 Reports Generated
DDS_RTI_MIGRATION_REPORT.md- Full migration status reportDDS_RTI_MIGRATION_CONTINUATION_PROMPT.md- This file (being updated)
Remaining Tasks
Priority 1: ddsfts Module - IDL Duplicate Symbol Resolution (CRITICAL)
Location: Lts/DDS/FTS/ and Lts/Services/ProjectDataManagement/
Blocker: IDL duplicate symbol definitions between pdm.idl and pdm_enums.idl
Error Message:
ERROR: pdm.idl line 46 duplicate symbol 'ProjectDataManagement::BiteComponentText'
was previously defined in file pdm_enums.idl line 447
ERROR: pdm.idl line 46 duplicate symbol 'ProjectDataManagement::BiteComponentText'
has enumerator 'FirePurpose' which collides with enumerator in
'ProjectDataManagement::BiteComponentText' from file pdm_enums.idl line 447
Affected Enumerators:
- BiteComponentText (duplicate type definition)
- FirePurpose (enumerator collision)
- GearClass (enumerator collision)
- EventType (enumerator collision)
- Multiple other enum values
Required Actions:
-
Audit IDL files for duplicates:
cd Lts/Services/ProjectDataManagement grep -n "BiteComponentText" pdm.idl pdm_enums.idl grep -n "enum.*FirePurpose" pdm.idl pdm_enums.idl grep -n "enum.*GearClass" pdm.idl pdm_enums.idl grep -n "enum.*EventType" pdm.idl pdm_enums.idl -
Resolve duplicates:
- Remove duplicate type/enum definitions from pdm.idl
- Keep canonical definitions in pdm_enums.idl
- Add
#include "pdm_enums.idl"to pdm.idl if needed - Ensure all modules reference canonical definitions
-
Verify IDL compilation:
cd build4 make svcPdmCommon_autogen_timestamp_deps -
Rebuild ddsfts:
make -j8 ddsfts
Files to Fix:
Lts/Services/ProjectDataManagement/pdm.idlLts/Services/ProjectDataManagement/pdm_enums.idlLts/Plugins/ProjectDataManagement/(dependent module)
Priority 2: ProjectDataManagement Module Migration
Locations:
Lts/Plugins/ProjectDataManagement/Lts/Services/ProjectDataManagement/
Migration Checklist:
- Inventory all Qt5 API usage (QByteArray::number, deprecated signals/slots, etc.)
- Update CMakeLists.txt for Qt6 (find_package(Qt6 COMPONENTS ...))
- Verify KTextTemplate configuration for any IDL codegen
- Check for AUTOMOC timing issues with generated files
- Update include paths if necessary
- Build with BUILD_RTI=ON to verify compatibility
- Run any existing tests
Qt5 API Patterns to Search:
# In ProjectDataManagement directories
grep -r "QByteArray::number" --include="*.h" --include="*.cpp"
grep -r "QRegExp" --include="*.h" --include="*.cpp"
grep -r "QDesktopWidget" --include="*.h" --include="*.cpp"
grep -r "QApplication::desktop" --include="*.h" --include="*.cpp"
CMake Updates Needed:
# Qt5 pattern (legacy)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
# Qt6 pattern (migrated)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
qt_standardize_properties()
Priority 3: Project Plugin Qt6 Migration
Affected Plugins:
Lts/Plugins/ProjectEtsPlugin/Lts/Plugins/ProjectAhtcPlugin/Lts/Plugins/ProjectPluginBase/Lts/Plugins/Project*Plugin/
Known Error: moc "Undefined interface"
Investigation Steps:
- Check Q_PLUGIN_METADATA declarations
- Verify interface classes have Q_DECLARE_INTERFACE
- Check for missing Q_OBJECT macros
- Verify AUTOMOC is enabled in CMakeLists.txt
- Check for circular dependencies between plugins
Common Qt6 Migration Issues:
- Q_PLUGIN_METADATA requires QJsonDocument in Qt6
- Interface UUIDs must be consistent
- Plugin loading may require Q_PLUGIN_IMPORT in addition to Q_PLUGIN_METADATA
Build Commands
Standard DDS Build (Working)
docker run --rm -it \
-v /home/torsten/swy/sandbox:/workspace \
-v /home/torsten/swy/sandbox/rti_license.dat:/workspace/rti_license.dat:ro \
legatus-qt6-build:latest \
bash -c "cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus && \
mkdir -p build && cd build && \
cmake -DBUILD_RTI=ON -DCMAKE_CXX_STANDARD=17 .. && \
make -j8 ddscore ddsftccore ddsQoS ddsconnector ddsgen"
Full DDS Build (Including ddsfts - After IDL Fix)
docker run --rm -it \
-v /home/torsten/swy/sandbox:/workspace \
-v /home/torsten/swy/sandbox/rti_license.dat:/workspace/rti_license.dat:ro \
legatus-qt6-build:latest \
bash -c "cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus && \
mkdir -p build && cd build && \
cmake -DBUILD_RTI=ON -DCMAKE_CXX_STANDARD=17 .. && \
make -j8 ddscore ddsftccore ddsQoS ddsconnector ddsgen ddsfts"
IDL Investigation Commands (Host)
cd /home/torsten/swy/sandbox/qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Services/ProjectDataManagement
# Find duplicate definitions
grep -n "BiteComponentText" pdm.idl pdm_enums.idl
grep -n "enum.*FirePurpose" pdm.idl pdm_enums.idl
grep -n "enum.*GearClass" pdm.idl pdm_enums.idl
grep -n "enum.*EventType" pdm.idl pdm_enums.idl
# Check include relationships
grep -n "#include" pdm.idl
grep -n "#include" pdm_enums.idl
# View specific lines
sed -n '40,50p' pdm.idl
sed -n '440,455p' pdm_enums.idl
ProjectDataManagement Build (After Migration)
docker run --rm -it \
-v /home/torsten/swy/sandbox:/workspace \
-v /home/torsten/swy/sandbox/rti_license.dat:/workspace/rti_license.dat:ro \
legatus-qt6-build:latest \
bash -c "cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus && \
mkdir -p build && cd build && \
cmake -DBUILD_RTI=ON -DCMAKE_CXX_STANDARD=17 .. && \
make -j8 ProjectDataManagement"
Known Issues Reference
Issue: ddsfts Build Failure - IDL Duplicate Symbols (CRITICAL)
- Severity: Critical (blocks complete DDS module build)
- Root Cause: Duplicate type/enum definitions in pdm.idl and pdm_enums.idl
- Error:
duplicate symbol 'ProjectDataManagement::BiteComponentText' - Workaround: Remove duplicates from pdm.idl, keep canonical in pdm_enums.idl
- Files Involved:
Lts/Services/ProjectDataManagement/pdm.idlLts/Services/ProjectDataManagement/pdm_enums.idl
- Status: Requires manual IDL cleanup
Issue: ProjectDataManagement Not Migrated
- Severity: High (blocks ddsfts, affects Project plugins)
- Root Cause: Not yet started in current migration wave
- Workaround: None - requires full Qt6 migration
- Files Involved:
Lts/Plugins/ProjectDataManagement/,Lts/Services/ProjectDataManagement/ - Status: Pending migration
Issue: Project Plugin moc Errors
- Severity: Medium (affects plugin loading, not DDS core)
- Root Cause: Qt6 plugin interface changes
- Workaround: Build without plugins or fix Q_PLUGIN_METADATA declarations
- Files Involved:
Lts/Plugins/Project*Plugin/ - Status: Pending investigation
Testing Guidelines
After ddsfts Build
- Verify libddsfts.so is created
- Check for undefined symbols:
nm -D libddsfts.so | grep U - Test plugin loading if applicable
After ProjectDataManagement Migration
- Build ddsfts and verify success
- Run any ProjectDataManagement unit tests
- Verify pdm.idl codegen produces expected headers
- Test integration with DDS module
After Project Plugin Migration
- Build all Project*Plugin targets
- Verify plugins load at runtime
- Test plugin interfaces with host application
- Check for moc warnings in build output
Success Criteria
ddsfts Module
- IDL duplicate symbols resolved in pdm.idl/pdm_enums.idl
- ddsfts target builds without errors
- libddsfts.so is created
- No undefined symbol errors
- pdm.idl codegen runs successfully
ProjectDataManagement Module
- All Qt5 API usage replaced with Qt6 equivalents
- CMakeLists.txt uses Qt6 find_package
- Module builds with BUILD_RTI=ON
- No moc warnings or errors
- pdm.idl generates expected headers
Project Plugins
- All Project*Plugin targets build
- No "Undefined interface" moc errors
- Plugins load successfully at runtime
- Plugin interfaces work correctly
Notes
- RTI 7.7 requires C++17 (not C++23)
- Empty rti_license.dat is valid for development
- Code generation must happen during build (no pre-generated files)
- AUTOMOC timing issues require SKIP_AUTOMOC + manual QT6_WRAP_CPP for generated files
- RTI headers conflict with stub definitions - use #ifdef BUILD_RTI guards