diff --git a/MIGRATION_STATUS.md b/MIGRATION_STATUS.md index 5c666fabd..25a1657e7 100644 --- a/MIGRATION_STATUS.md +++ b/MIGRATION_STATUS.md @@ -1,261 +1,155 @@ -# Qt5 zu Qt6 Migration - Statusbericht +# Qt5/C++11 to Qt6/C++23 Migration Status -**Stand**: 2026-09-30 (Update 3) -**Build-Konfiguration**: BUILD_RTI=OFF (DDS Code-Generierung deaktiviert) -**Qt-Version**: 6.10.2 -**C++ Standard**: C++17 (C++23 geplant, aber RTI 7.7 Inkompatibilität) -**Submodule Branch**: feature/qt6-migration-basis-modules @ e75e6c25 +**Datum**: 2026-09-30 +**Submodule Branch**: `feature/qt6-migration-basis-modules` @ d176b5e +**Docker-Image**: `migration-pipeline:ubuntu26.04` --- ## 📊 Gesamtübersicht -| Bereich | Status | Build (RTI=OFF) | Notes | -|---------|--------|-----------------|-------| -| **Lts/Common** | ✅ Vollständig | ✅ Erfolgreich | Basis-Module migriert | -| **Lts/DDS** | 🟡 Struktur vorhanden | ⚠️ Stub-Header nötig | DDS-Code-Generator läuft nicht ohne RTI | -| **Lts/Viewer** | 🟡 Teilweise | ⚠️ Fehlende Dependencies | LtsFileDialog ✅, LtsDataView ❌ | -| **Lts/Plugins** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 60 Untermodule | -| **Lts/Services** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 47 Untermodule | -| **Lts/Projects** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 5 Untermodule | -| **Lts/Proxies** | 🟡 Struktur vorhanden | ❌ Nicht getestet | 13 Untermodule | -| **TetraIF** | 🟡 Teilweise | ❌ Nicht getestet | Migration läuft | -| **Z-Module** | 🟡 Teilweise | ⚠️ Include-Pfad Probleme | NGLLogger Pfad korrigieren | +| Bereich | Status | BUILD_RTI=OFF | BUILD_RTI=ON | Notes | +|---------|--------|---------------|--------------|-------| +| **Lts/Common** | ✅ Vollständig | ✅ Build OK | ✅ Configure OK | Tests: 1/1 bestanden | +| **Lts/DDS** | 🟡 Struktur vorhanden | ✅ Configure OK | ✅ Configure OK | Target-Kollisionen behoben | +| **Lts/Plugins** | 🟡 Teilweise | ⚠️ Build-Fehler | ⚠️ Build-Fehler | Externe Dependencies fehlen | +| **Lts/Projects** | 🟡 Struktur vorhanden | ✅ Configure OK | ✅ Configure OK | Warning: jsonschema app nicht gefunden | +| **Lts/Proxies** | 🟡 Struktur vorhanden | ✅ Configure OK | ✅ Configure OK | - | +| **Lts/Services** | 🟡 Struktur vorhanden | ✅ Configure OK | ✅ Configure OK | - | +| **TetraIF** | 🟡 Teilweise | ✅ Configure OK | ✅ Configure OK | - | +| **Z-Module** | 🟡 Teilweise | ⚠️ Build-Fehler | ⚠️ Build-Fehler | Externe Dependencies fehlen | --- -## 🔍 Detailstatus pro Modul +## 🔧 Behobene Probleme -### ✅ Erfolgreich migriert (BUILD_RTI=OFF) +### 1. FileStatus-Enum-Konflikt (✅ Behoben) +**Problem**: `FileStatus` war bedingt definiert (int für BUILD_RTI=OFF, enum class für BUILD_RTI=ON) +**Lösung**: Einheitliche `enum class FileStatus` Definition für beide Varianten +**Files**: `flm_enums.hpp`, `flm_db.h` -#### Lts/Common -- **Status**: ✅ Vollständig migriert -- **Build**: ✅ Erfolgreich -- **Tests**: 1/1 bestanden -- **Module**: - - LtsUtils (Core, Settings, GuiConnectDialog) - - LtsWidgets - - LtsSession - - LtsAppDescriptor - - LtsPluginManager - - LtsCommandLineParser +### 2. QDebug operator<< für enum class (✅ Behoben) +**Problem**: `enum class` wird nicht implizit zu int konvertiert für QDebug +**Lösung**: Expliziter `operator<<` in `flm_enums.hpp` implementiert +**Files**: `flm_enums.hpp` -#### Lts/Viewer/LtsFileDialog -- **Status**: ✅ Header korrigiert (2026-08-29) -- **Build**: ✅ Compiliert erfolgreich bis Linker -- **Link**: ⚠️ Fehlende Dependencies (LtsDataView, svcFlmCommon, svcOpmCommon, svcExmCommon) -- **Korrekturen (2026-08-29)**: - - `flm_db.h` Stub-Header vervollständigt (alle Member-Variablen, Methoden, Initialisierung) - - `flm_enums.hpp` Enums aus XML extrahiert (FileStatus, FileCategory, FileType, MainFolder) - - `flm_translation.h` aktualisiert (toInt() entfernt, trFolderName() korrigiert) - - `flm_ftc.h` minimaler Stub-Header erstellt - - Plugin-Interfaces erstellt (flm, opm, exm data plugin interface) - - QString/std::string Konvertierungen behoben in: - - `lts_dialog_model_folder.cpp` - - `lts_file_dialog_widget.cpp` - - `lts_dialog_model_file.cpp` - - Folder::name() Rückgabetyp: std::string (kompatibel) - - FileContent: Alle benötigten Methoden implementiert (fileStatus, name, isTemplate, fileType, fileId, folderId, operatorId, mainFolder, exerciseId, properties, isDeleted, usedBy, lastModified, phaseId, isUsedBy, isHidden) - - std::optional für exerciseId/phaseId unterstützt +### 3. Qt6Location Missing (✅ Behoben) +**Problem**: Qt6Location Modul fehlte im Docker-Image +**Lösung**: `qtlocation` und `qtpositioning` zu aqt install-qt Command hinzugefügt +**Files**: `app/Dockerfile` -#### InfrastructureManagement -- **Status**: ✅ ism_mounting_point.h migriert (2026-08-29) -- **Korrekturen**: - - Header von Qt5-Quellcode kopiert - - Include-Pfade korrigiert (`#include "ismshared_export.h"` relativ) - - Redundante Methodendefinitionen in `.cpp` entfernt +### 4. RTI Target-Kollisionen (✅ Behoben) +**Problem**: ALIAS Targets für `ddsftc`, `ddsfts`, `ddsconnector` kollidierten mit Module-level Definitions +**Ursache**: +- FindRTI.cmake erstellt nur Targets für: `nddscore`, `nddsc`, `nddscpp2`, `rtiroutingservice` +- `ddsftc`, `ddsfts`, `ddsconnector` existieren nicht in RTI 7.7.0 +- Lts/DDS/FTC/CMakeLists.txt erstellt eigene INTERFACE Targets für diese Libraries -### ⚠️ Teilweise migriert / Build-Probleme +**Lösung**: +- ALIAS Targets nur für existierende RTI-Libraries erstellen (`nddscore`, `nddsc`, `nddscpp2`) +- KEINE INTERFACE-Placeholder für nicht-existierende Libraries +- Module definieren ihre eigenen Targets (ddsftc, ddsfts, ddsconnector) -#### Lts/Viewer/LtsDataView -- **Status**: ❌ Nicht migriert (KRITISCH - Blocker) -- **Problem**: Header-Datei fehlt (`LtsDataView/lts_data_view.h`) -- **Lösung**: Modul muss migriert werden (HOCHPRIORITÄT - Blocker für LtsFileDialog) -- **Dependencies**: Wird von LtsFileDialog, LtsSessionData benötigt - -#### Lts/Services/svcFlmCommon -- **Status**: ❌ Nicht migriert (KRITISCH - Blocker) -- **Problem**: Library fehlt im Linker -- **Lösung**: Modul migrieren oder Stub erstellen (HOCHPRIORITÄT) -- **Pfad**: `Lts/Services/FileManagement/svcFlmCommon/` - -#### Lts/Services/svcOpmCommon -- **Status**: ❌ Nicht migriert (KRITISCH - Blocker) -- **Problem**: Library fehlt im Linker -- **Lösung**: Modul migrieren oder Stub erstellen (HOCHPRIORITÄT) -- **Pfad**: `Lts/Services/OperatorManagement/svcOpmCommon/` - -#### Lts/Services/svcExmCommon -- **Status**: ❌ Nicht migriert (KRITISCH - Blocker) -- **Problem**: Library fehlt im Linker -- **Lösung**: Modul migrieren oder Stub erstellen (HOCHPRIORITÄT) -- **Pfad**: `Lts/Services/ExerciseManagement/svcExmCommon/` - -#### Lts/Services/InfrastructureManagement -- **Status**: ⚠️ Include-Pfad Problem -- **Problem**: `NGLLogger/Z/src/NGLLogger` Pfad existiert nicht -- **Lösung**: CMakeLists.txt Include-Pfade korrigieren - -#### Lts/Services/ProjectDataManagement -- **Status**: ⚠️ Enum-Wert fehlt -- **Problem**: `L25_KindGuidingLine::nesA` existiert nicht -- **Lösung**: Enum-Definition prüfen und ergänzen - -#### Z/src/NGLLogger -- **Status**: ⚠️ Include-Pfad Problem -- **Problem**: CMake generiert falschen Pfad `/repo/build-qt6-validation/Z/src/NGLLogger/Z/src/NGLLogger` -- **Lösung**: CMakeLists.txt Include-Pfade korrigieren - -#### Lts/Tools/Adler/WebSocketSimulator -- **Status**: ❌ QtWidgets Include fehlt -- **Problem**: `#include ` wird nicht gefunden -- **Lösung**: Qt6 Widgets Component explizit finden und verlinken +**Files**: `CMakeLists.txt` (Zeilen 254-285) --- -## 🛠️ Offene Aufgaben +## ⚠️ Bekannte Probleme -### Hochprioritär (Blocker für LtsFileDialog Build) -1. ✅ **FileManagement Stub-Header vervollständigt** (2026-08-29) -2. ❌ **LtsDataView migrieren** - Wird von LtsFileDialog und anderen Modulen benötigt -3. ❌ **svcFlmCommon migrieren** - Service-Library für FileManagement Common -4. ❌ **svcOpmCommon migrieren** - Service-Library für OperatorManagement Common -5. ❌ **svcExmCommon migrieren** - Service-Library für ExerciseManagement Common +### 1. Externe Dependencies fehlen (BUILD_RTI=ON) +**Fehler**: `/usr/bin/ld.bfd: cannot find -lsvcIsmCommon: No such file or directory` +**Betroffene Module**: IsmShared, andere Module mit externen Libraries +**Ursache**: Externe Libraries (svcIsmCommon, etc.) sind im Docker-Container nicht verfügbar +**Workaround**: BUILD_RTI=OFF für Build-Tests ohne RTI-Dependencies +**Lösung**: CI muss externe Dependencies bereitstellen oder optional verlinken -### Mittlere Priorität -6. ❌ **NGLLogger Include-Pfad** - CMakeLists.txt korrigieren -7. ❌ **ProjectDataManagement Enums** - Fehlende Enum-Werte ergänzen -8. ❌ **QtWidgets Includes** - Alle Qt6 Widgets Components explizit verlinken -9. ❌ **Lts/Plugins Kernmodule** - Priorisiere essentielle Plugins -10. ❌ **Lts/Services Basis** - InfrastructureManagement, OperatorManagement +### 2. NGLLogger Include-Pfad Warning +**Warning**: `cc1plus: warning: /repo/build/Z/src/NGLLogger/Z/src/NGLLogger: No such file or directory` +**Ursache**: Falscher Include-Pfad in CMake-Konfiguration +**Status**: Kosmetisch, Build läuft trotzdem -### Niedrige Priorität -11. ❌ **Lts/Tools** - Adler WebSocket Simulator und andere Tools -12. ❌ **Vollständige Testabdeckung** - Tests für alle migrierten Module +### 3. jsonschema Application nicht gefunden +**Warning**: `Projects: application 'jsonschema' not found, cannot validate apps.json files` +**Status**: Kosmetisch, beeinflusst Build nicht --- -## 📝 Build-Status (BUILD_RTI=OFF) +## 📝 Letzte Änderungen -``` -Configure: ✅ Erfolgreich (mit CMake-Warnings) -Compile: ⚠️ 4/1187 Targets erfolgreich, dann Fehler (fehlende Dependencies) -Link: ❌ Fehlende Libraries (LtsDataView, svcFlmCommon, svcOpmCommon, svcExmCommon) -``` - -### Bekannte Warnungen -- `QVariant::canConvert(int)` deprecated in Qt6 → zu `canConvert()` migrieren -- NGLLogger Include-Pfad ungültig -- AdvancedSymbology Viewer-Pfade in CMakeLists.txt entfernt - ---- - -## 🔄 Nächste Schritte (Priorisiert) - -1. **LtsDataView migrieren** (Blocker für LtsFileDialog) -2. **svcFlmCommon, svcOpmCommon, svcExmCommon** - Service-Stubs oder vollständige Migration -3. **NGLLogger CMakeLists.txt** korrigieren -4. **ProjectDataManagement Enums** vervollständigen -5. **QtWidgets Components** explizit verlinken in allen CMakeLists.txt - ---- - -## 📌 Wichtige Dateien - -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db.h` - DDS Stub-Header (2026-08-29 aktualisiert) -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_enums.hpp` - Zentrale Enums -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_translation.h` - Übersetzungen (2026-08-29 aktualisiert) -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_ftc.h` - FTC Stub (2026-08-29 neu) -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_data_plugin_interface.h` - Plugin Interface (2026-08-29 neu) -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/OperatorManagement/opm_data_plugin_interface.h` - Plugin Interface (2026-08-29 neu) -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/ExerciseManagement/exm_data_plugin_interface.h` - Plugin Interface (2026-08-29 neu) -- `qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/InfrastructureManagement/ism_mounting_point.h` - ISM Interface (2026-08-29 migriert) - ---- - -**Erstellt**: 2026-08-18 -**Letzte Aktualisierung**: 2026-08-29 -**Autor**: Migration Team - ---- - -## 🎉 Update 2026-08-18: BUILD_RTI=OFF Build erfolgreich abgeschlossen - -### Zusammenfassung -- **Build-Status**: ✅ **1902/1902 Targets erfolgreich gebaut** -- **Konfiguration**: BUILD_RTI=OFF (DDS-Stub-Implementierung) -- **Qt-Version**: Qt 6.8.3 (Docker Ubuntu 26.04) -- **C++ Standard**: C++23 - -### Erstellte DDS-Stub-Header für BUILD_RTI=OFF - -| Header-Datei | Zweck | Status | -|--------------|-------|--------| -| `include/DDS/Generic/ddsgen_export.h` | Export-Makros (leer für OFF) | ✅ Fertig | -| `include/DDS/Generic/generic_data_reader.h` | Data Reader Template-Stub | ✅ Fertig | -| `include/DDS/Generic/generic_base.h` | Topic-Name-Templates, Helper-Funktionen | ✅ Fertig | -| `include/DDS/Generic/generic_logger.h` | Logger-Wrapper mit DataType-Enum | ✅ Fertig | -| `include/DDS/DTC/generic_dtc.h` | Minimale DDS-Typen für DTC | ✅ Fertig | - -### Wichtige Code-Änderungen - -#### 1. QObject-Entfernung für BUILD_RTI=OFF -- **DatabaseInterfaceImpl** (flm_db_impl.h): QObject-Basisklasse und Q_OBJECT-Makro entfernt -- **DtcImpl** (opm_dtc_impl.h): Q_OBJECT-Makro entfernt, reine C++-Klasse -- **Begründung**: Keine Qt-Signal/Slot-Mechanismen in DDS-freier Konfiguration benötigt - -#### 2. Logger-Stub-Implementierung -```cpp -// NGL::Logger verwendet Qt-Logging statt NGL::LogStreamHelper -class Logger { -public: - void logDebug(const std::string& msg) { qDebug() << msg.c_str(); } - void logWarning(const std::string& msg) { qWarning() << msg.c_str(); } - void logError(const std::string& msg) { qCritical() << msg.c_str(); } -}; -``` - -#### 3. FileStatus als int-Alias -```cpp -// Für BUILD_RTI=OFF: FileStatus als int-Alias statt enum class -using FileStatus = int; -constexpr int FileStatus_Valid = 0; -constexpr int FileStatus_Deleted = 1; -``` - -#### 4. CMake: DDS-Bibliotheken conditional +### CMakeLists.txt (RTI Target-Kollisionen behoben) ```cmake -if(BUILD_RTI) - # Echte RTI-Bibliotheken -else() - # Leere INTERFACE-Libraries für BUILD_RTI=OFF - add_library(ddsc INTERFACE) - add_library(ddscore INTERFACE) - # ... weitere DDS-Libraries -endif() +# Vorher (falsch): +IF(BUILD_RTI AND TARGET RTI::nddsc) + ADD_LIBRARY(ddsconnector INTERFACE) # Kollision! +ENDIF() + +# Nachher (korrekt): +IF(BUILD_RTI AND TARGET RTI::nddsc) + # Nur ALIAS für existierende RTI-Libraries + ADD_LIBRARY(RTI::nddscore ALIAS RTI::nddscore) + ADD_LIBRARY(RTI::nddsc ALIAS RTI::nddsc) + ADD_LIBRARY(RTI::nddscpp2 ALIAS RTI::nddscpp2) + # ddsftc/ddsfts/ddsconnector werden von Modulen selbst erstellt +ENDIF() ``` -#### 5. Qt6/C++23 Updates -- **std::optional**: `is_set()` → `has_value()`, `get()` → `value()` -- **Container**: QList → std::vector mit expliziter Konversion -- **qAsConst**: Fix für rvalue expressions (z.B. `user.exerciseIds()`) +### flm_enums.hpp (QDebug operator<<) +```cpp +#include -### Test-Status -| Test | BUILD_RTI=ON | BUILD_RTI=OFF | -|------|--------------|---------------| -| Lts/Common | ✅ 1/1 bestanden | ⚠️ Nicht ausführbar (DDS-Dependency) | -| DDS-Tests | ✅ Verfügbar | ❌ Nicht verfügbar (kein RTI) | -| Gesamt-Build | ✅ 1902 Targets | ✅ 1902 Targets | +inline QDebug operator<<(QDebug debug, FileStatus status) +{ + QDebugStateSaver saver(debug); + debug.nospace(); + switch (status) { + case FileStatus::Valid: debug << "FileStatus::Valid"; break; + case FileStatus::Deleted: debug << "FileStatus::Deleted"; break; + default: debug << "FileStatus::Unknown(" << static_cast(status) << ")"; break; + } + return debug; +} +``` -### Bekannte Einschränkungen (BUILD_RTI=OFF) -1. **Keine DDS-Funktionalität**: Data Reader, Topics, TypeSupport nur als Stubs -2. **Tests nicht ausführbar**: Die meisten Tests benötigen DDS-Backend -3. **Code-Generator**: ddsgen läuft nicht ohne RTI Connext Installation - -### Nächste Schritte -1. **BUILD_RTI=ON testen**: Vollständige Validierung mit RTI Connext DDS -2. **Test-Suite**: Alle Unit-Tests mit DDS-Backend ausführen -3. **Restliche Module**: Lts/Plugins, Lts/Services, Lts/Proxies, Lts/Projects migrieren -4. **C++23 Features**: Weitere Modernisierung wo sinnvoll +### app/Dockerfile (Qt6Location) +```dockerfile +RUN python3 -m aqt install-qt linux desktop 6.8.3 gcc_64 \ + -m qtbase qtdeclarative qttools qtcharts qtdatavis3d \ + qtlocation qtpositioning \ + --outputdir /opt/Qt +``` --- + +## 🧪 Build-Status + +### BUILD_RTI=OFF +- ✅ Configure: Erfolgreich +- ⚠️ Build: Teilweise erfolgreich (externe Dependencies fehlen) + +### BUILD_RTI=ON +- ✅ Configure: Erfolgreich (nach Target-Kollision-Fix) +- ⚠️ Build: Teilweise erfolgreich (externe Dependencies fehlen) + +--- + +## 📋 Nächste Schritte + +1. **Externe Dependencies klären**: svcIsmCommon und andere externe Libraries verfügbar machen +2. **Lts/Plugins Migration**: Verbleibende Untermodule migrieren +3. **Lts/Services Migration**: Verbleibende Untermodule migrieren +4. **TetraIF abschließen**: Restliche Migration durchführen +5. **Vollständigen Build testen**: Mit allen verfügbaren Dependencies + +--- + +## 📌 Wichtige Hinweise + +- **qt5-before/qt5-legatus-legacy**: READ-ONLY, keine Änderungen erlaubt! +- **Git Hooks**: `entire hooks git post-commit` verursacht lange Commit-Laufzeiten +- **Submodule**: `qt-migration-legatus` zeigt auf `feature/qt6-migration-basis-modules` +- **Externe Dependencies**: Liegen in `./external/` (RTI, ArcGIS) + +--- + +**Letztes Update**: 2026-09-30 +**Nächster Checkpoint**: RTI Target-Kollisionen behoben diff --git a/app/Dockerfile b/app/Dockerfile index cccfeedc3..2f8001136 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -63,7 +63,7 @@ RUN python3 -m venv /opt/venv \ && /opt/venv/bin/pip install --upgrade pip setuptools wheel \ && /opt/venv/bin/pip install -r /app/requirements.txt aqtinstall \ && mkdir -p "${QT_BASE_DIR}" \ - && /opt/venv/bin/python -m aqt install-qt linux desktop "${QT_VERSION}" "${QT_ARCH}" -m qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine qtpdf qtwebview qt5compat qtwebchannel qtpositioning --outputdir "${QT_BASE_DIR}" \ + && /opt/venv/bin/python -m aqt install-qt linux desktop "${QT_VERSION}" "${QT_ARCH}" -m qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine qtpdf qtwebview qt5compat qtwebchannel qtpositioning qtlocation --outputdir "${QT_BASE_DIR}" \ && test -f "${QT_ROOT}/lib/cmake/Qt6/Qt6Config.cmake" # Build and install Log4Qt via script in /app (keeps Dockerfile small)