FROM ubuntu:26.04 ENV DEBIAN_FRONTEND=noninteractive ENV QT_VERSION=6.10.2 ENV QT_ARCH=linux_gcc_64 ENV QT_BASE_DIR=/opt/Qt ENV QT_ROOT=/opt/Qt/6.10.2/gcc_64 ENV Qt6_ROOT=/opt/Qt/6.10.2/gcc_64 ENV CMAKE_PREFIX_PATH=/usr/local:/opt/Qt/6.10.2/gcc_64 ENV PATH=/opt/Qt/6.10.2/gcc_64/bin:$PATH ENV LD_LIBRARY_PATH=/opt/Qt/6.10.2/gcc_64/lib:${LD_LIBRARY_PATH:-} RUN apt-get update && \ apt-get install -y --no-install-recommends \ python3 \ python3-pip \ python3-venv \ clang-format \ cmake \ ninja-build \ git \ g++ \ make \ ca-certificates \ openssh-client \ pkg-config \ libpq-dev \ libbz2-dev \ libboost-all-dev \ libxml2-dev \ libssl-dev \ libcurl4-openssl-dev && \ rm -rf /var/lib/apt/lists/* # Install Qt 6.10.2 via aqtinstall RUN python3 -m venv /opt/venv && \ /opt/venv/bin/pip install --upgrade pip setuptools wheel && \ /opt/venv/bin/pip install aqtinstall && \ mkdir -p "${QT_BASE_DIR}" && \ /opt/venv/bin/python -m aqt install-qt linux desktop "${QT_VERSION}" "${QT_ARCH}" -m qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine qtpdf qtwebview --outputdir "${QT_BASE_DIR}" && \ test -f "${QT_ROOT}/lib/cmake/Qt6/Qt6Config.cmake" # Install Log4Qt for Qt6 RUN git clone --depth 1 https://github.com/MEONMedical/Log4Qt.git /tmp/log4qt && \ cd /tmp/log4qt && \ mkdir -p build && cd build && \ cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=23 \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DCMAKE_PREFIX_PATH="${QT_ROOT}" \ -DCMAKE_INSTALL_PREFIX="/usr/local" \ -DBUILD_SHARED_LIBS=ON .. && \ cmake --build . -- -j$(nproc) && \ cmake --install . && \ rm -rf /tmp/log4qt # Create minimal CMake config for Log4Qt RUN mkdir -p /usr/local/lib/cmake/Log4Qt && \ cat > /usr/local/lib/cmake/Log4Qt/Log4QtConfig.cmake << 'EOF' if (NOT TARGET Log4Qt::log4qt) add_library(Log4Qt::log4qt UNKNOWN IMPORTED) set_target_properties(Log4Qt::log4qt PROPERTIES IMPORTED_LOCATION "/usr/local/lib/liblog4qt.so" INTERFACE_INCLUDE_DIRECTORIES "/usr/local/include" ) endif() set(Log4Qt_FOUND TRUE CACHE INTERNAL "Log4Qt found by package config") set(Log4Qt_INCLUDE_DIRS "/usr/local/include" CACHE INTERNAL "Log4Qt include dir") set(Log4Qt_LIBRARIES "/usr/local/lib/liblog4qt.so" CACHE INTERNAL "Log4Qt library") EOF # Set Qt platform for headless testing # ArcGIS SDK configuration 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 # Set Qt platform for headless testing ENV QT_QPA_PLATFORM=offscreen # Configure git for containerized environments RUN git config --global --add safe.directory "*" # Setup RTI Connext license (developer license file) COPY rti_license.dat /root/rti_license.dat ENV RTI_LICENSE_FILE=/root/rti_license.dat WORKDIR /workspace