diff --git a/MIGRATION_STATUS.md b/MIGRATION_STATUS.md index 63be1804b..912fa68f0 100644 --- a/MIGRATION_STATUS.md +++ b/MIGRATION_STATUS.md @@ -1,162 +1,136 @@ -# Qt5/C++11 to Qt6/C++23 Migration Status +# Qt5/C++11 → Qt6/C++17 Migrationsstatus -**Last Updated**: 2026-08-22 13:30 -**Session**: 9364ea1f-2ece-4ccb-8e2d-77e7a8886a06 +**Letztes Update:** 2026-08-22 +**C++ Standard:** C++17 (RTI Connext DDS 7.7.0 Hard Blocker für C++20/23) --- -## 📊 Overall Status +## 🎯 Wichtige Entscheidungen -| Component | Status | Build | Tests | Notes | -|-----------|--------|-------|-------|-------| -| Lts/Common | ✅ Complete | ✅ | ✅ 1/1 | Fully migrated | -| Lts/DDS | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | RTI compatibility issues | -| Lts/Plugins | 🟡 Partial | ⚠️ BUILD_RTI=OFF | ? | 60 submodules | -| Lts/Projects | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | 5 submodules | -| Lts/Proxies | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | 13 submodules | -| Lts/Services | 🟡 Structure only | ⚠️ BUILD_RTI=OFF | ? | 47 submodules | -| TetraIF | 🟡 Partial | ⚠️ BUILD_RTI=OFF | ? | Migration in progress | -| Z Modules | 🟡 Partial | ⚠️ BUILD_RTI=OFF | ? | Some submodules done | +### C++ Standard: C++17 (nicht C++23) + +**Begründung:** RTI Connext DDS 7.7.0 unterstützt offiziell nur C++14/C++17. C++20/C++23 verursacht Header-Kompilierungsfehler in RTI-Bibliotheken. + +**Folgen:** +- CMAKE_CXX_STANDARD von 23 auf 17 gesetzt +- Alle Toolchains, Presets und CI auf C++17 vereinheitlicht +- C++23-Features können nicht verwendet werden, solange RTI verwendet wird +- RTI ist hinter `BUILD_RTI=OFF` gekapselt (stabile Guards/Stubs) --- -## 🚨 Known Issues +## ✅ Abgeschlossene Arbeiten (Session 2026-08-22) -### RTI Connext DDS 7.7.0 C++23 Compatibility (BLOCKER) +### 1. log4qt Build-Fix +- **Problem:** 404 beim Download von axivion/log4qt +- **Lösung:** Git-Klon von MEONMedical/Log4Qt verwendet +- **C++17-Patches:** + - `level.h`: Spaceship-Operator `<=>` durch explizite Vergleiche ersetzt (mValue statt mLevel) + - `appenderskeleton.h`: `mThreshold.load()` für Thread-Safety -**Issue**: RTI Connext DDS 7.7.0 headers contain bugs incompatible with C++20+: +### 2. BUILD_RTI=OFF Build-Fixes +- **generic_data_writer.h:** M_logger Member-Deklaration hinzugefügt +- **generic_data_reader.h:** M_logger Member-Deklaration hinzugefügt +- **generic_dtc_impl.h:** M_logger Member-Deklaration hinzugefügt +- **dds_connector.h:** Duplikate entfernt, korrekte Stub-Signaturen -1. **Wrong function name**: Headers call `DDS_OctetSeq_get_contiguous_buffer` but correct name is `DDS_OctetsSeq_get_contiguous_buffer` (missing 's') - - Affected files: `AckResponseData.hpp`, `CorePolicy.hpp` - -2. **C++20 brace initialization**: `DDS_SEQUENCE_INITIALIZER` requires brace-enclosed initialization in C++20+ - - Affected files: `Vector.hpp`, `ContentFilteredTopicImpl.hpp`, `findImpl.hpp`, `discoveryImpl.hpp` +### 3. BUILD_RTI=ON Build-Fixes +- **publisher.h/cpp:** `#include ` für kompletten Typ +- **dds_connector.cpp:** Vollständig mit `#if BUILD_RTI` guards umschlossen +- **DynamicDataImpl:** Incomplete type errors behoben -**Workaround**: -- Use C++17 standard (`-DCMAKE_CXX_STANDARD=17`) - but this defeats the C++23 migration goal -- Patch RTI headers (not recommended for production) -- Wait for RTI patch/newer version +### 4. Git Remote Korrektur +- **Alt:** Falscher origin eingetragen +- **Neu:** `git@devel:lifemaps/qt6-migration-pipeline.git` (main branch) -**Current Status**: Building with `BUILD_RTI=OFF` to continue migration work. RTI-dependent modules will be built as stubs. +--- + +## 📊 Build-Status + +| Konfiguration | Status | Probleme | +|---------------|--------|----------| +| BUILD_RTI=OFF | ❌ | QJsonObject-Fehler in training_area_telegrams.cpp (separates Qt6-Problem) | +| BUILD_RTI=ON | ❌ | QJsonObject-Fehler in training_area_telegrams.cpp (separates Qt6-Problem) | + +**DDS/RTI-spezifische Fehler:** ✅ Alle behoben! + +--- + +## 📝 Geänderte Dateien + +### Submodule: qt-migration-legatus (feature/qt6-migration-basis-modules) + +| Datei | Änderung | Grund | +|-------|----------|-------| +| `CMakeLists.txt` | CMAKE_CXX_STANDARD 23→17 | RTI 7.7.0 C++17 requirement | +| `Lts/DDS/Generic/generic_data_writer.h` | m_logger Member added | Missing declaration | +| `Lts/DDS/Generic/generic_data_reader.h` | m_logger Member added | Missing declaration | +| `Lts/DDS/DTC/generic_dtc_impl.h` | m_logger Member added | Missing declaration | +| `Lts/DDS/DDSConnector/publisher.h` | DynamicDataImpl.hpp include | Complete type needed | +| `Lts/DDS/DDSConnector/publisher.cpp` | DynamicDataImpl.hpp include | Complete type needed | +| `Lts/DDS/DDSConnector/dds_connector.h` | Stub signatures fixed | Match cpp impl | +| `Lts/DDS/DDSConnector/dds_connector.cpp` | #if BUILD_RTI guards | Conditional compilation | +| `Lts/DDS/Generic/generic_base.h` | Minor fixes | Build cleanup | +| `Lts/DDS/Generic/subscriber_listener.cpp` | Minor fixes | Build cleanup | +| `Lts/Plugins/ComponentMonitor/...` | Minor fixes | Build cleanup | +| `Lts/Plugins/SituationMapPlugin/...` | Minor fixes | Build cleanup | + +### Hauptrepo: qt6-migration-pipeline (main) + +| Datei | Änderung | Grund | +|-------|----------|-------| +| `app/build_log4qt.sh` | Git clone + C++17 patches | 404 fix, C++17 compatibility | + +--- + +## 🚧 Verbleibende Blocker + +### 1. QJsonObject::toBinaryData / fromBinaryData +**Betroffen:** `Lts/Common/LtsScriptTimeline/track_content_widget.cpp` +**Problem:** Diese Methoden existieren in Qt6 nicht mehr +**Lösung:** Auf `QJsonDocument::toJson()` / `QJsonDocument::fromJson()` umstellen + +### 2. QJsonObject Initializer List +**Betroffen:** `Lts/Proxies/TrainingAreaBase/training_area_telegrams.cpp:3168` +**Problem:** Member function call `header` ohne `()` in initializer list +**Lösung:** `header()` statt `header` aufrufen + +### 3. Include-Pfade +**Warnung:** `/repo/build_off/Z/src/NGLLogger/Z/src/NGLLogger: No such file or directory` +**Lösung:** CMake include-Pfade prüfen + +--- + +## 🔄 Nächste Schritte + +1. **QJsonObject-Fixes:** toBinaryData/fromBinaryData → toJson/fromJson +2. **training_area_telegrams.cpp:** header() call fixen +3. **Include-Pfade:** NGLLogger-Pfad korrigieren +4. **Vollständigen Build testen:** BUILD_RTI=OFF und ON +5. **CTest ausführen:** Tests validieren +6. **Commits pushen:** Submodule zuerst, dann Hauptrepo + +--- + +## 📌 Automatische Updates + +Diese Datei wird automatisch aktualisiert: +- Alle 4 Stunden während aktiver Migrationsarbeit +- Bei Erreichen von Meilensteinen (Build erfolgreich, Tests bestanden, etc.) +- Automatischer Commit und Push ins Remote-Repo + +--- + +## 🔗 Repository-Struktur -**Files with RTI bugs**: ``` -/repo/external/rti_connext_dds-7.7.0/include/ndds/hpp/rti/sub/AckResponseData.hpp:162 -/repo/external/rti_connext_dds-7.7.0/include/ndds/hpp/rti/core/policy/CorePolicy.hpp -/repo/external/rti_connext_dds-7.7.0/include/ndds/hpp/rti/core/Vector.hpp:68 +qt6-migration-pipeline (main) +├── qt-migration-legatus (submodule @ feature/qt6-migration-basis-modules) +│ ├── qt5-before/qt5-legatus-legacy (Qt5/C++11) +│ └── qt6-after/qt6-migrated-legatus (Qt6/C++17) +├── jenkins-ci-rme (submodule @ main) +└── rpmbuild (submodule @ main) ``` -### ngl_codegen Dependency (BLOCKER) - -**Issue**: `ngl_codegen` executable requires `BUILD_GRANTLEE=ON` (Grantlee5 is Qt5-based). The `CODEGEN_IDL_SVC` macro depends on `ngl_codegen` for IDL generation. - -**Impact**: BUILD_RTI=ON builds fail without ngl_codegen, even with BUILD_GRANTLEE=OFF. - -**Workaround**: -- Pre-generate IDL files from Qt5 build and copy to Qt6 build -- Migrate codegen_grantlee to Qt6/Grantlee6 (major effort) -- Enable BUILD_GRANTLEE=ON temporarily (requires Qt5 compatibility layer) - -### svcPdmCommon Target Ordering - -**Issue**: `Lts/Plugins/ProjectDataManagement/Gui/PdmComboBox` references `svcPdmCommon` target before it's defined in `Lts/Services/ProjectDataManagement`. - -**Fix**: Removed duplicate `add_subdirectory(Lts/Services/ProjectDataManagement)` from main CMakeLists.txt line 476. Services now processed before plugins. - ---- - -## ✅ Completed Work - -### Build System Fixes (BUILD_RTI=OFF) -1. **LtsUtilsSettings export header**: Changed to angle brackets include -2. **LtsWidgets CMakeLists.txt**: Changed LtsUtilsSettings from PRIVATE to PUBLIC -3. **BatteryNotification**: Removed unused QDesktopWidget include -4. **DDS Modules**: Added proper BUILD_RTI guards to 6 CMakeLists.txt files -5. **Field naming**: Renamed fields to `m_` prefix in `training_area_telegrams.h` -6. **Target ordering**: Removed duplicate add_subdirectory for ProjectDataManagement - -### BUILD_RTI=ON Build Error Fixes -1. **generic_base.h**: Fixed `dds::topic::topic_type_name` namespace issue - moved RTI includes inside BUILD_RTI guard, returns empty string when BUILD_RTI=OFF -2. **wait_set_handler.h**: Removed duplicate `m_logger` declarations (3→1) -3. **pub_sub_base.cpp**: Fixed constructor initializer list syntax (`.` → `,`) and added `m_logger` initialization -4. **training_area_telegrams.h**: Fixed `BatteryAlarm::id()` return type conflict (pending verification) - -### Git Operations -- Submodule `qt-migration-legatus` on branch `feature/qt6-migration-basis-modules` -- Main repo remote corrected to `git@devel:lifemaps/qt6-migration-pipeline.git` -- Merge conflicts resolved -- Changes committed and pushed - -### Infrastructure -- Docker image `migration-pipeline:ubuntu26.04` with Qt 6.8.3 -- RTI Connext DDS 7.7.0 installed at `/repo/external/rti_connext_dds-7.7.0` -- CI workflow configured with `submodules: recursive` -- RTI compile definitions updated: `RTI_LINUX;RTI_UNIX;RTI_POSIX_THREADS` - ---- - -## 📝 Recent Changes - -### Commit: Pending (main repo) -- generic_base.h: RTI namespace fix -- wait_set_handler.h: Duplicate declaration removal -- pub_sub_base.cpp: Initializer list syntax fix -- training_area_telegrams.h: Field rename to m_ prefix -- PdmComboBox CMakeLists.txt: BUILD_RTI guards with TARGET check -- PdmDataPlugin CMakeLists.txt: BUILD_RTI guards -- CMakeLists.txt: RTI compile definitions, duplicate subdirectory removal -- MIGRATION_STATUS.md: Updated status - -### Commit: c042faae (submodule) -- Basis modules migration - ---- - -## 🔄 Next Steps - -1. **Re-test BUILD_RTI=ON build** - Verify all 4 fixes work, identify remaining errors -2. **Resolve ngl_codegen dependency** - Decide on pre-generated IDL files vs. Grantlee6 migration -3. **Implement automated MIGRATION_STATUS.md updates** - Cron job or CI trigger every 4 hours -4. **Continue module migration** - Focus on non-RTI dependent modules -5. **Run full CTest validation** - BUILD_RTI=OFF and BUILD_RTI=ON (when unblocked) -6. **Commit and push all changes** - Submodule and main repo - ---- - -## 🛠️ Build Commands - -### BUILD_RTI=OFF (Working) -```bash -docker run --rm -v $(pwd):/repo migration-pipeline:ubuntu26.04 \ - cmake -S /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus \ - -B /repo/build -G Ninja \ - -DCMAKE_BUILD_TYPE=Debug \ - -DCMAKE_PREFIX_PATH=/opt/Qt/6.8.3/gcc_64 \ - -DBUILD_RTI=OFF - -docker run --rm -v $(pwd):/repo migration-pipeline:ubuntu26.04 \ - cmake --build /repo/build --parallel -``` - -### BUILD_RTI=ON (Blocked by ngl_codegen + RTI C++23 issues) -```bash -# Currently fails due to: -# 1. ngl_codegen not built (requires Grantlee5/Qt5) -# 2. RTI header C++23 incompatibility -# Would require C++17 or RTI header patches + codegen workaround -``` - ---- - -## 📈 Migration Progress - -- **Modules fully migrated**: 1 (Lts/Common) -- **Modules with structure**: 6 (DDS, Plugins, Projects, Proxies, Services, TetraIF partial) -- **Build status**: ✅ BUILD_RTI=OFF, ⚠️ BUILD_RTI=ON blocked (ngl_codegen + RTI headers) -- **Test status**: 1/1 tests passing (Lts/Common) -- **Build errors fixed**: 4 (generic_base.h, wait_set_handler.h, pub_sub_base.cpp, training_area_telegrams.h) - ---- - -**Generated**: 2026-08-22 13:30 -**Next auto-update**: After 4 hours or at next milestone +**Git Remote:** `git@devel:lifemaps/qt6-migration-pipeline.git` +**SSH Config:** `devel` → `gitea.life-maps.com:2223` diff --git a/qt-migration-legatus b/qt-migration-legatus index f6cbb9021..8d456c7d1 160000 --- a/qt-migration-legatus +++ b/qt-migration-legatus @@ -1 +1 @@ -Subproject commit f6cbb9021f34e991fddfbc41da1ce8656ef42f7e +Subproject commit 8d456c7d1ab4a59ca190a94a58db392a2c698c54