Files
qt-migration-legatus/ci/Dockerfile.ci
T
2026-09-12 13:54:34 +02:00

92 lines
3.2 KiB
Docker

# 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"]