# 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`.