6.9 KiB
6.9 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.
Completed Work
See BUILD_RTI_VALIDATION_REPORT.md for detailed results of completed migration work.
Remaining Tasks
Priority 1: ddsfts Module
Location: Lts/DDS/FTS/
Blocker: Missing pdm.idl from ProjectDataManagement module
Required Actions:
- Check if
pdm.idlexists in legacy Qt5 version - If exists, copy to migrated version's IDL directory
- Verify CMakeLists.txt references correct IDL path
- If pdm.idl doesn't exist, create minimal stub for build purposes:
module ProjectDataManagement { // Stub IDL for build purposes struct ProjectData { string id; }; }; - Rebuild ddsfts target
- Verify no additional RTI header conflicts
Files to Check:
qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/DDS/FTS/(legacy)qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS/FTS/(migrated)Lts/Plugins/ProjectDataManagement/(source of pdm.idl)Lts/Services/ProjectDataManagement/(source of pdm.idl)
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)
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"
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
- Severity: High (blocks complete DDS module build)
- Root Cause: Missing pdm.idl dependency
- Workaround: Create stub pdm.idl or migrate ProjectDataManagement first
- Files Involved:
Lts/DDS/FTS/CMakeLists.txt,Lts/Plugins/ProjectDataManagement/
Issue: ProjectDataManagement Not Migrated
- Severity: Medium (blocks ddsfts, affects Project plugins)
- Root Cause: Not yet started in current migration wave
- Workaround: None - requires full migration
- Files Involved:
Lts/Plugins/ProjectDataManagement/,Lts/Services/ProjectDataManagement/
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/
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
- 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