7.6 KiB
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
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)
Lts/Plugins/Timeline/TlnDataPluginInterface.h:7—fatal error: ExerciseEventManagement/eem.hpp: No such file or directoryLts/Tools/VapixConfig/httprequesthandler.cpp— Qt6 API compatibility (fixed above, recompile needed)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.hppgeneration: 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
-
Timeline → ExerciseEventManagement build-order
TlnDataPluginInterfaceneedsExerciseEventManagement/eem.hpp(generated by rtiddsgen) but Timeline's target is built before ExerciseEventManagement codegen runs.
Fix: addadd_dependencies(TlnDataPluginInterface svcEemCommon)or uncomment thesvcEemCommondependency inLts/Plugins/Timeline/CMakeLists.txt. -
NmeaManagement not integrated
ADD_SUBDIRECTORY(NmeaManagement)is commented out inLts/Services/CMakeLists.txt. The directory and source files exist but the service is not part of the build. -
81 uncommitted files in working tree (changes from the
finalize Qt6/C++17 migration cleanupcommit onfeature/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