Resolution order (highest precedence first):
1. exported MIGRATE_PIPELINE_ROOT (e.g. from a Jenkinsfile)
2. MIGRATE_PIPELINE_ROOT set by .envrc in this directory
3. derived from the script location (three levels up)
The script always lives at <root>/qt-migration-legatus/qt6-after/
qt6-migrated-legatus, so the pipeline root is three levels up. This
makes the script work in a fresh Jenkins checkout with no environment
setup at all, and .envrc is no longer required.
- LogViewModels: replace deprecated invalidateFilter() with
begin/endFilterChange() (11 sites)
- LogViewTelegramEdit: move m_logger to match member declaration order
(-Wreorder) and consume QFile::open results
- PrtCnvBroadcastMgr: move m_logger to match member declaration order
(-Wreorder)
- PrtCnvCentralThread: add remaining AreaEffectSimulationType values to
the silent-ignore switch group (-Wswitch)
- PrtCnvMain: consume freopen results in daemonize (-Wunused-result)
The container script now runs the packaging flow itself instead of
calling the outer-repo jenkins_builder_ubuntu26.sh:
- Stage the workspace to deb_stage (same tar/excludes as the verified
jenkins flow; the workspace itself is never deleted)
- Run the in-tree rpmbuild/make_rpm_ubuntu26.py from the staged source
tree with the same cmake flags and arguments as before
- Copy the produced DEBs to the package output mount
- A packaging failure now fails the build instead of being logged and
swallowed
- Drop the now-unneeded MIGRATE_PIPELINE_ROOT/WORKSPACE/PROJECT_BASE_DIR
container env plumbing
The branch is now fully self-contained: new_docker_build.sh + Dockerfile
+ rpmbuild/. The build-pipeline DEB additionally ships
rpmbuild/make_rpm_ubuntu26.py (the staging list already named it).
Verified: zero-warning build, 5 DEBs with identical contents.
Keep make_rpm_ubuntu26.py (byte-identical to the validated working tree,
including the package-content validator fixes). It is self-contained
(standard library only, no helpers.py import) and its staging artifacts
land in the workspace root, so nothing else from the outer rpmbuild/
directory is needed:
- helpers.py: zero references from the Ubuntu 26 script (belongs to the
other platform variants)
- make_rpm.py / make_rpm7.py / make_rpm15.1.py / make_rpm15.2.py:
other platform packaging (base, RHEL7, CentOS 15.x)
- make_rpmModule.py / make_rpmModule7.py: module packaging
- make_rpmSVOnly.py: SV-only packaging
- make_rpm_extfw.py: external framework packaging
- make_tag.py: release tagging tool
- make_license_rpm.sh + ctc_TDS_license.spec.in + ctc_WMS_license.spec.in:
CTC license RPM flow
- .git (submodule pointer) and .gitignore (no artifacts are created in
this directory)
- new_docker_build.sh (665 -> 528 lines): drop the OFF-fixed build
variables and their redundant cmake flags (BUILD_RTI/GRANTLEE/
VIEWER_ONLY/CODIFICATION default OFF, BUILD_ALL/SV/WS/AAR default ON -
all matching this branch's configuration); the container cmake now
passes only the flags that override CMake defaults (-DBUILD_ARCGIS=OFF,
-DRELEASE_BUILD=ON, -DBUILD_TESTING=ON).
- Drop the non-prebuilt base-image path (in-container apt-get install +
aqtinstall fallback, --use-prebuilt-image/--no-prebuilt-image) and
--cmake_build_flags: the branch only ever builds inside the prebuilt
image.
- Drop ensure_database(): the PostgreSQL server only served the DB tools
(Lts/Tools), which are not built in this branch; the build links
against the header-only dev packages baked into the image.
- Drop libvlc-dev/vlc-plugin-base from the image packages: VLC existed
only for thp_viewer (Lts/Application, out of scope).
- --build-prebuilt-image now builds the image from ./Dockerfile and
exits, matching the documented two-step flow.
- Dockerfile: the prebuilt build image recipe (Ubuntu 26.04 + apt deps +
aqtinstall Qt6 + KDReports), parameterized via ARG APT_PACKAGES /
QT_VERSION / QT_ARCH / QT_BASE_DIR.
- new_docker_build.sh: build_prebuilt_image() now runs
docker build -f Dockerfile with the package list and Qt settings passed
as build args, using an empty build context (the Dockerfile has no
COPY/ADD).
- Delete all test_*.cpp, *.cmake helpers, MockCoordTrans.h and the gtest/strix
tooling from tests/: the only target (migration_tests) was guarded by
NOT RELEASE_BUILD, so nothing in tests/ compiles in this branch's
release build.
- Replace tests/CMakeLists.txt with a configure-only placeholder so the
unconditional ADD_SUBDIRECTORY(tests) from the root CMakeLists stays
resolvable without emitting the 'No migration test sources found'
warning or triggering the GTest FetchContent fallback.
- Scope new_docker_build.sh (1672 -> 694 lines) to this branch: keep the
prebuilt-image build/use/delete flow, .envrc/MIGRATE_PIPELINE_ROOT and
rti_license validation, the release-scope in-container cmake/make/ctest
and the Jenkins builder package production. Remove the GROUP1-11
target lists and options, viewer-only, grantlee/arcgis/codification
toggles, tests-only, integration-test and verify-rpm machinery.
- Guard the Lts/Viewer include paths with if(EXISTS): the module is
outside the release scope, and the unguarded include_directories
emitted -Wmissing-include-dirs for every translation unit
- nglpdfpage: initialize m_rotation before m_scaleFactor to match the
member declaration order (-Wreorder)
The compiled tabPluginTetraJson plugin includes
TrainingAreaBase/recv_from_tab.h and TrainingAreaBase/send_to_tab.h
for shared data structures; they are listed in SRCS_exe but are not
exe-exclusive. Restored from the base commit.
Lts/Common: drop the 17 submodules excluded from the RELEASE_BUILD
branch of Lts/Common/CMakeLists.txt (CodeGen, LtsAppManager, LtsBotan,
LtsCoordinate, LtsElevation, LtsLogin, LtsMultiMonitor,
LtsPluginManager, LtsPrinting, LtsProjectionWorkstation,
LtsScriptTimeline, LtsSession, LtsTimeline, LtsTimelineClassic,
LtsVirtualKeyboard, LtsWidgets, TopicEditorBase). Only the 13
subdirectories actually built remain.
TrainingAreaBase: drop sources of targets excluded by
IF(NOT RELEASE_BUILD) / IF(BUILD_RTI) (svcTabClient, svcTabServer,
svcTrainingAreaBase exe, RecordReplayPlugin customization) and the 7
plugin directories not added in the release path (AdlerJson,
ApacheHlaJson, DebugJsonDir, HlaJson, Nmea, UAS, WlsTetra). Only
tabTelegrams, svcTabCommon and the TetraJson plugin are compiled.
Cross-checked: no kept compiled source includes headers from the
removed modules (GuiPluginInterface - the only LtsWidgets consumer -
is itself NOT RELEASE_BUILD-guarded).
NGL_ADD_SUBDIR_GUARDED gates on MIGRATE_MODULE, not directory
existence: with MIGRATE_MODULE empty (the release build path) the
unconditional add_subdirectory(translations) fails when the directory
is missing. It is a configure requirement like tests/ and doxygen/
(no .qm output reaches the DEB packages).
- include/ArcGIS (984 MB): ArcGIS modules are force-excluded in
RELEASE_BUILD (BUILD_ARCGIS=OFF) and no in-scope code includes its
headers
- translations/: no .qm files reach any DEB; CMake add is guarded
- external/ (ArcGIS symlink): FindArcGIS only runs when BUILD_ARCGIS=ON
- rti_license.dat: license is supplied via RTI_LICENSE_FILE=
/workspace/rti_license.dat mounted from the pipeline root
- repo-root infra (.github, ci, docs, scripts, .entire, Jenkinsfile,
README, .envrc-example, .clang-format, empty .gitmodules): not
consumed by the DEB build
Kept: cmake/, include/ (non-ArcGIS), doxygen/ (unguarded doxygen
targets in root CMakeLists), tests/ (unconditional ADD_SUBDIRECTORY),
lts-cc.conf (CONFIGURE_FILE), CTestCustom.ctest, new_docker_build.sh,
.gitignore files, qt6-after/external mount symlink.
The RELEASE_BUILD include path (root CMakeLists.txt) points to
Lts/Services/ProjectDataManagement/stubs, which TrainingAreaBase's
tab_plugin_interface.h needs (ProjectDataManagement/pdm.hpp). Only the
stub headers are restored - the full PDM module stays out of scope.
Deletes the two stub-header trees (249 files) that shadowed the real
rtiddsgen-generated DDS headers, and removes every reference to them.
CMake (15 include-path entries):
root CMakeLists.txt include_directories(.../forward-declarations);
NGL_TARGET_INCLUDE_DIRECTORIES entries in 7 service CMakeLists
(ServiceManagement, SoundManagement, SituationMap, ScreenRecording,
SituationReplayManagement, SituationReplay, ServiceMonitor)
Source includes that resolved to the root-level stubs (only 2, repointed to the
module-prefixed generated headers the rest of the tree already uses):
Lts/Services/AreaEffectSimulation/object_charge_effect.h
<aes_dtc.h> -> <AreaEffectSimulation/aes_dtc.h>
Lts/Proxies/TrainingAreaBaseOC/websocket_handler.h
<taboc_dtc.h> -> <TrainingAreaBaseOC/taboc_dtc.h>
(generic_dtc_impl.h needs no change: its quote-include "generic_dtc.h"
resolves to the real Lts/DDS/DTC/generic_dtc.h in the same directory)
Tests:
tests/test_migration_stubs.cpp: remove the redundant root-level stub test
(AesDtcCompiles) - the module-prefixed AreaEffectSimulationDtcCompiles test
already exercises the same AreaEffectSimulation::Interface header.
tests/test_skl_dtc.cpp: delete (removed-module compile test, already filtered
out of the build) and remove its now-obsolete CMake list(FILTER) exclusion.
Validation: full rebuild (build4, make -j4 -k) with the removal - 0 new compile
errors vs the pre-existing base-state baseline (77 unique real-error signatures
identical to baseline; all 15 'No such file' headers pre-existing).
Line 2 (services side) used a bare key line, which the allowed_signers parser rejects; prefix it with the signer principal like line 1 so git verify-commit matches the key.