FROM ubuntu:rolling

WORKDIR /tmp
ENV HOME=/tmp
RUN chmod -R 777 /tmp

# Install apt dependencies
RUN apt-get update
RUN apt-get upgrade -y
RUN TZ=America/Los_Angeles DEBIAN_FRONTEND=noninteractive apt-get install -y \
    build-essential \
    ccache \
    cmake \
    curl \
    devscripts \
    gcovr \
    git \
    gnupg \
    libc6-dbg \
    lsb-release \
    mold \
    ninja-build \
    pre-commit \
    python3-requests \
    rpm \
    software-properties-common \
    texlive-full \
    wget \
    zstd

# MinIO client, for uploading build artifacts
RUN curl -Ls "https://dl.min.io/client/mc/release/linux-$(dpkg --print-architecture)/mc" \
    -o /usr/local/bin/mc && chmod +x /usr/local/bin/mc

# Install recent valgrind from source
RUN curl -Ls https://sourceware.org/pub/valgrind/valgrind-3.22.0.tar.bz2 -o valgrind.tar.bz2 && \
    echo "c811db5add2c5f729944caf47c4e7a65dcaabb9461e472b578765dd7bf6d2d4c  valgrind.tar.bz2" > valgrind-sha.txt && \
    sha256sum --quiet -c valgrind-sha.txt && \
    mkdir valgrind && \
    tar --strip-components 1 --no-same-owner --no-same-permissions --directory valgrind -xjf valgrind.tar.bz2 && \
    cd valgrind && \
    ./configure --enable-only64bit --enable-lto && \
    make -j`nproc` && \
    make install && \
    cd .. && \
    rm -rf /tmp/*

# Recent clang
RUN wget https://apt.llvm.org/llvm.sh && chmod +x ./llvm.sh && ./llvm.sh 20

RUN apt-get -y install clang llvm

# Set after building valgrind, which doesn't build with clang for some reason
ENV CC=clang
ENV CXX=clang++

# Try to have all the pre-commit hooks we'll need already initialized
COPY .pre-commit-config.yaml /tmp/
RUN git init && pre-commit install-hooks
