#!/bin/bash

arch64=(amd64 arm64 loong64 mips64el ppc64 ppc64el riscv64 s390x sparc64)
arch32=(armel armhf i386)

declare -A packages=(
    [i386]="qemu-system-amd64 [${arch64[*]}], qemu-system-i386 [${arch32[*]}], seabios,"
    [x86_64]="qemu-system-amd64, ovmf,"
    [arm64]="qemu-system-arm64, qemu-efi-aarch64,"
    [riscv64]="qemu-system-riscv64, qemu-efi-riscv64,"
    [loong64]="qemu-system-loong64, qemu-efi-loongarch64,"
)

default_depends="expect, xxd,"

for arch in i386 x86_64 arm64 riscv64 loong64; do
    if [ "$arch" = "i386" ]; then
        test_arch="$(IFS=,; echo "${arch64[*]},${arch32[*]}")"
    else
        test_arch="$(IFS=,; echo "${arch64[*]}")"
    fi
    for medium in cd hd; do
        cat << EOF
Test-Command: ./debian/tests/ipxe-iso ${arch} ${medium}
Depends: ipxe, ${default_depends} ${packages[${arch}]}
Features: test-name=iso-${arch}-${medium}
Architecture: ${test_arch}

EOF
    done
done

for arch in i386 x86_64; do
    nics=(e1000 e1000e rtl8139 virtio vmxnet3 eepro100 ne2k_pci pcnet)
    extra_depends=""
    if [ "$arch" = "i386" ]; then
        test_arch="$(IFS=,; echo "${arch64[*]},${arch32[*]}")"
    else
        test_arch="$(IFS=,; echo "${arch64[*]}")"
    fi
    case "$arch" in
        i386 | x86_64 ) extra_depends=" debian-installer-13-netboot-amd64," ;;
        arm64) extra_depends=" debian-installer-13-netboot-arm64," ;;
    esac
    for nic in "${nics[@]}"; do
        cat << EOF
Test-Command: ./debian/tests/ipxe-rom ${arch} ${nic}
Depends: ipxe-qemu, ${default_depends} ${packages[${arch}]}${extra_depends}
Features: test-name=rom-${arch}-${nic}
Architecture: ${test_arch}

EOF
    done
done
