From 1995939af36e3511ab360c42fae79b4679c74986 Mon Sep 17 00:00:00 2001 From: twi-devel Date: Fri, 21 Aug 2026 18:33:33 +0200 Subject: [PATCH] Adds migration status next stage --- MIGRATION_STATUS.md | 368 ++++++++++++++++++++++++-------------------- 1 file changed, 204 insertions(+), 164 deletions(-) diff --git a/MIGRATION_STATUS.md b/MIGRATION_STATUS.md index cab9090ac..a316e8416 100644 --- a/MIGRATION_STATUS.md +++ b/MIGRATION_STATUS.md @@ -1,187 +1,227 @@ -# Qt6 Migration Status Report +# Qt6 Migration Status -## Aktueller Stand (2026-08-21 15:09 CET) +## Session: BUILD_RTI Guards und Submodule-Migration -### 🏗️ Build-Fortschritt -- **Gesamt-Targets**: 1854 -- **Aktueller Fortschritt**: 114/1854 (6%) -- **Build-System**: Ninja, Debug, BUILD_RTI=OFF -- **Qt-Version**: Qt 6.10.2 (fest, kein Versions-Mix) -- **C++-Standard**: C++23 -- **Build-Umgebung**: Docker-Container (migration-pipeline:ubuntu26.04-qt6) +### Datum: 2026-08-21 (Letztes Update: 18:14 Uhr) + +### Zusammenfassung +BUILD_RTI guards für alle RTI Connext DDS und DDSConnector Dependencies implementiert. Submodule-Struktur eingerichtet. Migration auf Qt 6.10.2 und C++23 läuft. + +### Aktuelle Repository-Struktur + +``` +/home/torsten/swy/sandbox/ +├── .git (Workspace-Root) +├── qt-migration-legatus/ (Submodule: feature/qt6-migration-basis-modules @ d176b5e) +│ ├── qt5-before/ +│ │ └── qt5-legatus-legacy/ (Qt5/C++11 Legacy-Code, nested submodule) +│ └── qt6-after/ +│ └── qt6-migrated-legatus/ (Qt6/C++23 migrierter Code) +├── jenkins-ci-rme/ (Eigenes Repo) +└── rpmbuild/ (Eigenes Repo) +``` + +### SSH/Signing Konfiguration + +**SSH-Config (~/.ssh/config)**: +``` +Host devel + Hostname gitea.life-maps.com + Port 2223 + User git + IdentityFile ~/.ssh/twi-devel.gitea +``` + +**Allowed Signers** (`qt-migration-legatus/ci/allowed_signers`): +``` +torsten.wierschin@life-maps.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMV8yH39fMOQE5BeCsxI8RMUXbDBJvRuS5phTTfrXF0H +``` + +### Durchgeführte Änderungen (2026-08-21) + +#### GuezMinelayerProcessing Namespace Fix +- **handler_minelayer_data.cpp**: Namespace-Schließung korrigiert, `#endif // BUILD_RTI` nach `} // namespace GuezMinelayerProcessing` hinzugefügt + +#### Submodule-Integration +- Migrationsskripte auf Submodule-Pfade aktualisiert (`/repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus`) +- Docker-Image: `migration-pipeline:ubuntu26.04` (Ubuntu 26.04, Qt 6.10.2, C++23) +- CI-Workflow mit `submodules: recursive` konfiguriert --- -## ✅ Erfolgreich abgeschlossene Arbeiten +### Durchgeführte Änderungen (2026-08-18) -### 1. Build-Infrastructure -- [x] Docker-Build-Infrastructure validiert -- [x] CMake-Cache-Permission-Problem behoben (als root löschen) -- [x] CMake-Konfiguration erfolgreich abgeschlossen -- [x] NGLLogger Export-Macro konfiguriert -- [x] GuezNasat Include-Pfade konfiguriert +#### Core Header Fixes +- **core_dtc.h**: Namespace von `Core::` zu `DDS::Core::` korrigiert (kritisch für Include-Pfad-Priorität) +- **core.hpp**: + - GeoPosition2D Struktur hinzugefügt (mit impliziter GeoPosition-Konversion) + - operator<< für ostream-Output hinzugefügt + - setter-Methodien (z(), lon(), lat()) für Qt5-Kompatibilität -### 2. Plugin-System Migration (43 Module) -| Kategorie | Anzahl | Status | -|-----------|--------|--------| -| DataPlugins | 38 | ✅ AUTOMOC ON + Q_INTERFACES() entfernt | -| Plugin-Interfaces | 5 | ✅ AUTOMOC ON | -| **Gesamt** | **43** | ✅ Fertig | +#### LtsCoordinate Fixes +- **lts_coordinate.h**: geoPosition2D() gibt jetzt by-value zurück (keine const-Referenz auf temporäres Objekt) +- **lts_coordinate.h**: rz() gibt m_geo.altitude direkt zurück (kein rvalue-binding Problem) -**Wichtigste Erkenntnis**: Q_INTERFACES() ist inkombatibel mit QObject-Vererbung in Qt6 - muss entfernt werden. +#### Logger Initialisierung Fixes +- **lts_web_socket_client.h**: m_logger zu WebSocketHelper-Klasse hinzugefügt +- **lts_web_socket_client.cpp**: m_logger im Constructor-Initializer-List initialisiert +- **lts_serial_port_querry.h**: m_logger Redeklaration bereinigt +- **lts_serial_port_querry.cpp**: m_logger im Constructor-Initializer-List initialisiert -### 3. LtsTimelineClassic Module -- [x] Export-Macro konfiguriert (generate_export_header) -- [x] AUTOUIC_SEARCH_PATHS für Ui-Verzeichnis hinzugefügt -- [x] BUILD_RTI-Guard entfernt (immer benötigtes Target) -- [x] Target-Abhängigkeit für Tests hinzugefügt -- [x] Include-Pfad in test_abstracttimelinemodel.cpp korrigiert +#### GuezMinelayerProcessing (GMP) BUILD_RTI Guards +- **settings.h**: Include-Pfad von svcgmpserver_export.h zu gmp_export.h korrigiert +- **logger.h**: Include-Pfad von svcgmpserver_export.h zu gmp_export.h korrigiert +- **initialization.h**: + - DDSConnector Include mit BUILD_RTI guard + - HandlerMinelayerData Forward-Deklaration conditional + - initialize() Parameter conditional mit BUILD_RTI +- **initialization.cpp**: + - Constructor/Destructor Member-Initialisierung conditional + - Q_UNUSED für ddsConnector Parameter wenn !BUILD_RTI +- **handler_minelayer_data.h**: + - AreaEffectSimulation Include mit BUILD_RTI guard + - Vererbung von MineAreaModifyFromCtaDataReplyHandler conditional + - onMineAreaModifyFromCtaDataReply() Methode conditional + - m_aesFtc Member-Variable conditional +- **handler_minelayer_data.cpp**: + - aes_ftc.h Include mit BUILD_RTI guard + - m_aesFtc Initialisierung conditional + - AES-Ftc Usage in init() conditional + - Signal-Connections conditional +- **dds_handler.h**: + - DDSConnector Include conditional + - Constructor-Parameter conditional + - m_ddsConnector Member conditional + - Overloaded Constructor für BUILD_RTI/non-BUILD_RTI +- **dds_handler.cpp**: + - Constructor-Implementierung conditional + - init() Methode mit BUILD_RTI guard + - Q_UNUSED für nicht-genutzte Parameter -### 4. NGLLogger Integration -- [x] Export-Macro Include-Pfad im Haupt-CMakeLists.txt (`${CMAKE_BINARY_DIR}/Z/src/NGLLogger`) -- [x] Source-Pfad zu globalen Include-Pfaden hinzugefügt -- [x] Include-Pfad korrigiert: `` (nicht ``) -- [x] API-Change: `getLogger()` → `getNGLRootLogger()` in 4 Dateien - - Event.cpp - - Event.h - - AbstractTimelineModel.cpp - - TimelineWidget.cpp - - TimelineIndicator.cpp +#### DDS/FTS BUILD_RTI Guards +- **connext.h**: + - Alle RTI DDS Includes mit BUILD_RTI guards + - Replier und Requester Constructor-Syntaxfehler behoben +- **generic_fts.h**: RTI Includes (rti/core/SampleIdentity.hpp) mit BUILD_RTI guards +- **generic_fts_internal.h**: + - WaitSetHandler::CallbackInterface Vererbung conditional + - dataAvailable() Methode conditional -### 5. Qt6 API-Changes -| Datei | Change | Status | -|-------|--------|--------| -| TimelineView.cpp | `angle()` → `angleDelta()` | ✅ | -| TimelineView.cpp | `globalPos()` → `globalPosition().toPoint()` | ✅ | -| lts_msec_date_time_edit.cpp | `fromMSecsSinceEpoch()` deprecated (Warnung akzeptiert) | ⚠️ | -| lts_text_editor.cpp | `setFontFamily()` deprecated (Warnung akzeptiert) | ⚠️ | +#### RoutingServiceNG BUILD_RTI Guards +- **connection.h**: DDSConnector Include mit BUILD_RTI guard +- **connection.cpp**: Vollständig mit BUILD_RTI guards umschlossen (Zeile 13-188) +- **session.h**: + - Connection Member-Variablen conditional + - Methoden conditional +- **session_handler.cpp**: Vollständig mit BUILD_RTI guards umschlossen +- **main_handler.h**: DDSConnector Member/Methoden conditional +- **main_handler.cpp**: Vollständig mit BUILD_RTI guards umschlossen +- **partition_handler.h**: DDSConnector Member conditional +- **partition_handler.cpp**: Vollständig mit BUILD_RTI guards umschlossen -### 6. Event-Constructor Migration -**Problem**: Event-Klasse hat nur 14-Argument Constructor, keinen Default-Constructor (wegen Referenz-Member `m_logger`) +#### FilterManagement BUILD_RTI Guards +- **flt_dts.h**: RTI und DDSConnector Includes mit BUILD_RTI guards +- **flt_fts.h**: RTI Includes (rti/core/SampleIdentity.hpp) mit BUILD_RTI guards -**Betroffene Test-Dateien**: -- [x] test_event.cpp (2 Tests: DurationCalculation, VisibilityToggle) -- [x] test_eventgraphic.cpp (3 Tests) -- [x] test_eventtools.cpp (2 Tests) -- [x] test_eventlist.cpp (3 Tests, 6 Constructor-Aufrufe) +### Build-Strategie -**Constructor-Signatur**: +#### BUILD_RTI Macro +- Wird über CMake-Option `-DBUILD_RTI=ON/OFF` gesteuert +- Wenn OFF: Alle RTI Connext DDS und DDSConnector Dependencies werden ausgeschlossen +- Wenn ON: Vollständige Funktionalität mit externen Dependencies + +#### Conditional Compilation Pattern ```cpp -Event(quint64 uniqueId, quint32 typeId, qint64 startTime, qint64 endTime, - quint32 playerId, quint32 partyId, quint64 equipmentId, - const QString& path, EventPaintFunc paintFunc, - const QColor& paintColor, const QVariant& detailData, - quint64 subEventId, const QPointF& pos, quint64 session) +#if BUILD_RTI +#include +#include +#endif + +class MyClass : public QObject +#if BUILD_RTI + , public DDSGeneric::WaitSetHandler::CallbackInterface +#endif +{ +#if BUILD_RTI + std::shared_ptr m_ddsConnector; +#endif + +public: +#if BUILD_RTI + MyClass(const std::shared_ptr& ddsConnector); +#else + MyClass(); +#endif +}; ``` -### 7. GuezNasat Module -- [x] Include-Pfad: `LtsUtilsCore/data_modification_enum.h` → `LtsUtils/LtsUtilsCore/data_modification_enum.h` -- [x] test_item.cpp: Include für gna_dtc.h hinzugefügt -- [x] **operator<< ambiguous overload Fix**: friend-Deklaration in NasatAircraft und NasatAircraftParticipant -- [x] operator<< aus globalem Scope in Namespace GuezNasat verschoben (ADL-konform) +### Nächste Schritte -### 8. Enum- und Type-Fixes -- [x] avm_enums.hpp: `#include ` für int32_t -- [x] test_asm_enums.cpp: enum class Vergleiche mit static_cast -- [x] test_asm_dtc.cpp: Include für asm_dtc.h hinzugefügt +#### Priorität 1: Build-Environment fixen (2026-08-21) +- [ ] Docker-Permission-Issue lösen (build-Verzeichnis hat root-Ownership) +- [ ] CMake-Configure im Container erfolgreich abschließen +- [ ] Build ohne Permission-Errors validieren -### 9. Export-Header Problem behoben (aus vorheriger Session) -- 87 CMakeLists.txt von `NGL_ADD_LIBRARY` auf `NGL_ADD_LIBRARY2` konvertiert -- 44 Source-Dateien: Export-Header Include-Pfade korrigiert -- Root Cause: NGL_ADD_LIBRARY2 benötigt für GENERATE_EXPORT_HEADER +#### Priorität 2: Lts-Module fertig migrieren +- [ ] Lts/DDS vollständig migrieren und testen +- [ ] Lts/Plugins: Kernmodule priorisieren (erste 10 Untermodule) +- [ ] Lts/Proxies: Basis-Proxies migrieren +- [ ] Lts/Services: GuezMinelayerProcessing validieren, weitere Services -### 10. DDS-Stub-Header generiert (aus vorheriger Session) -- 81 DDS-Stub-Header erstellt (`*_dtc.h`, `*_fts.h`, `*_dts.h`, `*_ftc.h`) -- Include-Pfade korrigiert mit PREFIX_TO_MODULE Mapping -- Ermöglicht Build ohne RTI DDS Codegenerierung - -### 11. FilterManagement DDS-Stubs (aus vorheriger Session) -- flt_fts.h: AesFilter und AesFilterUpdateRequestHandler -- flt_dts.h: Dts und Fts Interface-Classes -- flt_dts.cpp: Stub-Implementation -- flt_ftc.h: Ftc Interface mit ReplyHandler (neu erstellt) - -### 12. InfrastructureManagement DDS-Stubs (aus vorheriger Session) -- ism.hpp, ism_enums.hpp Stub-Header erstellt -- IsmShared Kompilierung erfolgreich - -### ⚠️ Aktuelle Build-Situation - -**NGLLogger**: ✅ Baut erfolgreich ohne RTI - -**FilterManagement**: ⚠️ Benötigt BUILD_RTI=ON -- FltDataPlugin hängt von `svcFltClient` ab -- svcFltClient wird nur mit BUILD_RTI=ON gebaut -- RTI Connext ist in Ubuntu 26.04 nicht installiert - -**Lösungsoptionen**: -1. RTI Connext in Docker-Image installieren (aufwändig, Lizenz) -2. BUILD_RTI=OFF und FilterManagement-Plugins temporär deaktivieren -3. svcFltClient als Header-Only Library behandeln (wenn möglich) - -### 📝 Git Submodule Status - -**Frage**: Warum ist git submodule im HEAD detach state? - -**Antwort**: Das Submodule ist **NICHT** im detached HEAD state! - -``` -$ git submodule status -+010f91928acfe8e775acdacc5eb0b38f613fa3e5 qt-migration-legatus (heads/feature/qt6-migration-basis-modules) -``` - -- **Branch**: `feature/qt6-migration-basis-modules` ✅ -- **Commit**: 010f919 (lokale Änderungen, noch nicht gepusht) -- **Das `+` Zeichen**: Zeigt uncommitted changes im Submodule an - -### 🔄 Nächste Schritte - -1. **FilterManagement Build-Strategie klären** - - Option A: BUILD_RTI=ON mit RTI-Installation - - Option B: FilterManagement-Plugins temporär ausschließen - - Option C: svcFltClient als Header-Only behandeln - -2. **Tests erstellen** (gemäß combined-migration-compact.prompt.md) - - Für migrierte Module: Lts/Common, NGLLogger - - Teststruktur: `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests/` - -3. **./rpmbuild und ./jenkins migrieren** - - Von openSUSE nach Ubuntu 26.04 - - Dockerfiles anpassen - - Jenkins-Pipelines aktualisieren - -4. **Vollständige Migration fortsetzen** - - Z-Module → TetraIF → Lts/Services → Lts/Proxies → Lts/Plugins → Lts/Projects - -### 📊 Build-Statistik - -| Modul | Build-Status | RTI benötigt | Notes | -|-------|--------------|--------------|-------| -| NGLLogger | ✅ Erfolg | ❌ Nein | Basis-Logging | -| IsmShared | ✅ Erfolg | ❌ Nein | InfrastructureManagement | -| FltDataPlugin | ⚠️ Pending | ✅ Ja | Benötigt svcFltClient | -| svcFltCommon | ⚠️ Pending | ✅ Ja | BUILD_RTI=ON required | -| svcFltClient | ⚠️ Pending | ✅ Ja | BUILD_RTI=ON required | -| svcFltServer | ⚠️ Pending | ✅ Ja | BUILD_RTI=ON required | - -### 🛠️ Wichtige Files - -**Stub-Header erstellt**: -- `/include/FilterManagement/flt_fts.h` -- `/include/FilterManagement/flt_dts.h` -- `/include/FilterManagement/flt_dts.cpp` -- `/include/FilterManagement/flt_ftc.h` (neu) -- `/include/InfrastructureManagement/ism.hpp` -- `/include/InfrastructureManagement/ism_enums.hpp` - -**Skripte erstellt**: -- `fix_add_library2.py` (87 Fixes) -- `fix_export_includes.py` (44 Fixes) -- `create_dds_stubs.py` (81 Header) -- `move_dds_headers.py` (Pfad-Korrektur) -- `remove_logger_members.py` (~100+ Dateien) -- `fix_logging_macros.py` (variadische Parameter) +#### Priorität 3: Vollständige Validierung +- [ ] `./qt-migration-legatus/final-migration/run_final_migration.sh --jobs 6` erfolgreich +- [ ] CTest alle Tests bestanden +- [ ] Policy-Check ohne Errors +- [ ] Signierte Commits erstellen --- -**Empfehlung**: User sollte entscheiden ob RTI Connext installiert werden soll oder ob FilterManagement-Plugins temporär aus dem Build ausgeschlossen werden können. +### Nächste Schritte (Original-Plan 2026-08-18) + +1. **Build validieren**: Laufender Build im Docker-Container muss erfolgreich abschließen +2. **Reorder-Warnings beheben**: Member-Deklarationsreihenfolge in Headern anpassen +3. **Tests ausführen**: ctest im Docker-Container +4. **Commits erstellen**: Signierte Commits für alle Änderungen +5. **MIGRATION_STATUS.md**: Nach Build-Erfolg finalisieren + +### Bekannte Issues + +- **GeoPosition2D**: Separate Struktur notwendig, da Qt5-Code setter-Methodien (z(), lon(), lat()) erwartet +- **Include-Pfad-Priorität**: `include/Core/core_dtc.h` wird vor `DDS/Core/core_dtc.h` gefunden → beide müssen konsistenten Namespace haben +- **m_logger Referenzen**: Müssen im Constructor-Initializer-List initialisiert werden +- **QApplication in Tests**: qApp ist Macro in Qt6 → unique_ptr für lokale Instanz + +### Git-Repository Status + +#### Repository-Struktur +``` +./ (workspace root) +├── .git (workspace repo) +├── qt-migration-legatus/ (submodule @ feature/qt6-migration-basis-modules) +│ ├── .git +│ └── qt5-before/qt5-legatus-legacy/ (nested submodule) +│ └── .git +├── jenkins-ci-rme/ (submodule) +│ └── .git +└── rpmbuild/ (submodule) + └── .git +``` + +#### Commit-Policy +- Strikte Trennung der 5 Git-Repositorien +- Signierte Commits erforderlich (Key in `qt-migration-legatus/ci/allowed_signers`) +- SSH-Host: devel (gitea.life-maps.com:2223) + +#### Aktueller Branch Status (2026-08-21) +- **Branch**: `feature/qt6-migration-basis-modules` +- **Status**: Synchron mit origin (keine Merge-Konflikte) +- **Geänderte Dateien**: ~35+ Dateien (CMakeLists.txt, Core/, DDS/, Lts/, etc.) + +### Qt-Version +- **Zielversion**: Qt 6.10.2 (strikt, kein Versionsmix) +- **Docker-Image**: migration-pipeline:ubuntu26.04 (wird auf Qt 6.10.2 aktualisiert) + +--- + +**Letztes Update**: 2026-08-21 18:14 Uhr +**Status**: BUILD_RTI guards implementiert, Submodule synchron, Build-Validierung ausstehend