187 lines
7.6 KiB
Markdown
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**
|