#
# This file is part of KDDockWidgets.
#
# SPDX-FileCopyrightText: 2024 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
# Author: Sérgio Martins <sergio.martins@kdab.com>
#
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
#
# Contact KDAB at <info@kdab.com> for commercial licensing options.

# Dockerfile for qt6-asan GitHub Action

# Instructions for manual inspection:
# docker build -t kddw-qt6-asan .
# docker run -it -v /data/sources/kddockwidgets/:/kddockwidgets/ kddw-qt6-asan
# cd /kddockwidgets/
# cmake --preset=dev-asan6
# cd build-dev-asan6 && ninja
# ctest -j12

# To prepare an image for GitHub actions see build_docker.sh

FROM ubuntu:24.04
MAINTAINER Sergio Martins (sergio.martins@kdab.com)

ENV TZ=Europe/Berlin
ENV LC_CTYPE=C.UTF-8
ENV PATH=$PATH:/Qt6/bin/
ENV LD_LIBRARY_PATH=/Qt6/lib/
ENV QT_QUICK_BACKEND=software
ENV LSAN_OPTIONS=detect_leaks=0

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt update
RUN apt install build-essential software-properties-common lld git cmake ninja-build \
                mesa-common-dev libglu1-mesa-dev libglib2.0-dev libfontconfig \
                libxkbcommon-dev mesa-utils libgl1-mesa-dev libglu1-mesa-dev \
                libglu1-mesa-dev libglib2.0-dev libfontconfig \
                libxkbcommon-x11-0 libxkbcommon-x11-dev libssl-dev openssl unzip clang libgtk-3-dev xvfb \
                rsync sudo \
                libxml2-dev libxcb1-dev libxcb-glx0-dev libxcb-shape0-dev \
                libxcb-xfixes0-dev libxcb-randr0-dev libxcb-render-util0-dev \
                libxcb-xinerama0-dev libx11-xcb-dev \
                libxcb-cursor0 libxcb-keysyms1 libxcb-image0 \
                libxcb-icccm4 libxcb-cursor-dev libx11-xcb1 gdb python3-pip clazy psmisc \
                libxcb-shm0-dev \
                libxcb-sync-dev \
                protobuf-compiler libprotobuf-dev libsqlite3-dev \
                libxslt-dev libspdlog-dev libxcb-*-dev -y

RUN mkdir /sources/

RUN git clone https://code.qt.io/qt/qt5.git /sources/qt6
RUN cd /sources/qt6 && git switch 6.8 && perl init-repository --module-subset=qtbase,qtshadertools,qtdeclarative

# Build qtbase first, so we can delete its build dir to save space, as GitHub has storage limits
RUN mkdir /build/ && cd /build/ && /sources/qt6/qtbase/configure -xcb -verbose -prefix /Qt6/ -debug -sanitize address -- -DQT_BUILD_TESTS_BY_DEFAULT=OFF -DQT_BUILD_EXAMPLES=OFF && ninja && ninja install && rm -rf /build/

# qtshadertools
RUN mkdir /build/ && cd /build/ && qt-cmake -G Ninja /sources/qt6/qtshadertools/
RUN cmake --build /build/ --parallel
RUN cmake --install /build/
RUN rm -rf /build/

# qtdeclarative
RUN mkdir /build/ && cd /build/ && qt-cmake -G Ninja /sources/qt6/qtdeclarative/
RUN cmake --build /build/ --parallel
RUN cmake --install /build/
RUN rm -rf /build/

RUN rm -rf /sources/
