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