FROM debian:bookworm-slim AS apr-build

ARG APR_VERSION=1.7.6
ARG APR_SHA256=6a10e7f7430510600af25fabf466e1df61aaae910bf1dc5d10c44a4433ccc81d
ARG APR_FORCE_URANDOM=0

RUN apt-get update \
    && apt-get install -y --no-install-recommends build-essential ca-certificates curl uuid-dev \
    && rm -rf /var/lib/apt/lists/*

COPY docker/getrandom-probe.c /tmp/getrandom-probe.c

RUN set -eu; \
    cc -O2 -Wall -Wextra -o /tmp/getrandom-probe /tmp/getrandom-probe.c; \
    if [ "$APR_FORCE_URANDOM" = 1 ] || ! /tmp/getrandom-probe; then \
        echo 'Kernel getrandom is unavailable; building APR with /dev/urandom fallback.'; \
        apr_mode=urandom; \
    else \
        echo 'Kernel getrandom is available; building APR with the native source.'; \
        apr_mode=native; \
    fi; \
    curl -fsSL "https://downloads.apache.org/apr/apr-${APR_VERSION}.tar.gz" -o /tmp/apr.tar.gz; \
    echo "${APR_SHA256}  /tmp/apr.tar.gz" | sha256sum -c -; \
    mkdir -p /tmp/apr-src; \
    tar -xzf /tmp/apr.tar.gz -C /tmp/apr-src --strip-components=1; \
    cd /tmp/apr-src; \
    if [ "$apr_mode" = urandom ]; then \
        ac_cv_func_getrandom=no \
        ac_cv_have_decl_SYS_getrandom=no \
        ac_cv_func_arc4random_buf=no \
            ./configure --prefix=/usr/local/apr --with-devrandom=/dev/urandom; \
    else \
        ./configure --prefix=/usr/local/apr; \
    fi; \
    make -j"$(nproc)"; \
    make install; \
    rm -rf /tmp/apr-src /tmp/apr.tar.gz /tmp/getrandom-probe /tmp/getrandom-probe.c

FROM php:8.3-apache-bookworm

COPY --from=apr-build /usr/local/apr /usr/local/apr

ENV LD_LIBRARY_PATH=/usr/local/apr/lib

RUN apt-get update \
    && apt-get install -y --no-install-recommends cron libcurl4-openssl-dev libfreetype6-dev libjpeg62-turbo-dev libonig-dev libpng-dev libzip-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j"$(nproc)" curl exif gd mbstring zip \
    && a2enmod headers mime rewrite \
    && rm -rf /var/lib/apt/lists/*

COPY docker/apache.conf /etc/apache2/sites-available/000-default.conf
COPY docker/php.ini /usr/local/etc/php/conf.d/cup.ini
COPY docker/entrypoint.sh /usr/local/bin/cup-entrypoint
COPY docker/cup-cron.sh /usr/local/bin/cup-cron
COPY docker/bootstrap/ /opt/cup-bootstrap/

RUN chmod 0755 /usr/local/bin/cup-entrypoint /usr/local/bin/cup-cron \
    && printf '* * * * * www-data /usr/local/bin/cup-cron minute\n17 3 * * * www-data /usr/local/bin/cup-cron daily\n' > /etc/cron.d/cup \
    && chmod 0644 /etc/cron.d/cup \
    && mkdir -p /srv/cup/www \
    && apache2 -v

WORKDIR /srv/cup/www
EXPOSE 80
ENTRYPOINT ["/usr/local/bin/cup-entrypoint"]
