From 6513a267e2f4de375181ea14880c1cb1c7e0ebfc Mon Sep 17 00:00:00 2001 From: twi-devel Date: Sun, 6 Sep 2026 18:58:10 +0200 Subject: [PATCH] Provides clear handoff infos for continuing migration work with resolution strategies --- .../BUILD_RTI_VALIDATION_REPORT.md | 228 ++++++++++++++++ .../DDS_RTI_MIGRATION_CONTINUATION_PROMPT.md | 211 +++++++++++++++ ...OWN_ISSUES_DDSFTS_PROJECTDATAMANAGEMENT.md | 255 ++++++++++++++++++ 3 files changed, 694 insertions(+) create mode 100644 qt6-after/qt6-migrated-legatus/BUILD_RTI_VALIDATION_REPORT.md create mode 100644 qt6-after/qt6-migrated-legatus/DDS_RTI_MIGRATION_CONTINUATION_PROMPT.md create mode 100644 qt6-after/qt6-migrated-legatus/KNOWN_ISSUES_DDSFTS_PROJECTDATAMANAGEMENT.md diff --git a/qt6-after/qt6-migrated-legatus/BUILD_RTI_VALIDATION_REPORT.md b/qt6-after/qt6-migrated-legatus/BUILD_RTI_VALIDATION_REPORT.md new file mode 100644 index 000000000..86dfcb0d0 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/BUILD_RTI_VALIDATION_REPORT.md @@ -0,0 +1,228 @@ +# BUILD_RTI=ON Validation Report + +## Executive Summary + +The Lts/DDS module has been successfully migrated to Qt6 with RTI Connext DDS 7.7 integration enabled (`BUILD_RTI=ON`). All core DDS targets compile and link successfully in the Docker build environment. + +**Date:** 2026-09-06 +**Build Environment:** Ubuntu 26.04, Qt 6.10.2, RTI Connext DDS 7.7 +**C++ Standard:** C++17 (required for RTI 7.7 compatibility) + +--- + +## Build Results + +### Successfully Built Targets + +| Target | Library | Size | Status | +|--------|---------|------|--------| +| ddscore | libddscore.so | 4.3M | ✅ | +| ddsftccore | libddsftccore.so | 550K | ✅ | +| ddsQoS | libddsQoS.so | 1.6M | ✅ | +| ddsconnector | libddsconnector.so | 4.4M | ✅ | +| ddsgen | libddsgen.so | 3.1M | ✅ | + +### Build Configuration + +```bash +# Docker image +legatus-qt6-build:latest + +# CMake configuration +cmake -DBUILD_RTI=ON -DCMAKE_CXX_STANDARD=17 .. + +# RTI License +/home/torsten/swy/sandbox/rti_license.dat (empty development license) +``` + +--- + +## Issues Resolved + +### 1. Qt5 API Deprecations (Qt6 Migration) + +**Problem:** `QByteArray::number()` is deprecated/removed in Qt6 + +**Solution:** Replace with `QString::number(value).toLatin1()` + +**Files Modified:** +- `Lts/DDS/FTC/generic_ftc_impl.h` (2 occurrences) +- `Lts/DDS/FTS/connext.h` (1 occurrence) +- `Lts/DDS/Routing/routing_plugin.h` (1 occurrence) +- `Lts/DDS/Generic/generic_data_reader.h` (1 occurrence) + +### 2. C++ Standard Compatibility + +**Problem:** RTI 7.7 requires C++17, not C++23 + +**Solution:** Changed `CMAKE_CXX_STANDARD` from 23 to 17 in parent CMakeLists.txt (line 99) + +### 3. AUTOMOC vs Codegen Timing + +**Problem:** AUTOMOC runs at configure time, but codegen macros run at build time. Generated files like `core_dtc.h` don't exist when moc tries to process them. + +**Solution:** +```cmake +# Skip AUTOMOC for generated files +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/core_dtc.h SKIP_AUTOMOC ON) + +# Manually invoke QT6_WRAP_CPP with proper dependencies +qt6_wrap_cpp(NGLEXTRA_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/core_dtc.h + OPTIONS -I${CMAKE_SOURCE_DIR}/include -I${CMAKE_SOURCE_DIR}/Lts) +``` + +### 4. RTI Library Path Resolution + +**Problem:** RTI libraries exist on host at `/home/torsten/swy/sandbox/external/rti_connext_dds-7.7.0/lib/x64Linux4gcc8.5.0/` but must be mounted to `/workspace/external/rti_connext_dds-7.7.0` in container. + +**Solution:** Updated `cmake/FindRTI.cmake` to search `${CMAKE_SOURCE_DIR}/../../../external/` path + +### 5. PartitionType Enum Conversion + +**Problem:** Both `LtsSession::PartitionType` and `IDL::PartitionType` exist with different naming conventions (SCREAMING_SNAKE_CASE vs PascalCase) + +**Solution:** Added conversion functions in `lts_session_data_dds.h/.cpp`: +```cpp +IDL::PartitionType toIdlPartitionType(PartitionType type); +PartitionType toPartitionType(IDL::PartitionType type); +``` + +### 6. Missing Fetcher Class + +**Problem:** Legacy version has `Fetcher` inline helper class and `m_guiPluginInterfaces` member that were missing from migrated version. + +**Solution:** Added to `lts_session_data_dds.h`: +- `m_guiPluginInterfaces` member variable +- `getForeignGuiInterface()` template method +- `Fetcher` class inline definition + +### 7. Missing generic_dtc_impl.h + +**Problem:** File was missing from migrated version's `include/DDS/DTC/` directory, causing incomplete type errors. + +**Solution:** Copied from legacy version to migrated version. + +### 8. RTI Header Conflicts + +**Problem:** `generic_dtc.h` had stub definitions for `LoanedSamples` and `SampleInfo` that conflicted with RTI's actual headers. + +**Solution:** Added conditional compilation guards: +```cpp +#ifdef BUILD_RTI + #include + #include +#else + // Stub definitions for BUILD_RTI=OFF +#endif +``` + +### 9. DataModification Enum Conflict + +**Problem:** Stub enum in `generic_dtc.h` (Added, Modified, Removed) conflicted with `LtsUtilsCore/data_modification_enum.h` (eAdded, eModified, eRemoved). + +**Solution:** Only define stub enum when `BUILD_RTI=OFF`. + +--- + +## File Changes Summary + +| File | Change Type | Description | +|------|-------------|-------------| +| `CMakeLists.txt` | Modified | C++17 standard, RTI path resolution | +| `cmake/FindRTI.cmake` | Modified | Added external/ directory search path | +| `Lts/DDS/Core/CMakeLists.txt` | Modified | AUTOMOC skip, manual QT6_WRAP_CPP | +| `Lts/DDS/QosProfile/CMakeLists.txt` | Modified | Fixed include path | +| `Lts/DDS/DDSConnector/CMakeLists.txt` | Modified | INTERFACE to PUBLIC include | +| `Lts/Common/LtsSession/CMakeLists.txt` | Modified | Added ddsQoS link, fixed include path | +| `Lts/Common/LtsSession/lts_session_data_dds.h` | Modified | Added members, Fetcher class, conversion functions | +| `Lts/Common/LtsSession/lts_session_data_dds.cpp` | Modified | Implemented conversion functions | +| `Lts/DDS/FTC/generic_ftc_impl.h` | Modified | Qt5 API fixes | +| `Lts/DDS/FTS/connext.h` | Modified | Qt5 API fix | +| `Lts/DDS/Routing/routing_plugin.h` | Modified | Qt5 API fix | +| `Lts/DDS/Generic/generic_data_reader.h` | Modified | Qt5 API fix | +| `include/DDS/Core/core.hpp` | Renamed | → core.hpp.stub (was blocking generated file) | +| `include/DDS/Core/core_dtc_types.h` | Renamed | → core_dtc_types.h.stub (was blocking generated files) | +| `include/DDS/DTC/generic_dtc_impl.h` | Added | Copied from legacy | +| `include/DDS/DTC/generic_dtc.h` | Modified | Conditional RTI headers, enum fix | +| `rti_license.dat` | Created | Empty development license | + +--- + +## Known Issues (Out of Scope) + +### 1. ddsfts Build Failure + +**Status:** ❌ Not Built +**Cause:** Missing `pdm.idl` from ProjectDataManagement module + +**Details:** +The `ddsfts` target depends on IDL files from the ProjectDataManagement module which is not part of the DDS migration scope. The build fails with: +``` +File pdm.idl not found +``` + +**Resolution Path:** +- Requires ProjectDataManagement module to be migrated first +- Or create stub pdm.idl for build purposes only + +### 2. ProjectDataManagement Module + +**Location:** +- `Lts/Plugins/ProjectDataManagement/` +- `Lts/Services/ProjectDataManagement/` + +**Status:** Not migrated +**Dependencies:** Required by ddsfts and other Project-related plugins + +**Known Issues:** +- pdm.idl not available for DDS codegen +- Potential Qt5 API usage (unverified) +- CMake configuration not updated for Qt6 + +### 3. Project Plugin Qt6 Migration Issues + +**Affected Plugins:** +- ProjectEtsPlugin +- ProjectAhtcPlugin +- ProjectPluginBase +- Other Project* plugins + +**Error Type:** `moc "Undefined interface"` errors +**Status:** Pre-existing issues, unrelated to DDS/RTI migration + +--- + +## Validation Checklist + +- [x] RTI license file created and accessible +- [x] RTI libraries mounted and discoverable by CMake +- [x] C++17 standard enforced +- [x] Qt5 API deprecations resolved +- [x] Code generation runs during build (verified via nddsgen warnings in output) +- [x] No stub/placeholder files for generated code +- [x] ddscore builds successfully +- [x] ddsftccore builds successfully +- [x] ddsQoS builds successfully +- [x] ddsconnector builds successfully +- [x] ddsgen builds successfully +- [ ] ddsfts builds (blocked by pdm.idl) +- [ ] ProjectDataManagement migrated (out of scope) +- [ ] Project plugins Qt6 migration (out of scope) + +--- + +## Recommendations + +1. **For ddsfts:** Coordinate with ProjectDataManagement team to migrate pdm.idl or create temporary stub +2. **For Project Plugins:** Address Qt6 migration issues in parallel workstream +3. **For Future RTI Updates:** Document RTI version compatibility matrix (RTI 7.7 → C++17) +4. **For Codegen:** Consider caching generated files to speed up clean builds + +--- + +## Contact + +For questions about this migration, refer to: +- Migration prompt: `./prompts/combined-migration-subfolder-dds-rti-compact.prompt.md` +- Build documentation: `./app/Dockerfile` +- RTI configuration: `./cmake/FindRTI.cmake` \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/DDS_RTI_MIGRATION_CONTINUATION_PROMPT.md b/qt6-after/qt6-migrated-legatus/DDS_RTI_MIGRATION_CONTINUATION_PROMPT.md new file mode 100644 index 000000000..44cb75629 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/DDS_RTI_MIGRATION_CONTINUATION_PROMPT.md @@ -0,0 +1,211 @@ +# 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: + ```idl + 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:** +```bash +# 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:** +```cmake +# 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) +```bash +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) +```bash +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) +```bash +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 \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/KNOWN_ISSUES_DDSFTS_PROJECTDATAMANAGEMENT.md b/qt6-after/qt6-migrated-legatus/KNOWN_ISSUES_DDSFTS_PROJECTDATAMANAGEMENT.md new file mode 100644 index 000000000..a342ca8fe --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/KNOWN_ISSUES_DDSFTS_PROJECTDATAMANAGEMENT.md @@ -0,0 +1,255 @@ +# Known Issues - ddsfts and ProjectDataManagement + +## Overview + +This document tracks known issues blocking the complete migration of the DDS module, specifically the ddsfts target and its dependency on ProjectDataManagement. + +--- + +## Issue #1: ddsfts Build Failure + +### Status +❌ **Blocked** - Cannot build until pdm.idl is available + +### Error Message +``` +File pdm.idl not found +[Error from nddsgen codegen step] +``` + +### Root Cause +The `ddsfts` target depends on IDL files from the ProjectDataManagement module. The file `pdm.idl` is not present in the migrated codebase because: +1. ProjectDataManagement module has not been migrated yet +2. The IDL file may not exist in the expected location +3. CMake IDL search paths may not be configured correctly + +### Impact +- ddsfts library cannot be built +- Any code depending on ddsfts is blocked +- Complete DDS module validation is incomplete + +### Location +- **Target:** `Lts/DDS/FTS/CMakeLists.txt` +- **Dependency:** `Lts/Plugins/ProjectDataManagement/` or `Lts/Services/ProjectDataManagement/` +- **Missing File:** `pdm.idl` + +### Resolution Options + +#### Option A: Migrate ProjectDataManagement First (Recommended) +1. Migrate ProjectDataManagement module to Qt6 +2. Ensure pdm.idl is in correct location +3. Update ddsfts CMakeLists.txt to reference correct IDL path +4. Rebuild ddsfts + +**Pros:** Proper long-term solution +**Cons:** Requires additional migration work + +#### Option B: Create Stub pdm.idl (Temporary) +1. Create minimal pdm.idl stub in `include/DDS/FTS/` or similar +2. Define only the types needed by ddsfts +3. Document as temporary workaround +4. Replace with real pdm.idl after ProjectDataManagement migration + +**Pros:** Unblocks ddsfts build quickly +**Cons:** May not match actual IDL, could cause runtime issues + +#### Option C: Exclude ddsfts from Build (Workaround) +1. Wrap ddsfts in additional CMake conditional +2. Build other DDS targets without ddsfts +3. Document ddsfts as temporarily unavailable + +**Pros:** Allows other DDS targets to be used +**Cons:** Incomplete DDS module + +### Investigation Steps + +1. **Search for pdm.idl in legacy version:** + ```bash + find qt-migration-legatus/qt5-before -name "pdm.idl" + ``` + +2. **Check ProjectDataManagement directories:** + ```bash + ls -la Lts/Plugins/ProjectDataManagement/ + ls -la Lts/Services/ProjectDataManagement/ + ``` + +3. **Check ddsfts CMakeLists.txt for IDL references:** + ```bash + grep -n "pdm" Lts/DDS/FTS/CMakeLists.txt + grep -n "IDL" Lts/DDS/FTS/CMakeLists.txt + ``` + +4. **Search for pdm references in code:** + ```bash + grep -r "pdm" Lts/DDS/FTS/ --include="*.h" --include="*.cpp" + ``` + +--- + +## Issue #2: ProjectDataManagement Module Not Migrated + +### Status +⚠️ **Not Started** - Requires full Qt6 migration + +### Locations +- `Lts/Plugins/ProjectDataManagement/` +- `Lts/Services/ProjectDataManagement/` + +### Known Dependencies +- ddsfts (blocks ddsfts build) +- ProjectEtsPlugin (likely depends on ProjectDataManagement) +- ProjectAhtcPlugin (likely depends on ProjectDataManagement) +- Other Project* plugins + +### Migration Checklist + +#### Phase 1: Assessment +- [ ] Inventory all source files (.h, .cpp) +- [ ] Inventory all IDL files (.idl) +- [ ] Review CMakeLists.txt structure +- [ ] Identify Qt5 API usage +- [ ] Identify code generation requirements + +#### Phase 2: Qt6 API Migration +- [ ] Replace QByteArray::number() → QString::number().toLatin1() +- [ ] Replace QRegExp → QRegularExpression +- [ ] Replace QDesktopWidget → QScreen +- [ ] Update signal/slot syntax if needed +- [ ] Update any deprecated Qt classes + +#### Phase 3: CMake Configuration +- [ ] Change find_package(Qt5...) to find_package(Qt6...) +- [ ] Add qt_standardize_properties() +- [ ] Configure KTextTemplate for IDL codegen +- [ ] Fix include paths +- [ ] Set CMAKE_CXX_STANDARD to 17 + +#### Phase 4: RTI Integration +- [ ] Verify BUILD_RTI compatibility +- [ ] Check for RTI header conflicts +- [ ] Test with BUILD_RTI=ON + +#### Phase 5: Validation +- [ ] Build without errors +- [ ] No moc warnings +- [ ] Run unit tests if available +- [ ] Verify IDL codegen output + +### Potential Issues + +#### Qt5 API Usage (Expected) +Based on patterns in other modules, expect to find: +- `QByteArray::number()` - Replace with `QString::number().toLatin1()` +- `QRegExp` - Replace with `QRegularExpression` +- `QApplication::desktop()` - Replace with `QGuiApplication::primaryScreen()` + +#### Code Generation +- May use KTextTemplate for IDL → C++ generation +- Check for AUTOMOC timing issues with generated files +- May need SKIP_AUTOMOC + manual QT6_WRAP_CPP pattern + +#### Include Paths +- Legacy paths may reference `LtsUtils/` instead of `Lts/` +- Check all `#include` directives after migration + +--- + +## Issue #3: Project Plugin Qt6 Migration Issues + +### Status +⚠️ **Pre-existing Issues** - Unrelated to DDS/RTI migration + +### Affected Plugins +- ProjectEtsPlugin +- ProjectAhtcPlugin +- ProjectPluginBase +- Project*Plugin (other Project plugins) + +### Error Type +``` +moc: Undefined interface +``` + +### Root Cause Analysis Needed +1. Check Q_PLUGIN_METADATA declarations +2. Verify Q_DECLARE_INTERFACE in interface classes +3. Check for missing Q_OBJECT macros +4. Verify AUTOMOC is enabled +5. Check for circular dependencies + +### Investigation Commands +```bash +# Find all Project plugins +find Lts/Plugins -name "*Project*Plugin" -type d + +# Check for Q_PLUGIN_METADATA +grep -r "Q_PLUGIN_METADATA" Lts/Plugins/Project*Plugin/ --include="*.h" + +# Check for Q_DECLARE_INTERFACE +grep -r "Q_DECLARE_INTERFACE" Lts/Plugins/Project*Plugin/ --include="*.h" + +# Check CMakeLists.txt for AUTOMOC +grep -r "AUTOMOC" Lts/Plugins/Project*Plugin/CMakeLists.txt +``` + +### Common Qt6 Plugin Issues + +#### Issue: Q_PLUGIN_METADATA requires QJsonDocument +**Qt5:** +```cpp +Q_PLUGIN_METADATA(IID "com.example.PluginInterface" FILE "plugin.json") +``` + +**Qt6:** May require additional QJsonDocument handling + +#### Issue: Interface UUID Changes +Plugin interface UUIDs must be consistent between: +- Q_DECLARE_INTERFACE declaration +- Q_PLUGIN_METADATA IID string +- Plugin loader expectations + +#### Issue: Plugin Loading +Qt6 may require both Q_PLUGIN_METADATA and Q_PLUGIN_IMPORT for proper plugin loading. + +--- + +## Resolution Priority + +| Priority | Issue | Impact | Effort | Recommendation | +|----------|-------|--------|--------|----------------| +| 1 | ddsfts missing pdm.idl | High (blocks DDS) | Low-Medium | Create stub or migrate ProjectDataManagement | +| 2 | ProjectDataManagement migration | High (enables ddsfts) | High | Full migration required | +| 3 | Project plugin moc errors | Medium (plugins only) | Medium | Fix after DDS module complete | + +--- + +## Action Items + +### Immediate (Unblock ddsfts) +- [ ] Search for pdm.idl in legacy codebase +- [ ] If found, copy to migrated version +- [ ] If not found, create minimal stub +- [ ] Update ddsfts CMakeLists.txt if needed +- [ ] Rebuild ddsfts + +### Short-term (Complete DDS module) +- [ ] Migrate ProjectDataManagement module +- [ ] Verify all DDS targets build with BUILD_RTI=ON +- [ ] Document any remaining issues + +### Long-term (Complete Qt6 migration) +- [ ] Migrate all Project* plugins +- [ ] Fix moc "Undefined interface" errors +- [ ] Verify plugin loading at runtime +- [ ] Run full test suite + +--- + +## References + +- BUILD_RTI Validation Report: `BUILD_RTI_VALIDATION_REPORT.md` +- Migration Continuation Prompt: `DDS_RTI_MIGRATION_CONTINUATION_PROMPT.md` +- Migration Instructions: `../prompts/combined-migration-subfolder-dds-rti-compact.prompt.md` +- RTI Configuration: `../cmake/FindRTI.cmake` +- Build Environment: `../app/Dockerfile` \ No newline at end of file