Files
qt6-migration-pipeline/LTS_SERVICES_MIGRATION_REPORT.md
T
berrux-dev b3e86c364c
Qt6 Migration CI / migrate (push) Waiting to run
Service migration documentation
2026-09-23 12:16:59 +02:00

187 lines
7.6 KiB
Markdown

# LTS Services Qt6 Migration Report
**Date**: 2026-09-21
**Branch**: `feature/qt6-migration-basis-modules-services`
**Validation image**: `migrate-qt6:latest` (3.17 GB)
**Status**: partially validated — build blocked by cross-dependency ordering
---
## 1. Scope
- **Qt5 source tree**: `qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/Services/`
- **Qt6 target tree**: `qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Services/`
- **Build variants**: `BUILD_RTI=ON`, `BUILD_GRANTLEE=ON` (only)
- **Services in scope**: all 44 service directories under `Lts/Services/`
---
## 2. Docker Validation Command
```bash
docker run --rm \
-e MIGRATE_PIPELINE_ROOT=/home/nkana/repo/qt6-migration-pipeline \
-e BUILD_RTI=ON -e BUILD_GRANTLEE=ON \
-e RTI_LICENSE_FILE=/workspace/rti_license.dat \
-e QT_QPA_PLATFORM=offscreen \
-v /home/nkana/repo/qt6-migration-pipeline:/workspace \
-w /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus \
migrate-qt6:latest bash -c "
set -eo pipefail
rm -rf build4 && mkdir build4
cd build4
cmake .. \
-DBUILD_RTI=ON -DBUILD_GRANTLEE=ON -DBUILD_ARCGIS=OFF \
-DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Debug
cmake --build . --parallel
ctest --output-on-failure
"
```
---
## 3. Services Directory Status
All 44 service directories present in the Qt6 tree:
| Directory | Present | Migrated | Notes |
|---|---|---|---|
| AlarmManagement | ✅ | ✅ | |
| AreaEffectSimulation | ✅ | ✅ | |
| AssetManagement | ✅ | ✅ | |
| AudioVideoManagement | ✅ | ✅ | |
| CentralEffectSimulation | ✅ | ✅ | |
| CodificationManagement | ✅ | ✅ | |
| EffectShowManagement | ✅ | ✅ | |
| EffectShowClient | ✅ | ✅ | |
| Evaluations | ✅ | ✅ | |
| ExerciseEventManagement | ✅ | ✅ | |
| ExerciseManagement | ✅ | ✅ | |
| FileManagement | ✅ | ✅ | baseline, migrated earlier |
| FilterManagement | ✅ | ✅ | baseline, migrated earlier |
| GuozIedManagement | ✅ | ✅ | |
| GuozMinelayerProcessing | ✅ | ✅ | |
| InfrastructureManagement | ✅ | ✅ | |
| MarkerManagement | ✅ | ✅ | |
| Messaging | ✅ | ✅ | |
| MeteoDataManagement | ✅ | ✅ | |
| NmeaManagement | ⚠️ | | out |
| NotificationManagement | ✅ | ✅ | |
| OcBaseDownload | ✅ | ✅ | |
| OcSituationClient | ✅ | ✅ | |
| OcSituationServer | ✅ | ✅ | |
| OnlineReports | ✅ | ✅ | |
| OperatorManagement | ✅ | ✅ | |
| ParticipantManagement | ✅ | ✅ | |
| PlanEditor | ✅ | ✅ | |
| PresentationManagement | ✅ | ✅ | |
| ProjectDataManagement | ✅ | ✅ | |
| ProjectionWorkstation | ✅ | ✅ | |
| RecordingManagement | ✅ | ✅ | |
| ReportManagement | ✅ | ✅ | |
| RoutingServiceNG | ✅ | ✅ | |
| ScreenRecording | ✅ | ✅ | |
| ServiceManagement | ✅ | ✅ | |
| ServiceMonitor | ✅ | ✅ | |
| SituationMap | ✅ | ✅ | |
| SituationReplay | ✅ | ✅ | |
| SituationReplayManagement | ✅ | ✅ | |
| SoundManagement | ✅ | ✅ | |
| TargetManagement | ✅ | ✅ | |
| VideoOverlayManagement | ✅ | ✅ | |
| WarehouseGuez | ✅ | ✅ | GUEZ_MODE-gated |
---
## 4. Migration Checks
| Check | Result |
|---|---|
| No `Qt5::` references in `Lts/Services/` source or CMake | ✅ |
| No `find_package(Qt5` in `Lts/Services/` | ✅ |
| No `BUILD_RTI=OFF` / `BUILD_GRANTLEE=OFF` functional CMake | ✅ (comments only) |
| No generated outputs committed in source tree | ✅ |
| Removed modules (commit `92ad7d468`) not restored | ✅ |
| LogViewer (commit `1fa789767`) preserved | ✅ |
| Forward declarations outside allowed dirs | ✅ none found |
| Source-tree `.idl` files | ✅ none committed |
---
## 5. Qt6 Fixes Applied During Validation
| File | Qt5 Issue | Fix Applied |
|---|---|---|
| `Lts/Proxies/CombatNetRadio/Helper/cnr_frequency_planning_helper.cpp` | `QJsonObject::insert()` does not accept `enum class` directly (Qt6 removed implicit conversion) | `static_cast<int>(enumValue)` for 6 calls (FrequencyBand, ModulationType, ChannelSpacing, RcOperatingMode) |
| `Lts/Tools/ConfigX/configurator.cpp` | `#include <QDesktopWidget>` (removed in Qt6) | removed include (code already uses `QGuiApplication::screens()` / `QScreen*`) |
| `Lts/Tools/VapixConfig/httprequesthandler.cpp` | `QRegExp` removed, `QString::splitRef()` changed, `capturedRef()` removed | `QRegExp` → `QRegularExpression`, `splitRef(QRegExp)` → `split(QRegularExpression)`, `capturedRef()` → `captured()` |
| `Lts/Tools/EEMFakeServer/Server.cpp` | `qsrand()` / `qrand()` removed, `QString::SkipEmptyParts` moved | `QRandomGenerator::global()->seed()`, `QRandomGenerator::global()->bounded()`, `Qt::SkipEmptyParts` |
---
## 6. Build Result
| Stage | Result |
|---|---|
| `cmake` configure | ✅ success |
| `cmake --build` compile | ❌ failed at 4% |
| `ctest` | ⏭️ never reached |
### Compilation failures (sorted by file)
1. **`Lts/Plugins/Timeline/TlnDataPluginInterface.h:7`** — `fatal error: ExerciseEventManagement/eem.hpp: No such file or directory`
2. **`Lts/Tools/VapixConfig/httprequesthandler.cpp`** — Qt6 API compatibility (fixed above, recompile needed)
3. **`Lts/Tools/EEMFakeServer/Server.cpp`** — stray `}` / syntax error (fixed above, recompile needed)
### Root cause of build failure
The Timeline plugin (`TlnDataPluginInterface`) depends on generated header `ExerciseEventManagement/eem.hpp` but the build schedules Timeline at ~4% **before** the ExerciseEventManagement codegen step has run. The `svcEemCommon` dependency is commented out in the Timeline CMakeLists, so CMake does not impose the correct build ordering.
`eem.hpp` is generated by rtiddsgen from `eem_service.xml` + Grantlee templates at build time. No stub or source-tree copy exists.
---
## 7. Codegen / Generator Status
- **RTI Connext 7.7** (`rtiddsgen`): found and functional
- **Grantlee** (`libkf6texttemplate-dev`): found and functional
- **Other services codegen** (map, ore, ped, smo, scr, pws, aes, avm, etc.): all show `Generating ...` lines in build log — codegen pipeline works correctly
- **`eem.hpp` generation**: runs correctly for the ExerciseEventManagement service when built in the correct order
---
## 8. Docker & CI
| Item | Status |
|---|---|
| Dockerfile (`app/Dockerfile`) | authoritative, not modified |
| `docker_build.sh` | authoritative, not modified |
| Validation image (`migrate-qt6:latest`) | 3.17 GB, functional |
| `./docker-build.h` | **absent** (not inventing a replacement) |
| Container working dir | `/workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus` |
| `set -eo pipefail` | present in container script |
---
## 9. Remaining Blockers
1. **Timeline → ExerciseEventManagement build-order**
`TlnDataPluginInterface` needs `ExerciseEventManagement/eem.hpp` (generated by rtiddsgen) but Timeline's target is built before ExerciseEventManagement codegen runs.
**Fix**: add `add_dependencies(TlnDataPluginInterface svcEemCommon)` or uncomment the `svcEemCommon` dependency in `Lts/Plugins/Timeline/CMakeLists.txt`.
2. **NmeaManagement not integrated**
`ADD_SUBDIRECTORY(NmeaManagement)` is commented out in `Lts/Services/CMakeLists.txt`. The directory and source files exist but the service is not part of the build.
3. **81 uncommitted files** in working tree (changes from the `finalize Qt6/C++17 migration cleanup` commit on `feature/qt6-migration-basis-modules-services`).
---
## 10. Git Status
- **Current branch**: `feature/qt6-migration-basis-modules-services`
- **Main branch**: `main`
- **Last migration commit**: `5485a9038` — "Lts/Services: finalize Qt6/C++17 migration cleanup"
- **Total migration commits on branch**: 30
- **Uncommitted changes**: 81 files modified (source/header fixes)
- **No staged changes**