# Ubuntu 26.04 Qt6 Build Container FROM harbor.sl.defence-elec.de/proxydockerhub/library/ubuntu:26.04 LABEL maintainer="Legatus Team" LABEL description="Qt6 build container for Legatus project" LABEL version="ubuntu26-qt6.10.2" # Prevent interactive prompts during package installation ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Berlin # Proxy configuration for air-gapped environments ARG HTTP_PROXY="" ARG HTTPS_PROXY="" ARG NO_PROXY="localhost,127.0.0.1,.sl.defence-elec.de" ENV http_proxy=${HTTP_PROXY} ENV https_proxy=${HTTPS_PROXY} ENV no_proxy=${NO_PROXY} # ============================================================================= # Base Development Tools # ============================================================================= RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ ninja-build \ clang \ gnupg \ curl \ jq \ openssh-client \ pkg-config \ git \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # ============================================================================= # Python 3 and aqtinstall for Qt6 # ============================================================================= RUN apt-get update && apt-get install -y --no-install-recommends \ python3 \ python3-venv \ python3-pip \ && rm -rf /var/lib/apt/lists/* RUN pip3 install --break-system-packages --quiet aqtinstall # ============================================================================= # Qt6 Framework via aqtinstall # ============================================================================= ARG QT_VERSION=6.10.2 ARG QT_MODULES="qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine qtpdf qtwebview qt5compat qtwebchannel qtpositioning qtlocation qtsensors" RUN aqt install-qt linux desktop ${QT_VERSION} linux_gcc_64 \ -m ${QT_MODULES} \ --outputdir /opt/Qt \ && ln -sfn /opt/Qt/${QT_VERSION}/gcc_64/bin/* /usr/local/bin/ ENV QT_HOME=/opt/Qt/${QT_VERSION}/gcc_64 ENV PATH=${QT_HOME}/bin:${PATH} ENV CMAKE_PREFIX_PATH=${QT_HOME}/lib/cmake # ============================================================================= # Qt6 SVG (not available via aqtinstall - use apt package) # ============================================================================= RUN apt-get update && apt-get install -y --no-install-recommends \ libqt6svg6-dev \ && rm -rf /var/lib/apt/lists/* # ============================================================================= # KDReports 2.3.0 # ============================================================================= ARG KDREPORTS_VERSION=2.3.0 RUN git clone --depth 1 --branch kdreports-${KDREPORTS_VERSION} \ https://github.com/KDAB/KDReports.git /tmp/KDReports \ && cd /tmp/KDReports \ && mkdir build && cd build \ && cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_PREFIX_PATH=${QT_HOME} \ -DKDReports_QT6=ON .. \ && cmake --build . -j$(nproc) \ && cmake --install . \ && rm -rf /tmp/KDReports # Create header alias for legacy includes RUN ln -sfn /usr/local/include/KDReports-qt6 /usr/local/include/KDReports # ============================================================================= # Log4Qt 2.0.0 # ============================================================================= ARG LOG4QT_VERSION=2.0.0 RUN git clone --depth 1 --branch v${LOG4QT_VERSION} \ https://github.com/MEONMedical/Log4Qt.git /tmp/Log4Qt \ && cd /tmp/Log4Qt \ && mkdir build && cd build \ && cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_PREFIX_PATH=${QT_HOME} .. \ && cmake --build . -j$(nproc) \ && cmake --install . \ && rm -rf /tmp/Log4Qt # ============================================================================= # Grantlee (Qt6 build from master) # ============================================================================= RUN git clone --depth 1 https://github.com/steveire/grantlee.git /tmp/grantlee \ && cd /tmp/grantlee \ && mkdir build && cd build \ && cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_PREFIX_PATH=${QT_HOME} \ -DGRANTLEE_BUILD_WITH_QT6=ON .. \ && cmake --build . -j$(nproc) \ && cmake --install . \ && rm -rf /tmp/grantlee # ============================================================================= # GoogleTest # ============================================================================= RUN apt-get update && apt-get install -y --no-install-recommends \ libgtest-dev \ libgmock-dev \ && rm -rf /var/lib/apt/lists/* # ============================================================================= # PostgreSQL 18 Client Libraries # ============================================================================= RUN apt-get update && apt-get install -y --no-install-recommends \ libpq-dev \ postgresql-server-dev-all \ && rm -rf /var/lib/apt/lists/* # ============================================================================= # Additional System Libraries # ============================================================================= RUN apt-get update && apt-get install -y --no-install-recommends \ libgl1-mesa-dev \ libxkbcommon-x11-0 \ libfontconfig1 \ libdbus-1-3 \ libpulse0 \ libxcb-glx0 \ libxcb-cursor0 \ libbz2-dev \ libpoppler-dev \ libpoppler-qt6-dev \ libboost-dev \ libgeographiclib-dev \ libbotan-3-dev \ libssl-dev \ libxml2-dev \ libicu-dev \ libkf6texttemplate-dev \ libqt6core6 \ libqt6gui6 \ libqt6widgets6 \ libqt6sql6 \ libqt6sql6-psql \ libqt6test6 \ qt6-base-dev \ qt6-l10n-tools \ qt6-serialport-dev \ qt6-svg-dev \ qt6-tools-dev-tools \ qt6-tools-dev \ qt6-websockets-dev \ libvlc-dev \ vlc-plugin-base \ rpm \ unzip \ && rm -rf /var/lib/apt/lists/* # ============================================================================= # Runtime Mount Points for Proprietary Dependencies # ============================================================================= RUN mkdir -p /opt/RTI /opt/ArcGIS # ============================================================================= # Environment Variables # ============================================================================= ENV DDS_PATH=/opt/RTI ENV ARCGIS_SDK_ROOT=/opt/ArcGIS/MapsSDK_Qt_300.0.0 # ============================================================================= # Cleanup # ============================================================================= RUN apt-get clean && rm -rf /var/cache/apt/* # Default command CMD ["/bin/bash"]