Adds migration status next stage
Qt6 Migration CI / migrate (push) Waiting to run

This commit is contained in:
torsten committed 2026-08-21 18:33:33 +02:00
1 parent 75f927baec
commit 1995939af3
1 file changed
+204 -164
+204 -164
View File
@@ -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: `<NGLLoggerBootstrap.h>` (nicht `<NGLLogger/NGLLoggerBootstrap.h>`)
- [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 <rti/core/SampleIdentity.hpp>
#include <DDS/DDSConnector/dds_connector.h>
#endif
class MyClass : public QObject
#if BUILD_RTI
, public DDSGeneric::WaitSetHandler::CallbackInterface
#endif
{
#if BUILD_RTI
std::shared_ptr<DDSConnector::DdsConnector> m_ddsConnector;
#endif
public:
#if BUILD_RTI
MyClass(const std::shared_ptr<DDSConnector::DdsConnector>& 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 <cstdint>` 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