# Build environment for the Lutris AppImage proof-of-concept.
#
# Ubuntu 22.04 is chosen as a balance between glibc backward compatibility
# (glibc 2.35) and shipping Python 3.10 + GTK3 + WebKit2GTK 4.1 in the
# distro repos. If we promote this from PoC to a supported channel, we
# may want to drop to 20.04 (glibc 2.31) for wider portability.
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
ENV LC_ALL=C.UTF-8

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    curl \
    wget \
    file \
    git \
    desktop-file-utils \
    gettext \
    appstream \
    libfuse2 \
    fuse \
    patchelf \
    python3 \
    python3-dev \
    python3-pip \
    python3-venv \
    python3-setuptools \
    python3-wheel \
    pkg-config \
    build-essential \
    ninja-build \
    libcairo2-dev \
    libgirepository1.0-dev \
    libdbus-1-dev \
    libdbus-glib-1-dev \
    libsystemd-dev \
    python3-gi \
    python3-dbus \
    gir1.2-gtk-3.0 \
    gir1.2-gdkpixbuf-2.0 \
    gir1.2-pango-1.0 \
    gir1.2-gnomedesktop-3.0 \
    gir1.2-webkit2-4.1 \
    gir1.2-notify-0.7 \
    gir1.2-ayatanaappindicator3-0.1 \
    libgtk-3-0 \
    libgtk-3-bin \
    libwebkit2gtk-4.1-0 \
    libnotify4 \
    libayatana-appindicator3-1 \
    libgnome-desktop-3-19 \
    librsvg2-common \
 && rm -rf /var/lib/apt/lists/*

# Jammy's apt meson (0.61) is older than meson-python requires (>=0.63),
# so install a current meson from pip. ninja from apt is fine; pip's
# meson invokes the apt-shipped ninja-build as its backend.
#
# pycairo is installed here too so PyGObject's meson build can find its
# C headers (at /usr/local/lib/python3.10/dist-packages/cairo/include/);
# apt's python3-cairo ships no headers, which is why python3-cairo /
# python3-gi-cairo are deliberately not in the apt list above.
RUN python3 -m pip install --no-cache-dir 'meson>=0.63.3'
RUN python3 -m pip install --no-cache-dir pycairo

# linuxdeploy + plugin-gtk handle library/typelib bundling and GTK env setup.
WORKDIR /opt/tools
RUN curl -fsSL -o linuxdeploy-x86_64.AppImage \
    https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \
 && curl -fsSL -o linuxdeploy-plugin-gtk.sh \
    https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh \
 && curl -fsSL -o appimagetool-x86_64.AppImage \
    https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage \
 && chmod +x linuxdeploy-x86_64.AppImage linuxdeploy-plugin-gtk.sh appimagetool-x86_64.AppImage

# linuxdeploy and appimagetool are AppImages; extract them so they run
# without FUSE (which isn't always usable inside containers).
RUN ./linuxdeploy-x86_64.AppImage --appimage-extract >/dev/null \
 && mv squashfs-root linuxdeploy \
 && ln -sf /opt/tools/linuxdeploy/AppRun /usr/local/bin/linuxdeploy \
 && ./appimagetool-x86_64.AppImage --appimage-extract >/dev/null \
 && mv squashfs-root appimagetool \
 && ln -sf /opt/tools/appimagetool/AppRun /usr/local/bin/appimagetool \
 && ln -sf /opt/tools/linuxdeploy-plugin-gtk.sh /usr/local/bin/linuxdeploy-plugin-gtk

WORKDIR /src
