- QT5_ADD_RESOURCES was a no-op stub under Qt6, silently dropping .qrc
files: LogView's :/image/* icons were never compiled into the binary.
Map the stub onto qt6_add_resources() (outfiles-variable form, which
appends the generated qrc_*.cpp to the source list). LogView is the
only caller of the stub.
- nglwidgets' Qt6 branch only processed rme_light_style.qrc;
nglresources.qrc (which provides :icons/16x16/* toolbar/window icons)
was left as a raw file in the source list and never compiled
(CMAKE_AUTORCC is off). Process both qrcs.
- LogView never loads libnglwidgets.so at runtime (--as-needed drops it:
the code uses no nglwidgets symbols), so its :icons/16x16 resources
were never registered for the app. Embed the 20 icons LogView actually
uses directly into LogViewResources.qrc with explicit aliases (rcc
rejects XML comments in .qrc and, without an alias, registers the full
relative path as the resource name).
- new_docker_build.sh: new --run-coverage mode (mutually exclusive with
--run-jenkins-builder). Instruments the release-scope build with
-O0 -g --coverage -fPIC -DNDEBUG (RELEASE flag override keeps -DNDEBUG
and -fPIC so behavior and PIC match the green baseline), runs ctest,
then collects the lcov report: capture --external -> extract on the
four release dirs -> remove test sources -> summary -> genhtml, all
with --ignore-errors mismatch,inconsistent,unused (GCC 15 + lcov 2.4).
Report lands in --coverage-output-dir (default ./coverage-out):
html/index.html, coverage.info, coverage_summary.txt.
- Dockerfile image gains lcov via APT_PACKAGES (genhtml ships in the
same package).
- Jenkinsfile: RunCoverage parameter (default on) + per-OS Coverage
stage running the driver on the agent and archiving
coverage/<project>/<os>/**.
- release-16-10-2026.sh: same coverage step, gated by DRYRUN_COVERAGE
(default ON, mirrors the Jenkins default).
- README: Step 6 (code coverage) and options/env reference entries.
- .gitignore: coverage-out/
Scope is now described only as what the release build contains
(TetraIF, Z/src, Lts/Common, TrainingAreaBase). All steps (image,
compile, tests, DEB packaging, Jenkins) kept and refreshed; the
license note is reduced to 'no license file is required'.
- Drop the 'Stub file ... BUILD_RTI=OFF / Auto-generated' headers from the
tab_* and pdm_* stub files (RTI is gone on this branch; the names say it)
- Drop stub comments from MockCoordTrans.h and the coordTransTests placeholders
- Drop the DDS exclusion list comment from Lts/Common/CMakeLists.txt
- Shorten the staging and packages-out comments in new_docker_build.sh
- Merge build_single_deb and build_single_deb_nobuild into one build_deb()
- Add build_nobuild_package() factory for the 4 no-build packages
- Extract run(), prune_dirs() and write_deb_file() helpers
- Drop the unreachable release_scope copy branch (all call sites used the
full-tree copy; the --release_scope CLI flag is kept)
- Trim pipeline_files to the 8 files that actually exist and are packaged
- Remove unused imports (configparser, getpass, re, datetime, Path, stat),
unused vars (test_patterns, script_extensions) and a duplicated write block
Audited the release-scope compilation (TetraIF, Z/src, Lts/Common +
TrainingAreaBase, BUILD_RTI=OFF) for every file under include/:
Removed (zero references from release-scope sources or CMake):
- service-stub header dirs (AlarmManagement, AreaEffectSimulation,
AssetManagement, AudioVideoManagement, Core, ExerciseEventManagement,
ExerciseManagement, GuezNasat, InfrastructureManagement, Lts,
LtsProjectionWorkstation, LtsScriptTimeline, LtsSession,
MarkerManagement, NotificationManagement, OperatorManagement,
ParticipantManagement, ProjectDataManagement, ReportManagement,
Services, SituationReplay, TopicEditorBase, Viewer)
- include/grantlee (codegen modules excluded from the release build)
- include/nglapplication (all headers duplicate Z/src/nglapplication)
- include/poppler (Qt5 header; the build includes poppler/qt6 from the
system package)
- include/rti (142 Connext DDS headers; only consumers are behind
BUILD_RTI, which is OFF for this branch)
- TetraIF/LogView zsksxd_tetraForLogView{,_guez}.cpp and
zsksxd_tetraForLogView_guez.x (the build compiles the .x; the guez
variant is referenced nowhere; LogView loads the .x from the app dir)
Kept (actively included): include/GeographicLib, include/LtsUtilsGuiDds,
include/NGLLogger.
Also drop the now-dangling include_directories for the removed dirs in
the top-level CMakeLists (include/Viewer/SituationMap) and
Lts/CMakeLists.txt (six stub dirs) - otherwise GCC warns
-Wmissing-include-dirs for every compile.
Verified with a full pipeline rebuild (scope-rebuild15): 0 warnings,
ctest baseline unchanged, all 5 DEBs produced.
The release validation scope (TetraIF, Z/src, Lts/Common +
TrainingAreaBase) never consumes an RTI license: no CMake file or
build step reads RTI_LICENSE_FILE, and the only RTI Connext DDS
consumers are all behind BUILD_RTI (OFF for this branch, stubs
compiled instead). The license was pure plumbing:
- new_docker_build.sh: remove the require_file validation, the
bind mount and the in-container RTI_LICENSE_FILE export
- jenkins-ci-rme: remove the RTI_LICENSE_FILE export and the
Jenkinsfile workspace-layout comment
- README: document that no license file is needed
Verified with a full pipeline rebuild (scope-rebuild12) run while
rti_license.dat was absent: 0 warnings, ctest baseline unchanged,
all 5 DEBs produced, none of them containing the license.
Document the full flow: prebuilt Docker image build, release-scope
compilation (mandatory CMake flags), running the unit tests (ctest
baseline plus direct execution of the test binaries), DEB package
production with the in-tree rpmbuild script, the Jenkins/CI entry
points, the options reference and troubleshooting notes.
New TetraIF/unit-test/ directory with one QtTest executable per
TetraIF release-scope module, wired into ctest and the DEB pipeline:
- coprtcnv_unit_test: central and radio telegram header fields,
payload access, length checks, fragmentation/reassembly roundtrip,
telegram-id string helpers
- logview_unit_test: IntegerCalculator arithmetic, operator priority,
parentheses, error codes and variables (compiles the LogView class
source directly; the class otherwise lives in the LogView
executable)
- prtcnv_unit_test: PrtCnvMember state and fragmented-telegram
handling (compiles the class source directly because PrtCnvLib is
built with hidden visibility)
TetraIF/CMakeLists.txt adds the unit-test subdirectory and
new_docker_build.sh builds and ctest-runs the three new targets.
- Jenkinsfile: guez-only release pipeline; the prebuilt build image is
built from the in-tree Dockerfile (via new_docker_build.sh
--build-prebuilt-image) instead of a pre-pulled harbor image; the
builder runs inside the container with the workspace mounted at
/workspace; the post-publish cleanup stage was dropped so the DEBs
stay under ${WORKSPACE}/rpms/... (the documented output location)
- jenkins_builder_ubuntu26.sh: uses the in-tree rpmbuild/
make_rpm_ubuntu26.py instead of the outer-repo copy; same-file guard
on the packages-out copy (host output dir == make_rpm output dir)
- jenkins_publisher_ubuntu26.sh: uploads rpms/${PROJECT}/${OS_VERSION}/
directly - make_rpm_ubuntu26.py writes the DEBs there without a TDS
subfolder
- release-16-10-2026.sh: local driver adapted to the current
new_docker_build.sh interface (drops the no-longer-existing
--use-prebuilt-image option, builds the image on demand, outputs to
${WORKSPACE}/rpms/${PROJECT}/${OS_VERSION}/)
- make_rpm_ubuntu26.py: stage the new jenkins-ci-rme/ files (Jenkinsfile,
builder, publisher) into the build-pipeline DEB (release-16-10-2026.sh
was already listed)
Not copied (superseded): openSUSE builder/publisher, the old Dockerfile
recipes (replaced by the in-tree Dockerfile), Bitbucket notification
(jenkins_notifier.sh is not part of this project)
- Document --package-output-dir "${WORKSPACE}/rpms/${PROJECT}/${OS_VERSION}/"
(Jenkins convention) in the usage examples
- The in-container copy step now copies to the real mount point
/workspace/packages-out instead of ${PACKAGE_OUTPUT_DIR}, which is a host
path that does not exist inside the container (the copy was a silent
no-op; packages reached the host directly via make_rpm's
--output_dir /workspace/rpms/... on the workspace mount)
- Skip the copy when the host output directory is the same directory as
make_rpm's output dir (stat device:inode guard) - which is exactly the
case for the Jenkins-style path above, where make_rpm already writes the
packages in place
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.
- LogViewTelegramDialog.hpp: Fixed default parameter to use N_LogView::getLogger()
- LogViewTelegram.cpp: Added logger.h include, fixed both constructor initializations
- getLogger() is defined in N_LogView namespace, not NGL namespace
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add m_logger member variable to LogViewTelegramEdit.hpp
- Initialize m_logger in LogViewTelegramEdit constructor
- Replace Qt::SystemLocaleLongDate with Qt::TextDate for Qt6 compatibility
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- LogViewField.hpp: Changed Logger& to NGL::INGLLogger& for m_logger member
- LogViewInjectionThread.hpp: Changed Logger& to NGL::INGLLogger& for m_logger member
- Both headers already include logger.h which defines LOGGER_T as NGL::INGLLogger&
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Migrated QStringRef to QStringView in LogViewTetraTelegramsParser
- Updated tokenize() function signature and implementation
- Updated bracketCount() helper function
- Updated validStructTokens() function
- Updated parseStruct(), parseEnum(), parseConstraint() functions
- Migrated QStringRef to QStringView in LogViewGui.cpp
- Updated splitRef() to splitView() calls
- Updated QVector<QStringRef> to QVector<QStringView>
- Migrated QStringRef to QStringView in LogViewXdrParser.cpp
- Updated midRef() to mid() calls
- Updated leftRef() to left() calls
- Updated Qt6 include paths: QAbstractTableModel and QModelIndex moved to QtCore
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- LtsTimeline depends on LtsWidgets library which has DDS dependencies
- LtsTimeline is not required for TetraIF/Z release scope modules
- Wrap LtsTimeline in release scope exclusion
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- TrainingAreaBase's tab_plugin_interface.h includes <ProjectDataManagement/pdm.hpp>
- For release builds (RELEASE_BUILD=ON), add stubs directory to include path
- Stub headers provide type definitions without DDS dependencies
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- AdlerJson depends on svcPdmClient (ProjectDataManagement) which is not in release scope
- Wrap ADD_SUBDIRECTORY(AdlerJson) in IF(NOT RELEASE_BUILD) conditional
- Prevents build failure from missing pdm_enums.hpp header
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- svcTabServer library is DDS-dependent and should be excluded in release builds
- Missing ENDIF() caused CMake configuration error at line 177
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>