pkgname=strata
pkgver=0.15.0
pkgrel=1
pkgdesc='Fast, keyboard-first file manager for modern Linux desktops'
arch=('x86_64' 'aarch64')
url='https://github.com/lgse/strata'
license=('MIT')

depends=(
  'bash'
  'bubblewrap'
  'cairo'
  'ffmpeg'
  'ffmpegthumbnailer'
  'fontconfig'
  'gcc-libs'
  'gdk-pixbuf2'
  'glib2'
  'glibc'
  'graphene'
  'gst-libav'
  'gst-plugins-good'
  'gvfs'
  'gtk4'
  'gtksourceview5'
  'hicolor-icon-theme'
  'pango'
  'poppler-glib'
  'util-linux'
  'xdg-terminal-exec'
)
makedepends=('cargo' 'git' 'glib2-devel' 'pkgconf')
optdepends=(
  'gvfs-smb: browse SMB network shares'
  'imagemagick: additional camera RAW preview support'
  'libraw: additional camera RAW preview support'
)
conflicts=('strata-git')
options=('!debug' '!lto')

source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('be4d579a9378b8bf9ccc3904e7327ce756bed61d1e617c75b543e1e539611f0a')

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

  local commit
  if ! commit=$(git get-tar-commit-id < <(gzip -dc "$srcdir/$pkgname-$pkgver.tar.gz")) ||
    [[ ! $commit =~ ^[0-9a-f]{40}$ ]]; then
    printf 'Could not recover the release commit from the source archive\n' >&2
    return 1
  fi
  printf '%s\n' "$commit" >.build-commit

  cargo fetch --locked --target "$CARCH-unknown-linux-gnu"
}

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

  export CARGO_TARGET_DIR=target
  export STRATA_BUILD_COMMIT
  STRATA_BUILD_COMMIT=$(<.build-commit)
  export STRATA_RELEASE_TAG="v$pkgver"
  export STRATA_BUILD_KIND=stable
  cargo build --frozen --release
}

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

  export CARGO_TARGET_DIR=target
  export STRATA_BUILD_COMMIT
  STRATA_BUILD_COMMIT=$(<.build-commit)
  export STRATA_RELEASE_TAG="v$pkgver"
  export STRATA_BUILD_KIND=stable
  # Search fixtures depend on directory enumeration order and fail on overlayfs.
  # Run them on tmpfs; other suites execute fixtures, so cannot use noexec /dev/shm.
  local search_tmp
  search_tmp=$(mktemp -d /dev/shm/strata-tests.XXXXXXXX) || return 1
  local test_status=0
  TMPDIR="$search_tmp" cargo test --frozen --release --all-targets --all-features \
    services::search::tests:: -- --test-threads=1 || test_status=$?
  rm -rf -- "$search_tmp"
  (( test_status == 0 )) || return "$test_status"

  cargo test --frozen --release --all-targets --all-features \
    -- --test-threads=1 --skip services::search::tests::
}

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

  install -Dm755 target/release/strata "$pkgdir/usr/bin/strata"
  install -Dm644 data/io.github.lgse.Strata.desktop \
    "$pkgdir/usr/share/applications/io.github.lgse.Strata.desktop"
  install -Dm644 data/icons/scalable/apps/io.github.lgse.Strata.svg \
    "$pkgdir/usr/share/icons/hicolor/scalable/apps/io.github.lgse.Strata.svg"
  # Payload for the app's per-user FileManager1 opt-in; upstream's own
  # packaging stages it here, not in /usr/share/dbus-1.
  install -Dm644 data/io.github.lgse.Strata.FileManager1.service \
    "$pkgdir/usr/share/strata/io.github.lgse.Strata.FileManager1.service"
  install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
  install -Dm644 THIRD_PARTY_LICENSES.md \
    "$pkgdir/usr/share/licenses/$pkgname/THIRD_PARTY_LICENSES.md"
  install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
}
