# Maintainer: Christian Rebischke <chris.rebischke@archlinux.org>
# Maintainer: David Runge <dvzrv@archlinux.org>
# Maintainer: Christian Heusel <gromit@archlinux.org>
# Maintainer: Anton Hvornum <torxed@archlinux.org>
# Contributor: Lucas Werkmeister <mail@lucaswerkmeister.de>
# Contributor: Dave Reisner <dreisner@archlinux.org>

pkgname=mkosi
_mkosi_src_dir="${pkgname}"
pkgver=27.1.999+49+gc5b4d9e
pkgrel=0
pkgdesc="Build Legacy-Free OS Images"
arch=(any)
url="https://github.com/systemd/mkosi"
license=(LGPL-2.1-or-later)
depends=(
  python
  python-argcomplete
  sh
  systemd
)
makedepends=(
  git
  pandoc-cli
  python-build
  python-installer
  python-setuptools
  python-setuptools-scm
  python-wheel
)
checkdepends=(
  python-pytest
)
optdepends=(
  'acl: for removing directories created by mkosi'
  'apt: for creating Debian and Ubuntu images'
  'btrfs-progs: raw_btrfs and subvolume output formats'
  'cpio: for cpio output format'
  'debian-archive-keyring: build Debian images'
  'dnf: for creating CentOS, Fedora, OpenMandriva, Mageia and OpenSUSE images'
  'dosfstools: for FAT support'
  'e2fsprogs: for ext2/3/4 support'
  'edk2-ovmf: for running bootable images using QEMU'
  'erofs-utils: for EROFS support'
  'gnupg: for signing image checksums'
  'kmod: for images using Linux kernels'
  'mtools: for FAT support'
  'openssl: for UEFI SecureBoot'
  'python-pefile: for bootable images'
  'qemu: for running bootable images using QEMU'
  'sbsigntools: for UEFI SecureBoot'
  'socat: for running the "mkosi ssh" subcommand'
  'squashfs-tools: for squashfs support'
  'swtpm: for adding software TPM when running bootable images using QEMU'
  'systemd-ukify: for Unified Kernel Image (UKI) support'
  'tar: for tar output format and Debian or Ubuntu images'
  'ubuntu-keyring: for building Ubuntu images'
  'xfsprogs: for XFS support'
  'xz: for compressing images with xz'
  'zstd: for compressing images with zstd'
  'zypper: for creating OpenSUSE images'
)
source=(
  git+$url.git#tag=v$pkgver
)
sha512sums=('68f9b2430ebc70a9b19b19f842db3f95d58913b73d6b966c7533770d0da36d248f23aa02d2002823f696c337dc0a272ad0ca456c3ee58c1b596c1e76fbcfb8e7')
b2sums=('7adfba707598d48087940e18cb756fdbac09db68643c77d4d5f9be3509f51e9cf3442cf1c03861a72404c7e7bcdd990e979f57e2baf972b3427ba4a4da1dfde7')

# Some heuristics to detect that we are building on OBS, with no network access. Skip
# git verification, and use the OBS-provided tarball instead. The sources will be
# unpacked by OBS in $package-$version/
if [ -f /.build/build.dist ] && [ -d /usr/src/packages/SOURCES ] &&  [ -d /usr/src/packages/BUILD ] &&  [ -d /usr/src/packages/OTHER ]; then
  source[0]="$(find . -name "${pkgname}-*.tar.*" -print -quit)"
  _mkosi_src_dir="${source//.tar*}"
  sha512sums[0]='SKIP'
  b2sums[0]='SKIP'
fi

prepare() {
if [ "$_mkosi_src_dir" = "${pkgname}" ]; then
  cd $_mkosi_src_dir
  # Cherry-pick fixes for pacman 7.1, see
  # https://gitlab.archlinux.org/archlinux/packaging/packages/mkosi/-/issues/7
  git cherry-pick --no-commit c4c3d793d0f6f0a2f26895de5ed9382396f36bb5
  # Cherry-pick fixes to work with Qemu 11.0.0 and edk2 202602
  # https://github.com/systemd/mkosi/issues/4292
  git cherry-pick --no-commit fa8e53881c426bbbd6b0dec6b52583fdd768b12c
fi
}

build() {
  cd $_mkosi_src_dir
  python -m build --wheel --no-isolation
  for manpage in mkosi-addon.1.md  mkosi-initrd.1.md  mkosi-sandbox.1.md  mkosi.1.md  mkosi.news.7.md; do
    pandoc -t man -s -o "$pkgname/resources/man/${manpage%.md}" "$pkgname/resources/man/${manpage}"
  done
}

check() {
  cd $_mkosi_src_dir
  pytest -vv
}

package() {
  if [ -f /.build/build.dist ] && [ -d /usr/src/packages/SOURCES ] &&  [ -d /usr/src/packages/BUILD ] &&  [ -d /usr/src/packages/OTHER ]; then
    # OBS does not pull in optional dependencies, so add deps for everything neede to build and sign images
    depends+=('pacman')
    depends+=('archlinux-keyring')
    depends+=('python-pefile')
    depends+=('systemd-ukify')
    depends+=('cpio')
    depends+=('tar')
    depends+=('xz')
    depends+=('zstd')
    depends+=('kmod')
    depends+=('mtools')
    depends+=('dosfstools')
    depends+=('erofs-utils')
    depends+=('squashfs-tools')
    depends+=('btrfs-progs')
    depends+=('xfsprogs')
    depends+=('e2fsprogs')
    depends+=('pesign')
    depends+=('jq')
    depends+=('efitools')
  fi

  cd $_mkosi_src_dir
  python -m installer --destdir="$pkgdir" dist/*.whl

  # add kernel-install integration
  install -vDm 755 kernel-install/50-$pkgname.install -t "$pkgdir/usr/lib/kernel/install.d/"

  # NOTE: mkosi automatically uses the mkosi-initrd integration from Python's site-packages
  # distribution overrides can be added below /usr/lib/mkosi-initrd
  # user overrides can be added below /etc/mkosi-initrd
  #install -vdm 755 "$pkgdir/etc/mkosi-initrd"
  #install -vDm 644 ../$pkgname.tmpfiles "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf"

  install -vDm 644 $pkgname/resources/man/*.1 -t "$pkgdir/usr/share/man/man1/"
  install -vDm 644 $pkgname/resources/man/*.7 -t "$pkgdir/usr/share/man/man7/"
  install -vDm 644 docs/*.md {NEWS,README}.md -t "$pkgdir/usr/share/doc/$pkgname/"


  python -m mkosi completion bash | install -vDm 644 /dev/stdin "$pkgdir/usr/share/bash-completion/completions/mkosi"
  python -m mkosi completion fish | install -vDm 644 /dev/stdin "$pkgdir/usr/share/fish/vendor_completions.d/mkosi.fish"
  python -m mkosi completion zsh  | install -vDm 644 /dev/stdin "$pkgdir/usr/share/zsh/site-functions/_mkosi"
}
