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

255 lines
7.4 KiB
Markdown

# 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`