diff --git a/GRANTLEE_TO_KTEXTTEMPLATE_PORTING.md b/GRANTLEE_TO_KTEXTTEMPLATE_PORTING.md deleted file mode 100644 index 64c55df24..000000000 --- a/GRANTLEE_TO_KTEXTTEMPLATE_PORTING.md +++ /dev/null @@ -1,46 +0,0 @@ - -## ✅ Porting Complete - Verification Results - -### Build Status -- ✅ CMake configuration succeeds with `BUILD_GRANTLEE=ON` -- ✅ `libcodegen_grantlee.a` static library builds successfully -- ✅ `grantlee_parser_smoke` test executable builds successfully -- ✅ No compilation errors or warnings (except deprecated QDomDocument API notices) - -### Smoke Test Results -- ✅ All 58 `.grantlee` template files load successfully with KTextTemplate -- ✅ All templates parse without errors -- ✅ All templates render successfully (tested with empty context) -- ✅ Exit code: 0 (success) - -### Files Modified -1. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/CMakeLists.txt` - KF6TextTemplate integration -2. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/GeneratorGrantleeBase.h` - Namespace changes + include guards -3. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/GeneratorGrantleeBase.cpp` - Namespace changes -4. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/DaoGeneratorGrantlee.cpp` - Include path update -5. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/DatabaseGeneratorGrantlee.cpp` - Include path update -6. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/CppTopicGeneratorGrantlee.cpp` - Include path update -7. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/main_grantlee_gui.h` - Engine type change -8. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/main_grantlee_gui.cpp` - Engine instantiation -9. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/tests/GrantleeParserSmoke.cpp` - Full namespace migration -10. `qt6-after/qt6-migrated-legatus/CMakeLists.txt` - Qt6 manual targets + library version fixes - -### Key Changes Summary -- **Namespace**: `Grantlee::` → `KTextTemplate::` -- **CMake Package**: `Grantlee5::Templates` → `KF6::TextTemplate` -- **Includes**: `` → `` -- **Library**: `libgrantlee_templates.so.5` → `libKF6TextTemplate.so.6` -- **Qt6 Compatibility**: Fixed hardcoded library versions to use soname symlinks - -### Docker Build Command -```bash -docker run --rm -v $(pwd):/workspace -w /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus ubuntu:26.04 bash -c " - apt-get update && apt-get install -y cmake build-essential qt6-base-dev libkf6texttemplate-dev git && - rm -rf build && mkdir build && cd build && - cmake .. -DBUILD_GRANTLEE=ON -DBUILD_TESTING=OFF && - make -j$(nproc) -" -``` - -### Conclusion -The Grantlee5 to KTextTemplate port is **complete and verified**. The CodeGen module now builds successfully on Ubuntu 26.04 with Qt6 and KTextTemplate, enabling reproducible Docker builds without legacy Qt5 dependencies. diff --git a/MIGRATION_STATUS.md b/MIGRATION_STATUS.md deleted file mode 100644 index 17155d84b..000000000 --- a/MIGRATION_STATUS.md +++ /dev/null @@ -1,313 +0,0 @@ -# Qt5/C++11 to Qt6/C++17 Migration Status - -**Datum**: 2026-08-31 -**Submodule Branch**: `feature/qt6-migration-basis-modules` @ d176b5e -**Docker-Image**: `migration-pipeline:ubuntu26.04` -**C++ Standard**: C++17 (⚠️ RTI 7.7 kompatibel nur mit C++17, NICHT C++23) - ---- - -## 📊 Gesamtübersicht - -| Bereich | Status | BUILD_RTI=OFF | BUILD_RTI=ON | Notes | -|---------|--------|---------------|--------------|-------| -| **Lts/Common** | ✅ Vollständig | ✅ Build OK | ✅ Configure OK | Tests: 1/1 bestanden | -| **Lts/DDS** | 🟡 DTC-Generation | ⚠️ 45 Fehler | ⚠️ 45 Fehler | RTI Headers in MOC, ngl_codegen Build | -| **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 | - ---- - -## 🔧 Behobene Probleme - -### 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` - -### 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` - -### 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` - -### 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 - -**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) - -**Files**: `CMakeLists.txt` (Zeilen 254-285) - -### 5. Grantlee Template Namespace Resolution (✅ Behoben) -**Problem**: DTC-Generierung erzeugte falsche Namespace-Referenzen (`Core::CurrentRunningState` statt `::Core::CurrentRunningState`) -**Fehler**: `'CurrentRunningState' in namespace 'Core' does not name a type` (45 Fehler) -**Lösung**: Absolute Namespace-Resolution in Grantlee Templates (`::{{ namespace }}::{{ dt.type }}`) -**Files**: `svc_dtc.h.grantlee`, `svc_dtc_impl.cpp.grantlee`, `svc_dtc_impl.h.grantlee` - -### 6. RTI Detection mit DDS_PATH (✅ Behoben) -**Problem**: CMake FindRTI.cmake fand RTI 7.7.0 nicht automatisch -**Lösung**: `DDS_PATH=/repo/external/rti_connext_dds-7.7.0/` setzen -**Status**: CMake findet RTI-Directory und Libraries (nddscore, nddsc, nddscpp2, rtiroutingservice) -**Files**: `cmake/FindRTI.cmake` (unterstützt DDS_PATH env var) - -### 7. codegen_base Library Built (✅ Behoben) -**Status**: codegen_base erfolgreich als Shared Library gebaut (19/19 Targets) -**Problem**: ngl_codegen Executable nicht als separates Target gefunden -**Ursache**: ngl_codegen benötigt BUILD_GRANTLEE=ON und Grantlee5::Templates (Qt5-basiert) -**Nächster Schritt**: BUILD_GRANTLEE-Strategie entscheiden (Qt5 Grantlee oder Qt6-Alternative) - ---- - -## ⚠️ Bekannte Probleme - -### 1. ngl_codegen Build (🔴 Aktiv) -**Problem**: ngl_codegen Tool wird nicht gebaut -**Ursache**: BUILD_GRANTLEE=ON benötigt Grantlee5 (Qt5-basiert), nicht verfügbar in Qt6-Umgebung -**Optionen**: - - Option A: Grantlee5 im Docker-Image nachinstallieren (Qt5-Dependency) - - Option B: Code-Generation ohne Grantlee (manuell oder alternatives Template-System) - - Option C: ngl_codegen aus Qt5-Build kopieren -**Auswirkung**: DTC-Files können nicht neu generiert werden - -### 2. 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 - -### 3. 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 - -### 4. jsonschema Application nicht gefunden -**Warning**: `Projects: application 'jsonschema' not found, cannot validate apps.json files` -**Status**: Kosmetisch, beeinflusst Build nicht - -### 5. RTI Include Paths für MOC -**Problem**: MOC benötigt beide RTI Include-Pfade (ndds/hpp UND ndds) -**Status**: CMAKE_AUTOMOC_INCLUDE_DIRECTORIES korrekt konfiguriert, vererbt RTI_INCLUDE_DIRS -**Verbleibende Fehler**: 45 DTC-Compilation errors trotz Template-Fix - ---- - -## 📝 Letzte Änderungen - -### CMakeLists.txt (RTI Target-Kollisionen behoben) -```cmake -# 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() -``` - -### flm_enums.hpp (QDebug operator<<) -```cpp -#include - -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; -} -``` - -### 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 - ---- - -## 📊 RTI 7.7 Migration - Detaillierte Analyse - -### BUILD_RTI Dateien (85 Dateien identifiziert) - -#### Core Infrastructure (4 Dateien) -- `include/Core/core_types.h` -- `Lts/Common/LtsElevation/lts_elevation_manager.{cpp,h}` -- `Lts/Common/LtsSession/lts_session.{cpp,h}` -- `Lts/Common/LtsSession/lts_session_manager.{cpp,h}` -- `Lts/Common/LtsSession/lts_session_data_dds.{cpp,h}` - -#### DDS Core Module (12 Dateien) -- `Lts/DDS/Core/pacemaker.{cpp,h}` -- `Lts/DDS/Core/topic_lock_master.h` -- `Lts/DDS/DDSConnector/dds_connector.{cpp,h}` -- `Lts/DDS/Generic/generic_base.h` -- `Lts/DDS/Generic/subscriber_listener.h` -- `Lts/DDS/FTS/{connext,generic_fts,generic_fts_impl,generic_fts_internal}.{h,cpp}` -- `Lts/DDS/Routing/routing_plugin.h` - -#### DTC/DTS Generierung (1 Datei + generierte) -- `include/DDS/DTC/generic_dtc.h` -- Build-generierte DTC-Dateien in `build_rti_on/Lts/DDS/DTC/` - -#### Service Module (15 Dateien) -**AudioVideoManagement:** -- `include/AudioVideoManagement/{avm_enums.hpp,avm_export.h,svcavmcommon_export.h}` -- `Lts/Services/AudioVideoManagement/svcavmcommon_export.h` -- `Lts/Services/OperatorManagement/opm_dtc_impl_custom.cpp` - -**ProjectDataManagement:** -- `include/ProjectDataManagement/pdm_translation.h` -- `Lts/Services/ProjectDataManagement/stubs/{pdm_db_stub,pdm_enums_stub,pdm_stub}.hpp` -- `Lts/Services/ProjectDataManagement/stubs/ProjectDataManagement/pdm.hpp` - -**RoutingServiceNG:** -- `Lts/Services/RoutingServiceNG/stubs/{routing_plugin_stub.h,topic_type_plugin_stub.hpp}` - -**Andere Services:** -- `include/Evaluations/evl_db_impl.h` -- `include/ExerciseEventManagement/{eem_export.h,eem_types.h}` -- `include/ExerciseManagement/exm_db.h` -- `include/FileManagement/{flm_db.h,flm_db_impl.h,flm_enums.hpp,flm_ftc.h}` -- `include/FilterManagement/{flt_dts.h,flt_fts.h}` -- `include/GuezNasat/svcgnacommon_export.h` -- `include/InfrastructureManagement/ism_db_impl.h` -- `include/OperatorManagement/opm_db.h` -- `include/ParticipantManagement/ppm_db_impl.h` -- `include/RecordingManagement/rec_db_impl.h` -- `include/Services/PresentationManagement/pre_ftc.h` - -#### LtsUtils & Widgets (4 Dateien) -- `include/LtsUtils/LtsUtilsCore/data_modification_enum.h` -- `include/LtsUtilsGuiDds/ltsutilsguidds_export.h` -- `Lts/Common/LtsUtils/LtsUtilsGui/LtsUtilsGuiDds/{ltsutilsdds_export.h,request_helper.{cpp,h}}` -- `Lts/Common/LtsWidgets/ltswidgets_export.h` - -#### Proxies (9 Dateien) -- `Lts/Proxies/CombatNetRadio/Helper/cnr_frequency_planning_helper.{cpp,h}` -- `Lts/Proxies/DifferentialGPS/tetra_if.cpp` -- `Lts/Proxies/TrainingAreaBase/{dds_handler,main_handler,recv_from_dds_aes}.{cpp,h}` -- `Lts/Proxies/TrainingAreaBase/pdm_handler.h` -- `Lts/Proxies/TrainingAreaBase/stubs/{tab_db_stub,tab_enums_stub,tab_stub}.hpp` -- `Lts/Proxies/TrainingAreaBase/stubs/tab_topic_type_plugin_stub.cpp` - -#### Plugins (4 Dateien) -- `Lts/Plugins/OperatorManagement/Gui/Common/operator_dialog_model.{cpp,h}` -- `Lts/Plugins/ParticipantManagement/Gui/ParticipantOrgChart/org_chart_main.{cpp,h}` - -#### Tests (3 Dateien) -- `tests/test_build_rti_guards.cpp` -- `tests/test_rti_integration.cpp` -- `tests/test_saa_telegrams.cpp` - -#### Export Header (12 Dateien) -- `include/LtsProjectionWorkstation/ltsprojectionworkstation_export.h` -- `include/LtsScriptTimeline/ltsscripttimeline_export.h` -- `include/DDS/Generic/ddsgen_export.h` - -### Migrations-Kategorien - -#### 🔴 REMOVE (zu entfernen) -- Legacy RTI 5.3.1 generierte Dateien (falls vorhanden) -- Inkompatible DDS-Code-Passagen - -#### 🟡 KEEP_OFF_ONLY (nur mit BUILD_RTI=OFF) -- Export-Header Dateien (*_export.h) -- Stub-Dateien für DTC/DTS -- Wrapper-Klassen ohne RTI-spezifische API - -#### 🟠 PATCH (anzupassen) -- **Prio 1**: DDS Core (pacemaker, topic_lock_master, dds_connector) -- **Prio 2**: FTS/FTC Implementierungen -- **Prio 3**: Service-DB-Impls (flm_db_impl, evl_db_impl, etc.) -- **Prio 4**: Routing Plugin -- **Prio 5**: Proxy DDS Handler - -#### 🟢 VERIFY (zu verifizieren) -- Enum-Definitionen (flm_enums.hpp, eem_types.h, etc.) -- Type-Translation-Header (pdm_translation.h) -- Test-Dateien - -### Fortschritt - -| Phase | Status | Dateien | Beschreibung | -|-------|--------|---------|--------------| -| **Phase 1: Analyse** | ✅ Abgeschlossen | 85 | Alle BUILD_RTI Dateien identifiziert und kategorisiert | -| **Phase 2: DDS Core** | ⏳ Ausstehend | ~12 | Pacemaker, DDSConnector, FTS/FTC | -| **Phase 3: Services** | ⏳ Ausstehend | ~25 | DB-Impls, DTC-Integration | -| **Phase 4: Proxies** | ⏳ Ausstehend | ~9 | TAB, CNR, TetraIF | -| **Phase 5: Tests** | ⏳ Ausstehend | 3 | Integrationstests anpassen | - -### Nächste Schritte - -1. ✅ **Inventur abgeschlossen** - 85 BUILD_RTI Dateien identifiziert -2. ✅ **Kategorisierung erstellt** - Prioritäten festgelegt -3. ⏳ **DDS Core migrieren** - Foundation für alle anderen Module -4. ⏳ **DTC/DTS Generierung** - Grantlee Templates final anpassen -5. ⏳ **Service-Implementierungen** - DB-Impls migrieren -6. ⏳ **Proxy-Layer** - TAB, CNR, TetraIF -7. ⏳ **Integrationstests** - BUILD_RTI=ON validieren - diff --git a/QT6_BUILD_INTEGRATION_VERIFICATION.md b/QT6_BUILD_INTEGRATION_VERIFICATION.md deleted file mode 100644 index beff71aac..000000000 --- a/QT6_BUILD_INTEGRATION_VERIFICATION.md +++ /dev/null @@ -1,251 +0,0 @@ -# Qt6 Build Integration Verification Report - -## Executive Summary - -Successfully completed the Grantlee5 to KTextTemplate parser port and fixed critical CMake integration bugs. The Qt6 migration now has a fully functional code generation pipeline with proper build-system integration. - -**Status**: ✅ All integration issues resolved -**Date**: 2025-12-09 -**Qt Version**: 6.10.2 -**Template Engine**: KTextTemplate (KF6) - ---- - -## Issues Identified and Fixed - -### 1. Variable Typo in MacroCodeGenIdl.cmake - -**Problem**: Two macros used undefined variable `${xml_FILE}` instead of `${xmlFile_in}` - -**Locations Fixed**: -- Line 429: `CREATE_TOPIC_TYPE_PLUGIN` macro -- Line 472: `CREATE_RECORD_REPLAY_PLUGIN_INTERN` macro - -**Impact**: These macros would fail to pass the correct XML file path to code generation, causing build failures or incorrect file generation. - -**Fix Applied**: -```cmake -# Before -CODEGEN_TOPIC_TYPE_PLUGIN(_my_srcs ${xml_FILE}) -CODEGEN_RECORD_REPLAY_PLUGIN(_my_srcs ${xml_FILE}) - -# After -CODEGEN_TOPIC_TYPE_PLUGIN(_my_srcs ${xmlFile_in}) -CODEGEN_RECORD_REPLAY_PLUGIN(_my_srcs ${xmlFile_in}) -``` - -### 2. Hardcoded Executable Name in DEPENDS - -**Problem**: `CODEGEN_SQL` macro used hardcoded `ngl_codegen` instead of the `${_cg}` variable - -**Location Fixed**: -- Line 179: `CODEGEN_SQL` macro DEPENDS clause - -**Impact**: Reduced flexibility and potential issues if executable name changes in future - -**Fix Applied**: -```cmake -# Before -DEPENDS ngl_codegen ${xmlFile_in} - -# After -DEPENDS ${_cg} ${xmlFile_in} -``` - -### 3. BUILD_GRANTLEE Default Value - -**Problem**: `BUILD_GRANTLEE` option defaulted to `OFF`, which would skip SQL file generation - -**Location Fixed**: -- `CMakeLists.txt` line 129 - -**Impact**: SQL files required by downstream targets would not be generated, causing build failures - -**Fix Applied**: -```cmake -# Before -OPTION(BUILD_GRANTLEE "Build CodeGen Grantlee templates (requires Grantlee5/Qt5)" OFF) - -# After -OPTION(BUILD_GRANTLEE "Build CodeGen SQL files using KTextTemplate parser (KF6::TextTemplate)" ON) -``` - ---- - -## Build System Comparison: Qt5 vs Qt6 - -| Aspect | Qt5 (Legacy) | Qt6 (Migrated) | Status | -|--------|--------------|----------------|--------| -| **Template Engine** | Grantlee5 | KTextTemplate (KF6) | ✅ Ported | -| **CMake Package** | `Grantlee5::Templates` | `KF6::TextTemplate` | ✅ Updated | -| **Parser Executable** | `codegen` | `ngl_codegen` | ✅ Renamed | -| **Qt Policy Guards** | None | `CMP0071` guard added | ✅ Added | -| **Python Version** | Python 2.7 | Python 3 | ✅ Updated | -| **RTI Dependency** | Required | Optional | ✅ Made optional | -| **BUILD_GRANTLEE** | N/A (always on) | Default ON | ✅ Fixed | -| **Variable Consistency** | Bugs present | Bugs fixed | ✅ Fixed | - ---- - -## Verification Checklist - -### ✅ Parser Porting -- [x] Source code ported from Grantlee5 to KTextTemplate -- [x] Q_FOREACH loops converted to range-based for loops -- [x] CMakeLists.txt updated for KF6::TextTemplate -- [x] Parser builds successfully with Qt6 -- [x] All 58 `.grantlee` template files parse correctly -- [x] Docker smoke test passed (exit code 0) - -### ✅ Build Integration -- [x] Variable typo `${xml_FILE}` → `${xmlFile_in}` fixed (2 locations) -- [x] Hardcoded `ngl_codegen` → `${_cg}` fixed (1 location) -- [x] BUILD_GRANTLEE default changed to ON -- [x] MacroCodeGenIdl.cmake consistency verified -- [x] Qt6 policy guards in place - -### ⏳ Pending Validation -- [ ] Full Docker build with `BUILD_RTI=ON` -- [ ] Full Docker build with `BUILD_RTI=OFF` -- [ ] Clean build test -- [ ] Incremental build test -- [ ] Regeneration test (modify input, verify regeneration) -- [ ] External dependency mapping (RTI 7.7.arcgis) - ---- - -## Files Modified - -### Source Code -1. **`Lts/Common/CodeGen/main.cpp`** - - Converted Q_FOREACH to range-based for loops - - Qt6 compatibility improvements - -2. **`Lts/Common/CodeGen/CMakeLists.txt`** - - Changed `Grantlee5::Templates` to `KF6::TextTemplate` - - Updated include paths - -### Build System -3. **`cmake/MacroCodeGenIdl.cmake`** - - Fixed variable typo at line 429 - - Fixed variable typo at line 472 - - Fixed hardcoded executable name at line 179 - -4. **`CMakeLists.txt`** - - Changed BUILD_GRANTLEE default from OFF to ON - - Updated option description - -### Documentation -5. **`GRANTLEE_TO_KTEXTTEMPLATE_PORTING.md`** - - Comprehensive porting documentation - - Verification results - -6. **`QT6_BUILD_INTEGRATION_VERIFICATION.md`** (this file) - - Build integration analysis - - Bug fixes documentation - - Comparison matrix - ---- - -## Technical Details - -### Parser Executable Configuration -```cmake -# Qt6 CMakeLists.txt -SET(CMAKE_AUTOMOC ON) -SET(CMAKE_AUTORCC ON) -SET(CMAKE_AUTOUIC ON) - -FIND_PACKAGE(Qt6 REQUIRED COMPONENTS Core) -FIND_PACKAGE(KF6 REQUIRED COMPONENTS TextTemplate) - -ADD_EXECUTABLE(ngl_codegen main.cpp) -TARGET_LINK_LIBRARIES(ngl_codegen PRIVATE - Qt6::Core - KF6::TextTemplate -) -``` - -### Macro Invocation Flow -``` -CREATE_TOPIC_TYPE_PLUGIN(xmlFile) - └─> CODEGEN_TOPIC_TYPE_PLUGIN(_my_srcs, xmlFile_in) - └─> CODEGEN_IDL(_my_srcs, xmlFile_in, "TOPIC_TYPE") - └─> ADD_CUSTOM_COMMAND(OUTPUT ..., COMMAND ngl_codegen ...) - -CREATE_RECORD_REPLAY_PLUGIN_INTERN(xmlFile, ...) - └─> CODEGEN_RECORD_REPLAY_PLUGIN(_my_srcs, xmlFile_in) - └─> CODEGEN_IDL(_my_srcs, xmlFile_in, "RECORD_REPLAY") - └─> ADD_CUSTOM_COMMAND(OUTPUT ..., COMMAND ngl_codegen ...) - -CODEGEN_SQL(srcList, xmlFile_in) - └─> ADD_CUSTOM_COMMAND(OUTPUT ..., COMMAND ngl_codegen ...) -``` - -### Docker Build Environment -- **Base Image**: Ubuntu 26.04 (noble) -- **Qt Version**: 6.10.2 (installed via aqt) -- **KTextTemplate**: `libkf6texttemplate-dev` (apt) -- **Python**: Python 3 (system default) -- **RTI**: Optional, mapped to `/repo/external` if `BUILD_RTI=ON` - ---- - -## Next Steps - -### Immediate Actions Required -1. **Docker Build Validation** - ```bash - # Test with RTI enabled - docker build --build-arg BUILD_RTI=ON -t legatus-qt6-test . - - # Test with RTI disabled - docker build --build-arg BUILD_RTI=OFF -t legatus-qt6-test . - ``` - -2. **Build Correctness Tests** - - Clean build from scratch - - Incremental build (touch input file, verify regeneration) - - Verify generated files in correct build-tree locations - -3. **External Dependency Verification** - - Confirm RTI 7.7.arcgis mapping works correctly - - Verify CMake finds RTI when `BUILD_RTI=ON` - - Test ArcGIS Maps SDK integration if applicable - -### Long-term Considerations -- Consider renaming `.grantlee` template files to `.kt` or `.ktexttemplate` for clarity -- Document KTextTemplate-specific features or limitations -- Update developer documentation for Qt6 build process -- Consider removing legacy Qt5/Grantlee5 code after full validation - ---- - -## Acceptance Criteria Status - -| Criterion | Status | Notes | -|-----------|--------|-------| -| Parser builds with Qt6/KTextTemplate | ✅ PASS | Verified in Docker | -| All templates parse successfully | ✅ PASS | 58/58 templates verified | -| CMake integration correct | ✅ PASS | All bugs fixed | -| BUILD_GRANTLEE defaults correctly | ✅ PASS | Changed to ON | -| Generated files in correct location | ⏳ PENDING | Requires full build test | -| Incremental builds work | ⏳ PENDING | Requires testing | -| RTI integration works | ⏳ PENDING | Requires BUILD_RTI=ON test | - ---- - -## Conclusion - -The Grantlee5 to KTextTemplate port is **functionally complete** with all identified integration bugs fixed. The parser builds successfully, all templates parse correctly, and the CMake integration is now consistent and correct. - -**Remaining work** consists of full Docker build validation with various configuration options to ensure the changes work end-to-end in the complete build environment. - -**Risk Level**: LOW - All changes are surgical fixes to obvious bugs. The parser itself has been thoroughly tested. - -**Recommendation**: Proceed with Docker build validation tests to confirm full integration success. - ---- - -*Generated: 2025-12-09* -*Session: c090ee5c-b4e0-4b6a-a75b-348426a1be8a* \ No newline at end of file diff --git a/files/qt6-submodule-migration-changes.md b/files/qt6-submodule-migration-changes.md deleted file mode 100644 index 6cd986c26..000000000 --- a/files/qt6-submodule-migration-changes.md +++ /dev/null @@ -1,217 +0,0 @@ -# Qt6 Migration - Submodule Infrastructure Changes - -## ✅ STATUS UPDATE - Submodule erfolgreich konfiguriert - -**Aktueller Stand (2025-08-17):** -- ✅ Submodule `qt-migration-legatus` zeigt auf Branch `feature/qt6-migration-basis-modules` (commit d176b5e) -- ✅ BEIDE Verzeichnisse vorhanden: `qt5-before/qt5-legatus-legacy/` UND `qt6-after/qt6-migrated-legatus/` -- ✅ Beide Verzeichnisse enthalten vollständige CMakeLists.txt und Quellcode -- ✅ Docker-Build erfolgreich: `migration-pipeline:ubuntu26.04` -- ✅ Migrationstest erfolgreich: `Lts/Common` Modul durchgelaufen mit allen Tests (1/1 bestanden) -- ✅ Alle Pfadreferenzen in Skripten korrekt aktualisiert - ---- - -## Overview -Updated CI/CD, CMake, Docker, and shell scripts to support the new directory structure where legacy code was moved into the `qt-migration-legatus/` Git submodule. - -## Directory Structure Change -**Before:** -``` -/app/ -├── cmake/ -├── Lts/ -├── TetraIF/ -├── tests/ -├── Z/ -└── ... -``` - -**After:** -``` -/app/ -└── qt-migration-legatus/ (Git submodule) - ├── qt5-before/qt5-legatus-legacy/ - └── qt6-after/qt6-migrated-legatus/ - ├── cmake/ - ├── Lts/ - ├── TetraIF/ - ├── tests/ - ├── Z/ - └── CMakeLists.txt -``` - -## Files Modified - -### 1. `.github/workflows/qt6-migration.yml` -**Change:** Added `submodules: recursive` to checkout step - -**Rationale:** Ensures the `qt-migration-legatus` submodule is initialized and updated during CI checkout. Without this, the submodule directory would be empty. - -**Diff:** -```yaml -- name: Checkout - uses: actions/checkout@v4 - with: - submodules: recursive -``` - -**Risk:** None - standard GitHub Actions configuration. - ---- - -### 2. `migration/migrate_module.sh` -**Changes:** -- Added `SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus"` variable -- Updated cmake `-S /repo` to `-S /repo/${SUBMODULE_PATH}` -- Updated module path resolution to account for submodule location - -**Rationale:** CMakeLists.txt is now located inside the submodule, not at repo root. All cmake invocations must point to the correct source directory. - -**Diff:** -```bash -# Added at top of script -SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus" - -# Updated cmake source path -cmake -S /repo/${SUBMODULE_PATH} -B ${BUILD_DIR} ... -``` - -**Risk:** Low - path is hardcoded and validated by script existence check. - ---- - -### 3. `final-migration/run_final_migration.sh` -**Changes:** -- Added `SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus"` variable -- Updated cmake `-S /repo` to `-S /repo/${SUBMODULE_PATH}` - -**Rationale:** Same as migrate_module.sh - CMake source directory is now in submodule. - -**Diff:** -```bash -# Added at top of script -SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus" - -# Updated cmake source path -cmake -S /repo/${SUBMODULE_PATH} -B /repo/build ... -``` - -**Risk:** Low - path is hardcoded and validated by script existence check. - ---- - -### 4. `migration/run_clang_tidy_common.sh` -**Changes:** -- Added `SUBMODULE_PATH` variable -- Updated cmake `-S /repo` to `-S /repo/${SUBMODULE_PATH}` -- Updated `git ls-files` paths to include submodule path prefix -- Updated `git add` path to include submodule path prefix - -**Rationale:** Clang-tidy script needs to find source files in the new submodule location and commit changes to the correct paths. - -**Diff:** -```bash -# Added at top of script -SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus" - -# Updated cmake source path -cmake -S /repo/${SUBMODULE_PATH} -B $BUILD_DIR ... - -# Updated git paths -git ls-files ${SUBMODULE_PATH}/Lts/Common | ... -git ls-files -m | grep "^${SUBMODULE_PATH}/Lts/Common" | ... -git add ${SUBMODULE_PATH}/Lts/Common || true -``` - -**Risk:** Medium - git operations on submodule content require careful testing. Submodule changes may need to be committed separately. - ---- - -## Files NOT Modified (Verified Correct) - -### `app/Dockerfile` -- Uses `FROM ubuntu:26.04` ✓ -- Uses `COPY . /app` which includes submodule content when initialized ✓ -- No hardcoded paths to repo structure ✓ - -### `.dockerignore` -- Does not exclude `.gitmodules` or submodule content ✓ -- Standard ignore patterns only ✓ - -### `qt-migration-legatus/qt6-after/qt6-migrated-legatus/CMakeLists.txt` -- All `add_subdirectory()` calls use relative paths (Lts, Z/src, translations) ✓ -- Paths are relative to CMakeLists.txt location, which is correct ✓ -- Qt6 compatibility layer with Qt5:: aliases already implemented ✓ - -### `app/run_docker.sh` -- Mounts repo to `/repo` at runtime ✓ -- Submodule content available via mount ✓ -- No hardcoded paths to repo structure ✓ - ---- - -## Validation Checklist for Ubuntu 26.04 CI - -### Pre-merge Validation -- [x] Run `git submodule update --init --recursive` locally -- [x] Verify `qt-migration-legatus/qt6-after/qt6-migrated-legatus/CMakeLists.txt` exists -- [x] Test `./migration/migrate_module.sh Lts/Common --jobs 4` locally with Docker - **SUCCESS** -- [ ] Test `./final-migration/run_final_migration.sh --jobs 6` locally with Docker -- [x] Verify Docker image tag consistency: All scripts now use `migration-pipeline:ubuntu26.04` -- [x] Verify Docker image builds successfully: `docker build -t migration-pipeline:ubuntu26.04 ./app` - **SUCCESS** - -### CI Validation (after merge) -- [ ] CI checkout step initializes submodules (check logs for "Submodule path: 'qt-migration-legatus'") -- [ ] Lts/Common migration step completes successfully -- [ ] Lts/DDS migration step completes successfully -- [ ] Final migration build completes without errors -- [ ] CTest runs and passes -- [ ] Total workflow time < 120 minutes (timeout setting) - -### Post-migration Validation -- [ ] Verify build artifacts in `/repo/build` (or module-specific build dirs) -- [ ] Check test logs in `./build/Testing/Temporary/` -- [ ] Verify Qt6 libraries are correctly linked (check `ldd` on binaries) -- [ ] Confirm no Qt5 dependencies remain in build output - ---- - -## Open Points / Risks - -1. **Submodule permissions**: CI must have SSH key or token access to clone `git@devel:lifemaps/qt-migration-legatus.git` - - **Mitigation:** Use HTTPS with token or configure SSH key in CI secrets - -2. **Submodule branch**: Ensure `qt-migration-legatus` submodule points to correct branch/commit with Qt6 code - - **Mitigation:** Pin submodule to specific commit hash in `.gitmodules` or use `submodule.branch` config - -3. **Git operations in submodules**: `run_clang_tidy_common.sh` commits to submodule path - - **Risk:** Git operations on submodule content may fail if not handled correctly - - **Mitigation:** Test locally first; consider separating submodule commits from main repo commits - -4. **Docker image tag**: ✅ FIXED - All references updated from `migration-pipeline:ubuntu22.04` to `migration-pipeline:ubuntu26.04` - - **Note:** Tag name is cosmetic; actual OS version is from Dockerfile `FROM` instruction - - **Recommendation:** Consider renaming to `migration-pipeline:ubuntu26.04` for clarity - -5. **External dependencies**: Scripts assume `/repo/external` contains RTI Connext and ArcGIS SDK - - **Verification needed:** Ensure CI provides these dependencies or handles missing deps gracefully - ---- - -## Rollback Plan - -If issues arise after deployment: - -1. **Revert CI workflow:** Remove `submodules: recursive` to prevent submodule checkout -2. **Revert migration scripts:** Restore original `-S /repo` paths -3. **Fallback to old structure:** If submodule is problematic, temporarily restore old folder structure at repo root - ---- - -## Next Steps - -1. Test changes locally with Docker -2. Create PR with these changes -3. Monitor first CI run closely -4. Address any submodule access issues -5. Document any additional findings from CI logs \ No newline at end of file diff --git a/migrationsplan-status.md b/migrationsplan-status.md deleted file mode 100644 index 8d31ad78a..000000000 --- a/migrationsplan-status.md +++ /dev/null @@ -1,79 +0,0 @@ -# Qt5/C++11 to Qt6/C++23 Migrationsplan - Status Update - -## ✅ Abgeschlossene Arbeiten (Session 2026-08-20) - -### 1. LtsSession STUB-Entfernung & Build-Fixes -**Commit**: `b1ff1104` (qt-migration-legatus) - -**Änderungen:** -- Alle STUB-Dateien entfernt (lts_session_stub.*, lts_session_data_dds_stub.*, lts_session_lock_handler_stub.*) -- ElevationMap-STUB-Verzeichnis gelöscht -- `lts_session.h`: QObject-Include korrigiert -- `lts_session_lock_handler.h`: Vollständiger STUB für RTI-Typen (da RTI nicht im Build) -- `cnr_frequency_planning_helper.h`: avm_enums_stub.hpp → avm_enums.hpp, zirkulären Include entfernt -- `CMakeLists.txt`: BUILD_RTI=ON als Default, Qt6 Version 6.10.2 korrigiert - -**Build-Ergebnis:** -- Configure: ✅ erfolgreich (11.5s) -- Build: ✅ 1941 Targets kompiliert -- Tests: ⏳ ausstehend - -### 2. Submodule-Updates -**Nested Submodule Commit**: `d5f9b0c` (qt5-legatus-legacy) -- 8 CMakeLists.txt aktualisiert (ElevationMap-Dependency entfernt) - -**Parent Repo Commit**: `5e0a2009` (qt-migration-legatus) -- Submodule-Pointer auf d5f9b0c aktualisiert -- Signierter Commit ✅ - -### 3. Docker-Image -- Qt6.10.2 konfiguriert (kein Versionen-Mix) -- libbotan-3-dev für RTI-Verschlüsselung -- qtlocation, qtpositioning hinzugefügt - ---- - -## 📋 Nächste Schritte - -### Sofort (Priorität 1) -1. **Tests konfigurieren und ausführen** - CTest im Docker-Container -2. **ArcGIS-Integration prüfen** - `./external/ArcGIS/MapsSDK_Qt_300.0.0/` im Build - -### Kurzfristig (Priorität 2) -3. **Fehlende External Dependencies sammeln** - - RTI Connext DDS 7.7.0 (manuelle CMake-Konfiguration nötig) - - ArcGIS Maps SDK Qt 300.0.0 - - Weitere Dependencies identifizieren - -4. **Lts/DDS Modul prüfen** - Vollständigkeit der Migration - -### Mittelfristig (Priorität 3) -5. **Lts/Plugins** - 60 Untermodule migrieren -6. **Lts/Proxies** - 13 Untermodule migrieren -7. **Lts/Services** - 47 Untermodule migrieren -8. **TetraIF** - Migration abschließen -9. **Z-Module** - fehlende Module migrieren - ---- - -## 📊 Repository Status - -| Repository | Branch | Letzte Commits | Status | -|------------|--------|----------------|--------| -| qt-migration-legatus | feature/qt6-migration-basis-modules | 5e0a2009 | ✅ Ready | -| qt5-legatus-legacy (nested) | story/qt6-migration | d5f9b0c | ✅ Ready | -| jenkins-ci-rme | - | - | Dockerfile aktualisiert | -| rpmbuild | - | - | Keine Änderungen | - ---- - -## ⚠️ Bekannte Issues - -1. **build-test Permission**: Von root im Container erstellt, muss mit `sudo` gelöscht werden -2. **RTI Connext**: Keine CMake Config vorhanden, manuelle Pfad-Konfiguration nötig -3. **ElevationMap**: Dependency entfernt, echte Integration noch offen - ---- - -**Erstellt**: 2026-08-20 20:37 UTC -**Nächster Checkpoint**: Test-Ausführung und ArcGIS-Integration