#!/bin/sh
# Guarantee /boot/firmware always boots the active linux-image-rpi-2712 / rpi-v8 metapackage target
# (works around z50-raspi-firmware GNU sort -V treating '+rpt-' > '+rpt+1-')
set -e

case "${DEB_MAINT_PARAMS:-configure}" in
	*configure*|"" ) ;;
	* ) exit 0 ;;
esac

FW="/boot/firmware"
[ -d "$FW" ] || exit 0
if ! ischroot 2>/dev/null && [ -x /usr/bin/systemd-detect-virt ] && ! systemd-detect-virt -q; then
	mountpoint -q "$FW" || exit 0
fi

sync_flavour() {
	meta="$1"
	kdst="$2"
	idst="$3"
	dep="$(dpkg-query -W -f='${Depends}\n' "$meta" 2>/dev/null | tr ',' '\n' | sed -n 's/^[[:space:]]*\(linux-image-[0-9][^ (]*\).*/\1/p' | head -n 1)"
	[ -n "$dep" ] || return 0
	kver="${dep#linux-image-}"
	if [ -f "/boot/vmlinuz-${kver}" ] && ! cmp -s "/boot/vmlinuz-${kver}" "${FW}/${kdst}"; then
		cp -f "/boot/vmlinuz-${kver}" "${FW}/${kdst}"
		dtb_dir="/usr/lib/linux-image-${kver}/broadcom"
		ovl_dir="/usr/lib/linux-image-${kver}/overlays"
		[ -d "$dtb_dir" ] && rsync -ct "${dtb_dir}"/bcm2712*.dtb "${FW}/" 2>/dev/null || true
		[ -d "$ovl_dir" ] && mkdir -p "${FW}/overlays" && rsync -ct "${ovl_dir}"/*.dtb* "${ovl_dir}"/README "${FW}/overlays/" 2>/dev/null || true
	fi
	if [ -f "/boot/initrd.img-${kver}" ] && ! cmp -s "/boot/initrd.img-${kver}" "${FW}/${idst}"; then
		cp -f "/boot/initrd.img-${kver}" "${FW}/${idst}"
	fi
}

sync_flavour "linux-image-rpi-2712" "kernel_2712.img" "initramfs_2712"
sync_flavour "linux-image-rpi-v8" "kernel8.img" "initramfs8"
sync -f "$FW" 2>/dev/null || true
