Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/DDS_RTI_MIGRATION_CONTINUATION_PROMPT.md
T

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:

  1. Check if pdm.idl exists in legacy Qt5 version
  2. If exists, copy to migrated version's IDL directory
  3. Verify CMakeLists.txt references correct IDL path
  4. If pdm.idl doesn't exist, create minimal stub for build purposes:
    module ProjectDataManagement {
        // Stub IDL for build purposes
        struct ProjectData {
            string id;
        };
    };
    
  5. Rebuild ddsfts target
  6. 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:

  1. Check Q_PLUGIN_METADATA declarations
  2. Verify interface classes have Q_DECLARE_INTERFACE
  3. Check for missing Q_OBJECT macros
  4. Verify AUTOMOC is enabled in CMakeLists.txt
  5. 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

  1. Verify libddsfts.so is created
  2. Check for undefined symbols: nm -D libddsfts.so | grep U
  3. Test plugin loading if applicable

After ProjectDataManagement Migration

  1. Build ddsfts and verify success
  2. Run any ProjectDataManagement unit tests
  3. Verify pdm.idl codegen produces expected headers
  4. Test integration with DDS module

After Project Plugin Migration

  1. Build all Project*Plugin targets
  2. Verify plugins load at runtime
  3. Test plugin interfaces with host application
  4. 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