# Unified build/CI image for the Legatus Qt6 migration. # # Build (context is ci/, which holds the RTI licence file): # docker build -f ci/Dockerfile.ci -t legatus-build:26.04 ci # # RTI Connext is not baked into the image, it is mounted at run time: # -v /path/to/rti_connext_dds-7.7.0:/opt/rti_connext_dds-7.7.0:ro # # Qt comes from the Ubuntu 26.04 packages (6.10.2). It is deliberately not # installed through aqtinstall: libkf6texttemplate-dev, which Lts/Common/CodeGen # requires, is linked against the distribution Qt6, and loading a second Qt6 # from /opt/Qt beside it would put two copies of QtCore in the same process. FROM ubuntu:26.04 ENV DEBIAN_FRONTEND=noninteractive # Toolchain, CI tooling (policy checks and formatting), Qt 6.10.2 with every # module the project's find_package() calls ask for, KDE text templating for # Lts/Common/CodeGen, GoogleTest, and the third-party libraries the services link. RUN apt-get update -qq && apt-get install -y -qq --no-install-recommends \ build-essential \ g++ \ make \ cmake \ ninja-build \ pkg-config \ binutils \ gdb \ file \ less \ git \ ca-certificates \ openssh-client \ python3 \ python3-pip \ python3-venv \ clang-format \ qt6-base-dev \ qt6-tools-dev \ qt6-tools-dev-tools \ qt6-l10n-tools \ qt6-declarative-dev \ qt6-multimedia-dev \ qt6-positioning-dev \ qt6-serialport-dev \ qt6-svg-dev \ qt6-webengine-dev \ qt6-websockets-dev \ qt6-5compat-dev \ libgl-dev \ libkf6texttemplate-dev \ libgtest-dev \ libboost-all-dev \ libbz2-dev \ libcurl4-openssl-dev \ libpq-dev \ libssl-dev \ libxml2-dev \ && rm -rf /var/lib/apt/lists/* # Headless Qt, for tests that instantiate widgets. ENV QT_QPA_PLATFORM=offscreen # Log4Qt is deliberately NOT installed. Its public header log4qt/level.h declares # a defaulted C++20 operator<=>, so every consumer must be compiled with # -std=c++20 or later. This project targets C++17, and pulling Log4Qt in makes # Z/src/NGLLogger fail to compile. NGLLogger falls back to its own log4qt_stub.h # when the package is absent. Re-enabling Log4Qt would require moving the whole # project to C++20 first. # RTI Connext DDS - mounted at run time, see the header comment. ENV RTI_CONNEXT_HOME=/opt/rti_connext_dds-7.7.0 \ NDDSHOME=/opt/rti_connext_dds-7.7.0 \ DDS_PATH=/opt/rti_connext_dds-7.7.0 \ PATH=/opt/rti_connext_dds-7.7.0/bin:$PATH \ LD_LIBRARY_PATH=/opt/rti_connext_dds-7.7.0/lib/x64Linux4gcc8.5.0 # Developer licence file. Override RTI_LICENSE_FILE to point at another one. COPY rti_license.dat /root/rti_license.dat ENV RTI_LICENSE_FILE=/root/rti_license.dat # ArcGIS SDK - only needed with -DBUILD_ARCGIS=ON, mounted at run time. ENV ARCGIS_ROOT=/repo/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk ENV ARCGIS_INC_DIR=${ARCGIS_ROOT}/include ENV ARCGIS_LIB_DIR=${ARCGIS_ROOT}/linux/x64/lib # Containerised checkouts are owned by a different uid than the build user. RUN git config --global --add safe.directory "*" WORKDIR /workspace CMD ["bash"]