# Qt6 Migration Status ## Session: BUILD_RTI Guards und Submodule-Migration ### 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 --- ### Durchgeführte Änderungen (2026-08-18) #### 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 #### 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) #### 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 #### 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 #### 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 #### 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 #### 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 ### Build-Strategie #### 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 #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 }; ``` ### Nächste Schritte #### 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 #### 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 #### 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 --- ### 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