Provides clear handoff infos for continuing migration work with resolution strategies
This commit is contained in:
3 files changed
+694
No files matched your search
@@ -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<S>()` 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 <dds/sub/LoanedSamples.hpp>
|
||||||
|
#include <dds/sub/SampleInfo.hpp>
|
||||||
|
#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`
|
||||||
@@ -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
|
||||||
@@ -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`
|
||||||
Reference in new issue
Block a user