395 lines
16 KiB
Markdown
395 lines
16 KiB
Markdown
# Strict Qt6 Migration Prompt: CMake targets under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer
|
|
|
|
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.
|
|
|
|
## Module in scope
|
|
|
|
Migrate only:
|
|
|
|
- cmake targets under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer
|
|
|
|
From:
|
|
|
|
- ./qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/Viewer
|
|
|
|
To:
|
|
|
|
- ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer
|
|
|
|
|
|
Do not migrate sibling services 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.
|
|
|
|
## Branches and trees
|
|
|
|
Qt6 target branch:
|
|
|
|
- feature/lift-lts-viewer-module-upto-qt6
|
|
|
|
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 two target service directories only when directly required to configure, generate, build, link, test, or validate these services.
|
|
|
|
Allowed outside-scope changes:
|
|
|
|
- parent CMakeLists.txt entries for these services
|
|
- central CMake helper fixes required by these services
|
|
- shared include path fixes required by these services
|
|
- RTI, codegen, ndsgen, KTextTemplate, or Grantlee integration fixes required by these services
|
|
- test infrastructure needed by tests for these services
|
|
- 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/Viewer:
|
|
|
|
- Discover real CMake targets defined under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer when folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer exists.
|
|
- Learn each option 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 under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer to ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh so the validation container builds or validates it.
|
|
- Add new --group5 option for required CMake ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer targets
|
|
- Add required apt packages to new_docker_build.sh
|
|
- Do not invent CMake targets under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer.
|
|
- Do not add targets that do not exist.
|
|
- If folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer 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 folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer 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
|
|
|
|
Rules:
|
|
|
|
- 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
|
|
|
|
Before changing any files, compare these directories and document/classify the differences:
|
|
|
|
- Source: `./qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/Viewer`
|
|
- Target: `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer`
|
|
|
|
Use the classifications below and explain the disposition of each relevant difference:
|
|
|
|
- already migrated
|
|
- missing and required for the in-scope Qt6 migration
|
|
- stale or generated
|
|
- intentionally removed under the preservation rules
|
|
- build-only
|
|
- requiring Qt6 adaptation
|
|
|
|
Copy missing required code parts from the source directory into the target directory when needed for this in-scope migration, then adapt them for Qt6 as required. Preserve intentional removals and all other preservation/scope rules; never modify the Qt5 legacy tree.
|
|
|
|
Copy required non-C++ files as well as `.cpp` and `.h` files. This includes `.ini` configuration files, image files, resources/assets, metadata/configuration files, and other runtime or test data needed to execute the services and their tests. Classify these files in the comparison and copy only those required by the in-scope Qt6 migration.
|
|
|
|
For each cmake target, inspect and migrate only as needed:
|
|
|
|
- source and header files
|
|
- CMakeLists.txt and parent CMake registration
|
|
- ui, qrc, resource, plugin, service metadata, configuration, images, and other required runtime/test data
|
|
- RTI IDL, ndsgen, KTextTemplate, and Grantlee inputs/templates
|
|
- tests directly tied to these services
|
|
|
|
Fix only real Qt6/C++17 build issues, such as:
|
|
|
|
- Qt module imports and target links
|
|
- moc, uic, and rcc handling
|
|
- QRegExp to QRegularExpression when required
|
|
- QTextCodec replacement when required
|
|
- QDesktopWidget or QApplication::desktop() replacement when required
|
|
- QString, QVariant, QMetaType, QDateTime, QAction, QMenu, signal/slot, enum, plugin, or metadata compatibility issues when required
|
|
|
|
No opportunistic refactoring or style cleanup.
|
|
|
|
## ArcGIS Maps SDK migration
|
|
|
|
The migration from `MapsSDK_Qt_100.0.0` to `MapsSDK_Qt_300.0.0` is partly impossible as a purely mechanical port because SDK/API changes can require design decisions.
|
|
|
|
- Before ArcGIS migration work or validation, read the current Lts/Viewer ArcGIS migration and build state from `./ARC_GIS_BUILD_REQUIREMENTS.md` and treat it as the factual starting point.
|
|
- ArcGIS must be installed with `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/install_arcgis.sh`.
|
|
- The previous ArcGIS installer/license EULA issue was fixed; do not treat that known EULA issue as still blocking without rechecking the current installer result.
|
|
- After running the ArcGIS installer, verify whether previously missing binaries such as the Qt Bundler and related required SDK tools are now installed. Report exact missing binaries if any are still absent.
|
|
- First document the affected code sections and modules, and identify the SDK/API changes that prevent a direct mechanical port.
|
|
- Then propose concrete porting approaches for each affected section, including any required design decisions.
|
|
- Do not claim the migration is complete until those affected sections have been addressed or reported as blocked.
|
|
- Do not use fake or stubbed success, or mechanical replacements, when the SDK/API change requires a design decision.
|
|
|
|
## Qt link rules
|
|
|
|
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
|
|
- 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. Before changing files, compare `./qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/Viewer` with `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer`. Document and classify relevant differences, including missing code and non-C++ runtime/test files, as specified under Migration checks.
|
|
3. Identify dependencies, generated inputs, Qt modules, parent CMake entries, removed-module references, LogViewer interactions, and required stub/forward-declaration relocations. Document affected ArcGIS SDK code sections/modules and propose concrete porting approaches before implementing changes to them.
|
|
4. Apply the smallest valid migration changes, copying only missing required source code and non-C++ files/assets into the Qt6 target tree while respecting preservation rules.
|
|
5. Add required CTest tests for C++ changes.
|
|
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 ./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
|
|
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
|
|
- 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 services
|
|
- 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
|
|
- RoutingServiceNG prompt rules are followed
|
|
- 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
|
|
- cmake targets under folder ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Viewer migrated or already correct
|
|
- files changed
|
|
- C++ files changed
|
|
- tests added per C++ change
|
|
- CTest registration changes
|
|
- CMake and generator changes
|
|
- source/target differences documented and classified, including copied non-C++ files/assets
|
|
- affected ArcGIS SDK code sections/modules and proposed porting approaches
|
|
- stub/forward-declaration moves or removals
|
|
- 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
|