#!/bin/bash


# This script build the reprepro from source

set -Eeuo pipefail

VERSION="5.3.1"
DEBIAN_VERSION="1+deb12u2"
SOURCE_DIR="/usr/local/src/reprepro-${VERSION}"
WORK_DIR="/tmp/reprepro-build"
BASE_URL="https://deb.debian.org/debian/pool/main/r/reprepro"

if [[ "$(id -u)" -ne 0 ]]; then
    echo "Error: run this script as root." >&2
    exit 1
fi

if ! grep -qE '^VERSION_ID="11"$' /etc/os-release; then
    echo "Error: this script is intended for Debian 11 Bullseye." >&2
    exit 1
fi

echo "==> Installing build tools and development dependencies..."

apt-get update
apt-get install -y \
    build-essential \
    devscripts \
    dpkg-dev \
    fakeroot \
    debhelper \
    libgpgme-dev \
    libdb-dev \
    zlib1g-dev \
    libbz2-dev \
    liblzma-dev \
    libarchive-dev \
    zstd \
    ca-certificates \
    wget

echo "==> Preparing source directory..."

rm -rf "$WORK_DIR"
mkdir -p "$WORK_DIR"
cd "$WORK_DIR"

echo "==> Downloading Debian source package ${VERSION}-${DEBIAN_VERSION}..."

wget "${BASE_URL}/reprepro_${VERSION}.orig.tar.xz"
wget "${BASE_URL}/reprepro_${VERSION}-${DEBIAN_VERSION}.debian.tar.xz"
wget "${BASE_URL}/reprepro_${VERSION}-${DEBIAN_VERSION}.dsc"

echo "==> Extracting source..."

dpkg-source -x \
    "reprepro_${VERSION}-${DEBIAN_VERSION}.dsc" \
    "$SOURCE_DIR"

cd "$SOURCE_DIR"

echo "==> Building binary package..."

dpkg-buildpackage -us -uc -b

DEB_FILE="$WORK_DIR/reprepro_${VERSION}-${DEBIAN_VERSION}_$(dpkg --print-architecture).deb"

if [[ ! -f "$DEB_FILE" ]]; then
    echo "Error: expected package not found: $DEB_FILE" >&2
    echo "Available packages:"
    find "$WORK_DIR" -maxdepth 1 -name 'reprepro_*.deb' -print
    exit 1
fi

echo "==> Checking package dependencies..."

dpkg-deb --info "$DEB_FILE"

echo "==> Installing locally built package..."

apt-get install -y "$DEB_FILE"

echo "==> Checking installed version..."

command -v reprepro
reprepro --version

echo "==> Checking whether reprepro can read the existing package..."

reprepro -Vb /var/www/html/raspisms.fr/apt checkpool

echo
echo "Build and installation completed."
echo "If the package still cannot be imported, check the error below:"
echo "  dpkg-deb --info /var/www/html/raspisms.fr/apt/incoming/raspisms.deb"
echo "  ar t /var/www/html/raspisms.fr/apt/incoming/raspisms.deb"
