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

7.4 KiB

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

  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:

    find qt-migration-legatus/qt5-before -name "pdm.idl"
    
  2. Check ProjectDataManagement directories:

    ls -la Lts/Plugins/ProjectDataManagement/
    ls -la Lts/Services/ProjectDataManagement/
    
  3. Check ddsfts CMakeLists.txt for IDL references:

    grep -n "pdm" Lts/DDS/FTS/CMakeLists.txt
    grep -n "IDL" Lts/DDS/FTS/CMakeLists.txt
    
  4. Search for pdm references in code:

    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

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

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