# Maintainer: David Runge <dvzrv@archlinux.org>

pkgname=containers-common
_upstream=container-libs
pkgver=0.67.0
pkgrel=1
epoch=1
_podman_pkgver=5.8.0
_shortnames_pkgver=2025.03.19
_skopeo_pkgver=1.22.0
pkgdesc="Configuration files and manpages for containers"
arch=(any)
url="https://github.com/containers/container-libs"
license=(Apache-2.0)
depends=('container-network-stack>1')
makedepends=(go-md2man)
checkdepends=(ripgrep)
backup=(
  etc/containers/containers.conf
  etc/containers/mounts.conf
  etc/containers/policy.json
  etc/containers/registries.conf
  etc/containers/seccomp.json
  etc/containers/storage.conf
)
# configuration override directories need to exist
options=(emptydirs)
_src_dir="$_upstream-common-v$pkgver"
source=(
  $_src_dir.tar.gz::https://github.com/containers/container-libs/archive/refs/tags/common/v$pkgver.tar.gz
  podman-$_podman_pkgver.tar.gz::https://github.com/containers/podman/archive/v$_podman_pkgver.tar.gz
  skopeo-$_skopeo_pkgver.tar.gz::https://github.com/containers/skopeo/archive/v$_skopeo_pkgver.tar.gz
  shortnames-$_shortnames_pkgver.tar.gz::https://github.com/containers/shortnames/archive/refs/tags/v$_shortnames_pkgver.tar.gz
  mounts.conf
  tmpfiles.conf
  $pkgname-0.48.0-init_path.patch
  $pkgname-0.66.1-containers.conf-firewall-defaults.patch
)
sha512sums=('a4a0300f22f6f24276fcb206ffea561ac75713e8fa49c1ed2a4bded2c194a1954551797a5385d6ac8ca6cb3dbf504deb3f386b49c6b5d60d9f81fd69b9c430c5'
            '021438ba3b9060c5a3ef10f4220bfb9ceae43999dbd715be51f0e3b9d20e17c2f17f70110e9527e58242cb2a9ccc38135bb30ddeeae1c24e3d060db16d22ded4'
            'd4030c4dca7288e8a80a31fadd37532990bdf16ad5ff7c5e8e2ef922cc1a3185f1a6c32ac9906bd07a826cc6968a68dfd6df4d7e10e8ee22d87dba3ac5bfd3b9'
            'edadadda8920ac4880f2c44f396e5d4c844bf15c964d7ef5d14c68637ac43e0df91f4efd2be747bca74bd0da959ea21cc3200ab14b2b57aba5975cff8f2fbefa'
            '11fa515bbb0686d2b49c4fd2ab35348cb19f9c6780d6eb951a33b07ed7b7c72a676627f36e8c74e1a2d15e306d4537178f0e127fd3490f6131d078e56b46d5e1'
            '2b187c119db95cda439f36509545fd0f45530c69d9139823387f9aa68ea2e9c4b3dee8ee21a517daa73a88ac63cc694e0e170061bfc1503425c21868b2ccf7dd'
            '4a6526d01f192f0eb4dcbd28c019a2b0db6dc2128af644e8e89992e5dcfa45a02c739b06ee01e22606b5cb847213c002f8ab5f87a576846ac73f73eed9b2b469'
            '07bd289e1889a9426d30e9c4b538904b48eaf1b3fc481b44cca94a4f9cd8fc873621943cfaee7272a328946f7490942342fa8212f6cad49e74ecc4cd328d782c')
b2sums=('aff2b7c102be8407a376663d4efcb179e7b0ed25458063c6ccd3eeb109e90a96c1f828c15acfb4f2177d1cc3efec4ffe18ac2d722bddaac43683995c522952a9'
        'c8c4d7e5069caadedb6dbf421defb22533d45a7e8a0fddfb4fd01c3cb9c2a396bd6282845c5c6ea031e5ac2f4d96b983d229e3a164ae9478e4290cb918ad6fea'
        'f763954cd209c5d3770da1bfd71ab3be485920326ada83770b4b190149b712e67c2d200ca4af442f317cf19f8048e90f7c7b4b03761d3e43b57b4e68e6e8d006'
        'a72160f65aa13316c33b984173e151f0519720ec9617395980f0d7c5f25dc14b400aafbcb2fa8769eace9c1e51d4f1ddbe783e68fc0e40280743f90fbce30aa9'
        '2f4b0af3271103362a898e7fcc3ec05f06755902ad664ac3107bb8debb8b2ac0d50de311d5fc651279a817a56e3ff05864a7e77c0d8fc628ff7411bfb98c9b69'
        '1cd6884f06269c3e6cbdfa542bdf8e178574062ec11252defc48187b60a98d0193353cc8a12ba186d338ce7da6b879a1e9dc249d2f40c28fe997c433c91e8e0e'
        '89e95f468785f6ca1309b0de37921702bd4eb6fb191afc0d93454bec7b7096a1b84e19408b5a0abcdfd89ce2ebd228879cbc42a0d409425fb41caab6a8f049f5'
        '92edad9b2514dc3920ddfcbd73007f0e37de1704c6e3d55c4b39b3f7c9eab4eca4c3e0b8bebad33bc480abbeb8451a7da9b65556fb08546b3997a2af8f230cde')

prepare() {
  sed -r 's/(GOMD2MAN = ).*/\1 go-md2man/' -i $_src_dir/storage/docs/Makefile
  patch -Np1 -d $_src_dir/common -i ../../$pkgname-0.48.0-init_path.patch
  # systemd >= 259 no longer supports iptables, so we switch from the implicit default on iptables to nftables:
  # https://gitlab.archlinux.org/archlinux/packaging/packages/containers-common/-/issues/7
  patch -Np1 -d $_src_dir -i ../$pkgname-0.66.1-containers.conf-firewall-defaults.patch
  mkdir -vp build/{man1,man5}
}

build() {

  (
    printf "Creating common man pages...\n"
    cd $_src_dir/common
    for _man_page in docs/*.md pkg/hooks/docs/*.md; do
      go-md2man -in "$_man_page" -out ../../build/man5/"$(basename "${_man_page//.md}")"
    done
  )

  (
    printf "Creating image man pages...\n"
    cd $_src_dir/image
    mkdir -vp man5
    mv -v docs/*.5.md man5/
    for _man_page in docs/*.md; do
      go-md2man -in "$_man_page" -out ../../build/man1/"$(basename "${_man_page//.md}")".1
    done
    for _man_page in man5/*.md; do
      go-md2man -in "$_man_page" -out ../../build/man5/"$(basename "${_man_page//.md}")"
    done
  )

  (
    printf "Creating storage documentation...\n"
    make -C $_src_dir/storage/docs
  )
}

check() {
  local _podman_common_ver
  _podman_common_ver="$(rg "go.podman.io/common" podman-$_podman_pkgver/go.mod | cut -d ' ' -f2 | sed 's/v//')"

  printf "Common version in podman: %s\n" "$_podman_common_ver"

  # NOTE: we are comparing the major.minor version of containers/common required by podman with the one of containers/common that we are trying to build
  # https://github.com/containers/common/issues/923
  if (( $(vercmp "${_podman_common_ver%.*}" "${pkgver%.*}") != 0 )); then
    printf "The podman package in version %s requires container-libs/common in version %s but we are trying to build version %s\n" "$_podman_pkgver" "${_podman_common_ver%.*}" "${pkgver%.*}"
    exit 1
  fi
}

package() {
  # directories
  install -vdm 755 "$pkgdir/etc/containers/containers.conf.d/"
  install -vdm 755 "$pkgdir/etc/containers/oci/hooks.d/"
  install -vdm 755 "$pkgdir/etc/containers/registries.conf.d/"
  install -vdm 755 "$pkgdir/usr/share/containers/oci/hooks.d/"
  install -vDm 644 tmpfiles.conf "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf"

  # configs
  install -vDm 644 mounts.conf -t "$pkgdir/etc/containers/"

  (
    cd $_src_dir/common
    # configs
    install -vDm 644 pkg/config/containers.conf -t "$pkgdir/etc/containers/"
    install -vDm 644 pkg/config/containers.conf -t "$pkgdir/usr/share/containers/"
    install -vDm 644 pkg/seccomp/seccomp.json -t "$pkgdir/etc/containers/"
    install -vDm 644 pkg/seccomp/seccomp.json -t "$pkgdir/usr/share/containers/"
  )
  (
    cd $_src_dir/image
    # configs
    install -vDm 644 registries.conf -t "$pkgdir/etc/containers/"
  )
  (
    cd $_src_dir/storage
    # configs
    install -vDm 644 storage.conf -t "$pkgdir/etc/containers/"
    install -vDm 644 storage.conf -t "$pkgdir/usr/share/containers/"
    # man pages
    install -vDm 644 docs/*.1 -t "$pkgdir/usr/share/man/man1/"
    install -vDm 644 docs/*.5 -t "$pkgdir/usr/share/man/man5/"
  )
  (
    cd shortnames-$_shortnames_pkgver
    install -vDm 644 shortnames.conf "$pkgdir/etc/containers/registries.conf.d/00-shortnames.conf"
  )
  (
    cd skopeo-$_skopeo_pkgver
    # configs
    install -vDm 644 default-policy.json "$pkgdir/etc/containers/policy.json"
    install -vDm 644 default.yaml -t "$pkgdir/etc/containers/registries.d/"
  )
  # man pages
  install -vDm 644 build/man1/*.1 "$pkgdir/usr/share/man/man1/"
  install -vDm 644 build/man5/*.5 "$pkgdir/usr/share/man/man5/"
}
