# Maintainer:  David Runge <dvzrv@archlinux.org>
# Contributor: Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
# Contributor: Allan McRae <allan@archlinux.org>
# Contributor: Hugo Doria <hugo@archlinux.org>

pkgname=libcap
pkgver=2.77
pkgrel=1
pkgdesc="POSIX 1003.1e capabilities"
arch=(x86_64 aarch64)
url="https://sites.google.com/site/fullycapable/"
_url=https://git.kernel.org/pub/scm/libs/libcap/libcap.git
license=('BSD-3-Clause OR GPL-2.0-only')
depends=(
  glibc
  pam
)
makedepends=(
  git
  go
  linux-api-headers
)
provides=(
  libcap.so
  libpsx.so
)
# we can not use LTO as otherwise we get no reproducible package with full RELRO
options=(!lto)
# NOTE: we rely on a specific tagging scheme to verify with the latest signing key: https://bugzilla.kernel.org/show_bug.cgi?id=218860#c3
source=(
  git+$_url?signed#tag=sig-$pkgname-$pkgver
  libcap-2.73-cgo-flags.patch  # provide flags to go build (sent upstream)
)
sha512sums=('0b141758aa723be0ac266e3b4d9ed9b74b0bea595474352226a7b85bc669ca6b37a3130049031799166eb80ece3cbaa043a52aa1fb6755e193b57289cc45fa13'
            '4feb12bad6c0b37168f67f599155157e2537cb8cd35d906a758ba4405ec916f0504b9f52405a53d5c573232883034c740d0d65c756d9d9722029ef5bc9875fa7')
b2sums=('28e1b5f827c0a91182d85469c51d80cdbc2906bbdb17d144d518c5a77369cda9ecb3c88a3fbd5d975cd5b225b46ce4fb44010238f5f6ec4a697b9623f7cff8bb'
        '2b40bfd3de55a4ad101bb0cdab37c10530b50917995fa67eb6bae8c5df004c3c6b104dc5fa615ea907a7b8d620fa786cd2dfe7f77df7b1df03bdde84d09644f0')
validpgpkeys=(
  38A644698C69787344E954CE29EE848AE2CCF3F4  # Andrew G. Morgan <morgan@kernel.org>
  0D23D34C577B08C4082CFD76430C5CFF993116B1  # Andrew G. Morgan (2024+ libcap signing key) <morgan@kernel.org>
)

# NOTE: with CGO_ENABLED we need all relevant make options in build(), check() and package() otherwise the package is not reproducible
_common_make_options=(
  CGO_CPPFLAGS="$CPPFLAGS"
  CGO_CFLAGS="$CFLAGS"
  CGO_CXXFLAGS="$CXXFLAGS"
  CGO_LDFLAGS="$LDFLAGS"
  CGO_REQUIRED="1"
  GOFLAGS="-buildmode=pie -mod=readonly -modcacherw"
  GO_BUILD_FLAGS="-ldflags '-compressdwarf=false -linkmode=external'"
)

prepare() {
  # ensure to use CGO_ENABLED all the way (so that we can have full RELRO)
  patch -Np1 -d $pkgname -i ../libcap-2.73-cgo-flags.patch
}

build() {
  export GOPATH="$srcdir"

  local make_options=(
    "${_common_make_options[@]}"
    DYNAMIC=yes
    KERNEL_HEADERS=/usr/include
    lib=lib
    prefix=/usr
    sbindir=bin
    -C $pkgname
  )

  make "${make_options[@]}"
}

check() {
  export GOPATH="$srcdir"

  local make_options=(
    "${_common_make_options[@]}"
    test
    -k
    -C $pkgname
    -j 1
  )

  make "${make_options[@]}"
}

package() {
  export GOPATH="$srcdir"

  local make_options=(
    "${_common_make_options[@]}"
    DESTDIR="$pkgdir"
    RAISE_SETFCAP=no
    lib=lib
    prefix=/usr
    sbindir=bin
    install
    -C $pkgname
  )

  make "${make_options[@]}"
  install -vDm 644 $pkgname/{CHANGELOG,README} -t "$pkgdir/usr/share/doc/$pkgname/"
  install -vDm 644 $pkgname/License -t "$pkgdir/usr/share/licenses/$pkgname/"
  install -vDm 644 $pkgname/pam_cap/capability.conf -t "$pkgdir/usr/share/doc/$pkgname/examples/"
}
