#
# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=seafile-server
PKG_VERSION:=7.1.3
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/haiwen/seafile-server/tar.gz/v$(PKG_VERSION)-server?
PKG_HASH:=79f7722a34c304adb78462194e64d6a610bd5ee40def37f4e4cdf5befed44fcd

PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>, Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=AGPL-3.0-only
PKG_LICENSE_FILES:=LICENSE.txt

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-server
PKG_BUILD_DEPENDS:=vala/host libevhtp

PKG_FIXUP:=autoreconf
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
include ../../lang/python/python3-package.mk

# Check that the actual Makefile version-relase match the above.
$(eval $(shell awk '/^PKG_VERSION.*=/ { print "SEAHUB_" $$$$0 }' ../seafile-seahub/Makefile))
ifneq ($(PKG_VERSION),$(SEAHUB_PKG_VERSION))
  $(error $(if $(SEAHUB_PKG_VERSION), \
    Version mismatch between seafile-seahub ($(SEAHUB_PKG_VERSION)) and \
    seafile-server ($(PKG_VERSION)), \
    Could not get PKG_VERSION from seafile-seahub Makefile))
endif

define Package/seafile-server
  SECTION:=net
  CATEGORY:=Network
  TITLE:=Seafile server
  URL:=https://seafile.com/
  DEPENDS:= \
    +bash \
    +glib2 \
    +jansson \
    +libarchive \
    +libevent2 \
    +libevent2-openssl \
    +libmariadb \
    +libopenssl \
    +libpthread \
    +libsearpc \
    +libsqlite3 \
    +libuuid \
    +oniguruma \
    +procps-ng-pkill \
    +python3-pymysql \
    +python3-seafile-server \
    +seafile-ccnet \
    +seafile-seahub \
    +sqlite3-cli \
    +zlib \
    $(ICONV_DEPENDS)
endef

define Package/seafile-server/description
  Open source cloud storage with advanced features on privacy
  protection and teamwork.
endef

define Package/seafile-server-fuse
  SECTION:=net
  CATEGORY:=Network
  TITLE:=Seafile server - FUSE extension
  URL:=https://seafile.com/
  DEPENDS:= \
    +bash \
    +glib2 \
    +jansson \
    +libevent2 \
    +libevent2-openssl \
    +libfuse \
    +libmariadb \
    +libopenssl \
    +libpthread \
    +libsearpc \
    +libsqlite3 \
    +libuuid \
    +procps-ng-pkill \
    +seafile-ccnet \
    +seafile-server \
    +zlib \
    $(ICONV_DEPENDS)
endef

define Package/seafile-server-fuse/description
$(call Package/seafile-server/description)

  This package contains the FUSE extension (seaf-fuse) for Seafile
  server.
endef

define Package/python3-seafile-server
  SECTION:=lang
  CATEGORY:=Languages
  SUBMENU:=Python
  TITLE:=Python bindings for Seafile server
  DEPENDS:=+python3-light +python3-logging +python3-searpc +python3-seafile-ccnet
  VARIANT:=python3
endef

define Package/python3-seafile-server/description
$(call Package/seafile-server/description)

  This package contains Python bindings for Seafile server.
endef

CONFIGURE_ARGS += \
	--disable-console \
	--enable-fuse \
	--enable-python \
	--with-mysql="$(STAGING_DIR)/usr/bin/mysql_config"

# This is required as python3-package.mk overrides the default setting of having interlinking enabled
ifdef CONFIG_USE_MIPS16
  TARGET_CFLAGS += -minterlink-mips16
endif

ifdef CONFIG_GCC_LIBSSP
  TARGET_LDFLAGS += -lssp
endif

define Package/seafile-server/conffiles
/etc/config/seafile-server
endef

SEAFILE_SERVER_BINARIES:= \
	seaf-fsck \
	seafile-controller \
	seaf-server \
	seaf-server-init \
	seafserv-gc

SEAFILE_SERVER_SHELL_SCRIPTS:= \
	reset-admin.sh \
	seaf-fsck.sh \
	seaf-gc.sh \
	seafile.sh \
	seahub.sh \
	setup-seafile-mysql.sh \
	setup-seafile.sh
	# sqlite2mysql.sh handled differently

SEAFILE_SERVER_PYTHON_SCRIPTS:= \
	check_init_admin.py \
	setup-seafile-mysql.py \
	sqlite2mysql.py

define Package/seafile-server/install
	$(INSTALL_DIR) $(1)/usr/{bin,libexec}
	$(INSTALL_DIR) $(1)/usr/share/seafile/seafile-server
	$(INSTALL_DIR) $(1)/etc/{config,init.d,seafile}
	$(INSTALL_DIR) $(1)/lib/upgrade/keep.d

	for bin in $(SEAFILE_SERVER_BINARIES) ; do \
		$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$$$$bin $(1)/usr/libexec/ ; \
	done

	for sh in $(SEAFILE_SERVER_SHELL_SCRIPTS) ; do \
		$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/$$$$sh $(1)/usr/bin/$$$${sh%.sh} ; \
	done
	mv $(1)/usr/bin/reset-admin $(1)/usr/bin/reset-seafile-admin

	$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sqlite2mysql.sh $(1)/usr/share/seafile/seafile-server/

	for py in $(SEAFILE_SERVER_PYTHON_SCRIPTS) ; do \
		$(INSTALL_DATA) $(PKG_BUILD_DIR)/scripts/$$$$py $(1)/usr/share/seafile/seafile-server/ ; \
	done

	$(CP) $(PKG_BUILD_DIR)/scripts/{sql,upgrade} $(1)/usr/share/seafile/seafile-server/
	rm -rf $(1)/usr/share/seafile/seafile-server/upgrade/win32

	$(INSTALL_BIN) ./files/create-seafile-admin.sh $(1)/usr/bin/create-seafile-admin

	$(INSTALL_CONF) ./files/seafile-server.config $(1)/etc/config/seafile-server
	$(INSTALL_BIN) ./files/seafile-server.init $(1)/etc/init.d/seafile-server
	$(INSTALL_DATA) ./files/seafile-server.upgrade $(1)/lib/upgrade/keep.d/seafile-server
endef

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/include/seafile
	$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
	$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/seafile/*.h $(1)/usr/include/seafile/
	$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libseafile.pc $(1)/usr/lib/pkgconfig/
endef

define Py3Build/Compile
	rm -rf $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/{seafile,seaserv}
	$(INSTALL_DIR) $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/{seafile,seaserv}
	$(INSTALL_DATA) $(PKG_BUILD_DIR)/python/seafile/*.py $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/seafile/
	$(INSTALL_DATA) $(PKG_BUILD_DIR)/python/seaserv/*.py $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/seaserv/
endef

define Package/seafile-server-fuse/install
	$(INSTALL_DIR) $(1)/usr/{bin,libexec}
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/seaf-fuse $(1)/usr/libexec/
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/seaf-fuse.sh $(1)/usr/bin/seaf-fuse
endef

Py3Package/python3-seafile-server/install:=:

define Package/seafile-server/postinst
#!/bin/sh
cat << EOF

Please see:

https://github.com/openwrt/packages/blob/master/net/seafile-server/README.md

for OpenWrt-specific installation notes (in particular, if you are
upgrading from a version before 7.1).

EOF

[ -z "$$IPKG_INSTROOT" ] || exit 0

cat << EOF

opkg will attempt to start Seafile server now. This may fail if you have
not set up Seafile server before or if you are upgrading and have not
run the upgrade scripts.

EOF
endef

$(eval $(call BuildPackage,seafile-server))
$(eval $(call BuildPackage,seafile-server-fuse))

$(eval $(call Py3Package,python3-seafile-server))
$(eval $(call BuildPackage,python3-seafile-server))
$(eval $(call BuildPackage,python3-seafile-server-src))
