# Maintainer: David Runge <dvzrv@archlinux.org>
# Contributor: Laurent Carlier <lordheavym@gmail.com>
# Contributor: Stéphane Gaudreault <stephane@archlinux.org>
# Contributor: Andrej Gelenberg <andrej.gelenberg@udo.edu>

pkgbase=elfutils
pkgname=(
  elfutils
  libelf
  debuginfod
)
pkgver=0.195
pkgrel=1
pkgdesc="Handle ELF object files and DWARF debugging information"
arch=(x86_64 aarch64)
url="https://sourceware.org/elfutils/"
_url=https://sourceware.org/git/elfutils.git
makedepends=(
  bzip2
  curl
  git
  json-c
  libarchive
  libgcc
  libmicrohttpd
  libstdc++
  sqlite
  xz
  zlib
  zstd
)
options=(staticlibs)
source=(git+$_url?signed#tag=$pkgbase-$pkgver
        "remove-comment.patch")
sha512sums=('7bbc1db55939e999683ccff41f287433ed926e255b4a35048812bc85505a1b3339828691691c769c4d79347f513792356c2d6b1727eabe0fd720722f7076643e'
            'e33fe8d3fc9347fc9839c3958e51f8dbb7fbe4670b44ede503f5e8237998c80c4d53dfb7a6f36bc33d552ee35aaa955f7323a60476f315afd4fbee052a6551a1')
b2sums=('6be17af5c5d015e028f1658f63a5a635c00952c98fa76be4f5a56c27366681a56f8e288261db876c51bc884a8a3fc4d03ecdf965e0e0fc98a2ebb3d4351d2d1c'
        'c48aba30e2890744700982a49fef69bae94e1db0036fb25c0168c18ebbe8baf2f7ab49e46c384506ef7d35d4bebb028241112103f2be474c717f292d9a4c003b')
validpgpkeys=(
  'EC3CFE88F6CA0788774F5C1D1AA44BE649DE760A'  # Mark Wielaard <mjw@gnu.org>
  '6C2B631563B8D330578D3CB474FD3FA2779E7073'  # Aaron Merey <amerey@redhat.com>
)

prepare() {
  cd $pkgbase
  # fix issue with /etc/profile.d/debuginfod.sh for zsh:
  # https://gitlab.archlinux.org/archlinux/packaging/packages/elfutils/-/issues/2
  git cherry-pick -n 00cb3efe36337f27925dbff9b2e7d97c7df95bf8

  # fix c23 const handling issue
  git cherry-pick -n 4a5cf8be906d5991e7527e69e3f2ceaa74811301

  # remove failing test due to missing glibc debug package during test: https://bugs.archlinux.org/task/74875
  sed -e 's/run-backtrace-native.sh//g' -i tests/Makefile.am

  # Skip tests failing due to missing PT_GNU_SFRAME support
  sed \
    -e 's/run-strip-strmerge.sh//g' \
    -e 's/run-elflint-self.sh//g' \
    -e 's/run-reverse-sections-self.sh//g' \
    -i tests/Makefile.am

  # Accidental comment in the AWK file. Removing it.
  patch -Np1 < "$srcdir/remove-comment.patch"

  autoreconf -fiv
}

build() {
  local configure_options=(
    --prefix=/usr
    --sysconfdir=/etc
    --program-prefix="eu-"
    --enable-deterministic-archives
    --enable-maintainer-mode
  )

  # fat-lto-objects is required for non-mangled .a files in libelf
  CFLAGS+=" -ffat-lto-objects"

  # debugging information is required for test-suite
  CFLAGS+=" -g"

  cd $pkgbase
  ./configure "${configure_options[@]}"
  make
}

check() {
  make -C $pkgbase check
}

_pick() {
  local p="$1" f d; shift
  for f; do
    d="$srcdir/$p/${f#$pkgdir/}"
    mkdir -p "$(dirname "$d")"
    mv "$f" "$d"
    rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")"
  done
}

package_elfutils() {
  pkgdesc+=" (utilities)"
  license=(
    GPL-3.0-or-later
  )
  depends=(
    glibc
    libarchive libarchive.so
    libelf=$pkgver
    libgcc
    libstdc++
    sh
  )

  make DESTDIR="$pkgdir" install -C $pkgbase

  # set the default DEBUGINFOD_URLS environment variable to the distribution's debuginfod URL
  echo "https://debuginfod.archlinux.org" > "$pkgdir/etc/debuginfod/archlinux.urls"

  (
    cd "$pkgdir"

    _pick libelf etc/debuginfod
    _pick libelf etc/profile.d/*
    _pick libelf usr/{include,lib}
    _pick libelf usr/share/man/*/{gelf,{,lib}elf}*
    _pick debuginfod usr/bin/debuginfod*
    _pick debuginfod usr/share/fish/vendor_conf.d/debuginfod.fish
    _pick debuginfod usr/share/man/*/debuginfod*
  )

  install -vDm 644 $pkgbase/{AUTHORS,ChangeLog,NEWS,NOTES,README} -t "$pkgdir/usr/share/doc/$pkgname/"
}

package_libelf() {
  pkgdesc+=" (libraries)"
  license=(
    'GPL-2.0-or-later OR LGPL-3.0-or-later'
  )
  depends=(
    bzip2 libbz2.so
    curl libcurl.so
    glibc
    json-c
    xz liblzma.so
    zlib
    zstd libzstd.so
  )
  # NOTE: the shared objects can not be added to provides as they are not versioned

  mv -v $pkgname/* "$pkgdir"
  install -vDm 644 $pkgbase/{AUTHORS,ChangeLog,NEWS,NOTES,README} -t "$pkgdir/usr/share/doc/$pkgname/"
}

package_debuginfod() {
  pkgdesc+=" (debuginfod)"
  license=(
    GPL-3.0-or-later
  )
  depends=(
    glibc
    json-c
    libarchive libarchive.so
    libelf=$pkgver
    libgcc
    libmicrohttpd libmicrohttpd.so
    libstdc++
    sqlite libsqlite3.so
    xz liblzma.so
  )
  optdepends=("elfutils=$pkgver: for translations")

  mv -v $pkgname/* "$pkgdir"
  install -vDm 644 $pkgbase/{AUTHORS,ChangeLog,NEWS,NOTES,README} -t "$pkgdir/usr/share/doc/$pkgname/"
}

# vim:set sw=2 sts=-1 et:
