# Maintainer: Sven-Hendrik Haase <svenstaro@archlinux.org>
# Maintainer: Carl Smedstad <carsme@archlinux.org>
# Contributor: Maxim Baz <archlinux at maximbaz dot com>
# Contributor: Andrew Gallant <jamslam@gmail.com>
# PGO Version: Laio Seman <laio@ieee.org>

pkgname=ripgrep
pkgver=15.2.0
pkgrel=1
pkgdesc="A search tool that combines the usability of ag with the raw speed of grep"
arch=('x86_64')
url="https://github.com/BurntSushi/ripgrep"
license=('MIT OR Unlicense')
depends=(
  'glibc'
  'libgcc'
  'pcre2'
)
makedepends=(
  'rust'
  'hyperfine'
  'llvm'
)
source=("$url/archive/$pkgver/$pkgname-$pkgver.tar.gz"
        optimize.patch
        https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.10.9.tar.xz)
sha512sums=('fe7e3c36c8ccfdc292d7d1ac8da95cab4264b63fc89209e7a19557ef29d1c618992bc5c241be53417aa785dc834a239f10eec6c58da5f9438f0f4a860c1857d4'
            'a4d7bbef179c594f275449f10c42a0455df522ccd5a6defd397c0d5df53ead26f81bb79c7e53386beca5e66a161877f03b25e8a3214b799a212d1ced7194f054'
            'e383ce1b999555888c6dd2efa806efb6f6673517000f074b4170a5461c85d4d83757193d4e7e18a1bb7ca166a793ab104ec7313bc6b147a0456e615eb006557e')

prepare() {
  cd "$pkgname-$pkgver"
  patch -p1 -i ../optimize.patch
  cargo fetch --locked --target host-tuple
}

build() {
  cd "$pkgname-$pkgver"
  export MALLOC_CONF="thp:always,metadata_thp:always"

  # define PGO_PROFILE_DIR to use a custom directory for the profile data
  export PGO_PROFILE_DIR=/tmp/pgo-data

  # clean up the profile data
  mkdir -p ${PGO_PROFILE_DIR}
  rm -f ${PGO_PROFILE_DIR}/*

  # append -Cprofile-generate=${PGO_PROFILE_DIR} to the rustflags
  export RUSTFLAGS+=" -Cprofile-generate=${PGO_PROFILE_DIR}"

  cargo build --release --frozen --features pcre2

  # clean up the profile data
  rm -f ${PGO_PROFILE_DIR}/*

  # run the benchmark
  hyperfine --warmup 5 --min-runs 10 'target/release/rg -n "PM_RESUME" ../linux-6.10.9'

  # run the tests
  cargo test --frozen --features pcre2

  # remove -Cprofile-generate=${PGO_PROFILE_DIR} from the rustflags
  export RUSTFLAGS="${RUSTFLAGS//-Cprofile-generate=${PGO_PROFILE_DIR}/}"

  # merge the profile data
  llvm-profdata merge -o ${PGO_PROFILE_DIR}/merged.profdata ${PGO_PROFILE_DIR}

  # append -Cprofile-use=${PGO_PROFILE_DIR} to the rustflags
  export RUSTFLAGS+=" -Cprofile-use=${PGO_PROFILE_DIR}/merged.profdata"

  cargo build --release --frozen --features pcre2
}

check() {
  cd "$pkgname-$pkgver"

  cargo test --frozen --features pcre2
}

package() {
  cd "$pkgname-$pkgver"

  install -vDm755 -t "$pkgdir/usr/bin" target/release/rg

  mkdir -vp "$pkgdir/usr/share/zsh/site-functions"
  target/release/rg --generate complete-zsh > "$pkgdir/usr/share/zsh/site-functions/_rg"

  mkdir -vp "$pkgdir/usr/share/bash-completion/completions"
  target/release/rg --generate complete-bash > "$pkgdir/usr/share/bash-completion/completions/rg"

  mkdir -vp "$pkgdir/usr/share/fish/vendor_completions.d"
  target/release/rg --generate complete-fish > "$pkgdir/usr/share/fish/vendor_completions.d/rg.fish"

  mkdir -vp "$pkgdir/usr/share/man/man1"
  target/release/rg --generate man > "$pkgdir/usr/share/man/man1/rg.1"

  install -vDm644 -t "$pkgdir/usr/share/doc/$pkgname" README.md
  install -vDm644 -t "$pkgdir/usr/share/licenses/$pkgname" COPYING
  install -vDm644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE-MIT
  install -vDm644 -t "$pkgdir/usr/share/licenses/$pkgname" UNLICENSE
}

# flags to 4 spaces
# vim: ts=4 sw=4 et:
