# Maintainer: Joffrey <j-off@live.fr>
# Contributor: eolianoe <eolianoe [at] gmail [DoT] com>
# Contributor: Edvinas Valatka <edacval@gmail.com>
# Contributor: Aaron Lindsay <aaron@aclindsay.com>

pkgname=seafile-server
pkgver=13.0.25
pkgrel=2
pkgdesc='Seafile server core'
arch=('i686' 'x86_64' 'armv7h' 'armv6h' 'aarch64')
url='https://github.com/haiwen/seafile-server'
license=('AGPL3')
depends=(
  'fuse2'
  'libevhtp-seafile'
  'libsearpc'
  'libarchive'
  'hiredis'
  'mariadb-libs'
  'postgresql-libs'
  libargon2.so
  libjwt.so
  libcrypto.so)
# libevhtp-seafile uses oniguruma headers
makedepends=('vala' 'go' 'oniguruma' 'mariadb-clients')
conflicts=('seafile')
source=(
  "$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver-server.tar.gz"
  0001-Fix-controller-path-and-migrate-old-pids-directory.patch
  0002-Fix-seafile-admin.patch
  'seafile-server@.service'
)
sha256sums=('ca976a8b8b027fe65e7c8ce2e4deef1038a6eae1e84602cdd06e09cfa6eec563'
            '9bda93fbb380f2bca626ecf0c8a85a50db0d52bf0a2ea128ca0a6e75766446d8'
            '1f74be846471e75bc280e83095339cf22bd789283e221c82765b6109566badb1'
            '347982254a025ce86cd53fbb6bf505320638bf69736d65a96d17f74551139072')

prepare() {
  cd "$srcdir/$pkgname-$pkgver-server"
  # Remove scripts for tests and others OS
  rm -rf "./integration-tests"

  # Apply patchs
  sed -i "s|(DESTDIR)@prefix@|@prefix@|" lib/libseafile.pc.in
  sed -i '1i #include "seaf-utils.h"' server/gc/fsck.c
  sed -i '1i typedef struct _SeafRepo SeafRepo;' server/gc/fsck.c
  sed -i 's|objcache_new (GKeyFile \*config)|objcache_new ()|g' common/obj-cache.c
  patch -Np1 --no-backup-if-mismatch < ../0001-Fix-controller-path-and-migrate-old-pids-directory.patch
  patch -Np1 --no-backup-if-mismatch < ../0002-Fix-seafile-admin.patch
}

build() {
  cd "$srcdir/$pkgname-$pkgver-server"
  export CPPFLAGS="$CPPFLAGS -Wno-error -Wno-incompatible-pointer-types"
  export CFLAGS="$CFLAGS -Wno-error -Wno-incompatible-pointer-types"
  export CXXFLAGS="$CXXFLAGS -Wno-error -Wno-incompatible-pointer-types"

  ./autogen.sh
  ./configure \
    --enable-fuse \
    --enable-python \
    --with-mysql=mysql_config \
    --prefix=/usr \
    PYTHON='/usr/bin/python'
  make -j1

  # Build Go packages
  export GOPATH="$srcdir"
  export CGO_CPPFLAGS="$CPPFLAGS"
  export CGO_CFLAGS="$CFLAGS"
  export CGO_CXXFLAGS="$CXXFLAGS"
  export CGO_LDFLAGS="$LDFLAGS"
  export CGO_ENABLED=1

  GOFLAGS='-buildmode=pie'
  GOFLAGS+=' -trimpath'
  GOFLAGS+=' -ldflags=-linkmode=external'
  GOFLAGS+=' -mod=readonly'
  GOFLAGS+=' -modcacherw'
  export GOFLAGS

  for pkg in fileserver notification-server; do
    pushd "$pkg"
    go build .
    popd
  done
}

package() {
  cd "$srcdir/$pkgname-$pkgver-server"
  make DESTDIR="$pkgdir" install

  # Prepare directories layout for deploying
  # These makes setup-seafile*.sh happy, whether we use them or not
  mkdir -p "$pkgdir/usr/share/seafile-server/"{runtime,seafile/docs}
  # The scripts needs this bin directory.
  ln -s /usr/bin/ "$pkgdir/usr/share/seafile-server/seafile/bin"

  # Install Go binaries
  for bin in fileserver notification-server; do
    install -Dm755 "$bin/$bin" "$pkgdir/usr/bin/$bin"
  done

  install -Dm644 \
          "$srcdir/seafile-server@.service" \
          "$pkgdir/usr/lib/systemd/system/seafile-server@.service"
}
