# Build an environment for creating an AppImage.

# Try to use a distro with an old libc to maximize support on as many linux
# distros as possible for x86_64 and aarch64.
FROM debian:10

ARG ARCH

# debian 10 (buster) is end-of-life so its repositories have moved to
# archive.debian.org, and buster-updates is not archived.  The archived
# Release files are no longer updated, so their Valid-Until dates must be
# ignored.
RUN sed -i -e '/buster-updates/d' \
        -e 's|deb.debian.org|archive.debian.org|g' \
        /etc/apt/sources.list && \
    echo 'Acquire::Check-Valid-Until "false";' \
         > /etc/apt/apt.conf.d/99check-valid-until

RUN apt-get -qq -y update && \
    apt-get -qq -y dist-upgrade && \
    apt-get -qq -y install bison \
                           bzip2 \
                           curl \
                           file \
                           flex \
                           gcc \
                           gnupg2 \
                           jq \
                           libcairo2-dev \
                           libev-dev \
                           libffi-dev \
                           libfribidi-dev \
                           libharfbuzz-dev \
                           libssl-dev \
                           libsqlite3-dev \
                           make \
                           patch \
                           wget \
                           xz-utils \
                           zlib1g-dev && \
    apt-get -qq -y clean && \
    apt-get -qq -y autoclean

RUN mkdir -p \
          /usr/local/share/licenses/cairo-$(dpkg-query -W -f='${Version}\n' libcairo2) && \
    cp -p /usr/share/doc/libcairo2/copyright \
       /usr/local/share/licenses/cairo-$(dpkg-query -W -f='${Version}\n' libcairo2)/

RUN mkdir -p \
          /usr/local/share/licenses/freetype-$(dpkg-query -W -f='${Version}\n' libfreetype6) && \
    cp -p /usr/share/doc/libfreetype6/copyright \
       /usr/local/share/licenses/freetype-$(dpkg-query -W -f='${Version}\n' libfreetype6)/

RUN mkdir -p \
          /usr/local/share/licenses/fribifi-$(dpkg-query -W -f='${Version}\n' libfribidi0) && \
    cp -p /usr/share/doc/libfribidi0/copyright \
       /usr/local/share/licenses/fribifi-$(dpkg-query -W -f='${Version}\n' libfribidi0)/

RUN mkdir -p \
          /usr/local/share/licenses/graphite2-$(dpkg-query -W -f='${Version}\n' libgraphite2-3) && \
    cp -p /usr/share/doc/libgraphite2-3/copyright \
       /usr/local/share/licenses/graphite2-$(dpkg-query -W -f='${Version}\n' libgraphite2-3)/

RUN mkdir -p \
          /usr/local/share/licenses/harfbuzz-$(dpkg-query -W -f='${Version}\n' libharfbuzz0b) && \
    cp -p /usr/share/doc/libharfbuzz0b/copyright \
       /usr/local/share/licenses/harfbuzz-$(dpkg-query -W -f='${Version}\n' libharfbuzz0b)/

RUN mkdir -p \
          /usr/local/share/licenses/libpng-$(dpkg-query -W -f='${Version}\n' libpng16-16) && \
    cp -p /usr/share/doc/libpng16-16/copyright \
       /usr/local/share/licenses/libpng-$(dpkg-query -W -f='${Version}\n' libpng16-16)/

RUN mkdir -p \
          /usr/local/share/licenses/libau-$(dpkg-query -W -f='${Version}\n' libxau6) && \
    cp -p /usr/share/doc/libxau6/copyright \
       /usr/local/share/licenses/libau-$(dpkg-query -W -f='${Version}\n' libxau6)/

RUN mkdir -p \
          /usr/local/share/licenses/libbsd-$(dpkg-query -W -f='${Version}\n' libbsd0) && \
    cp -p /usr/share/doc/libbsd0/copyright \
       /usr/local/share/licenses/libbsd-$(dpkg-query -W -f='${Version}\n' libbsd0)/

RUN mkdir -p \
          /usr/local/share/licenses/libev-$(dpkg-query -W -f='${Version}\n' libev-dev) && \
    cp -p /usr/share/doc/libev-dev/copyright \
       /usr/local/share/licenses/libev-$(dpkg-query -W -f='${Version}\n' libev-dev)/

RUN mkdir -p \
          /usr/local/share/licenses/libssl1.1-$(dpkg-query -W -f='${Version}\n' libssl1.1) && \
    cp -p /usr/share/doc/libssl1.1/copyright \
       /usr/local/share/licenses/libssl1.1-$(dpkg-query -W -f='${Version}\n' libssl1.1)/

RUN mkdir -p \
          /usr/local/share/licenses/libxcb-$(dpkg-query -W -f='${Version}\n' libxcb-shm0) && \
    cp -p /usr/share/doc/libxcb-shm0/copyright \
       /usr/local/share/licenses/libxcb-$(dpkg-query -W -f='${Version}\n' libxcb-shm0)/

RUN mkdir -p \
          /usr/local/share/licenses/libxext-$(dpkg-query -W -f='${Version}\n' libxext6) && \
    cp -p /usr/share/doc/libxext6/copyright \
       /usr/local/share/licenses/libxext-$(dpkg-query -W -f='${Version}\n' libxext6)/

RUN mkdir -p \
          /usr/local/share/licenses/libxdmcp-$(dpkg-query -W -f='${Version}\n' libxdmcp6) && \
    cp -p /usr/share/doc/libxdmcp6/copyright \
       /usr/local/share/licenses/libxdmcp-$(dpkg-query -W -f='${Version}\n' libxdmcp6)/

RUN mkdir -p \
          /usr/local/share/licenses/libxrender-$(dpkg-query -W -f='${Version}\n' libxrender1) && \
    cp -p /usr/share/doc/libxrender1/copyright \
       /usr/local/share/licenses/libxrender-$(dpkg-query -W -f='${Version}\n' libxrender1)/

RUN mkdir -p \
          /usr/local/share/licenses/pixman-$(dpkg-query -W -f='${Version}\n' libpixman-1-0) && \
    cp -p /usr/share/doc/libpixman-1-0/copyright \
       /usr/local/share/licenses/pixman-$(dpkg-query -W -f='${Version}\n' libpixman-1-0)/

RUN mkdir -p \
          /usr/local/share/licenses/perl-$(dpkg-query -W -f='${Version}\n' perl) && \
    cp -p /usr/share/doc/perl/copyright \
       /usr/local/share/licenses/perl-$(dpkg-query -W -f='${Version}\n' perl)/

ARG LIBNSLVER="1.3.0"
RUN curl -o /tmp/libnsl-${LIBNSLVER}.tar.xz -fSsL \
         https://github.com/thkukuk/libnsl/releases/download/v${LIBNSLVER}/libnsl-${LIBNSLVER}.tar.xz && \
    tar -C /usr/local/src -xf /tmp/libnsl-${LIBNSLVER}.tar.xz
WORKDIR /usr/local/src/libnsl-${LIBNSLVER}
# Intentionally install libnsl next to debian 10's distro glibc version.
RUN ./configure --silent --prefix=/usr && \
    make -s -j$(nproc) && \
    make -s install && \
    ln -sf /usr/lib/libnsl.so.2 "/usr/lib/$(gcc -dumpmachine)/libnsl.so"
RUN mkdir -p /usr/local/share/licenses/libnsl-${LIBNSLVER} && \
    cp -p COPYING /usr/local/share/licenses/libnsl-${LIBNSLVER}/

ARG PYTHONMMVER="3.11"
ARG PYTHONVER="${PYTHONMMVER}.1"
RUN curl -o /tmp/Python-${PYTHONVER}.tgz -fSsL \
         https://www.python.org/ftp/python/${PYTHONVER}/Python-${PYTHONVER}.tgz && \
    tar -C /usr/local/src -xf /tmp/Python-${PYTHONVER}.tgz
WORKDIR /usr/local/src/Python-${PYTHONVER}
RUN ./configure --silent --prefix=/usr/local && \
    make -s -j$(nproc) && \
    make -s install
RUN mkdir -p /usr/local/share/licenses/python-${PYTHONVER} && \
    cp -p LICENSE /usr/local/share/licenses/python-${PYTHONVER}/

ARG DOCUTILSVER="0.21.2"
RUN /usr/local/bin/pip3 install docutils==${DOCUTILSVER}
RUN mkdir -p /usr/local/share/licenses/docutils-${DOCUTILSVER} && \
    cp -p \
       /usr/local/lib/python${PYTHONMMVER}/site-packages/docutils-${DOCUTILSVER}.dist-info/COPYING.txt \
       /usr/local/share/licenses/docutils-${DOCUTILSVER}/

# PostgreSQL 11 is the first release creating the pg_type_d.h include file for
# CockroachDB binary support.

ARG PGVER="11.22"
RUN wget -O /tmp/postgresql-${PGVER}.tar.bz2 -q \
         https://ftp.postgresql.org/pub/source/v${PGVER}/postgresql-${PGVER}.tar.bz2 && \
    tar -C /usr/local/src -xf /tmp/postgresql-${PGVER}.tar.bz2
WORKDIR /usr/local/src/postgresql-${PGVER}
RUN ./configure --silent --without-ldap --without-readline --without-zlib \
    --without-gssapi --with-openssl --prefix=/usr && \
    make -s -j $(nproc) install && \
    ldconfig
RUN mkdir -p /usr/local/share/licenses/postgresql-${PGVER} && \
    cp -p COPYRIGHT /usr/local/share/licenses/postgresql-${PGVER}/

ARG CMAKEVER="3.31.9"
RUN curl -o /tmp/cmake-${CMAKEVER}-linux-${ARCH}.tar.gz -fSsL \
         https://github.com/Kitware/CMake/releases/download/v${CMAKEVER}/cmake-${CMAKEVER}-linux-${ARCH}.tar.gz && \
    tar -C /usr --strip-components=1 \
        -xf /tmp/cmake-${CMAKEVER}-linux-${ARCH}.tar.gz

# Install DBT Tools

ARG DBTTOOLSVER="0.5.2"
RUN curl -o /tmp/v${DBTTOOLSVER}.tar.gz -fSsL \
         https://github.com/osdldbt/dbttools/archive/refs/tags/v${DBTTOOLSVER}.tar.gz && \
    tar -C /usr/local/src -xf /tmp/v${DBTTOOLSVER}.tar.gz
WORKDIR /usr/local/src/dbttools-${DBTTOOLSVER}
RUN cmake -H. -Bbuild/release -DCMAKE_INSTALL_PREFIX=/usr && \
    (cd build/release && make -s install) && \
    rm -f /tmp/v${DBTTOOLSVER}.tar.gz
RUN mkdir -p /usr/local/share/licenses/dbttools-${DBTTOOLSVER} && \
    cp -p LICENSE /usr/local/share/licenses/dbttools-${DBTTOOLSVER}/

ARG SQLITE3VER=3410200
RUN wget -O /tmp/sqlite-autoconf-${SQLITE3VER}.tar.gz -q \
         https://www.sqlite.org/2023/sqlite-autoconf-${SQLITE3VER}.tar.gz && \
    tar -C /usr/local/src -xf /tmp/sqlite-autoconf-${SQLITE3VER}.tar.gz
WORKDIR /usr/local/src/sqlite-autoconf-${SQLITE3VER}
RUN ./configure --quiet --silent --prefix=/usr/local && \
    make -s -j $(nproc) install
RUN mkdir -p /usr/local/share/licenses/sqlite-autoconf-${SQLITE3VER} && \
    cp -p tea/license.terms \
       /usr/local/share/licenses/sqlite-autoconf-${SQLITE3VER}/

ARG PANGOVER="1.42"
ARG PANGOMINORVER="4"
RUN curl -o /tmp/pango-${PANGOVER}.${PANGOMINORVER}.tar.xz -fSsL \
         https://download.gnome.org/sources/pango/${PANGOVER}/pango-${PANGOVER}.${PANGOMINORVER}.tar.xz && \
    tar -C /usr/local/src -xf /tmp/pango-${PANGOVER}.${PANGOMINORVER}.tar.xz
WORKDIR /usr/local/src/pango-${PANGOVER}.${PANGOMINORVER}
RUN ./configure --quiet --silent --prefix=/usr/local && \
    make -s -j $(nproc) install && \
    ldconfig
RUN mkdir -p /usr/local/share/licenses/pango-${PANGOVER}.${PANGOMINORVER} && \
    cp -p COPYING /usr/local/share/licenses/pango-${PANGOVER}.${PANGOMINORVER}/

ARG GNUPLOTVER="5.4.6"
RUN wget -O /tmp/gnuplot-${GNUPLOTVER}.tar.gz -q \
         https://sourceforge.net/projects/gnuplot/files/gnuplot/${GNUPLOTVER}/gnuplot-${GNUPLOTVER}.tar.gz/download && \
    tar -C /usr/local/src -xf /tmp/gnuplot-${GNUPLOTVER}.tar.gz
WORKDIR /usr/local/src/gnuplot-${GNUPLOTVER}
RUN ./configure -q --prefix=/usr/local --without-libcerf \
                --without-latex --without-readline --without-lua \
                --without-tektronix --with-qt=no --disable-history-file \
                --disable-x11-external --disable-raise-console \
                --disable-wxwidgets --disable-plugins \
                --disable-dependency-tracking && \
    make -s -j$(nproc) install
RUN mkdir -p /usr/local/share/licenses/gnuplot-${GNUPLOTVER} && \
    cp -p Copyright README /usr/local/share/licenses/gnuplot-${GNUPLOTVER}/

ARG RUSTVER="1.88.0"
RUN curl --proto '=https' --tlsv1.2 -fsSL https://sh.rustup.rs \
         -o /tmp/sh.rustup.sh && \
    sh /tmp/sh.rustup.sh -y --default-toolchain ${RUSTVER}

ARG TSTOOLSVER="0.10.3"
RUN curl -o /tmp/touchstone-tools-v${TSTOOLSVER}.tar.gz -fSsL \
         https://gitlab.com/touchstone/touchstone-tools/-/archive/v${TSTOOLSVER}/touchstone-tools-v${TSTOOLSVER}.tar.gz && \
    mkdir -p /usr/local/src/touchstone-tools-v${TSTOOLSVER} && \
    tar -C /usr/local/src/touchstone-tools-v${TSTOOLSVER} \
        --strip-components=1 \
        -xf /tmp/touchstone-tools-v${TSTOOLSVER}.tar.gz
WORKDIR /usr/local/src/touchstone-tools-v${TSTOOLSVER}
RUN cmake -H. -Bbuild/release -DCMAKE_INSTALL_PREFIX=/usr && \
    (cd build/release && make -s install) && \
    (cd spar && ${HOME}/.cargo/bin/cargo install --root /usr/local --path .) && \
    rm -f /tmp/touchstone-tools-v${TSTOOLSVER}.tar.gz
RUN mkdir -p /usr/local/share/licenses/touchstone-tools-v${TSTOOLSVER} && \
    cp -p COPYRIGHT /usr/local/share/licenses/touchstone-tools-v${TSTOOLSVER}/

ARG TOMLCLIVER="0.2.3"
RUN ${HOME}/.cargo/bin/cargo install --version ${TOMLCLIVER} \
    --root /usr/local toml-cli
RUN mkdir -p /usr/local/share/licenses/toml-cli-${TOMLCLIVER} && \
    curl -o /usr/local/share/licenses/toml-cli-${TOMLCLIVER}/LICENSE -fSsL \
         https://github.com/gnprice/toml-cli/raw/v${TOMLCLIVER}/LICENSE

WORKDIR /usr/local
ARG APPIMAGETOOLVER="1.9.1"
RUN curl -fSsOL \
         https://github.com/AppImage/appimagetool/releases/download/${APPIMAGETOOLVER}/appimagetool-${ARCH}.AppImage && \
    chmod +x appimagetool-${ARCH}.AppImage && \
    ./appimagetool-${ARCH}.AppImage --appimage-extract
