282 lines
8.0 KiB
Markdown
282 lines
8.0 KiB
Markdown
# Qt6 Release Scope Audit
|
||
|
||
## Overview
|
||
This document defines the scope for the first Qt6-migrated modules release (M) and its required dependencies (S).
|
||
|
||
## Module Sets
|
||
|
||
### Release Modules (M)
|
||
These modules are explicitly included in the release:
|
||
|
||
1. **TetraIF/** - Complete TetraIF module
|
||
- CoPrtCnv/
|
||
- LogView/
|
||
- PrtCnv/
|
||
- CMakeLists.txt
|
||
|
||
2. **Z/** - Complete Z module
|
||
- src/ngldb/
|
||
- src/tcpserver/
|
||
- src/QtSingleApplication/
|
||
- src/WMS_Interface/
|
||
- src/nglapplication/
|
||
- src/nglcompression/
|
||
- src/nglsettings/
|
||
- src/ngltranslator/
|
||
- src/ngltools/
|
||
- src/nglwidgets/
|
||
- src/NGLLogger/
|
||
- CMakeLists.txt
|
||
|
||
3. **Lts/Common/** - Common utilities submodule
|
||
- CodeGen/
|
||
- LtsUtils/
|
||
- PluginInterfaces/
|
||
- LtsBasicTypes/
|
||
- LtsCoordinateTransformation/
|
||
- LtsDataModelInterfaces/
|
||
- LtsGeometry/
|
||
- LtsMapSymbol/
|
||
- LtsMath/
|
||
- LtsNetwork/
|
||
- LtsPluginManager/
|
||
- LtsPositioning/
|
||
- LtsProjection/
|
||
- LtsSerialization/
|
||
- LtsServiceInterfaces/
|
||
- LtsSignalHandling/
|
||
- LtsSqliteWrapper/
|
||
- LtsStandardPlugin/
|
||
- LtsStorage/
|
||
- LtsTestHelpers/
|
||
- LtsThreading/
|
||
- LtsTime/
|
||
- LtsUnitTests/
|
||
- LtsXml/
|
||
- MockCoordTrans/
|
||
- CMakeLists.txt
|
||
|
||
**Note:** LtsElevation is explicitly excluded (depends on Lts/Viewer/SituationMap outside release scope).
|
||
|
||
### Required Dependencies (S \ M)
|
||
These directories are required to build and test M:
|
||
|
||
1. **cmake/** - CMake build modules
|
||
- Required by: All modules (NGL_ADD_SUBDIR_GUARDED, find_package modules)
|
||
- Reference: `CMakeLists.txt:40-60` (NGL_ADD_SUBDIR_GUARDED function)
|
||
|
||
2. **include/** - Header files
|
||
- Required by: All modules for public API headers
|
||
- Reference: `CMakeLists.txt:1003-1008` (TetraIF include directories)
|
||
|
||
3. **src/** - Shared source files
|
||
- Required by: Multiple modules for shared utilities
|
||
- Reference: `CMakeLists.txt:975-987` (RELEASE_BUILD subdirectories)
|
||
|
||
4. **tests/** - Test files for release modules
|
||
- Required by: CTest validation
|
||
- Reference: `CMakeLists.txt:975-987` (tests included in RELEASE_BUILD)
|
||
|
||
5. **specs/** - Specification files
|
||
- Required by: Build configuration
|
||
- Reference: `CMakeLists.txt:975-987` (specs included in RELEASE_BUILD)
|
||
|
||
6. **translations/** - Translation files
|
||
- Required by: Qt6 translation system
|
||
- Reference: `CMakeLists.txt:975-987` (translations included in RELEASE_BUILD)
|
||
|
||
7. **external/** - External dependencies
|
||
- Required by: Third-party libraries
|
||
- Reference: `CMakeLists.txt:975-987` (external included in RELEASE_BUILD)
|
||
|
||
### Complete Module Set (R)
|
||
All modules in qt6-migrated-legatus:
|
||
|
||
**Included in Release (S = M ∪ (S \ M)):**
|
||
- TetraIF/
|
||
- Z/
|
||
- Lts/Common/
|
||
- cmake/
|
||
- include/
|
||
- src/
|
||
- tests/
|
||
- specs/
|
||
- translations/
|
||
- external/
|
||
|
||
**Excluded from Release (R \ S):**
|
||
- Lts/Tools/
|
||
- Lts/Application/
|
||
- Lts/DDS/
|
||
- Lts/Services/
|
||
- Lts/Proxies/
|
||
- Lts/Plugins/ (except ProjectDataManagement for generated headers)
|
||
- Lts/Viewer/
|
||
- Lts/Projects/
|
||
- Lts/LtsElevation/ (excluded in Lts/Common/CMakeLists.txt)
|
||
|
||
## CMake Configuration
|
||
|
||
### RELEASE_BUILD Option
|
||
```cmake
|
||
# CMakeLists.txt:975-987
|
||
option(RELEASE_BUILD "Build only release modules" OFF)
|
||
if(RELEASE_BUILD)
|
||
add_subdirectory(src)
|
||
add_subdirectory(TetraIF)
|
||
add_subdirectory(Z)
|
||
add_subdirectory(Lts/Common)
|
||
add_subdirectory(tests)
|
||
add_subdirectory(specs)
|
||
add_subdirectory(translations)
|
||
add_subdirectory(external)
|
||
add_subdirectory(cmake)
|
||
add_subdirectory(include)
|
||
else()
|
||
# Full development build with all modules
|
||
add_subdirectory(Lts)
|
||
# ... other development modules
|
||
endif()
|
||
```
|
||
|
||
### BUILD_RTI Option
|
||
```cmake
|
||
# Controls RTI Connext DDS dependent modules
|
||
option(BUILD_RTI "Build RTI Connext DDS dependent modules" OFF)
|
||
# Must be OFF for release (RTI not in release scope)
|
||
```
|
||
|
||
### NGL_ADD_SUBDIR_GUARDED Function
|
||
```cmake
|
||
# CMakeLists.txt:40-60
|
||
function(NGL_ADD_SUBDIR_GUARDED dir)
|
||
# Checks if subdirectory exists before adding
|
||
# Used with MIGRATE_MODULE variable for conditional inclusion
|
||
endfunction()
|
||
```
|
||
|
||
### Special Case: TetraIF
|
||
```cmake
|
||
# CMakeLists.txt:1003-1008
|
||
# TetraIF requires Lts/Plugins/ProjectDataManagement for generated headers
|
||
# This is a build-time dependency only, not included in release artifacts
|
||
```
|
||
|
||
## Build Targets
|
||
|
||
### RELEASE_GROUP3_TARGETS (from new_docker_build.sh)
|
||
```bash
|
||
RELEASE_GROUP3_TARGETS=(
|
||
"NGLLogger"
|
||
"nglapplication"
|
||
"ngldb"
|
||
"ngltools"
|
||
"nglwidgets"
|
||
"LtsCoordTrans"
|
||
"LtsDataModelInterfaces"
|
||
"LtsGeometry"
|
||
"LtsMapSymbol"
|
||
"LtsMath"
|
||
"LtsNetwork"
|
||
"LtsPluginManager"
|
||
"LtsPositioning"
|
||
"LtsProjection"
|
||
"LtsSerialization"
|
||
"LtsServiceInterfaces"
|
||
"LtsSignalHandling"
|
||
"LtsSqliteWrapper"
|
||
"LtsStandardPlugin"
|
||
"LtsStorage"
|
||
"LtsTestHelpers"
|
||
"LtsThreading"
|
||
"LtsTime"
|
||
"LtsUnitTests"
|
||
"LtsXml"
|
||
"CoPrtCnv"
|
||
"LogView"
|
||
"PrtCnv"
|
||
# ... 20+ targets total
|
||
)
|
||
```
|
||
|
||
### Excluded Targets
|
||
- `nglcomp_test` - Compression "Unknown error" in Qt6 (requires investigation)
|
||
- `grantlee_parser_smoke` - Requires ktexttemplate_defaulttags plugin (not in release scope)
|
||
|
||
## File References
|
||
|
||
### CMakeLists.txt
|
||
- **Lines 40-60**: NGL_ADD_SUBDIR_GUARDED function
|
||
- **Lines 975-987**: RELEASE_BUILD option and conditional subdirectory inclusion
|
||
- **Lines 1003-1008**: TetraIF special-case for ProjectDataManagement
|
||
|
||
### Lts/CMakeLists.txt
|
||
- **Lines 14-25**: RELEASE_BUILD conditional excluding non-release submodules
|
||
|
||
### Lts/Common/CMakeLists.txt
|
||
- **Lines 15-18**: LtsElevation exclusion (depends on Lts/Viewer/SituationMap)
|
||
|
||
### Z/src/CMakeLists.txt
|
||
- Subdirectory list: ngldb, tcpserver, QtSingleApplication, WMS_Interface, nglapplication, nglcompression, nglsettings, ngltranslator, ngltools, nglwidgets, NGLLogger
|
||
|
||
### TetraIF/LogView/CMakeLists.txt
|
||
- Links to: Qt6::Core, Qt6::Gui, Qt6::Network, CoPrtCnv, nglwidgets, NGLLogger, nglapplication, ngltools
|
||
|
||
### new_docker_build.sh
|
||
- **Line 740**: `RELEASE_BUILD="${RELEASE_BUILD:-ON}"`
|
||
- **Line 1260**: Conditional target selection based on RELEASE_BUILD
|
||
- **Line 1435**: CMake configuration passes RELEASE_BUILD flag
|
||
- **Line 1594**: RELEASE_BUILD exported to container
|
||
|
||
## Validation Requirements
|
||
|
||
1. **CMake Configuration**: Must configure with `-DRELEASE_BUILD=ON -DBUILD_RTI=OFF`
|
||
2. **Build**: Must complete without errors for all targets in RELEASE_GROUP3_TARGETS
|
||
3. **Tests**: CTest must pass for all release module tests
|
||
4. **Docker Build**: Must use `legatus-qt6:1.0` image with `--build-prebuilt-image`
|
||
5. **RPM/DEB Packaging**: Must only include release module artifacts
|
||
|
||
## Packaging Strategy
|
||
|
||
**Script-based filtering (not physical file removal):**
|
||
|
||
The release scope is enforced at package build time, not by removing files from repositories. This approach:
|
||
- Preserves full source history and development context in repositories
|
||
- Allows the same source tree to build both release and development packages
|
||
- Uses filtering logic in the package builder to include only release scope files
|
||
|
||
### Implementation
|
||
|
||
**rpmbuild/make_rpm_ubuntu26.py:**
|
||
- Added `--release_scope` flag to filter source files during DEB package creation
|
||
- `copy_src_dir_to_dest_dir()` function filters to release scope paths:
|
||
- TetraIF/
|
||
- Z/src/
|
||
- Lts/Common/
|
||
- CMakeLists.txt, cmake/, tests/, specs/, include/, translations/, external/
|
||
- Supporting files: .gitignore, .envrc, doxygen/, src/
|
||
|
||
**jenkins-ci-rme/jenkins_builder_ubuntu26.sh:**
|
||
- Passes `--release_scope` flag to make_rpm_ubuntu26.py
|
||
- Works in conjunction with `-DRELEASE_BUILD=ON` CMake flag
|
||
|
||
**Benefits:**
|
||
- No file deletion required in repositories
|
||
- Reversible and auditable through script changes
|
||
- Single source tree supports multiple build configurations
|
||
- Clear separation between source control and release artifacts
|
||
|
||
## Commit Policy
|
||
|
||
All commits must:
|
||
- Be signed with SSH key (gpg.format=ssh, gpg.program=gpg)
|
||
- Follow conventional commit format
|
||
- Be made on branch `story/release-at-16-oct-2026`
|
||
|
||
## Repositories
|
||
|
||
1. **qt-migration-legatus** - Main source code
|
||
2. **jenkins-ci-rme** - CI/CD pipeline configuration
|
||
3. **rpmbuild** - Package build scripts
|
||
|
||
All repositories must be on branch `story/release-at-16-oct-2026`. |