# Maintainer: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
# Maintainer: Fabian Bornschein <fabiscafe@archlinux.org>
# Contributor: Jan de Groot <jgc@archlinux.org>

pkgbase=gvfs
pkgname=(
  gvfs
  gvfs-{smb,afc,gphoto2,goa,mtp,nfs,google,onedrive}
)
pkgver=1.54.0
pkgrel=2
pkgdesc="Virtual filesystem implementation for GIO"
url="https://wiki.gnome.org/Projects/gvfs"
arch=(x86_64 aarch64)
license=(LGPL-2.0-only)
depends=(
  avahi
  dconf
  fuse3
  gcr-4
  gsettings-desktop-schemas
  libarchive
  libbluray
  libcdio-paranoia
  libgudev
  libsecret
  libsoup3
  psmisc
  udisks2
)
makedepends=(
  dbus
  docbook-xsl
  git
  gtk-doc
  gtk4
  libgdata
  libgoa
  libgphoto2
  libimobiledevice
  libmtp
  libnfs
  meson
  msgraph
  openssh
  python
  python-packaging
  smbclient
)
groups=(gnome)
_commit=b22df75010588b062705b5d72bc5ca8811e62f72  # tags/1.54.0^0
source=(
  "git+https://gitlab.gnome.org/GNOME/gvfs.git#commit=$_commit"
  gvfsd.hook
)
b2sums=('4571eab5ecc717109b926448c46a63f3e55d0f7caf91c8a50dffde5bd3b96d5d6e61b8295a25c96eb06244b8d76412c0b4fcefd8a14d447fc30a24564356d6de'
        '08a830600964d2c896d7f107d9558053a32eb6b9166433d6e29b58d4c38e318cbb7fdf7b8230cf72d433df65f4698b9ad86624bf7d3c30c883db325d51335189')

pkgver() {
  cd gvfs
  git describe --tags | sed 's/[^-]*-g/r&/;s/-/+/g'
}

prepare() {
  cd gvfs
}

build() {
  local meson_options=(
    -D man=true
  )

  arch-meson gvfs build "${meson_options[@]}"
  meson compile -C build
}

check() {
  meson test -C build --print-errorlogs
}

_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_gvfs() {
  replaces=(gvfs-{obexftp,afp})
  optdepends=(
    'gtk3: Recent files support'
    'gvfs-afc: AFC (mobile devices) support'
    'gvfs-goa: gnome-online-accounts (e.g. OwnCloud) support'
    'gvfs-google: Google Drive support'
    'gvfs-gphoto2: gphoto2 (PTP camera/MTP media player) support'
    'gvfs-mtp: MTP device support'
    'gvfs-nfs: NFS support'
    'gvfs-onedrive: Microsoft OneDrive support'
    'gvfs-smb: SMB/CIFS (Windows client) support'
  )

  meson install -C build --destdir "$pkgdir"

  ( cd "$pkgdir"

    _pick smb \
      usr/lib/gvfsd-smb{,-browse} \
      usr/share/GConf/gsettings/gvfs-smb.convert \
      usr/share/glib-2.0/schemas/org.gnome.system.smb.gschema.xml \
      usr/share/gvfs/mounts/smb{,-browse}.mount

    _pick afc \
      usr/lib/gvfs{-afc-volume-monitor,d-afc} \
      usr/lib/systemd/user/gvfs-afc-volume-monitor.service \
      usr/share/dbus-1/services/org.gtk.vfs.AfcVolumeMonitor.service \
      usr/share/gvfs/mounts/afc.mount \
      usr/share/gvfs/remote-volume-monitors/afc.monitor

    _pick gphoto2 \
      usr/lib/gvfs{-gphoto2-volume-monitor,d-gphoto2} \
      usr/lib/systemd/user/gvfs-gphoto2-volume-monitor.service \
      usr/share/dbus-1/services/org.gtk.vfs.GPhoto2VolumeMonitor.service \
      usr/share/gvfs/mounts/gphoto2.mount \
      usr/share/gvfs/remote-volume-monitors/gphoto2.monitor

    _pick mtp \
      usr/lib/gvfs{-mtp-volume-monitor,d-mtp} \
      usr/lib/systemd/user/gvfs-mtp-volume-monitor.service \
      usr/share/dbus-1/services/org.gtk.vfs.MTPVolumeMonitor.service \
      usr/share/gvfs/mounts/mtp.mount \
      usr/share/gvfs/remote-volume-monitors/mtp.monitor

    _pick goa \
      usr/lib/gvfs-goa-volume-monitor \
      usr/lib/systemd/user/gvfs-goa-volume-monitor.service \
      usr/share/dbus-1/services/org.gtk.vfs.GoaVolumeMonitor.service \
      usr/share/gvfs/remote-volume-monitors/goa.monitor

    _pick nfs \
      usr/lib/gvfsd-nfs \
      usr/share/gvfs/mounts/nfs.mount

    _pick google \
      usr/lib/gvfsd-google \
      usr/share/gvfs/mounts/google.mount

    _pick onedrive \
      usr/lib/gvfsd-onedrive \
      usr/share/gvfs/mounts/onedrive.mount
  )

  install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 *.hook
}

package_gvfs-smb() {
  pkgdesc+=" (SMB/CIFS backend; Windows client)"
  depends=(
    "gvfs=$pkgver"
    'smbclient>=4.12.0'
  )

  mv smb/* "$pkgdir"
}

package_gvfs-afc() {
  pkgdesc+=" (AFC backend; Apple mobile devices)"
  depends=(
    "gvfs=$pkgver"
    libimobiledevice
    usbmuxd
  )

  mv afc/* "$pkgdir"
}

package_gvfs-gphoto2() {
  pkgdesc+=" (gphoto2 backend; PTP camera, MTP media player)"
  depends=(
    "gvfs=$pkgver"
    libgphoto2
  )

  mv gphoto2/* "$pkgdir"
}

package_gvfs-mtp() {
  pkgdesc+=" (MTP backend; Android, media player)"
  depends=(
    "gvfs=$pkgver"
    libmtp
  )

  mv mtp/* "$pkgdir"
}

package_gvfs-goa() {
  pkgdesc+=" (Gnome Online Accounts backend; cloud storage)"
  depends=(
    "gvfs=$pkgver"
    libgoa
  )

  mv goa/* "$pkgdir"
}

package_gvfs-nfs() {
  pkgdesc+=" (NFS backend)"
  depends=(
    "gvfs=$pkgver"
    libnfs
  )
  install=gvfs-nfs.install

  mv nfs/* "$pkgdir"
}

package_gvfs-google() {
  pkgdesc+=" (Google Drive backend)"
  depends=(
    "gvfs-goa=$pkgver"
    libgdata
  )

  mv google/* "$pkgdir"
}

package_gvfs-onedrive() {
  pkgdesc+=" (Microsoft OneDrive backend)"
  depends=(
    "gvfs-goa=$pkgver"
    msgraph
  )

  mv onedrive/* "$pkgdir"
}

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