Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
882a9d57e9 | ||
|
|
001f95695c | ||
|
|
a47d5f3aa4 | ||
|
|
ea90652fd4 | ||
|
|
5f59c0e5df | ||
|
|
b12eae9b6a | ||
|
|
c8efdeb092 | ||
|
|
4c30e54972 | ||
|
|
337e7533e3 | ||
|
|
3e6a83285f | ||
|
|
11ccc9efcc | ||
|
|
b3e86c364c |
No files matched your search
@@ -83,3 +83,4 @@ build-qt6
|
|||||||
build-qt6-old
|
build-qt6-old
|
||||||
build-qt6-new
|
build-qt6-new
|
||||||
fix_*.py
|
fix_*.py
|
||||||
|
.*
|
||||||
@@ -1,175 +0,0 @@
|
|||||||
# ArcGIS Build Requirements Analysis
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
This document analyzes the requirements for building full ArcGIS-enabled Qt6 applications in the Qt6 migration pipeline.
|
|
||||||
|
|
||||||
**Date:** 2026-09-24
|
|
||||||
**Branch:** feature/lts-viewer-validation-testing-phase
|
|
||||||
**Submodule:** qt6-migration-pipeline/qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## SDK Structure
|
|
||||||
|
|
||||||
**Location:** `./external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk/`
|
|
||||||
|
|
||||||
### Components Status
|
|
||||||
|
|
||||||
| Component | Status | Location |
|
|
||||||
|-----------|--------|----------|
|
|
||||||
| **Headers** | ✅ Present | `sdk/include/` (37K+ header files) |
|
|
||||||
| **Linux x64 Libraries** | ✅ Present | `sdk/linux/x64/lib/` |
|
|
||||||
| - libruntimecore.so | ✅ 162MB | Core runtime engine |
|
|
||||||
| - libEsriCommonQt.so | ✅ 27MB | Common Qt bindings |
|
|
||||||
| - libEsriRuntimeQt.a | ✅ 86MB | Static C++ API library |
|
|
||||||
| **CMake Config** | ✅ Present | `sdk/ideintegration/ArcGISRuntime.cmake` |
|
|
||||||
|
|
||||||
### CMake Targets Defined
|
|
||||||
|
|
||||||
The `ArcGISRuntime.cmake` module defines the following imported targets:
|
|
||||||
|
|
||||||
- `ArcGIS::Core` - Core runtime (shared library)
|
|
||||||
- `ArcGIS::Cpp` - C++ API (static library)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Missing Requirements for Full Builds
|
|
||||||
|
|
||||||
### 1. ArcGIS Runtime SDK License ⚠️
|
|
||||||
|
|
||||||
The ArcGIS Maps SDK for Qt is **proprietary software** from Esri:
|
|
||||||
- Requires a valid license for production use
|
|
||||||
- Must be obtained separately from Esri
|
|
||||||
- Not included in this repository
|
|
||||||
|
|
||||||
### 2. Runtime Dependencies
|
|
||||||
|
|
||||||
For deployment, the following are needed:
|
|
||||||
- No `bin/` or `plugins/` directory in SDK (Qt plugins not bundled)
|
|
||||||
- Application must bundle required Qt plugins separately
|
|
||||||
- Runtime library path must include `/sdk/linux/x64/lib/`
|
|
||||||
|
|
||||||
### 3. Docker Build Integration
|
|
||||||
|
|
||||||
The SDK must be **mounted into Docker container** during build:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
-v /path/to/sdk:/workspace/external/ArcGIS
|
|
||||||
```
|
|
||||||
|
|
||||||
The `install_arcgis.sh` script:
|
|
||||||
- Expects SDK at `/workspace/external/ArcGIS`
|
|
||||||
- Creates symlink to `/repo/external/ArcGIS/MapsSDK_Qt_300.0.0/...`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Build Configuration
|
|
||||||
|
|
||||||
### Enable ArcGIS Builds
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./new_docker_build.sh --arcgis --group5
|
|
||||||
```
|
|
||||||
|
|
||||||
This will:
|
|
||||||
- Set `BUILD_ARCGIS=ON`
|
|
||||||
- Add ArcGIS SDK to `CMAKE_PREFIX_PATH`
|
|
||||||
- Enable `advancedSymbology` library build
|
|
||||||
- Link against `ArcGIS::ArcGIS` target
|
|
||||||
|
|
||||||
### CMake Configuration
|
|
||||||
|
|
||||||
CMake expects the following prefix path:
|
|
||||||
|
|
||||||
```cmake
|
|
||||||
-DCMAKE_PREFIX_PATH="...;/workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk;/usr/local"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Dependency Chain
|
|
||||||
|
|
||||||
```
|
|
||||||
advancedSymbology (Lts/Viewer/SituationMap/Symbology/)
|
|
||||||
└── ArcGIS::ArcGIS (ArcGIS Runtime SDK)
|
|
||||||
├── libruntimecore.so (162MB)
|
|
||||||
├── libEsriCommonQt.so (27MB)
|
|
||||||
└── libEsriRuntimeQt.a (86MB)
|
|
||||||
|
|
||||||
Lts/Plugins/AdvancedSymbology/
|
|
||||||
├── AsbDataPlugin → advancedSymbology
|
|
||||||
├── AsbSymbolProxyGuiPlugin → advancedSymbology
|
|
||||||
└── AsbData → advancedSymbology
|
|
||||||
```
|
|
||||||
|
|
||||||
### Key CMake Files
|
|
||||||
|
|
||||||
| File | Purpose |
|
|
||||||
|------|---------|
|
|
||||||
| `Lts/Viewer/SituationMap/Symbology/CMakeLists.txt` | Contains `BUILD_ARCGIS` conditional for advancedSymbology |
|
|
||||||
| `Lts/Plugins/AdvancedSymbology/Data/CMakeLists.txt` | Links AsbData, AsbDataPlugin against advancedSymbology |
|
|
||||||
| `Lts/Plugins/AdvancedSymbology/Gui/SymbolProxy/CMakeLists.txt` | Links AsbSymbolProxyGuiPlugin against advancedSymbology |
|
|
||||||
| `cmake/FindArcGISRuntime.cmake` | Locates ArcGIS SDK (via ArcGISRuntime.cmake) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Current Status
|
|
||||||
|
|
||||||
### Viewer-Only Builds (Without ArcGIS)
|
|
||||||
|
|
||||||
| Component | Status |
|
|
||||||
|-----------|--------|
|
|
||||||
| LtsDataView | ✅ Builds successfully |
|
|
||||||
| LtsDataViewTest | ✅ Passes CTest (headless) |
|
|
||||||
| LtsReportDisplay | ✅ Builds with KDReports |
|
|
||||||
| situationMapCommon | ✅ Builds successfully |
|
|
||||||
| advancedSymbology | ⚠️ NOT built (requires ArcGIS license) |
|
|
||||||
| Qt6 Deprecation Warnings | ✅ Zero warnings |
|
|
||||||
|
|
||||||
### Full ArcGIS-Enabled Builds
|
|
||||||
|
|
||||||
To enable full ArcGIS functionality:
|
|
||||||
|
|
||||||
1. ✅ SDK folder structure is complete
|
|
||||||
2. ⚠️ Obtain ArcGIS Runtime SDK for Qt license from Esri
|
|
||||||
3. ⚠️ Mount SDK into Docker build environment
|
|
||||||
4. ⚠️ Build with `--arcgis` flag
|
|
||||||
5. ⚠️ Ensure runtime library path includes ArcGIS libraries
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Verification Commands
|
|
||||||
|
|
||||||
### Check SDK Libraries
|
|
||||||
|
|
||||||
```bash
|
|
||||||
find ./external/ArcGIS -name "*.so" -o -name "*.a"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Build with ArcGIS Support
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./new_docker_build.sh --arcgis --group5
|
|
||||||
```
|
|
||||||
|
|
||||||
### Verify advancedSymbology Build
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check if library was built
|
|
||||||
ls -la build4/lib/libadvancedSymbology.so
|
|
||||||
|
|
||||||
# Check CMake configure output for ArcGIS
|
|
||||||
grep -i "arcgis" build4/CMakeCache.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
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.
|
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
# 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**
|
||||||
+38
-268
@@ -2,25 +2,7 @@
|
|||||||
|
|
||||||
## Executive Summary
|
## Executive Summary
|
||||||
|
|
||||||
The Lts/Viewer module Qt6 migration is **code-complete**. All Qt5→Qt6 API migrations have been implemented and validated:
|
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.
|
||||||
|
|
||||||
✓ **Qt6 API Migrations**: All `qAsConst()`, `QStringRef`, `QStringView`, and related patterns migrated
|
|
||||||
✓ **ArcGIS Integration**: Header paths, Docker configuration, and build system fixed
|
|
||||||
✓ **Build Validation**: Viewer module targets compile successfully (BUILD_ARCGIS=OFF validated)
|
|
||||||
✓ **CTest Integration**: LtsDataViewTest registered and passing (1.04 sec)
|
|
||||||
✓ **Build Script Enhancement**: `--build-viewer-only` option added to skip Groups 1-4 and build Viewer targets directly
|
|
||||||
✓ **KDReports Support**: LtsReportDisplay builds successfully with codification support
|
|
||||||
|
|
||||||
**Build Status**: Viewer module code changes complete. Successfully validated with `--build-viewer-only --no-arcgis`:
|
|
||||||
- ✓ situationMapCommon - Built successfully (no Qt6 warnings)
|
|
||||||
- ✓ advancedSymbologyXML - Built successfully (no Qt6 warnings)
|
|
||||||
- ✓ LtsDataView - Built successfully (no Qt6 warnings)
|
|
||||||
- ✓ LtsDataViewTest - PASSED (1.04 sec, headless execution)
|
|
||||||
- ✓ LtsReportDisplay - Built successfully with KDReports codification
|
|
||||||
- ✗ LtsFileDialog - Excluded from viewer-only builds (requires Group 4 svcExmCommon)
|
|
||||||
- ✗ advancedSymbology - Requires ArcGIS SDK headers (optional, requires SDK setup)
|
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
@@ -104,50 +86,12 @@ Significant pruning occurred in Qt6 migration:
|
|||||||
- `BUILD_RTI=OFF` ✗
|
- `BUILD_RTI=OFF` ✗
|
||||||
- `BUILD_GRANTLEE=OFF` ✗
|
- `BUILD_GRANTLEE=OFF` ✗
|
||||||
|
|
||||||
### Docker Validation Commands
|
### Docker Validation Command
|
||||||
|
|
||||||
**Full Group 5 Build:**
|
|
||||||
```bash
|
```bash
|
||||||
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --group5
|
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --group5
|
||||||
```
|
```
|
||||||
|
|
||||||
**Viewer-Only Build (Skip Groups 1-4):**
|
|
||||||
```bash
|
|
||||||
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
|
||||||
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --build-viewer-only
|
|
||||||
```
|
|
||||||
|
|
||||||
**Viewer-Only without ArcGIS:**
|
|
||||||
```bash
|
|
||||||
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
|
||||||
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --build-viewer-only --no-arcgis
|
|
||||||
```
|
|
||||||
|
|
||||||
### --build-viewer-only Option
|
|
||||||
|
|
||||||
Added to bypass pre-existing Group 3/4 build errors and validate Viewer module directly.
|
|
||||||
|
|
||||||
**Features:**
|
|
||||||
- Skips Groups 1-4 entirely
|
|
||||||
- Enables Group 5 Viewer targets
|
|
||||||
- Enables CTest for Viewer module tests
|
|
||||||
- Allows isolated validation of Qt6 migration
|
|
||||||
|
|
||||||
**Test Results (--build-viewer-only --no-arcgis):**
|
|
||||||
```
|
|
||||||
✓ situationMapCommon - Built successfully (no Qt6 warnings)
|
|
||||||
✓ advancedSymbologyXML - Built successfully (no Qt6 warnings)
|
|
||||||
✓ LtsDataView - Built successfully (no Qt6 warnings)
|
|
||||||
✓ LtsDataViewTest - PASSED (1.04 sec, headless execution)
|
|
||||||
✗ LtsFileDialog - Excluded from viewer-only builds (requires Group 4)
|
|
||||||
✓ LtsFileDialogTest - Excluded from viewer-only builds (requires Group 4)
|
|
||||||
✗ advancedSymbology - Skipped (requires BUILD_ARCGIS=ON)
|
|
||||||
✓ LtsReportDisplay - Built successfully with KDReports codification
|
|
||||||
```
|
|
||||||
|
|
||||||
**Validation:** No Qt5→Qt6 deprecation warnings in any Viewer module targets.
|
|
||||||
|
|
||||||
### Direct CMake Build Command
|
### Direct CMake Build Command
|
||||||
```bash
|
```bash
|
||||||
cmake -S qt-migration-legatus/qt6-after/qt6-migrated-legatus \
|
cmake -S qt-migration-legatus/qt6-after/qt6-migrated-legatus \
|
||||||
@@ -235,242 +179,68 @@ Required for Docker builds:
|
|||||||
- [x] CTest registration for LtsDataViewTest
|
- [x] CTest registration for LtsDataViewTest
|
||||||
- [x] CTest registration for LtsFileDialogTest
|
- [x] CTest registration for LtsFileDialogTest
|
||||||
- [x] Git commit created
|
- [x] Git commit created
|
||||||
- [x] **Qt6 API Migrations Complete**
|
|
||||||
- [x] `qAsConst()` → `std::as_const()` (10+ files in SituationMap/Map, SymbologyImpl)
|
|
||||||
- [x] `QStringRef` → `QStringView` (10+ files in Symbology, SymbologyImpl)
|
|
||||||
- [x] `QString::splitRef()` → `split()` (SymbologyImpl)
|
|
||||||
- [x] `QString::count()` → `size()` (Symbology)
|
|
||||||
- [x] QStringView 3-arg constructor → `.slice()` pattern (11 occurrences in sidc_builder.cpp)
|
|
||||||
- [x] Added `#include <utility>` for std::as_const (3 files)
|
|
||||||
- [x] **ArcGIS Integration Fixes**
|
|
||||||
- [x] Updated `new_docker_build.sh` with correct install_arcgis.sh path
|
|
||||||
- [x] Updated `install_arcgis.sh` with Docker workspace paths (/workspace/external)
|
|
||||||
- [x] Fixed FindArcGIS.cmake header path detection
|
|
||||||
- [x] Removed `arcgis/` prefix from includes (base_symbol_model.h/cpp, symbol_dictionary_impl.cpp, esri_dictionary_processor.h)
|
|
||||||
- [x] Removed problematic arcgis symlink causing "Too many levels of symbolic links" error
|
|
||||||
- [x] **Build Validation (BUILD_ARCGIS=OFF)**
|
|
||||||
- [x] Viewer module targets compile successfully: situationMapCommon, advancedSymbologyXML, LtsDataView
|
|
||||||
- [x] No Qt5→Qt6 deprecation warnings in Viewer module
|
|
||||||
- [x] LtsFileDialog blocked by ExerciseManagement/svcExmCommon dependency (pre-existing error)
|
|
||||||
- [x] **--build-viewer-only Option Integration**
|
|
||||||
- [x] Added `--build-viewer-only` command-line option to new_docker_build.sh
|
|
||||||
- [x] Added BUILD_VIEWER_ONLY environment variable handling
|
|
||||||
- [x] Added conditional build logic to skip Groups 1-4 when enabled
|
|
||||||
- [x] Updated usage() documentation
|
|
||||||
- [x] Tested successfully: skips Groups 1-4, builds Group 5 Viewer targets
|
|
||||||
- [x] Validated non-ArcGIS Viewer targets build without errors
|
|
||||||
- [x] **KDReports Integration for LtsReportDisplay**
|
|
||||||
- [x] Fixed FindKDReports.cmake to use CONFIG mode with explicit search paths
|
|
||||||
- [x] Added KDReports build from source to Dockerfile (apt package unavailable)
|
|
||||||
- [x] Fixed KDReports git clone branch name (removed non-existent branch reference)
|
|
||||||
- [x] Added symlink KDReports -> KDReports-qt6 for include path compatibility
|
|
||||||
- [x] Added BUILD_CODIFICATION support to new_docker_build.sh
|
|
||||||
- [x] LtsReportDisplay now builds successfully with codification support
|
|
||||||
- [x] **LtsFileDialog Exclusion from Viewer-Only Builds**
|
|
||||||
- [x] LtsFileDialog depends on Group 4 services (svcExmCommon, svcOpmCommon, svcFlmCommon)
|
|
||||||
- [x] Updated new_docker_build.sh to conditionally exclude LtsFileDialog when BUILD_VIEWER_ONLY=ON
|
|
||||||
- [x] **USE_PREBUILT_IMAGE Flag Fix**
|
|
||||||
- [x] Fixed premature DOCKER_IMAGE assignment before argument parsing
|
|
||||||
- [x] Container now correctly uses prebuilt image with cmake available
|
|
||||||
|
|
||||||
### Pending
|
### Pending
|
||||||
- [ ] Docker build validation with BUILD_ARCGIS=ON for advancedSymbology target (requires ArcGIS SDK setup)
|
- [ ] Docker build validation with `--group5` option
|
||||||
- [x] CTest execution in Docker container (viewer-only tests) - LtsDataViewTest PASSED
|
- [ ] CTest execution in Docker container
|
||||||
- [x] Jenkins/policy compatibility verification - No changes required
|
- [ ] Jenkins/policy compatibility verification
|
||||||
- [x] BUILD_GRANTLEE usage verification in all Viewer CMakeLists.txt files
|
- [ ] Full source file migration review (beyond initial grep)
|
||||||
- [ ] Fix Group 4 svcExmCommon 'Database' namespace error to enable LtsFileDialog build
|
- [ ] BUILD_GRANTLEE usage verification in all Viewer CMakeLists.txt files
|
||||||
|
|
||||||
## Known Issues
|
## Known Issues
|
||||||
|
|
||||||
### Build Blockers (Pre-existing, not Qt6 migration related)
|
None identified at this stage. The migration infrastructure is configured and ready for validation builds.
|
||||||
1. **ProjectDataManagement/svcPdmClient (Group 3)**: Build errors prevent reaching Group 5
|
|
||||||
- Missing 'Ftc' class
|
|
||||||
- 'tr_lts' undefined
|
|
||||||
- Interface implementation mismatches
|
|
||||||
- **Impact**: Full GROUP5 build with dependencies cannot complete
|
|
||||||
|
|
||||||
2. **ExerciseManagement/svcExmCommon (Group 4)**: Missing 'Database' namespace
|
|
||||||
- **Impact**: LtsFileDialog cannot build when full dependency chain is included
|
|
||||||
|
|
||||||
3. **LtsReportDisplay**: ~~KDReports dependency not found~~ - **RESOLVED**
|
|
||||||
- ~~**Impact**: Target skipped in build configuration~~
|
|
||||||
- **Fix**: Added symlink KDReports -> KDReports-qt6 in Dockerfile for include path compatibility
|
|
||||||
- **Status**: Now builds successfully with codification support
|
|
||||||
|
|
||||||
4. **advancedSymbology**: Requires ArcGIS Runtime SDK headers
|
|
||||||
- Missing: Symbol.h, DictionarySymbolStyle.h
|
|
||||||
- **Impact**: Cannot validate ArcGIS-dependent Viewer target without SDK setup
|
|
||||||
|
|
||||||
### Workarounds
|
|
||||||
- ✓ Use `--build-viewer-only` option to skip Groups 1-4 and build Viewer targets directly
|
|
||||||
- ✓ Viewer module code changes validated in partial builds (BUILD_ARCGIS=OFF)
|
|
||||||
- ✓ No Qt6 deprecation warnings in validated targets
|
|
||||||
- ✓ KDReports include path issue resolved with symlink in Dockerfile
|
|
||||||
- ✓ LtsReportDisplay now builds successfully with codification support
|
|
||||||
- Full integration build requires fixing Group 3/4 pre-existing errors or using `--build-viewer-only`
|
|
||||||
|
|
||||||
## Qt6 API Migration Details
|
|
||||||
|
|
||||||
### Files Modified for Qt6 Compatibility
|
|
||||||
|
|
||||||
**SituationMap/Map/**
|
|
||||||
- `situation_map_types.h` - Added `#include <utility>`, fixed `qAsConst`
|
|
||||||
- `operator_map_settings.cpp` - Added `#include <utility>`, fixed `qAsConst`
|
|
||||||
- `map_initializer.cpp` - Added `#include <utility>`, fixed 4 `qAsConst` occurrences
|
|
||||||
|
|
||||||
**SituationMap/SymbologyImpl/**
|
|
||||||
- `esri_dictionary_processor.cpp` - Fixed `QStringRef→split()`, `qAsConst`
|
|
||||||
- `esri_dictionary_processor_app6.cpp` - Fixed `qAsConst`, `QStringRef→split()`
|
|
||||||
- `esri_dictionary_processor_app6d.cpp` - Fixed `qAsConst`, `QStringRef→split()`
|
|
||||||
- `esri_dictionary_processor_mil2525d.cpp` - Fixed `qAsConst`, `QStringRef→split()`
|
|
||||||
- `base_symbol_model.h` - Removed `arcgis/` prefix from includes
|
|
||||||
- `base_symbol_model.cpp` - Removed `arcgis/` prefix from includes
|
|
||||||
- `symbol_dictionary_impl.cpp` - Fixed `QStringView` constructor, removed `arcgis/` prefix
|
|
||||||
- `esri_dictionary_processor.h` - Removed `arcgis/` prefix from includes
|
|
||||||
|
|
||||||
**SituationMap/Symbology/**
|
|
||||||
- `sidc_codec.h` - Replaced `QStringRef` with `QStringView`
|
|
||||||
- `symbol_properties.cpp` - Fixed `QStringView` with `.slice()`, `count()→size()`
|
|
||||||
- `sidc_builder.cpp` - Fixed 11 `QStringView` 3-arg constructor calls
|
|
||||||
- `sidc_builder_base.cpp` - Fixed 2 `QStringView` 3-arg constructor calls
|
|
||||||
- `xml_symbol_codec.h` - Fixed `split()` return type to `auto`
|
|
||||||
|
|
||||||
**Build System**
|
|
||||||
- `new_docker_build.sh` - Docker/ArcGIS path fixes
|
|
||||||
- `install_arcgis.sh` - Docker workspace paths
|
|
||||||
- `cmake/FindArcGIS.cmake` - Header path detection
|
|
||||||
- `Lts/Viewer/LtsDataView/CMakeLists.txt` - Added CTest registration
|
|
||||||
- `Lts/Viewer/LtsFileDialog/CMakeLists.txt` - Added CTest registration
|
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
|
|
||||||
1. **✓ Resolve Group 3/4 Build Errors** (Pre-existing, not Qt6 migration related)
|
1. **Docker Validation Build**
|
||||||
- ✓ Workaround implemented: `--build-viewer-only` option skips Groups 1-4
|
|
||||||
- ✓ Viewer module validated without Group 3/4 dependencies
|
|
||||||
- ⚠ Optional: Fix ProjectDataManagement/svcPdmClient and ExerciseManagement/svcExmCommon for full build
|
|
||||||
|
|
||||||
2. **✓ Docker Validation Build without ArcGIS** (COMPLETED)
|
|
||||||
- ✓ Validated with: `BUILD_RTI=ON BUILD_GRANTLEE=ON BUILD_CODIFICATION=ON ./new_docker_build.sh --build-viewer-only --no-arcgis`
|
|
||||||
- ✓ situationMapCommon: Built successfully (no Qt6 warnings)
|
|
||||||
- ✓ advancedSymbologyXML: Built successfully (no Qt6 warnings)
|
|
||||||
- ✓ LtsDataView: Built successfully (no Qt6 warnings)
|
|
||||||
- ✓ LtsReportDisplay: Built successfully with codification support (no Qt6 warnings)
|
|
||||||
- ✓ No Qt5→Qt6 deprecation warnings in Viewer module
|
|
||||||
- ✓ KDReports include path fixed via symlink (KDReports -> KDReports-qt6)
|
|
||||||
- ✓ FindKDReports.cmake updated to use CONFIG mode with /usr/local paths
|
|
||||||
|
|
||||||
3. **Docker Validation Build with ArcGIS**
|
|
||||||
```bash
|
```bash
|
||||||
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
cd qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
BUILD_RTI=ON BUILD_GRANTLEE=ON BUILD_ARCGIS=ON ./new_docker_build.sh --build-viewer-only
|
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --group5
|
||||||
```
|
```
|
||||||
- Validate advancedSymbology target with ArcGIS Runtime SDK
|
|
||||||
- Requires ArcGIS SDK headers at /workspace/external/ArcGIS/MapsSDK_Qt_300.0.0/...
|
|
||||||
|
|
||||||
4. **✓ CTest Execution** (COMPLETED)
|
2. **CTest Execution**
|
||||||
- ✓ LtsDataViewTest: PASSED (1.04 sec) with headless execution (QT_QPA_PLATFORM=offscreen)
|
- Verify LtsDataViewTest runs successfully
|
||||||
- ✓ LtsFileDialogTest: Excluded from viewer-only builds (requires Group 4 dependencies)
|
- Verify LtsFileDialogTest runs successfully
|
||||||
- ✓ Test auto-exit implemented with QTimer::singleShot to prevent hangs
|
- Check test output for any failures
|
||||||
- ✓ No test failures in Viewer module
|
|
||||||
|
|
||||||
5. **✓ Jenkins Compatibility**
|
3. **Jenkins Compatibility**
|
||||||
- ✓ Test names follow existing patterns (LtsDataViewTest, LtsFileDialogTest)
|
- Verify `ci/check_pr_policies.py` accepts new test names
|
||||||
- ✓ CTest registration uses standard NGL_ADD_EXECUTABLE macro
|
- Check `ci/Dockerfile.*` for any required updates
|
||||||
- ✓ No ci/ changes required for viewer-only builds
|
|
||||||
|
|
||||||
6. **✓ Migration Completion**
|
4. **Source File Review**
|
||||||
- ✓ Code migration: Complete
|
- Deep inspection of SituationMap subdirectories
|
||||||
- ✓ Docker validation (non-ArcGIS): Complete
|
- Verify all Qt5→Qt6 API migrations are complete
|
||||||
- ✓ LtsReportDisplay with KDReports: Complete
|
- Check for any remaining deprecated API usage
|
||||||
- ✓ CTest execution: Complete (LtsDataViewTest passes)
|
|
||||||
- ⚠ Docker validation (ArcGIS): Pending SDK setup (optional, requires ArcGIS license)
|
|
||||||
- ✓ Document final status and any remaining limitations
|
|
||||||
|
|
||||||
## Files Modified
|
## Files Modified
|
||||||
|
|
||||||
### Build System
|
1. `qt6-after/qt6-migrated-legatus/new_docker_build.sh` (+49 lines)
|
||||||
1. `qt6-after/qt6-migrated-legatus/new_docker_build.sh` (+49 lines) - GROUP5, BUILD_GRANTLEE, ArcGIS paths, BUILD_CODIFICATION, --build-viewer-only, LtsFileDialog exclusion
|
2. `qt6-after/qt6-migrated-legatus/Lts/Viewer/LtsDataView/CMakeLists.txt` (+5 lines)
|
||||||
2. `qt6-after/qt6-migrated-legatus/install_arcgis.sh` - Docker workspace paths
|
3. `qt6-after/qt6-migrated-legatus/Lts/Viewer/LtsFileDialog/CMakeLists.txt` (+5 lines)
|
||||||
3. `qt6-after/qt6-migrated-legatus/cmake/FindArcGIS.cmake` - Header path detection
|
|
||||||
4. `qt6-after/qt6-migrated-legatus/cmake/FindKDReports.cmake` - CONFIG mode with explicit search paths, KDReports-qt6 detection
|
|
||||||
5. `qt6-after/qt6-migrated-legatus/Lts/Viewer/LtsDataView/CMakeLists.txt` (+5 lines) - CTest registration
|
|
||||||
6. `qt6-after/qt6-migrated-legatus/Lts/Viewer/LtsFileDialog/CMakeLists.txt` (+5 lines) - CTest registration
|
|
||||||
7. `app/Dockerfile` - KDReports build from source, symlink KDReports -> KDReports-qt6 for include path compatibility
|
|
||||||
|
|
||||||
### Qt6 API Migration (Viewer Module)
|
|
||||||
6. `Lts/Viewer/SituationMap/Map/situation_map_types.h` - `#include <utility>`, `qAsConst`
|
|
||||||
7. `Lts/Viewer/SituationMap/Map/operator_map_settings.cpp` - `#include <utility>`, `qAsConst`
|
|
||||||
8. `Lts/Viewer/SituationMap/Map/map_initializer.cpp` - `#include <utility>`, 4× `qAsConst`
|
|
||||||
9. `Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor.cpp` - `QStringRef→split()`, `qAsConst`
|
|
||||||
10. `Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor_app6.cpp` - `qAsConst`, `QStringRef→split()`
|
|
||||||
11. `Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor_app6d.cpp` - `qAsConst`, `QStringRef→split()`
|
|
||||||
12. `Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor_mil2525d.cpp` - `qAsConst`, `QStringRef→split()`
|
|
||||||
13. `Lts/Viewer/SituationMap/SymbologyImpl/base_symbol_model.h` - ArcGIS include paths
|
|
||||||
14. `Lts/Viewer/SituationMap/SymbologyImpl/base_symbol_model.cpp` - ArcGIS include paths
|
|
||||||
15. `Lts/Viewer/SituationMap/SymbologyImpl/symbol_dictionary_impl.cpp` - `QStringView`, ArcGIS includes
|
|
||||||
16. `Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor.h` - ArcGIS include paths
|
|
||||||
17. `Lts/Viewer/SituationMap/Symbology/sidc_codec.h` - `QStringRef→QStringView`
|
|
||||||
18. `Lts/Viewer/SituationMap/Symbology/symbol_properties.cpp` - `QStringView.slice()`, `count()→size()`
|
|
||||||
19. `Lts/Viewer/SituationMap/Symbology/sidc_builder.cpp` - 11× `QStringView` 3-arg constructor
|
|
||||||
20. `Lts/Viewer/SituationMap/Symbology/sidc_builder_base.cpp` - 2× `QStringView` 3-arg constructor
|
|
||||||
21. `Lts/Viewer/SituationMap/SymbologyXML/xml_symbol_codec.h` - `split()` return type
|
|
||||||
|
|
||||||
## Commit Reference
|
## Commit Reference
|
||||||
|
|
||||||
### Initial Infrastructure (commit cdb8c754e)
|
|
||||||
```
|
```
|
||||||
Add GROUP5 build configuration and CTest registration for Viewer module
|
commit cdb8c754e
|
||||||
|
Author: [Your Name]
|
||||||
|
Date: [Current Date]
|
||||||
|
|
||||||
- Add GROUP5_TARGETS array with 7 Viewer module targets to new_docker_build.sh
|
Add GROUP5 build configuration and CTest registration for Viewer module
|
||||||
- Add BUILD_GRANTLEE support throughout build script
|
|
||||||
- Register LtsDataViewTest and LtsFileDialogTest with CTest
|
|
||||||
|
|
||||||
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
- Add GROUP5_TARGETS array with 7 Viewer module targets to new_docker_build.sh
|
||||||
```
|
- Add BUILD_GRANTLEE support throughout build script (help, env vars, cmake invocation)
|
||||||
|
- Fix duplicate BUILD_GROUP4 default in container script section
|
||||||
|
- Register LtsDataViewTest with CTest in LtsDataView/CMakeLists.txt
|
||||||
|
- Register LtsFileDialogTest with CTest in LtsFileDialog/CMakeLists.txt
|
||||||
|
- Update help text to document --group5/--no-group5 and --grantlee/--no-grantlee options
|
||||||
|
- Set BUILD_GROUP5=OFF and BUILD_GRANTLEE=ON as defaults
|
||||||
|
|
||||||
### Qt6 API Migration (multiple commits)
|
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
||||||
```
|
|
||||||
Migrate Qt5 APIs to Qt6 in Viewer module
|
|
||||||
|
|
||||||
- Replace qAsConst() with std::as_const() (10+ files)
|
|
||||||
- Replace QStringRef with QStringView (10+ files)
|
|
||||||
- Fix QStringView 3-arg constructor → .slice() pattern (13 occurrences)
|
|
||||||
- Replace QString::splitRef() with split()
|
|
||||||
- Replace QString::count() with size()
|
|
||||||
- Add #include <utility> for std::as_const
|
|
||||||
|
|
||||||
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
|
||||||
```
|
|
||||||
|
|
||||||
### ArcGIS Integration (multiple commits)
|
|
||||||
```
|
|
||||||
Fix ArcGIS Runtime SDK integration for Docker builds
|
|
||||||
|
|
||||||
- Update new_docker_build.sh with correct install_arcgis.sh path
|
|
||||||
- Update install_arcgis.sh with Docker workspace paths (/workspace/external)
|
|
||||||
- Fix FindArcGIS.cmake header path detection
|
|
||||||
- Remove arcgis/ prefix from includes (flat include directory structure)
|
|
||||||
- Remove problematic arcgis symlink
|
|
||||||
|
|
||||||
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
|
||||||
```
|
|
||||||
|
|
||||||
### KDReports Support (latest commits)
|
|
||||||
```
|
|
||||||
Add KDReports support for LtsReportDisplay with codification
|
|
||||||
|
|
||||||
- Update FindKDReports.cmake to use CONFIG mode with explicit search paths
|
|
||||||
- Fix new_docker_build.sh: add BUILD_CODIFICATION, exclude LtsFileDialog from viewer-only builds
|
|
||||||
- Add KDReports build from source to Dockerfile (apt package unavailable)
|
|
||||||
- Create symlink KDReports -> KDReports-qt6 for include path compatibility
|
|
||||||
- Validate viewer-only build with codification: LtsReportDisplay and LtsDataView build successfully
|
|
||||||
|
|
||||||
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Report Generated**: $(date)
|
**Report Generated**: $(date)
|
||||||
**Migration Phase**: Code Migration Complete ✓
|
**Migration Phase**: Infrastructure Configuration Complete
|
||||||
**Build Status**: Viewer module validated (BUILD_ARCGIS=OFF), full integration blocked by Group 3/4 pre-existing errors
|
**Next Phase**: Docker Validation and Testing
|
||||||
**Next Phase**: Resolve Group 3/4 dependencies or build Viewer targets directly in Docker
|
|
||||||
+1940
File diff suppressed because it is too large.
Load diff
@@ -98,10 +98,6 @@ RUN set -eux; \
|
|||||||
apt-get install -y --no-install-recommends libgtest-dev libgmock-dev || true; \
|
apt-get install -y --no-install-recommends libgtest-dev libgmock-dev || true; \
|
||||||
# Build KDReports via script in /app if apt packages not available
|
# Build KDReports via script in /app if apt packages not available
|
||||||
/app/build_kdreports.sh || true; \
|
/app/build_kdreports.sh || true; \
|
||||||
# Create KDReports symlink for compatibility (KDReports-qt6 -> KDReports)
|
|
||||||
if [ -d /usr/local/include/KDReports-qt6 ] && [ ! -d /usr/local/include/KDReports ]; then \
|
|
||||||
ln -s KDReports-qt6 /usr/local/include/KDReports; \
|
|
||||||
fi; \
|
|
||||||
# If libgtest-dev provided sources, build+install them via script
|
# If libgtest-dev provided sources, build+install them via script
|
||||||
/app/build_gtest.sh || true; \
|
/app/build_gtest.sh || true; \
|
||||||
# geographiclib already installed via apt; RTI and ArcGIS are proprietary and installed externally
|
# geographiclib already installed via apt; RTI and ArcGIS are proprietary and installed externally
|
||||||
|
|||||||
@@ -0,0 +1,383 @@
|
|||||||
|
# Strict Qt6 Migration Prompt: Merge of the two basis-modules branches
|
||||||
|
|
||||||
|
This prompt is binding task context. Keep changes minimal, scoped, and reproducible.
|
||||||
|
The only allowed outcome is a merge commit on `feature/qt6-migration-basis-modules-merge`
|
||||||
|
that contains the full work of both source branches and preserves the legacy code
|
||||||
|
behavior of every migrated file.
|
||||||
|
|
||||||
|
## Required base prompts
|
||||||
|
|
||||||
|
Before making changes, read and apply:
|
||||||
|
|
||||||
|
- ./prompts/combined-migration-subfolder-rti-compact.prompt.md
|
||||||
|
- ./prompts/commit-policy.prompt.md (repository mapping, pre-commit checks, per-repo commits)
|
||||||
|
|
||||||
|
If a base prompt is stricter, follow it. This prompt overrides it only for:
|
||||||
|
|
||||||
|
- build variants: use ON variants only, never OFF
|
||||||
|
- commit message format: max 2 lines, single author, no co-author lines (see "Commits")
|
||||||
|
|
||||||
|
## Task
|
||||||
|
|
||||||
|
Merge these two branches and resolve every conflict without changing code behavior:
|
||||||
|
|
||||||
|
- **ours (merge target base):** `feature/qt6-migration-basis-modules`
|
||||||
|
remote tip at prompt writing: `ed9fc51e7` ("Migrates ./Lts/Viewer successfully to Qt6")
|
||||||
|
- **theirs (branch to merge in):** `feature/qt6-migration-basis-modules-services`
|
||||||
|
remote tip at prompt writing: `881d44f4d` ("Migrates residual Lts sources to generated rtiddsgen API")
|
||||||
|
- **merge base:** `9e3858378` ("Adds functionality and with already migrated components integration test to cmake targets unter ./Z")
|
||||||
|
- **result branch:** `feature/qt6-migration-basis-modules-merge` (already created from `origin/feature/qt6-migration-basis-modules`)
|
||||||
|
|
||||||
|
All work happens in the repository `./qt-migration-legatus` (it is a separate git
|
||||||
|
repository; never commit its changes into the workspace root or the legacy repository).
|
||||||
|
|
||||||
|
## Branches and trees
|
||||||
|
|
||||||
|
Working repository:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus`
|
||||||
|
|
||||||
|
Trees:
|
||||||
|
|
||||||
|
- Legacy Qt5 source tree (read-only reference, never modify):
|
||||||
|
`./qt-migration-legatus/qt5-before/qt5-legatus-legacy`
|
||||||
|
- Qt6 target tree (the only tree that is modified):
|
||||||
|
`./qt-migration-legatus/qt6-after/qt6-migrated-legatus`
|
||||||
|
|
||||||
|
Before starting:
|
||||||
|
|
||||||
|
1. `git fetch origin` in `./qt-migration-legatus`.
|
||||||
|
2. Verify both remote tips still match the hashes above (`git rev-parse origin/feature/qt6-migration-basis-modules` and `git rev-parse origin/feature/qt6-migration-basis-modules-services`).
|
||||||
|
3. If either tip moved, recompute the merge base and re-run the dry-run merge (step 4 of the procedure) before resolving anything.
|
||||||
|
4. Verify the working tree of `./qt-migration-legatus` is clean (`git status --short`). Do not overwrite uncommitted user changes; if they block safe work, report the blocker.
|
||||||
|
|
||||||
|
## What each side contains
|
||||||
|
|
||||||
|
Understand both sides before resolving anything. The merge must keep the work of BOTH sides.
|
||||||
|
|
||||||
|
**basis-modules side (ours, 9 commits after the merge base, ~121 files):**
|
||||||
|
|
||||||
|
- `./Lts/Viewer` migrated to Qt6 (LtsFileDialog et al.), GROUP5 build configuration and CTest registration
|
||||||
|
- DDS migration completion and LTS/Proxies migration reports
|
||||||
|
- merge of `origin/feature/migrate-and-test-DDS-targets` into this branch
|
||||||
|
- ktexttemplate added as apt package to `new_docker_build.sh`
|
||||||
|
- `./Z` and `./Lts/Proxies` made production ready
|
||||||
|
- modifications to the stub headers under `include/` (see modify/delete conflicts)
|
||||||
|
|
||||||
|
**services side (theirs, 44 commits after the merge base, ~1203 files):**
|
||||||
|
|
||||||
|
- migration of the residual services, proxies, plugins, `Lts/Common` and `Lts/DDS` sources to the generated rtiddsgen 7.7 API: `Xxx_def::EnumValue` → `Xxx::EnumValue`, accessor calls → plain member access (e.g. `m_data.id()` → `m_data.id`), renamed enumerators where the generated name collides (e.g. `PdmEventType::Hit` → `PdmEventType::EventType_Hit`)
|
||||||
|
- NmeaManagement enabled in the build plus `tests/test_nme_dtc.cpp`, `tests/test_nme_enums.cpp`, `tests/test_nmea_handler.cpp`
|
||||||
|
- Qt6::SerialPort manual IMPORTED target in the root `CMakeLists.txt`
|
||||||
|
- codegen template include-prefix fixes (`svc_db_structs.h.grantlee`, `svc_translation.h.grantlee`, `svc_dts_impl.cpp.grantlee`, `svc_ftc_impl.cpp.grantlee`, `svc_record_replay_plugin.cpp.grantlee`)
|
||||||
|
- deletion of the stale stub headers under `include/` and of `tests/test_migration_stubs.cpp` (real generated headers from the build tree replaced them)
|
||||||
|
|
||||||
|
## Known conflict surface (dry run 2026-09-23)
|
||||||
|
|
||||||
|
A dry-run merge (`git worktree` + `git merge --no-commit --no-ff`) found 17 conflicts.
|
||||||
|
Re-run the dry run after the fetch and treat its output as authoritative; the list
|
||||||
|
below is the expected starting point.
|
||||||
|
|
||||||
|
Content conflicts (12):
|
||||||
|
|
||||||
|
1. `qt6-after/qt6-migrated-legatus/CMakeLists.txt`
|
||||||
|
2. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/svc_dts_impl.cpp.grantlee`
|
||||||
|
3. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/svc_ftc_impl.cpp.grantlee`
|
||||||
|
4. `qt6-after/qt6-migrated-legatus/Lts/Common/CodeGen/svc_record_replay_plugin.cpp.grantlee`
|
||||||
|
5. `qt6-after/qt6-migrated-legatus/Lts/DDS/Core/CMakeLists.txt`
|
||||||
|
6. `qt6-after/qt6-migrated-legatus/Lts/DDS/Core/pacemaker.cpp`
|
||||||
|
7. `qt6-after/qt6-migrated-legatus/Lts/DDS/Core/topic_lock_master.cpp`
|
||||||
|
8. `qt6-after/qt6-migrated-legatus/Lts/DDS/Core/topic_lock_master.h`
|
||||||
|
9. `qt6-after/qt6-migrated-legatus/Lts/DDS/FTC/generic_ftc_impl.h`
|
||||||
|
10. `qt6-after/qt6-migrated-legatus/Lts/DDS/FTS/generic_fts_impl.h`
|
||||||
|
11. `qt6-after/qt6-migrated-legatus/Lts/Proxies/Buildings/BuildingControlUnit/VWM/CMakeLists.txt`
|
||||||
|
12. `qt6-after/qt6-migrated-legatus/Lts/Proxies/Buildings/BuildingControlUnit/VWM/vwm_building.h`
|
||||||
|
|
||||||
|
Modify/delete conflicts (5; deleted on the services side, modified on the basis-modules side):
|
||||||
|
|
||||||
|
13. `qt6-after/qt6-migrated-legatus/include/Core/core_dtc.h`
|
||||||
|
14. `qt6-after/qt6-migrated-legatus/include/DDS/DTC/generic_dtc.h`
|
||||||
|
15. `qt6-after/qt6-migrated-legatus/include/DDS/DTC/generic_dtc_impl.h`
|
||||||
|
16. `qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_data_reader.h`
|
||||||
|
17. `qt6-after/qt6-migrated-legatus/tests/test_migration_stubs.cpp`
|
||||||
|
|
||||||
|
## Conflict resolution rules
|
||||||
|
|
||||||
|
These rules exist to guarantee: the merged tree keeps both branches' functionality
|
||||||
|
and no file's behavior deviates from the legacy Qt5 behavior beyond the approved
|
||||||
|
Qt6/C++17/rtiddsgen adaptations.
|
||||||
|
|
||||||
|
General:
|
||||||
|
|
||||||
|
- Resolve semantically, never mechanically. For every conflicted hunk read four
|
||||||
|
versions: the merge-base version, ours, theirs, and the legacy Qt5 equivalent in
|
||||||
|
`./qt-migration-legatus/qt5-before/qt5-legatus-legacy` (same relative path, or the
|
||||||
|
closest legacy counterpart). The resolution must implement the legacy semantics
|
||||||
|
with both branches' approved adaptations applied.
|
||||||
|
- Never take `ours` or `theirs` wholesale unless you prove the losing side had no
|
||||||
|
unique changes: `git diff <merge-base>..theirs -- <file>` (or `..ours`) must show
|
||||||
|
nothing that the kept version lacks. Record the proof in the final report.
|
||||||
|
- A merge commit must not drop functionality of either branch: every target,
|
||||||
|
dependency, test registration, docker build step, and code fix present on one
|
||||||
|
side must be present (or superseded by an equivalent) in the merged tree.
|
||||||
|
- No behavior-changing edits beyond the merge itself. No refactoring, no style
|
||||||
|
cleanup, no warning suppression, no new features.
|
||||||
|
- Generated API shape (rtiddsgen 7.7, `-language C++11 -stl`): plain public data
|
||||||
|
members (no getters/setters), no `*_def::type` wrappers, enums directly in the
|
||||||
|
service namespace, renamed enumerators on collision, `omg::types::optional` /
|
||||||
|
`omg::types::sequence` members. Where a conflict shows both API shapes, the
|
||||||
|
generated header in the build tree is the authority — read it, do not guess.
|
||||||
|
- Grantlee `*.grantlee` template conflicts: the template, not the generated output,
|
||||||
|
is the source of truth. Resolve the template so codegen produces code consistent
|
||||||
|
with both branches' consumers. Never hand-edit generated outputs.
|
||||||
|
|
||||||
|
CMake conflicts (root `CMakeLists.txt`, `Lts/DDS/Core/CMakeLists.txt`, `Lts/Proxies/Buildings/BuildingControlUnit/VWM/CMakeLists.txt`):
|
||||||
|
|
||||||
|
- Take the union of both sides' targets, dependencies, include directories, and
|
||||||
|
link libraries. Both sides' target additions must survive.
|
||||||
|
- Keep the Qt6::SerialPort manual IMPORTED target (services side) and the GROUP5 /
|
||||||
|
Viewer target wiring (basis-modules side) side by side.
|
||||||
|
- ON-variant-only rule: `BUILD_RTI=ON`, `BUILD_GRANTLEE=ON` are the only valid
|
||||||
|
variants. Do not add CMake logic, stubs, or fallbacks for OFF variants.
|
||||||
|
- After resolving, verify with a fresh configure that both sides' targets exist
|
||||||
|
(`cmake --build` list / `make help` or the docker script's group options).
|
||||||
|
|
||||||
|
Modify/delete conflicts (the 5 files above):
|
||||||
|
|
||||||
|
- The services side deleted these stale stubs because real generated headers from
|
||||||
|
the build tree replaced them. The basis-modules side modified them.
|
||||||
|
- For each file: inspect what the basis-modules modification added
|
||||||
|
(`git diff <merge-base>..origin/feature/qt6-migration-basis-modules -- <file>`),
|
||||||
|
then grep the merged tree for anything that still includes or references the
|
||||||
|
file's path (including the docker build scripts and CMake lists).
|
||||||
|
- If nothing references it after the merge: keep the deletion
|
||||||
|
(`git rm <file>`), and if the basis-modules modification carried a needed fix,
|
||||||
|
port that fix into the file that now provides the same functionality (real
|
||||||
|
generated header consumer or the approved stub location).
|
||||||
|
- If something on the merged tree still references it: do not resurrect stale
|
||||||
|
stub content. Point the reference at the real generated header from the build
|
||||||
|
tree, or relocate the stub to an approved directory
|
||||||
|
(`forward-declarations/` or `.forward-declarations/include/`), preserving the
|
||||||
|
basis-modules modification.
|
||||||
|
- For `tests/test_migration_stubs.cpp`: the deletion is correct if no test
|
||||||
|
registration (CMake glob, explicit list, docker script) depends on it. If the
|
||||||
|
basis-modules side added test cases to it that are still meaningful, port those
|
||||||
|
cases into the current test convention under `qt6-after/qt6-migrated-legatus/tests/`
|
||||||
|
with policy-compatible names.
|
||||||
|
|
||||||
|
## Mandatory build variants
|
||||||
|
|
||||||
|
Only these variants are valid:
|
||||||
|
|
||||||
|
- `BUILD_RTI=ON`
|
||||||
|
- `BUILD_GRANTLEE=ON`
|
||||||
|
|
||||||
|
Forbidden: `BUILD_RTI=OFF`, `BUILD_GRANTLEE=OFF`.
|
||||||
|
|
||||||
|
- Do not implement, fix, preserve, test, or validate OFF variants.
|
||||||
|
- Do not add CMake logic, tests, stubs, or fallbacks for OFF variants.
|
||||||
|
- Validation must use `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON`.
|
||||||
|
|
||||||
|
## 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 — on either side.
|
||||||
|
|
||||||
|
Preserve LogViewer reinsert from commit `1fa789767` ("Added LogViewer again"): do not remove, disable, or break LogViewer integration.
|
||||||
|
|
||||||
|
Preserve prior IDL warning fixes from commit `be912de9d`: do not reintroduce multiple enum definitions, duplicate enumerators, or builtin type/keyword collisions.
|
||||||
|
|
||||||
|
Preserve the ON-variant-only decisions already made on both branches.
|
||||||
|
|
||||||
|
## Stubs and forward declarations
|
||||||
|
|
||||||
|
Any required existing stub, compatibility declaration, or forward declaration must live only under:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/forward-declarations/`
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/.forward-declarations/include/`
|
||||||
|
|
||||||
|
- 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 as replacements for real RTI, ndsgen, KTextTemplate, or Grantlee outputs in ON builds.
|
||||||
|
- Report every moved, removed, or newly referenced stub/forward declaration, including the 5 modify/delete files above.
|
||||||
|
|
||||||
|
## Qt link rules
|
||||||
|
|
||||||
|
No active target in the merged tree may link Qt5 imported targets.
|
||||||
|
|
||||||
|
Search the merged tree for and fix active uses of: `Qt5::`, `find_package(Qt5`, `QT5_`, `Qt5Core`, `Qt5Widgets`, `Qt5Network`.
|
||||||
|
|
||||||
|
A regression check specific to this merge: the services side removed Qt5 references in files the basis-modules side also touched. After the merge, re-run the search over ALL conflicted files, not just the hunks you edited.
|
||||||
|
|
||||||
|
## Legacy comparison (required validation step)
|
||||||
|
|
||||||
|
This step proves the merge did not change code behavior.
|
||||||
|
|
||||||
|
For every one of the 17 conflicted files (and for any other file you edit during
|
||||||
|
conflict resolution):
|
||||||
|
|
||||||
|
1. Read the legacy Qt5 source at the same relative path in
|
||||||
|
`./qt-migration-legatus/qt5-before/qt5-legatus-legacy`. If the file does not
|
||||||
|
exist there (pure Qt6 build machinery), say so and compare against the merge
|
||||||
|
base instead.
|
||||||
|
2. Produce three diffs: merge-base vs legacy, ours vs legacy, theirs vs legacy.
|
||||||
|
3. Produce the audit diff: merged result vs legacy.
|
||||||
|
4. Classify every hunk of the audit diff into exactly one category:
|
||||||
|
- `qt6-api`: mandatory Qt5→Qt6 API adaptation (module includes, QRegExp, signal/slot, QDesktopWidget, QMetaType, Qt6 links)
|
||||||
|
- `rtiddsgen-api`: generated-API adaptation (plain members, no `*_def`, renamed enumerators, omg::types)
|
||||||
|
- `build`: CMake/docker/test-infra change with no runtime semantics
|
||||||
|
- `merge-union`: line present because both branches required it
|
||||||
|
- `semantic-change`: anything else
|
||||||
|
5. Every `semantic-change` hunk is a failure of this merge unless you can point to
|
||||||
|
the legacy source line that implements the same behavior. Fix it back to the
|
||||||
|
legacy semantics (with approved adaptations) or report it as a blocker. Do not
|
||||||
|
silently accept `semantic-change` hunks.
|
||||||
|
6. Record the per-file hunk classification (counts per category is sufficient;
|
||||||
|
list every `semantic-change` hunk explicitly) in the final report.
|
||||||
|
|
||||||
|
Additional equivalence checks on the merged tree:
|
||||||
|
|
||||||
|
- The enum switch/case sets and default branches in `Lts/DDS/Core/pacemaker.cpp`, `topic_lock_master.cpp`, `topic_lock_master.h` cover exactly the enumerators of the generated headers, matching the legacy control flow.
|
||||||
|
- The Grantlee template conflicts resolve to output that matches what both branches' consumers expect; verify by building, not by reading generated files.
|
||||||
|
- Test registrations: the union of both sides' CTest registrations is present; the tests the services side deleted are gone and no dangling references to them remain.
|
||||||
|
- Docker build scripts: every target group and apt package both sides added is present; the script still contains `set -eo pipefail` in the container script.
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
- Both sides' test suites must build and run; this merge adds no new feature tests by default.
|
||||||
|
- If a conflict resolution changed C++ semantics (it should not), add CTest tests
|
||||||
|
under `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests/` that pin the
|
||||||
|
legacy behavior, registered with CTest, running with `BUILD_RTI=ON` and
|
||||||
|
`BUILD_GRANTLEE=ON`, policy-compatible names (`test_<name>.cpp`, ...).
|
||||||
|
- No OFF-variant tests. No host-local paths.
|
||||||
|
|
||||||
|
## Docker and CI
|
||||||
|
|
||||||
|
Authoritative migration Dockerfile:
|
||||||
|
|
||||||
|
- `./app/Dockerfile`
|
||||||
|
|
||||||
|
Authoritative validation scripts (both exist in the tree after the merge; run the
|
||||||
|
one(s) whose target groups cover the merged changes, and if in doubt run both):
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/docker_build.sh`
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh`
|
||||||
|
|
||||||
|
Validation container expectations:
|
||||||
|
|
||||||
|
- repository root at `/repo`, or the script's documented mount path
|
||||||
|
- external dependencies under `/repo/external` (including `external/rti_connext_dds-7.7.0`, `external/ArcGIS`, `external/GeographicLib` where the scripts expect them)
|
||||||
|
- `./rti_license.dat` mounted read-only if RTI requires it
|
||||||
|
- no developer-local paths
|
||||||
|
|
||||||
|
Jenkins CI must be able to discover and run the merged test set. Inspect and minimally update only if needed:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/ci/Dockerfile.*`
|
||||||
|
- `./qt-migration-legatus/ci/check_pr_policies.py`
|
||||||
|
|
||||||
|
## Required procedure
|
||||||
|
|
||||||
|
1. Read the base prompts. Run `git fetch origin` and verify both remote tips and the merge base.
|
||||||
|
2. Check out `feature/qt6-migration-basis-modules-merge` in `./qt-migration-legatus` (working tree must be clean).
|
||||||
|
3. Re-run the dry-run merge in a throwaway worktree; confirm the conflict list.
|
||||||
|
4. Run the real merge: `git merge --no-ff origin/feature/qt6-migration-basis-modules-services` (do not auto-commit; resolve first).
|
||||||
|
5. Resolve the conflicts one file at a time using the four-version method (merge base, ours, theirs, legacy) and the rules above.
|
||||||
|
6. Run the legacy comparison audit (previous section) over every resolved/edited file.
|
||||||
|
7. Run the regression checks: Qt5 links, removed modules, LogViewer, IDL warnings, stub locations, ON-variant-only CMake, docker script integrity, CTest registration union.
|
||||||
|
8. Validate in Docker with `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON` (docker_build.sh and, where applicable, new_docker_build.sh).
|
||||||
|
9. Run CTest in the validated build directory.
|
||||||
|
10. Check Jenkins/policy compatibility.
|
||||||
|
11. Create the merge commit (see Commits).
|
||||||
|
12. Report factual status.
|
||||||
|
|
||||||
|
Do not push. The merge result stays local on `feature/qt6-migration-basis-modules-merge` until the user says otherwise.
|
||||||
|
|
||||||
|
## Required validation
|
||||||
|
|
||||||
|
From `./qt-migration-legatus/qt6-after/qt6-migrated-legatus`, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BUILD_RTI=ON BUILD_GRANTLEE=ON ./docker_build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
and, if its target groups do not cover all merged changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
CTest must run as part of validation. If a direct clean build is useful, use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cmake -S /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus -B /repo/build-merge-rti-on-grantlee-on -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_RTI=ON -DBUILD_GRANTLEE=ON
|
||||||
|
cmake --build /repo/build-merge-rti-on-grantlee-on --parallel
|
||||||
|
ctest --test-dir /repo/build-merge-rti-on-grantlee-on --output-on-failure
|
||||||
|
```
|
||||||
|
|
||||||
|
CTest baseline: ctest exits with code 8 when tests are "Not Run". A pre-existing set of Not Run tests (for example nglcomp_test, aes/avm/exm/scm/bld suites, GrantleeParserSmoke) belongs to sibling targets outside the docker build scripts' make list and existed before this migration series; that set is not a failure. Treat only `***Failed` entries as failures. Do not widen this exception to skip real failures, and do not add missing sibling targets to fix the exit code. If a previously passing test becomes Not Run or Failed after the merge, that is a merge regression: fix it or report it as a blocker.
|
||||||
|
|
||||||
|
Do not run or validate OFF variants.
|
||||||
|
|
||||||
|
## Commits
|
||||||
|
|
||||||
|
- Single author: the user's git identity. The user is the only author; do not add any co-author, co-authored-by, or bot attribution lines of any kind.
|
||||||
|
- Commit message: maximum 2 lines (one subject line plus at most one short body line), no blank-line separators, no extra metadata.
|
||||||
|
- Merge commit subject example (2 lines max):
|
||||||
|
`Merge feature/qt6-migration-basis-modules-services into feature/qt6-migration-basis-modules`
|
||||||
|
body line: `Resolves 17 conflicts against legacy Qt5 semantics; validates with BUILD_RTI=ON BUILD_GRANTLEE=ON.`
|
||||||
|
- If a conflict resolution requires an additional fix commit on top of the merge commit, the same 2-line / single-author rules apply.
|
||||||
|
- Follow `./prompts/commit-policy.prompt.md` for repository mapping and pre-commit checks. If it requires signed commits and signing is not configured in this repository context, stop and report the exact reason instead of committing unsigned.
|
||||||
|
|
||||||
|
## Success criteria
|
||||||
|
|
||||||
|
Success requires:
|
||||||
|
|
||||||
|
- `feature/qt6-migration-basis-modules-merge` contains a merge commit with both parents `origin/feature/qt6-migration-basis-modules` (or its verified successor tip) and `origin/feature/qt6-migration-basis-modules-services` (or its verified successor tip)
|
||||||
|
- all 17 conflicts resolved with the four-version method; resolution evidence recorded
|
||||||
|
- both branches' functionality preserved: Viewer/GROUP5 and DDS/Proxies/./Z work from the basis-modules side, and the full rtiddsgen services/proxies/plugins migration plus NMEA tests from the services side
|
||||||
|
- legacy comparison audit done for every resolved file; zero unexplained `semantic-change` hunks
|
||||||
|
- configure, build, and CTest pass with `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON`
|
||||||
|
- the docker build script(s) run the merged test set and fail on test failure
|
||||||
|
- Jenkins/policy discovery accepts the merged test set
|
||||||
|
- no active Qt5 imported target links remain in the merged tree
|
||||||
|
- generated outputs are build-tree only, freshly produced, never committed or consumed from the source tree
|
||||||
|
- no fake generated files, dummy files, mocks, placeholders, or stubbed generated outputs
|
||||||
|
- required stubs/forward declarations only in allowed directories
|
||||||
|
- removed modules remain removed; LogViewer preserved
|
||||||
|
- no OFF-variant logic, tests, or stubs introduced
|
||||||
|
- no push performed
|
||||||
|
|
||||||
|
## If blocked
|
||||||
|
|
||||||
|
Do not fake success. Report:
|
||||||
|
|
||||||
|
- failing command
|
||||||
|
- key error output
|
||||||
|
- affected file/branch
|
||||||
|
- category: project, path, merge, CMake, Qt API, codegen, Docker, RTI/license, Grantlee/KTextTemplate, test, CTest, Jenkins CI, stub relocation, or environment
|
||||||
|
- which side (ours/theirs) the problematic hunk came from
|
||||||
|
- what was resolved safely
|
||||||
|
- what remains blocked
|
||||||
|
- whether stale artifacts were ruled out
|
||||||
|
- whether generated files were involved
|
||||||
|
- exact missing files, targets, or generator step
|
||||||
|
- whether tests and CTest integration succeeded
|
||||||
|
- whether Docker validation and Jenkins discovery succeeded
|
||||||
|
- the legacy comparison status for the unresolved files
|
||||||
|
|
||||||
|
## Final report
|
||||||
|
|
||||||
|
Keep it short. Include:
|
||||||
|
|
||||||
|
- status: validated, partially validated, or blocked
|
||||||
|
- merge commit hash, both parents, branch name
|
||||||
|
- per-conflicted-file resolution: file, method (union / four-version semantic / keep-deletion / port-modification), and the one-line reason
|
||||||
|
- modify/delete outcomes for the 5 stub/test files (kept deleted or relocated, and where the basis-modules modification went)
|
||||||
|
- legacy comparison audit summary: per-file hunk counts by category, and every `semantic-change` hunk with its justification or fix
|
||||||
|
- files changed beyond the conflicted set
|
||||||
|
- CTest registration union check result
|
||||||
|
- Docker and Jenkins CI changes
|
||||||
|
- Qt5 references removed or remaining
|
||||||
|
- confirmation that removed modules were not restored and LogViewer was preserved
|
||||||
|
- confirmation that both branches' target sets are present after the merge
|
||||||
|
- exact validation commands and results
|
||||||
|
- remaining blockers or risks
|
||||||
@@ -0,0 +1,377 @@
|
|||||||
|
# Strict Qt6 Migration Prompt: CMake targets in predefined folders:
|
||||||
|
|
||||||
|
./Lts/Projects
|
||||||
|
./Lts/Application
|
||||||
|
|
||||||
|
This prompt is binding task context. Keep changes minimal, scoped, and reproducible.
|
||||||
|
|
||||||
|
## Required base prompt
|
||||||
|
|
||||||
|
Before making changes, read and apply:
|
||||||
|
|
||||||
|
- ./prompts/combined-migration-subfolder-rti-compact.prompt.md
|
||||||
|
- ./prompts/combined-migration-compact.prompt.md
|
||||||
|
|
||||||
|
If these prompts are stricter, follow them. This prompt overrides them only for build variants: use ON variants only. Do not pursue OFF variants.
|
||||||
|
|
||||||
|
## Module in scope
|
||||||
|
|
||||||
|
Migrate only:
|
||||||
|
|
||||||
|
- cmake targets under these predefined folders:
|
||||||
|
|
||||||
|
./Lts/Projects
|
||||||
|
./Lts/Application
|
||||||
|
|
||||||
|
From:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt5-before/qt5-legatus-legacy
|
||||||
|
|
||||||
|
To:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
|
|
||||||
|
Do not migrate sibling tools or unrelated modules.
|
||||||
|
|
||||||
|
## Mandatory build variants
|
||||||
|
|
||||||
|
Only these variants are valid:
|
||||||
|
|
||||||
|
- BUILD_RTI=ON
|
||||||
|
- BUILD_GRANTLEE=ON
|
||||||
|
- BUILD_ARCGIS=ON
|
||||||
|
|
||||||
|
Forbidden:
|
||||||
|
|
||||||
|
- BUILD_RTI=OFF
|
||||||
|
- BUILD_GRANTLEE=OFF
|
||||||
|
- BUILD_ARCGIS=OFF
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
- Do not implement, fix, preserve, test, or validate OFF variants.
|
||||||
|
- Do not add CMake logic, tests, stubs, or fallbacks for OFF variants.
|
||||||
|
- Do not report OFF variants as supported or partially supported.
|
||||||
|
- Validation must use BUILD_RTI=ON and BUILD_GRANTLEE=ON and BUILD_ARCGIS=ON.
|
||||||
|
|
||||||
|
## Branches and trees
|
||||||
|
|
||||||
|
Qt6 target branch:
|
||||||
|
|
||||||
|
- feature/migrate-lts-projects-and-application
|
||||||
|
|
||||||
|
Qt5 legacy branch, if comparison is needed:
|
||||||
|
|
||||||
|
- story/qt6-migration
|
||||||
|
|
||||||
|
Legacy source tree:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt5-before/qt5-legatus-legacy
|
||||||
|
|
||||||
|
Qt6 target tree:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
|
|
||||||
|
Work in the Qt6 target tree only. Do not modify the Qt5 legacy tree.
|
||||||
|
|
||||||
|
## Scope rules
|
||||||
|
|
||||||
|
Touch files outside the targets directories only when directly required to configure, generate, build, link, test, or validate these targets.
|
||||||
|
|
||||||
|
Allowed outside-scope changes:
|
||||||
|
|
||||||
|
- parent CMakeLists.txt entries for these targets
|
||||||
|
- central CMake helper fixes required by these targets
|
||||||
|
- shared include path fixes required by these targets
|
||||||
|
- RTI, codegen, ndsgen, KTextTemplate, or Grantlee integration fixes required by these targets
|
||||||
|
- test infrastructure needed by tests for these targets
|
||||||
|
- new_docker_build.sh changes needed to run those tests
|
||||||
|
- minimal Jenkins CI discovery or policy updates needed for those tests
|
||||||
|
- relocation of required stubs or forward declarations to allowed directories
|
||||||
|
|
||||||
|
Not allowed:
|
||||||
|
|
||||||
|
- restoring removed modules
|
||||||
|
- reintroducing stale dependencies on removed modules
|
||||||
|
- removing or disabling active modules to hide failures
|
||||||
|
- disabling targets instead of fixing root causes
|
||||||
|
- broad refactoring, cleanup, renaming, or modernization
|
||||||
|
- warning suppression instead of fixing causes
|
||||||
|
- committing generated files
|
||||||
|
- consuming generated outputs from the source tree
|
||||||
|
- fake success, dummy files, handwritten generated replacements, mocks, placeholders, or generated-output stubs
|
||||||
|
|
||||||
|
## CMake targets
|
||||||
|
|
||||||
|
- under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/
|
||||||
|
|
||||||
|
./Lts/Projects
|
||||||
|
./Lts/Application
|
||||||
|
|
||||||
|
- 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 --groupXYZ options for required CMake targets where XYZ refers to valid integers
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
Preserve prior IDL warning fixes from commit:
|
||||||
|
|
||||||
|
- be912de9d, "Removes .IDL warnings: multiple enum definitons and builtin-type collisions"
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/forward-declarations/
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
- 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 targets
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Preferred location:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests
|
||||||
|
|
||||||
|
Use policy-compatible names, for example:
|
||||||
|
|
||||||
|
- test_<name>.cpp
|
||||||
|
- <name>_test.cpp
|
||||||
|
- <name>test.cpp
|
||||||
|
- <name>gtest.cpp
|
||||||
|
|
||||||
|
## Docker and CI
|
||||||
|
|
||||||
|
Authoritative migration Dockerfile:
|
||||||
|
|
||||||
|
- ./app/Dockerfile
|
||||||
|
|
||||||
|
Authoritative validation script:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh
|
||||||
|
|
||||||
|
Do not use other Dockerfiles as task authority.
|
||||||
|
|
||||||
|
Validation container expectations:
|
||||||
|
|
||||||
|
- repository root at /repo, or the script's documented mount path
|
||||||
|
- external dependencies under /repo/external, or the script's documented equivalent
|
||||||
|
- RTI 7.7 at /repo/external/rti_connext_dds-7.7.0, or documented equivalent
|
||||||
|
- ./rti_license.dat mounted read-only if RTI requires it
|
||||||
|
- no developer-local paths
|
||||||
|
|
||||||
|
Jenkins CI must be able to discover and run the new tests, or verify that new_docker_build.sh runs them. Inspect and minimally update only if needed:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/ci/Dockerfile.*
|
||||||
|
- ./qt-migration-legatus/ci/check_pr_policies.py
|
||||||
|
|
||||||
|
### External dependencies to be mapped into Docker container
|
||||||
|
- `./external`
|
||||||
|
- expected subfolders:
|
||||||
|
- `./external/ArcGIS`
|
||||||
|
- `./external/GeographicLib`
|
||||||
|
- `./external/rti_connext_dds-7.7.0`
|
||||||
|
|
||||||
|
### RTI license
|
||||||
|
- `./rti_license.dat`
|
||||||
|
|
||||||
|
## Required procedure
|
||||||
|
|
||||||
|
1. Inspect repository state, branch, working tree, submodules, required prompts, service paths, and forward-declaration directories.
|
||||||
|
2. Compare Qt5 source targets with Qt6 targets. Classify files as already migrated, missing, stale, generated, intentionally removed, build-only, or needing Qt6 adaptation.
|
||||||
|
3. Identify dependencies, generated inputs, Qt modules, parent CMake entries, removed-module references, LogViewer interactions, and required stub/forward-declaration relocations.
|
||||||
|
4. Apply the smallest valid migration changes.
|
||||||
|
5. Add required CTest tests for C++ changes.
|
||||||
|
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.
|
||||||
|
8. Validate in Docker with BUILD_RTI=ON and BUILD_GRANTLEE=ON.
|
||||||
|
9. Run CTest in the validated build directory.
|
||||||
|
10. Check Jenkins/policy compatibility.
|
||||||
|
11. Report factual status.
|
||||||
|
|
||||||
|
Do not overwrite uncommitted user changes. If they block safe work, report the blocker.
|
||||||
|
|
||||||
|
## Required validation
|
||||||
|
|
||||||
|
From:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
|
|
||||||
|
Run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BUILD_RTI=ON BUILD_GRANTLEE=ON BUILD_ARCGIS=ON ./new_docker_build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
CTest must run as part of validation. If a direct clean build is useful, use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cmake -S /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus -B /repo/build-rti-on-grantlee-on -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_RTI=ON -DBUILD_GRANTLEE=ON -DBUILD_ARCGIS=ON
|
||||||
|
cmake --build /repo/build-rti-on-grantlee-on --parallel
|
||||||
|
ctest --test-dir /repo/build-rti-on-grantlee-on --output-on-failure
|
||||||
|
```
|
||||||
|
|
||||||
|
Also check whether this file exists and run it only if present:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./new_docker-build.h
|
||||||
|
```
|
||||||
|
|
||||||
|
If it is absent or a typo, report that. Do not invent a replacement.
|
||||||
|
|
||||||
|
Do not run or validate OFF variants.
|
||||||
|
|
||||||
|
## Success criteria
|
||||||
|
|
||||||
|
Success requires:
|
||||||
|
|
||||||
|
- cmake targets migrated or confirmed already correct
|
||||||
|
- cmake targets included in the Qt6 build
|
||||||
|
- configure, build, and CTest pass with BUILD_RTI=ON and BUILD_GRANTLEE=ON and BUILD_ARCGIS=ON
|
||||||
|
- new_docker_build.sh runs the relevant tests and fails on test failure
|
||||||
|
- Jenkins/policy discovery accepts the new tests and validation changes
|
||||||
|
- no active Qt5 imported target links remain for these targets
|
||||||
|
- generated outputs are build-tree only and freshly produced when required
|
||||||
|
- no generated outputs are committed or consumed from the source tree
|
||||||
|
- no fake generated files, dummy files, mocks, placeholders, or stubbed generated outputs exist
|
||||||
|
- required stubs/forward declarations are only in allowed directories
|
||||||
|
- removed modules remain removed
|
||||||
|
- LogViewer remains preserved
|
||||||
|
- RTI/codegen and Grantlee/KTextTemplate success is real, not stale or faked
|
||||||
|
|
||||||
|
## If blocked
|
||||||
|
|
||||||
|
Do not fake success. Report:
|
||||||
|
|
||||||
|
- failing command
|
||||||
|
- key error output
|
||||||
|
- affected service
|
||||||
|
- category: project, path, merge, CMake, Qt API, codegen, Docker, RTI/license, Grantlee/KTextTemplate, ArcGIS, test, CTest, Jenkins CI, stub relocation, or environment
|
||||||
|
- what was fixed safely
|
||||||
|
- what remains blocked
|
||||||
|
- whether stale artifacts were ruled out
|
||||||
|
- whether generated files were involved
|
||||||
|
- exact missing files, targets, or generator step
|
||||||
|
- whether tests and CTest integration succeeded
|
||||||
|
- whether Docker validation and Jenkins discovery succeeded
|
||||||
|
|
||||||
|
## Final report
|
||||||
|
|
||||||
|
Keep it short. Include:
|
||||||
|
|
||||||
|
- status: validated, partially validated, or blocked
|
||||||
|
- cmake targets under predefined folders migrated or already correct
|
||||||
|
- files changed
|
||||||
|
- C++ files changed
|
||||||
|
- tests added per C++ change
|
||||||
|
- CTest registration changes
|
||||||
|
- CMake and generator changes
|
||||||
|
- stub/forward-declaration moves or removals
|
||||||
|
- Docker and Jenkins CI changes
|
||||||
|
- Qt5 references removed or remaining
|
||||||
|
- confirmation that removed modules were not restored
|
||||||
|
- confirmation that LogViewer was preserved
|
||||||
|
- exact validation commands and results
|
||||||
|
- result of new_docker-build.h if present
|
||||||
|
- remaining blockers or risks
|
||||||
@@ -0,0 +1,404 @@
|
|||||||
|
# Strict Qt6 Migration Prompt: CMake targets in predefined folders:
|
||||||
|
|
||||||
|
./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
|
||||||
|
|
||||||
|
This prompt is binding task context. Keep changes minimal, scoped, and reproducible.
|
||||||
|
|
||||||
|
## Required base prompt
|
||||||
|
|
||||||
|
Before making changes, read and apply:
|
||||||
|
|
||||||
|
- ./prompts/combined-migration-subfolder-rti-compact.prompt.md
|
||||||
|
- ./prompts/combined-migration-compact.prompt.md
|
||||||
|
|
||||||
|
If these prompts are stricter, follow them. This prompt overrides them only for build variants: use ON variants only. Do not pursue OFF variants.
|
||||||
|
|
||||||
|
## Module in scope
|
||||||
|
|
||||||
|
Migrate only:
|
||||||
|
|
||||||
|
- cmake targets under these predefined folders:
|
||||||
|
|
||||||
|
./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
|
||||||
|
|
||||||
|
From:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt5-before/qt5-legatus-legacy
|
||||||
|
|
||||||
|
To:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
|
|
||||||
|
Do not migrate sibling tools or unrelated modules.
|
||||||
|
|
||||||
|
## Mandatory build variants
|
||||||
|
|
||||||
|
Only these variants are valid:
|
||||||
|
|
||||||
|
- BUILD_RTI=ON
|
||||||
|
- BUILD_GRANTLEE=ON
|
||||||
|
- BUILD_ARCGIS=OFF
|
||||||
|
- BUILD_ARCGIS=ON
|
||||||
|
|
||||||
|
Forbidden:
|
||||||
|
|
||||||
|
- BUILD_RTI=OFF
|
||||||
|
- BUILD_GRANTLEE=OFF
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
- Do not implement, fix, preserve, test, or validate OFF variants.
|
||||||
|
- Do not add CMake logic, tests, stubs, or fallbacks for OFF variants.
|
||||||
|
- Do not report OFF variants as supported or partially supported.
|
||||||
|
- Validation must use BUILD_RTI=ON and BUILD_GRANTLEE=ON and BUILD_ARCGIS=ON.
|
||||||
|
|
||||||
|
## Branches and trees
|
||||||
|
|
||||||
|
Qt6 target branch:
|
||||||
|
|
||||||
|
- feature/migrate-lts-tools-d-and-l
|
||||||
|
|
||||||
|
Qt5 legacy branch, if comparison is needed:
|
||||||
|
|
||||||
|
- story/qt6-migration
|
||||||
|
|
||||||
|
Legacy source tree:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt5-before/qt5-legatus-legacy
|
||||||
|
|
||||||
|
Qt6 target tree:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
|
|
||||||
|
Work in the Qt6 target tree only. Do not modify the Qt5 legacy tree.
|
||||||
|
|
||||||
|
## Scope rules
|
||||||
|
|
||||||
|
Touch files outside the targets directories only when directly required to configure, generate, build, link, test, or validate these targets.
|
||||||
|
|
||||||
|
Allowed outside-scope changes:
|
||||||
|
|
||||||
|
- parent CMakeLists.txt entries for these targets
|
||||||
|
- central CMake helper fixes required by these targets
|
||||||
|
- shared include path fixes required by these targets
|
||||||
|
- RTI, codegen, ndsgen, KTextTemplate, or Grantlee integration fixes required by these targets
|
||||||
|
- test infrastructure needed by tests for these targets
|
||||||
|
- new_docker_build.sh changes needed to run those tests
|
||||||
|
- minimal Jenkins CI discovery or policy updates needed for those tests
|
||||||
|
- relocation of required stubs or forward declarations to allowed directories
|
||||||
|
|
||||||
|
Not allowed:
|
||||||
|
|
||||||
|
- restoring removed modules
|
||||||
|
- reintroducing stale dependencies on removed modules
|
||||||
|
- removing or disabling active modules to hide failures
|
||||||
|
- disabling targets instead of fixing root causes
|
||||||
|
- broad refactoring, cleanup, renaming, or modernization
|
||||||
|
- warning suppression instead of fixing causes
|
||||||
|
- committing generated files
|
||||||
|
- consuming generated outputs from the source tree
|
||||||
|
- fake success, dummy files, handwritten generated replacements, mocks, placeholders, or generated-output stubs
|
||||||
|
|
||||||
|
## CMake targets
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
Preserve prior IDL warning fixes from commit:
|
||||||
|
|
||||||
|
- be912de9d, "Removes .IDL warnings: multiple enum definitons and builtin-type collisions"
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/forward-declarations/
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
- 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 targets
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Preferred location:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests
|
||||||
|
|
||||||
|
Use policy-compatible names, for example:
|
||||||
|
|
||||||
|
- test_<name>.cpp
|
||||||
|
- <name>_test.cpp
|
||||||
|
- <name>test.cpp
|
||||||
|
- <name>gtest.cpp
|
||||||
|
|
||||||
|
## Docker and CI
|
||||||
|
|
||||||
|
Authoritative migration Dockerfile:
|
||||||
|
|
||||||
|
- ./app/Dockerfile
|
||||||
|
|
||||||
|
Authoritative validation script:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh
|
||||||
|
|
||||||
|
Do not use other Dockerfiles as task authority.
|
||||||
|
|
||||||
|
Validation container expectations:
|
||||||
|
|
||||||
|
- repository root at /repo, or the script's documented mount path
|
||||||
|
- external dependencies under /repo/external, or the script's documented equivalent
|
||||||
|
- RTI 7.7 at /repo/external/rti_connext_dds-7.7.0, or documented equivalent
|
||||||
|
- ./rti_license.dat mounted read-only if RTI requires it
|
||||||
|
- no developer-local paths
|
||||||
|
|
||||||
|
Jenkins CI must be able to discover and run the new tests, or verify that new_docker_build.sh runs them. Inspect and minimally update only if needed:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/ci/Dockerfile.*
|
||||||
|
- ./qt-migration-legatus/ci/check_pr_policies.py
|
||||||
|
|
||||||
|
### External dependencies to be mapped into Docker container
|
||||||
|
- `./external`
|
||||||
|
- expected subfolders:
|
||||||
|
- `./external/ArcGIS`
|
||||||
|
- `./external/GeographicLib`
|
||||||
|
- `./external/rti_connext_dds-7.7.0`
|
||||||
|
|
||||||
|
### RTI license
|
||||||
|
- `./rti_license.dat`
|
||||||
|
|
||||||
|
## Required procedure
|
||||||
|
|
||||||
|
1. Inspect repository state, branch, working tree, submodules, required prompts, service paths, and forward-declaration directories.
|
||||||
|
2. Compare Qt5 source targets with Qt6 targets. Classify files as already migrated, missing, stale, generated, intentionally removed, build-only, or needing Qt6 adaptation.
|
||||||
|
3. Identify dependencies, generated inputs, Qt modules, parent CMake entries, removed-module references, LogViewer interactions, and required stub/forward-declaration relocations.
|
||||||
|
4. Apply the smallest valid migration changes.
|
||||||
|
5. Add required CTest tests for C++ changes.
|
||||||
|
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.
|
||||||
|
8. Validate in Docker with BUILD_RTI=ON and BUILD_GRANTLEE=ON.
|
||||||
|
9. Run CTest in the validated build directory.
|
||||||
|
10. Check Jenkins/policy compatibility.
|
||||||
|
11. Report factual status.
|
||||||
|
|
||||||
|
Do not overwrite uncommitted user changes. If they block safe work, report the blocker.
|
||||||
|
|
||||||
|
## Required validation
|
||||||
|
|
||||||
|
From:
|
||||||
|
|
||||||
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||||
|
|
||||||
|
Run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BUILD_RTI=ON BUILD_GRANTLEE=ON BUILD_ARCGIS=ON ./new_docker_build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
CTest must run as part of validation. If a direct clean build is useful, use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cmake -S /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus -B /repo/build-rti-on-grantlee-on -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_RTI=ON -DBUILD_GRANTLEE=ON -DBUILD_ARCGIS=ON
|
||||||
|
cmake --build /repo/build-rti-on-grantlee-on --parallel
|
||||||
|
ctest --test-dir /repo/build-rti-on-grantlee-on --output-on-failure
|
||||||
|
```
|
||||||
|
|
||||||
|
Also check whether this file exists and run it only if present:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./new_docker-build.h
|
||||||
|
```
|
||||||
|
|
||||||
|
If it is absent or a typo, report that. Do not invent a replacement.
|
||||||
|
|
||||||
|
Do not run or validate OFF variants.
|
||||||
|
|
||||||
|
## Success criteria
|
||||||
|
|
||||||
|
Success requires:
|
||||||
|
|
||||||
|
- cmake targets migrated or confirmed already correct
|
||||||
|
- cmake targets included in the Qt6 build
|
||||||
|
- configure, build, and CTest pass with BUILD_RTI=ON and BUILD_GRANTLEE=ON and BUILD_ARCGIS=ON
|
||||||
|
- new_docker_build.sh runs the relevant tests and fails on test failure
|
||||||
|
- Jenkins/policy discovery accepts the new tests and validation changes
|
||||||
|
- no active Qt5 imported target links remain for these targets
|
||||||
|
- generated outputs are build-tree only and freshly produced when required
|
||||||
|
- no generated outputs are committed or consumed from the source tree
|
||||||
|
- no fake generated files, dummy files, mocks, placeholders, or stubbed generated outputs exist
|
||||||
|
- required stubs/forward declarations are only in allowed directories
|
||||||
|
- removed modules remain removed
|
||||||
|
- LogViewer remains preserved
|
||||||
|
- RTI/codegen and Grantlee/KTextTemplate success is real, not stale or faked
|
||||||
|
|
||||||
|
## If blocked
|
||||||
|
|
||||||
|
Do not fake success. Report:
|
||||||
|
|
||||||
|
- failing command
|
||||||
|
- key error output
|
||||||
|
- affected service
|
||||||
|
- category: project, path, merge, CMake, Qt API, codegen, Docker, RTI/license, Grantlee/KTextTemplate, ArcGIS, test, CTest, Jenkins CI, stub relocation, or environment
|
||||||
|
- what was fixed safely
|
||||||
|
- what remains blocked
|
||||||
|
- whether stale artifacts were ruled out
|
||||||
|
- whether generated files were involved
|
||||||
|
- exact missing files, targets, or generator step
|
||||||
|
- whether tests and CTest integration succeeded
|
||||||
|
- whether Docker validation and Jenkins discovery succeeded
|
||||||
|
|
||||||
|
## Final report
|
||||||
|
|
||||||
|
Keep it short. Include:
|
||||||
|
|
||||||
|
- status: validated, partially validated, or blocked
|
||||||
|
- cmake targets under predefined folders migrated or already correct
|
||||||
|
- files changed
|
||||||
|
- C++ files changed
|
||||||
|
- tests added per C++ change
|
||||||
|
- CTest registration changes
|
||||||
|
- CMake and generator changes
|
||||||
|
- stub/forward-declaration moves or removals
|
||||||
|
- Docker and Jenkins CI changes
|
||||||
|
- Qt5 references removed or remaining
|
||||||
|
- confirmation that removed modules were not restored
|
||||||
|
- confirmation that LogViewer was preserved
|
||||||
|
- exact validation commands and results
|
||||||
|
- result of new_docker-build.h if present
|
||||||
|
- remaining blockers or risks
|
||||||
@@ -0,0 +1,429 @@
|
|||||||
|
# Strict Qt6 Migration Prompt: NmeaManagement Service
|
||||||
|
|
||||||
|
This prompt is binding task context. Keep changes minimal, scoped, and reproducible.
|
||||||
|
|
||||||
|
## Required base prompt
|
||||||
|
|
||||||
|
Before making changes, read and apply:
|
||||||
|
|
||||||
|
- ./prompts/combined-migration-subfolder-rti-compact.prompt.md
|
||||||
|
|
||||||
|
If that prompt is stricter, follow it. This prompt overrides it only for build variants: use ON variants only. Do not pursue OFF variants.
|
||||||
|
|
||||||
|
## Service in scope
|
||||||
|
|
||||||
|
Migrate only:
|
||||||
|
|
||||||
|
- **Lts/Services/NmeaManagement**
|
||||||
|
|
||||||
|
All rules below apply exactly to this service and its direct build, generation, and test dependencies. Do not touch other services or unrelated modules.
|
||||||
|
|
||||||
|
## Status of this service
|
||||||
|
|
||||||
|
The NmeaManagement service directory already exists in the Qt6 tree (`qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Services/NmeaManagement/`) and its source files have been migrated from Qt5 to Qt6:
|
||||||
|
|
||||||
|
- Include paths modernized (`#include <QX>` → `#include <QtCore/QX>`, `#include <QtWidgets/QX>`, `#include <QtGui/QX>`)
|
||||||
|
- `QRegExp` → `QRegularExpression` (nmea_handler.cpp)
|
||||||
|
- Signal/slot macros → type-safe connections (`connect(m_reconnectTimer, SIGNAL(timeout()), ...) → connect(m_reconnectTimer, &QTimer::timeout, ...)`)
|
||||||
|
- `QDesktopWidget` → `QScreen` (nme_battery_info_dialog.cpp in the plugin)
|
||||||
|
- `QT5_WRAP_UI` → no-op shim (NGLMacros.cmake, AUTOUIC handles `.ui` files)
|
||||||
|
- CMakeLists.txt migrated: `Qt5::` → `Qt6::`, codegen steps wrapped in `IF(BUILD_RTI)`
|
||||||
|
- `ddscore` and `ddsconnector` → conditional `$<IF:$<TARGET_EXISTS:...>>`
|
||||||
|
|
||||||
|
**The only thing preventing the service from building is that `ADD_SUBDIRECTORY(NmeaManagement)` is commented out in `Lts/Services/CMakeLists.txt` (line 28).**
|
||||||
|
|
||||||
|
## From / To
|
||||||
|
|
||||||
|
From:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/Services/NmeaManagement/`
|
||||||
|
|
||||||
|
To:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Services/NmeaManagement/`
|
||||||
|
|
||||||
|
Do not migrate sibling services, sibling plugins, or unrelated modules.
|
||||||
|
|
||||||
|
## Mandatory build variants
|
||||||
|
|
||||||
|
Only these variants are valid:
|
||||||
|
|
||||||
|
- `BUILD_RTI=ON`
|
||||||
|
- `BUILD_GRANTLEE=ON`
|
||||||
|
|
||||||
|
Forbidden:
|
||||||
|
|
||||||
|
- `BUILD_RTI=OFF`
|
||||||
|
- `BUILD_GRANTLEE=OFF`
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
- Do not implement, fix, preserve, test, or validate OFF variants.
|
||||||
|
- Do not add CMake logic, tests, stubs, or fallbacks for OFF variants.
|
||||||
|
- Do not report OFF variants as supported or partially supported.
|
||||||
|
- Validation must use `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON`.
|
||||||
|
|
||||||
|
## Branches and trees
|
||||||
|
|
||||||
|
Qt6 target branch:
|
||||||
|
|
||||||
|
- `feature/qt6-migration-basis-modules`
|
||||||
|
|
||||||
|
Qt5 legacy branch, if comparison is needed:
|
||||||
|
|
||||||
|
- `story/qt6-migration`
|
||||||
|
|
||||||
|
Legacy source tree:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt5-before/qt5-legatus-legacy`
|
||||||
|
|
||||||
|
Qt6 target tree:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus`
|
||||||
|
|
||||||
|
Work in the Qt6 target tree only. Do not modify the Qt5 legacy tree.
|
||||||
|
|
||||||
|
## Scope rules
|
||||||
|
|
||||||
|
Touch files outside `Lts/Services/NmeaManagement/` only when directly required to configure, generate, build, link, test, or validate this service.
|
||||||
|
|
||||||
|
Allowed outside-scope changes:
|
||||||
|
|
||||||
|
- `Lts/Services/CMakeLists.txt` — uncommenting `ADD_SUBDIRECTORY(NmeaManagement)`
|
||||||
|
- central CMake helper fixes required by this service
|
||||||
|
- shared include path fixes required by this service
|
||||||
|
- RTI, codegen, ndsgen, KTextTemplate, or Grantlee integration fixes required by this service
|
||||||
|
- test infrastructure needed by tests for this service
|
||||||
|
- docker_build.sh changes needed to run those tests
|
||||||
|
- minimal Jenkins CI discovery or policy updates needed for those tests
|
||||||
|
- relocation of required stubs or forward declarations to allowed directories
|
||||||
|
|
||||||
|
Not allowed:
|
||||||
|
|
||||||
|
- restoring removed modules (commit `92ad7d468`)
|
||||||
|
- reintroducing stale dependencies on removed modules
|
||||||
|
- removing or disabling active modules to hide failures
|
||||||
|
- disabling targets instead of fixing root causes
|
||||||
|
- broad refactoring, cleanup, renaming, or modernization
|
||||||
|
- warning suppression instead of fixing causes
|
||||||
|
- committing generated files
|
||||||
|
- consuming generated outputs from the source tree
|
||||||
|
- fake success, dummy files, handwritten generated replacements, mocks, placeholders, or generated-output stubs
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
Preserve prior IDL warning fixes from commit:
|
||||||
|
|
||||||
|
- `be912de9d`, "Removes .IDL warnings: multiple enum definitons and builtin-type collisions"
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/forward-declarations/`
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/.forward-declarations/include/`
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
||||||
|
Inspect and migrate only as needed:
|
||||||
|
|
||||||
|
- source and header files in `Lts/Services/NmeaManagement/`
|
||||||
|
- `CMakeLists.txt` and parent CMake registration
|
||||||
|
- RTI IDL (`nme_service.xml`), ndsgen, KTextTemplate, and Grantlee inputs/templates
|
||||||
|
- tests directly tied to this service
|
||||||
|
|
||||||
|
The source files are already migrated. Focus on:
|
||||||
|
|
||||||
|
1. **Uncommenting** `ADD_SUBDIRECTORY(NmeaManagement)` in `Lts/Services/CMakeLists.txt`
|
||||||
|
2. **Fixing any compile errors** that surface after the service is added to the build
|
||||||
|
3. **Verifying codegen** (`nme_service.xml` → `.idl` → `.hpp`/`.cpp`) produces expected outputs
|
||||||
|
4. **Verifying Qt module links** (the executable links `Qt6::Core`, `Qt6::Network`, `svcCoreClient`, etc.)
|
||||||
|
|
||||||
|
Fix only real Qt6/C++17 build issues. 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
|
||||||
|
|
||||||
|
The NmeaManagement service uses the standard RTI/Grantlee codegen pipeline:
|
||||||
|
|
||||||
|
1. `CODEGEN_IDL_SVC` — generates `nme_enums.idl` and `nme.idl` from `nme_service.xml`
|
||||||
|
2. `RTIDDSGEN` — compiles `.idl` files into `.hpp`, `.cpp`, `.cxx`, `.Plugin` outputs
|
||||||
|
3. `CODEGEN_TOPIC_TYPEDEFS` — generates `nme_dt[s,c]_types.h` / `nme_ft[s,c]_types.h`
|
||||||
|
4. `CODEGEN_CLIENT_TOPICS_IFC` — generates `nme_[d|f]tc.h`
|
||||||
|
5. `CODEGEN_CLIENT_TOPICS_IMPL` — generates `nme_[d|f]tc_impl.[cpp|h]`
|
||||||
|
6. `CODEGEN_SERVER_TOPICS` — generates `nme_[d|f]ts.h`, `nme_[d|f]ts_impl.[cpp|h]`
|
||||||
|
7. `CODEGEN_DATABASE` — generates `nme_db_impl.cpp/.h`, `nme_db.h`
|
||||||
|
8. `CODEGEN_SQL` — generates `nme.sql`, `nme.xml`
|
||||||
|
9. `CREATE_TOPIC_TYPE_PLUGIN` — generates topic type plugin files
|
||||||
|
|
||||||
|
If generated files are required:
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
## Known pitfalls from the FileManagement/FilterManagement run
|
||||||
|
|
||||||
|
Apply these rules before debugging from scratch; skipping them repeats known problems.
|
||||||
|
|
||||||
|
### rtiddsgen 7.7 generated API shape
|
||||||
|
|
||||||
|
RTI Connext 7.7 rtiddsgen with `-language C++11 -stl` generates:
|
||||||
|
|
||||||
|
- plain public data members with no getters or setters: use `data.id` and `data.id = value`, not `data.id()` or `data.id(value)`
|
||||||
|
- no `*_def::type` wrapper types: use enums directly in the service namespace
|
||||||
|
- renamed enums when the generated name collides with a framework type
|
||||||
|
- `omg::types::optional` and `omg::types::sequence` members
|
||||||
|
|
||||||
|
When a compile error looks like old getter/setter syntax ("expression cannot be used as a function") or a missing `*_def` type, read the generated header in the build tree for the real member and type names. Check every call site in the service, its handlers, and its WebSocket interfaces.
|
||||||
|
|
||||||
|
### Grantlee templates generate the service impl files
|
||||||
|
|
||||||
|
Service `*_impl.[ch]` files are generated from `Lts/Common/CodeGen/*.grantlee` templates. If the fix belongs in generated code, fix the template; codegen reruns automatically. Never hand-edit generated outputs.
|
||||||
|
|
||||||
|
### NGL_ADD_LIBRARY2 does not define the compile guard
|
||||||
|
|
||||||
|
NGL_ADD_LIBRARY defines `MAKE_<SYMBOL>_LIB` for the target; NGL_ADD_LIBRARY2 does not. A target consuming generated `*_impl.h` headers that carry an include guard fails with `#error "You are not allowed to include this file in your code!"` unless the guard is defined explicitly:
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
TARGET_COMPILE_DEFINITIONS(<target> PRIVATE MAKE_<SYMBOL>_LIB)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Stub copies racing the codegen
|
||||||
|
|
||||||
|
An unconditional `CONFIGURE_FILE(... COPYONLY)` that copies a stub header to a build-dir path that codegen also writes overwrites the generated file on every cmake re-configure. Guard such copies with `IF(NOT BUILD_RTI)` or `IF(NOT BUILD_GRANTLEE)`.
|
||||||
|
|
||||||
|
### Qt6 discovery in the container takes the minimal path
|
||||||
|
|
||||||
|
`find_package(Qt6 ... COMPONENTS ...)` always fails in the validation container. The tree takes the "Found Qt6 (minimal)" path and every Qt6 component target is a manual IMPORTED target in the root CMakeLists. When a migrated service needs a Qt6 module the container does not discover (for example WebSockets):
|
||||||
|
|
||||||
|
- add the matching `qt6-<module>-dev` package to docker_build.sh
|
||||||
|
- create a manual IMPORTED target in the root CMakeLists following the existing pattern
|
||||||
|
- define the availability macro via `add_compile_definitions` when the real module is present
|
||||||
|
- link the target by name in the service CMakeLists
|
||||||
|
- gate the compile macro and the link on the same condition
|
||||||
|
|
||||||
|
Flipping a compile macro on an existing build dir leaves stale AUTOMOC caches. A clean build dir is required after flipping such macros.
|
||||||
|
|
||||||
|
### Include shadowing between the stub tree and real generated headers
|
||||||
|
|
||||||
|
An include like `<Core/core_dtc.h>` can resolve into the migration stub tree (wrong namespaces) instead of the real generated header in the build tree. Use the full path from the build-tree include root (`<DDS/Core/core_dtc.h>`), add `include_directories(BEFORE ${CMAKE_SOURCE_DIR}/Lts)` when stub trees shadow Lts headers, and verify forward declarations name the same namespace as the real header.
|
||||||
|
|
||||||
|
### Compare with the Qt5 original before inventing fixes
|
||||||
|
|
||||||
|
Several "missing field" or "unknown template" errors in the first run came from includes or members the Qt5 original had and the Qt6 copy had silently dropped. When a class fails to compile over a missing member or unknown base, diff against the Qt5 original first; restore the dropped piece rather than designing around it.
|
||||||
|
|
||||||
|
### Export-header macro names
|
||||||
|
|
||||||
|
Generated export headers uppercase the whole target name, merging adjacent word letters: target `LtsSessionData` defines `LTSSESSIONDATA_EXPORT`. When writing tests that assert export macros, derive the expected prefix from the generated header, not from visual expectation.
|
||||||
|
|
||||||
|
### Build orchestration
|
||||||
|
|
||||||
|
- docker_build.sh must keep `set -eo pipefail` in the container script
|
||||||
|
- When a migrated service adds a test executable, add it to the fixed make target list in docker_build.sh so ctest actually runs it
|
||||||
|
- build4 is root-owned and wiped by every docker_build.sh run
|
||||||
|
|
||||||
|
## 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`
|
||||||
|
- do not add OFF-variant tests
|
||||||
|
- use deterministic tests without host-local paths
|
||||||
|
|
||||||
|
Preferred location:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests`
|
||||||
|
|
||||||
|
Use policy-compatible names, for example:
|
||||||
|
|
||||||
|
- `test_<name>.cpp`
|
||||||
|
- `<name>_test.cpp`
|
||||||
|
- `<name>test.cpp`
|
||||||
|
- `<name>gtest.cpp`
|
||||||
|
|
||||||
|
## Docker and CI
|
||||||
|
|
||||||
|
Authoritative migration Dockerfile:
|
||||||
|
|
||||||
|
- `./app/Dockerfile`
|
||||||
|
|
||||||
|
Authoritative validation script:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/docker_build.sh`
|
||||||
|
|
||||||
|
Do not use other Dockerfiles as task authority.
|
||||||
|
|
||||||
|
Validation container expectations:
|
||||||
|
|
||||||
|
- repository root at `/repo`, or the script's documented mount path
|
||||||
|
- external dependencies under `/repo/external`, or the script's documented equivalent
|
||||||
|
- RTI 7.7 at `/repo/external/rti_connext_dds-7.7.0`, or documented equivalent
|
||||||
|
- `./rti_license.dat` mounted read-only if RTI requires it
|
||||||
|
- no developer-local paths
|
||||||
|
|
||||||
|
Jenkins CI must be able to discover and run the new tests, or verify that docker_build.sh runs them. Inspect and minimally update only if needed:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/ci/Dockerfile.*`
|
||||||
|
- `./qt-migration-legatus/ci/check_pr_policies.py`
|
||||||
|
|
||||||
|
## Required procedure
|
||||||
|
|
||||||
|
1. Inspect repository state, branch, working tree, and forward-declaration directories.
|
||||||
|
2. Compare Qt5 source with Qt6 target for NmeaManagement. Classify files as already migrated, missing, stale, generated, or needing adaptation.
|
||||||
|
3. Identify dependencies: `svcCoreClient`, `ProjectConfig`, `LtsCommandLineParser`, `nglcoreapplication`, Qt6 modules, and any service-level interdependencies.
|
||||||
|
4. Uncomment `ADD_SUBDIRECTORY(NmeaManagement)` in parent `Lts/Services/CMakeLists.txt`.
|
||||||
|
5. Apply the smallest valid migration changes to fix compile/link errors.
|
||||||
|
6. Add required CTest tests for C++ changes (if applicable).
|
||||||
|
7. Review RTI/codegen paths for `nme_service.xml`.
|
||||||
|
8. Check regressions: Qt5 links, removed modules, LogViewer, IDL warnings.
|
||||||
|
9. Validate in Docker with `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON`.
|
||||||
|
10. Run CTest in the validated build directory.
|
||||||
|
11. Check Jenkins/policy compatibility.
|
||||||
|
12. Report factual status.
|
||||||
|
|
||||||
|
Do not overwrite uncommitted user changes. If they block safe work, report the blocker.
|
||||||
|
|
||||||
|
## Required validation
|
||||||
|
|
||||||
|
From:
|
||||||
|
|
||||||
|
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus`
|
||||||
|
|
||||||
|
Run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BUILD_RTI=ON BUILD_GRANTLEE=ON ./docker_build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
CTest must run as part of validation.
|
||||||
|
|
||||||
|
Expected CTest baseline: ctest exits with code 8 when tests are "Not Run". A pre-existing set of Not Run tests (for example nglcomp_test, aes/avm/exm/scm/bld suites, GrantleeParserSmoke) belongs to sibling targets outside the docker_build.sh make list; that set existed before this migration series and is not a failure. Treat only `***Failed` entries as failures. Do not widen this exception to skip or filter real failures, and do not add the missing sibling targets to fix the exit code. If a previously passing test becomes Not Run or Failed, that is a regression of this run.
|
||||||
|
|
||||||
|
If a direct clean build is useful, use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cmake -S /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus -B /repo/build-rti-on-grantlee-on -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_RTI=ON -DBUILD_GRANTLEE=ON
|
||||||
|
cmake --build /repo/build-rti-on-grantlee-on --parallel
|
||||||
|
ctest --test-dir /repo/build-rti-on-grantlee-on --output-on-failure
|
||||||
|
```
|
||||||
|
|
||||||
|
Also check whether this file exists and run it only if present:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker-build.h
|
||||||
|
```
|
||||||
|
|
||||||
|
If it is absent or a typo, report that. Do not invent a replacement.
|
||||||
|
|
||||||
|
Do not run or validate OFF variants.
|
||||||
|
|
||||||
|
## Success criteria
|
||||||
|
|
||||||
|
Success requires:
|
||||||
|
|
||||||
|
- NmeaManagement migrated and confirmed buildable
|
||||||
|
- NmeaManagement included in the Qt6 build (uncommented in parent CMakeLists.txt)
|
||||||
|
- configure, build, and CTest pass with `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON`
|
||||||
|
- docker_build.sh runs the relevant tests and fails on test failure
|
||||||
|
- Jenkins/policy discovery accepts any new tests and validation changes
|
||||||
|
- no active Qt5 imported target links remain for this service
|
||||||
|
- generated outputs are build-tree only and freshly produced when required
|
||||||
|
- no generated outputs are committed or consumed from the source tree
|
||||||
|
- no fake generated files, dummy files, mocks, placeholders, or stubbed generated outputs exist
|
||||||
|
- required stubs/forward declarations are only in allowed directories
|
||||||
|
- removed modules remain removed
|
||||||
|
- LogViewer remains preserved
|
||||||
|
- RTI/codegen and Grantlee/KTextTemplate success is real, not stale or faked
|
||||||
|
|
||||||
|
## If blocked
|
||||||
|
|
||||||
|
Do not fake success. Report:
|
||||||
|
|
||||||
|
- failing command
|
||||||
|
- key error output
|
||||||
|
- affected service
|
||||||
|
- category: project, path, merge, CMake, Qt API, codegen, Docker, RTI/license, Grantlee/KTextTemplate, test, CTest, Jenkins CI, stub relocation, or environment
|
||||||
|
- what was fixed safely
|
||||||
|
- what remains blocked
|
||||||
|
- whether stale artifacts were ruled out
|
||||||
|
- whether generated files were involved
|
||||||
|
- exact missing files, targets, or generator step
|
||||||
|
- whether tests and CTest integration succeeded
|
||||||
|
- whether Docker validation and Jenkins discovery succeeded
|
||||||
|
|
||||||
|
## Final report
|
||||||
|
|
||||||
|
Keep it short. Include:
|
||||||
|
|
||||||
|
- status: validated, partially validated, or blocked
|
||||||
|
- service migrated or already correct
|
||||||
|
- files changed
|
||||||
|
- C++ files changed
|
||||||
|
- tests added per C++ change
|
||||||
|
- CTest registration changes
|
||||||
|
- CMake and generator changes
|
||||||
|
- stub/forward-declaration moves or removals
|
||||||
|
- Docker and Jenkins CI changes
|
||||||
|
- Qt5 references removed or remaining
|
||||||
|
- confirmation that removed modules were not restored
|
||||||
|
- confirmation that LogViewer was preserved
|
||||||
|
- exact validation commands and results
|
||||||
|
- result of ./docker-build.h if present
|
||||||
|
- remaining blockers or risks
|
||||||
+1
-1
Submodule qt-migration-legatus updated: c664611b80...b18844a202.
+163
@@ -0,0 +1,163 @@
|
|||||||
|
flmTests
|
||||||
|
flmTopicTypePlugin
|
||||||
|
svcAesClient
|
||||||
|
svcAesCommon
|
||||||
|
svcAesServer
|
||||||
|
svcAlmClient
|
||||||
|
svcAlmCommon
|
||||||
|
svcAlmServer
|
||||||
|
svcAreaEffectSimulation
|
||||||
|
svcAsmClient
|
||||||
|
svcAsmCommon
|
||||||
|
svcAsmServer
|
||||||
|
svcAssetManagement
|
||||||
|
svcAudioVideoManagement
|
||||||
|
svcAvmClient
|
||||||
|
svcAvmCommon
|
||||||
|
svcAvmServer
|
||||||
|
svcBldClient
|
||||||
|
svcBldCommon
|
||||||
|
svcBldServer
|
||||||
|
svcBuildings
|
||||||
|
svcCentralEffectSimulation
|
||||||
|
svcCesClient
|
||||||
|
svcCesCommon
|
||||||
|
svcCesDDSCommon
|
||||||
|
svcCesGeoPairingImpl
|
||||||
|
svcCesServer
|
||||||
|
svcCmoClient
|
||||||
|
svcCmoCommon
|
||||||
|
svcCmoServer
|
||||||
|
svcCnrHelper
|
||||||
|
svcCodClient
|
||||||
|
svcCodCommon
|
||||||
|
svcCodServer
|
||||||
|
svcCombatNetRadio
|
||||||
|
svcComponentMonitor
|
||||||
|
svcCoreClient
|
||||||
|
svcDifferentialGPS
|
||||||
|
svcEemClient
|
||||||
|
svcEemCommon
|
||||||
|
svcEemServer
|
||||||
|
svcEffectShowClient
|
||||||
|
svcEscClient
|
||||||
|
svcEscCommon
|
||||||
|
svcEscServer
|
||||||
|
svcEsmClient
|
||||||
|
svcEsmCommon
|
||||||
|
svcEsmServer
|
||||||
|
svcEvlClient
|
||||||
|
svcEvlCommon
|
||||||
|
svcEvlServer
|
||||||
|
svcExerciseEventManagement
|
||||||
|
svcExerciseManagement
|
||||||
|
svcExmClient
|
||||||
|
svcExmCommon
|
||||||
|
svcExmServer
|
||||||
|
svcFileManagement
|
||||||
|
svcFilterManagement
|
||||||
|
svcFlmClient
|
||||||
|
svcFlmCommon
|
||||||
|
svcFlmServer
|
||||||
|
svcFltClient
|
||||||
|
svcFltCommon
|
||||||
|
svcFltServer
|
||||||
|
svcGimClient
|
||||||
|
svcGimCommon
|
||||||
|
svcGimServer
|
||||||
|
svcGmpServer
|
||||||
|
svcGnaClient
|
||||||
|
svcGnaCommon
|
||||||
|
svcGnaServer
|
||||||
|
svcGuezIedManagement
|
||||||
|
svcInfrastructureManagement
|
||||||
|
svcIsmClient
|
||||||
|
svcIsmCommon
|
||||||
|
svcIsmServer
|
||||||
|
svcMapDummy
|
||||||
|
svcMdmClient
|
||||||
|
svcMdmCommon
|
||||||
|
svcMdmServer
|
||||||
|
svcMessaging
|
||||||
|
svcMeteoDataManagement
|
||||||
|
svcMrkClient
|
||||||
|
svcMrkCommon
|
||||||
|
svcMrkServer
|
||||||
|
svcMsgClient
|
||||||
|
svcMsgCommon
|
||||||
|
svcMsgServer
|
||||||
|
svcNomClient
|
||||||
|
svcNomCommon
|
||||||
|
svcNomServer
|
||||||
|
svcNotificationManagement
|
||||||
|
svcObdClient
|
||||||
|
svcObdCommon
|
||||||
|
svcObdServer
|
||||||
|
svcOcBaseDownload
|
||||||
|
svcOcSituationClient
|
||||||
|
svcOcSituationServer
|
||||||
|
svcOperatorManagement
|
||||||
|
svcOpmClient
|
||||||
|
svcOpmCommon
|
||||||
|
svcOpmServer
|
||||||
|
svcOreDummy
|
||||||
|
svcOscClient
|
||||||
|
svcOscCommon
|
||||||
|
svcOscServer
|
||||||
|
svcOssClient
|
||||||
|
svcOssCommon
|
||||||
|
svcOssServer
|
||||||
|
svcParticipantManagement
|
||||||
|
svcPdmClient
|
||||||
|
svcPdmCommon
|
||||||
|
svcPdmServer
|
||||||
|
svcPedDummy
|
||||||
|
svcPpmClient
|
||||||
|
svcPpmCommon
|
||||||
|
svcPpmServer
|
||||||
|
svcPreClient
|
||||||
|
svcPreCommon
|
||||||
|
svcPreServer
|
||||||
|
svcProjectDataManagement
|
||||||
|
svcPwsCommon
|
||||||
|
svcRecCommon
|
||||||
|
svcRecordingManagement
|
||||||
|
svcRepClient
|
||||||
|
svcRepCommon
|
||||||
|
svcRepCommonExecutable
|
||||||
|
svcRepServer
|
||||||
|
svcReportAnalyzer
|
||||||
|
svcReportGenerator
|
||||||
|
svcScmClient
|
||||||
|
svcScmCommon
|
||||||
|
svcScmServer
|
||||||
|
svcScrDummy
|
||||||
|
svcServiceManagement
|
||||||
|
svcSituationReplay
|
||||||
|
svcSmoDummy
|
||||||
|
svcSomClient
|
||||||
|
svcSomCommon
|
||||||
|
svcSomServer
|
||||||
|
svcSoundManagement
|
||||||
|
svcSrmCommon
|
||||||
|
svcSrpClient
|
||||||
|
svcSrpCommon
|
||||||
|
svcSrpServer
|
||||||
|
svcTabClient
|
||||||
|
svcTabCommon
|
||||||
|
svcTabServer
|
||||||
|
svcTabocClient
|
||||||
|
svcTabocCommon
|
||||||
|
svcTabocServer
|
||||||
|
svcTargetManagement
|
||||||
|
svcTgtClient
|
||||||
|
svcTgtCommon
|
||||||
|
svcTgtServer
|
||||||
|
svcTrainingAreaBase
|
||||||
|
svcTrainingAreaBaseOC
|
||||||
|
svcVideoOverlayManagement
|
||||||
|
svcWarehouseGuez
|
||||||
|
svcWarehouseManagement
|
||||||
|
svcWhgClient
|
||||||
|
svcWhgCommon
|
||||||
|
svcWhgServer
|
||||||
Reference in new issue
Block a user