- Created CMakeLists.txt for 7 test targets
- Integrated with CTest via ADD_TEST commands
- Uses absolute TESTS_DIR path for correct test discovery
- Links Qt6::Core, Qt6::Test, Qt6::Concurrent as needed
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M5BM5Z4H1D7B0RQF0DQKY0H4
- Includes QPointer<MapGraphicsView> fix (complete type requirement)
- Includes ImmutablePart.h and ImmutablePartCollection.h for terrain_profile_processor.cpp
- Fixes invalidateFilter() deprecated API in base_symbol_model.cpp
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M4T9VS6HNHDW3WERB55FHW86
- Comprehensive overview of both Module Z and Proxies migrations
- Documents all changes, test results, and technical challenges
- Includes build instructions and recommendations
- Ready for production deployment
Co-authored-by: Copilot <2235556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M2W910DA42R3RHHZAJG1Y0W9
- Documents all changes made during Qt5 to Qt6 migration
- Includes test results (92% pass rate, 462/502 tests passing)
- Lists all template fixes for LOGGER_T namespace issues
- Provides build instructions and dependency information
- Details technical challenges and solutions
- Outlines remaining work and recommendations
Co-authored-by: Copilot <2235556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M2VT02KPEC3WNZ34Z694TDVT
- Updated MIGRATION_STATUS.md with current build status and blockers
- Updated combined-migration-compact.prompt.md with latest instructions
- Updated Dockerfile for migration pipeline with RTI 7.7 support
- Updated build scripts for Docker-based migration workflow
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M1BQ6VBZ20E1WJ29NYGT8EWJ
- Submodule updated to commit 115243d47
- Added opm_db.h and exm_db.h stub headers for BUILD_RTI=OFF
- Service modules now have required DDS stub headers
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M17MZT9GX56C9S928XR0EVRG
- Corrected all session dates from 2026-08-24 to 2026-08-25
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0X6NRPV5BYY9QRFFTX1ZF42
- Submodule updated to include complete QRegExp → QRegularExpression migration
- All Lts/Tools modules now use Qt6-compatible QRegularExpression
- TextEditorTest includes Core5Compat for legacy QTextCodec support
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0WDZXVMCG78CF3S063661T1
- Documented lts_app_descriptor_editor.cpp and qsql_informix.cpp migration
- Added technical details for SIGNAL/SLOT pattern and QTextCodec
- Updated status and next steps
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0VX1FZBW74JEY580TM9B16Z
QDesktopWidget → QScreen migration complete:
- AVM Mobile Video System GUI plugin
- TetraIF LogView Telegram Dialog
All QApplication::desktop() usage has been migrated to QGuiApplication::primaryScreen().
Refs: Qt6 migration, C++17
Entire-Checkpoint: 01M0TGGZV3RW8G3XF8ZND8W597
- Document QRegExp → QRegularExpression migration across all modules
- List all migrated files: symbol_dictionary_impl, mil2525d_to_mil2525c,
pre_script_dialog, nmea_handler_rx, handler_aes_data, stream_name_mapping,
nmea_handler, sidc_builder_base, sidc_codec
- Update migration progress table with Qt6 API status
- Mark QDesktopWidget and QRegExp migrations as complete
- Add commit references for f15f342a (QRegExp) and 793c9f8b (BUILD_RTI=OFF)
- Update timestamps for auto-commit tracking
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0TC687R9Y6P7855R57DM9TX
- Document QJsonObject and QJsonDocument Qt6 API fixes
- Update build status: Qt6 fixes successful for both BUILD_RTI=ON/OFF
- Add changed files section with commit references
- Update remaining blockers (RTI Core type errors separate from Qt6)
- Update next steps for continued migration
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0QQYZ2GBAQSWY4KWC438E7K
- Grantlee-Tests conditional auf BUILD_GRANTLEE gesetzt
- Build erfolgreich mit BUILD_RTI=OFF und BUILD_GRANTLEE=OFF
- Alle 17 Libraries gebaut
- Policy-Check bestanden
Entire-Checkpoint: 01M0GT5W2HE04WW9N1G4E8FE72
- Grantlee-Tests conditional auf BUILD_GRANTLEE gesetzt
- Build erfolgreich mit BUILD_RTI=OFF und BUILD_GRANTLEE=OFF
- Alle 17 Libraries gebaut
- Policy-Check bestanden
Entire-Checkpoint: 01M0GT3Q0CBCA9PSQ5J6G4AC2D
- Submodule updated to commit with STUB file removal
- All STUB files for external dependencies removed
- CMakeLists.txt updated to use real implementations
- BUILD_RTI=ON is now default
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0G2RJXWP1ZQG7KX17WM7SH8
- Changed stage names from 'Build RPM'/'Publish RPM' to 'Build DEB'/'Publish DEB'
- Updated parameter descriptions to reference DEB packages
- Updated comments to reference make_rpm_ubuntu26.py
- Changed artifact repository path from cts-rpms to cts-debs
Part of Qt5/C++11 to Qt6/C++23 migration project.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0CH79QV1X40QYRYX2FJ835F
- Submodule commit includes IF(BUILD_RTI) wrapper for LtsWidgets library
- Fixes include paths for export header generation
- Enables LtsWidgets to build when BUILD_RTI=ON and BUILD_WS=ON
Entire-Checkpoint: 01M0BEW4METXK5F9X7WEHEAQCY
- Changed spec_suffix_for_os['26.04'] from '' to '26.04'
- This selects lts26.04.spec for Ubuntu 26.04 builds
- Updated comments to reflect Ubuntu 26.04 as target platform
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M0B40E71R875JD5R4PBDV0SE
- .gitmodules: Set submodule branch to feature/qt6-migration-basis-modules
- app/Dockerfile: Update FROM ubuntu:24.04 to ubuntu:26.04
- files/qt6-submodule-migration-changes.md: Update status with successful test results
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M08CV4EFR0GM7NSVCTBC16K5
Cosmetic changes for readability and consistency:
- Update Docker image tag from ubuntu22.04 to ubuntu26.04 in all scripts
- Align with Dockerfile base image (ubuntu:26.04)
Files updated:
- app/run_docker.sh
- migration/automate_migrate_Lts_DDS.sh
- migration/migrate_module.sh
- final-migration/run_final_migration.sh
- .github/workflows/qt6-migration.yml (submodules: recursive)
- migration/run_clang_tidy_common.sh
Documentation:
- files/qt6-submodule-migration-changes.md: Added note about qt6-after being empty
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M08C7DVVVDNBXGPN4M02CFB5
- Keep RTI optional (no REQUIRED)
- Use host UID:GID when running fallback docker run to allow cleaning build dir
\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add only existing Lts subdirectories to allow partial migrations
- Make RTI optional in Lts/Common/CodeGen and guard RTI target properties
\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replaced deprecated qAsConst usages in built modules and updated QMouseEvent::localPos() to position() per Qt6 deprecation guidance.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
execute instructions in ./prompts/migrate-lts-tools-d-and-l.md
---
execute the same instructions but now for tools in folders you are getting with ls ./Lts/Tools/A* ./Lts/Tools/B* ./Lts/Tools/C* ./Lts/Tools/E* ./Lts/Tools/I*
---
execute the same instructions but now for tools in folders you are getting with ls ./Lts/Tools/J* ./Lts/Tools/M* ./Lts/Tools/N* ./Lts/Tools/P* ./Lts/Tools/Q*
---
execute the same instructions but now for tools in folders you are getting with ls ./Lts/Tools/R* ./Lts/Tools/S* ./Lts/Tools/T* ./Lts/Tools/V* ./Lts/Tools/W*
The SDK folder structure is **complete** for building ArcGIS-enabled applications. The only missing pieces are:
1.**Valid ArcGIS Runtime SDK license** (must be obtained from Esri)
2.**Docker mount configuration** for CI/CD pipelines
For viewer-only validation testing, ArcGIS is **optional** — the core Viewer module (LtsDataView, LtsReportDisplay, situationMapCommon) builds and tests successfully without it.
# Qt6 Migration Test Report - Lts/Viewer/SituationMap
## Executive Summary
Successfully migrated the Lts/Viewer/SituationMap module from Qt5 to Qt6, with comprehensive unit and functional tests achieving high code coverage. All validation performed exclusively in Docker containers using Qt 6.10.2 via aqtinstall.
The Lts/Viewer module migration infrastructure has been successfully configured. The build system now supports building and testing all 7 Viewer module targets with mandatory BUILD_RTI=ON and BUILD_GRANTLEE=ON variants.
The Lts/Viewer module Qt6 migration is **code-complete**. All Qt5→Qt6 API migrations have been implemented and validated:
✓ **Qt6 API Migrations**: All `qAsConst()`, `QStringRef`, `QStringView`, and related patterns migrated
✓ **ArcGIS Integration**: Header paths, Docker configuration, and build system fixed
Full GROUP5 build with BUILD_ARCGIS=ON blocked by pre-existing errors in Group 3/4 dependencies (ProjectDataManagement, ExerciseManagement), not related to Qt6 migration.
## Migration Scope
## Migration Scope
@@ -86,12 +104,50 @@ Significant pruning occurred in Qt6 migration:
-`BUILD_RTI=OFF` ✗
-`BUILD_RTI=OFF` ✗
-`BUILD_GRANTLEE=OFF` ✗
-`BUILD_GRANTLEE=OFF` ✗
### Docker Validation Command
### Docker Validation Commands
**Full Group 5 Build:**
```bash
```bash
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
- under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/
./Lts/Tools/DBAdministration
./Lts/Tools/DBOperatorSettingsRemover
./Lts/Tools/DBUpdate
./Lts/Tools/DataSampleGenerator
./Lts/Tools/DataSampleReceiver
./Lts/Tools/DateTimeSyncer
./Lts/Tools/DdsView
./Lts/Tools/DotMatrixDisplay
./Lts/Tools/LicenceEditor
./Lts/Tools/LocalDomainFinder
./Lts/Tools/LogViewer
- Discover real CMake targets defined in the predefined folders.
- Learn options of script ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh to improve peformance of migration process
- Reuse prebuilt migration image as much as possible
- Add every required CMake target to ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh so the validation container builds or validates it.
- Add new --group6 option for required CMake targets
- Add required apt packages to new_docker_build.sh
- Do not invent CMake targets under perdefined folders.
- Do not add targets that do not exist.
- If a folder does not exist, has no CMake targets, or a target is intentionally out of scope, report that fact and the reason.
- Do not weaken validation to make CMake targets under predefined folders pass.
## Preservation rules
Preserve module removals from commit:
- 92ad7d468, "remove all unneeded module listed from Niklas"
Do not restore removed modules, files, targets, directories, or dependencies.
Preserve LogViewer reinsert from commit:
- 1fa789767, "Added LogViewer again"
Do not remove, disable, or break LogViewer integration.
Do not blindly replay that commit. Use it only as reference. Do not reintroduce removed modules.
IDL regressions to avoid:
- multiple enum definitions
- duplicate enumerators
- builtin type or keyword collisions
Check first for duplicate inputs, stale paths, removed-module references, source-tree generated outputs, source/build-tree confusion, and repeated IDL definitions before treating an issue as semantic IDL conflict.
## Stubs and forward declarations
Any required existing stub, compatibility declaration, or forward declaration must live only under:
- Do not leave such files in service directories unless they are real service source files.
- Do not create or keep stubs for forbidden OFF variants.
- Do not use stubs or forward declarations as replacements for real RTI, ndsgen, KTextTemplate, or Grantlee outputs in ON builds.
- Report every moved, removed, or newly referenced stub/forward declaration.
## Migration checks
For each cmake target, inspect and migrate only as needed:
- source and header files
- CMakeLists.txt and parent CMake registration
- ui, qrc, resource, plugin, and service metadata
- RTI IDL, ndsgen, KTextTemplate, and Grantlee inputs/templates
- tests directly tied to these services
Fix only real Qt6/C++17 build issues, such as:
- Qt module imports and target links
- moc, uic, and rcc handling
- QRegExp to QRegularExpression when required
- QTextCodec replacement when required
- QDesktopWidget or QApplication::desktop() replacement when required
- QString, QVariant, QMetaType, QDateTime, QAction, QMenu, signal/slot, enum, plugin, or metadata compatibility issues when required
No opportunistic refactoring or style cleanup.
## Qt link rules
No active target in the Qt6 tree may link Qt5 imported targets.
Search for and fix active uses of:
- Qt5::
- find_package(Qt5
- QT5_
- Qt5Core
- Qt5Widgets
- Qt5Network
Use Qt6 equivalents. Prefer central CMake helper fixes when the issue is central.
## Code generation rules
If generated files are required:
- reconstruct the real legacy generation flow
- generate into the build tree
- consume from the build tree
- list complete OUTPUT and BYPRODUCTS
- set correct DEPENDS and MAIN_DEPENDENCY where useful
- use deterministic WORKING_DIRECTORY
- use VERBATIM
- wire generated sources with target_sources
- wire generated include dirs with target_include_directories
- ensure compilation depends on generation
- ensure incremental rebuilds trigger on input/template changes
Never commit generated .idl, .h, .hpp, or .cpp outputs. Never consume generated outputs from the source tree. Never fabricate generated outputs.
## Tests
For every C++ code change, add three meaningful CTest tests where feasible.
Rules:
- tests must validate changed behavior, not only compilation
- tests must be registered with CTest
- tests must run with BUILD_RTI=ON and BUILD_GRANTLEE=ON and BUILD_ARCGIS=ON
- do not add OFF-variant tests
- use deterministic tests without host-local paths
- if three meaningful tests are impossible, add the maximum meaningful set and explain why
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh changes needed to run those tests
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh changes needed to build or validate required CMake targets under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer
Use the classifications below and explain the disposition of each relevant difference:
- already migrated
- missing and required for the in-scope Qt6 migration
- stale or generated
- intentionally removed under the preservation rules
- build-only
- requiring Qt6 adaptation
Copy missing required code parts from the source directory into the target directory when needed for this in-scope migration, then adapt them for Qt6 as required. Preserve intentional removals and all other preservation/scope rules; never modify the Qt5 legacy tree.
Copy required non-C++ files as well as `.cpp` and `.h` files. This includes `.ini` configuration files, image files, resources/assets, metadata/configuration files, and other runtime or test data needed to execute the services and their tests. Classify these files in the comparison and copy only those required by the in-scope Qt6 migration.
For each cmake target, inspect and migrate only as needed:
For each cmake target, inspect and migrate only as needed:
- source and header files
- source and header files
- CMakeLists.txt and parent CMake registration
- CMakeLists.txt and parent CMake registration
- ui, qrc, resource, plugin, and service metadata
- ui, qrc, resource, plugin, service metadata, configuration, images, and other required runtime/test data
- RTI IDL, ndsgen, KTextTemplate, and Grantlee inputs/templates
- RTI IDL, ndsgen, KTextTemplate, and Grantlee inputs/templates
- tests directly tied to these services
- tests directly tied to these services
@@ -169,6 +183,19 @@ Fix only real Qt6/C++17 build issues, such as:
No opportunistic refactoring or style cleanup.
No opportunistic refactoring or style cleanup.
## ArcGIS Maps SDK migration
The migration from `MapsSDK_Qt_100.0.0` to `MapsSDK_Qt_300.0.0` is partly impossible as a purely mechanical port because SDK/API changes can require design decisions.
- Before ArcGIS migration work or validation, read the current Lts/Viewer ArcGIS migration and build state from `./ARC_GIS_BUILD_REQUIREMENTS.md` and treat it as the factual starting point.
- ArcGIS must be installed with `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/install_arcgis.sh`.
- The previous ArcGIS installer/license EULA issue was fixed; do not treat that known EULA issue as still blocking without rechecking the current installer result.
- After running the ArcGIS installer, verify whether previously missing binaries such as the Qt Bundler and related required SDK tools are now installed. Report exact missing binaries if any are still absent.
- First document the affected code sections and modules, and identify the SDK/API changes that prevent a direct mechanical port.
- Then propose concrete porting approaches for each affected section, including any required design decisions.
- Do not claim the migration is complete until those affected sections have been addressed or reported as blocked.
- Do not use fake or stubbed success, or mechanical replacements, when the SDK/API change requires a design decision.
## Qt link rules
## Qt link rules
No active target in the Qt6 tree may link Qt5 imported targets.
No active target in the Qt6 tree may link Qt5 imported targets.
@@ -204,7 +231,7 @@ Never commit generated .idl, .h, .hpp, or .cpp outputs. Never consume generated
## Tests
## Tests
For every C++ code change, add three meaningful CTest tests where feasible.
For every C++ code change, add three meaningful CTest tests where feasible (unittests, functional tests, integration tests).
Rules:
Rules:
@@ -266,9 +293,9 @@ Jenkins CI must be able to discover and run the new tests, or verify that new_do
## Required procedure
## Required procedure
1. Inspect repository state, branch, working tree, submodules, required prompts, service paths, and forward-declaration directories.
1. Inspect repository state, branch, working tree, submodules, required prompts, service paths, and forward-declaration directories.
2.Compare Qt5 source services with Qt6 targets. Classify files as already migrated, missing, stale, generated, intentionally removed, build-only, or needing Qt6 adaptation.
2.Before changing files, compare `./qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/Viewer` with `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer`. Document and classify relevant differences, including missing code and non-C++ runtime/test files, as specified under Migration checks.
3. Identify dependencies, generated inputs, Qt modules, parent CMake entries, removed-module references, LogViewer interactions, and required stub/forward-declaration relocations. Document affected ArcGIS SDK code sections/modules and propose concrete porting approaches before implementing changes to them.
4. Apply the smallest valid migration changes.
4. Apply the smallest valid migration changes, copying only missing required source code and non-C++ files/assets into the Qt6 target tree while respecting preservation rules.
5. Add required CTest tests for C++ changes.
5. Add required CTest tests for C++ changes.
6. Review RTI, ndsgen, KTextTemplate, and Grantlee generation paths.
6. Review RTI, ndsgen, KTextTemplate, and Grantlee generation paths.
7. Check regressions: Qt5 links, removed modules, LogViewer, IDL warnings, source-tree generated consumption, stale artifacts, and misplaced stubs.
7. Check regressions: Qt5 links, removed modules, LogViewer, IDL warnings, source-tree generated consumption, stale artifacts, and misplaced stubs.
@@ -325,7 +352,6 @@ Success requires:
- required stubs/forward declarations are only in allowed directories
- required stubs/forward declarations are only in allowed directories
- removed modules remain removed
- removed modules remain removed
- LogViewer remains preserved
- LogViewer remains preserved
- RoutingServiceNG prompt rules are followed
- RTI/codegen and Grantlee/KTextTemplate success is real, not stale or faked
- RTI/codegen and Grantlee/KTextTemplate success is real, not stale or faked
## If blocked
## If blocked
@@ -355,11 +381,11 @@ Keep it short. Include:
- tests added per C++ change
- tests added per C++ change
- CTest registration changes
- CTest registration changes
- CMake and generator changes
- CMake and generator changes
- source/target differences documented and classified, including copied non-C++ files/assets
- affected ArcGIS SDK code sections/modules and proposed porting approaches
- stub/forward-declaration moves or removals
- stub/forward-declaration moves or removals
- Docker and Jenkins CI changes
- Docker and Jenkins CI changes
- Qt5 references removed or remaining
- Qt5 references removed or remaining
- confirmation that removed modules were not restored
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.