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

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)

  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