include $(TOPDIR)/rules.mk

PKG_NAME:=snowflake
PKG_VERSION:=2.4.1
PKG_RELEASE:=1

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=https://git.torproject.org/pluggable-transports/snowflake.git
PKG_SOURCE_VERSION:=v$(PKG_VERSION)
PKG_MIRROR_HASH:=91f32c3f56718ae35641c734aa061be138eb7c0d1bc88596b42e731e30aaa27a

PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>, Nick Hainke <vincent@systemli.org>

PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0

GO_PKG:=git.torproject.org/pluggable-transports/snowflake.git/v2

include $(INCLUDE_DIR)/package.mk
include ../../lang/golang/golang-package.mk

define Package/snowflake/Default
  TITLE:=Snowflake
  URL:=https://snowflake.torproject.org/
  DEPENDS:=$(GO_ARCH_DEPENDS)
  SECTION:=net
  CATEGORY:=Network
  USERID:=snowflake:snowflake
endef

define Package/snowflake-broker
$(call Package/snowflake/Default)
  TITLE+= Broker
endef

define Package/snowflake-client
$(call Package/snowflake/Default)
  TITLE+= Client
endef

define Package/snowflake-distinctcounter
$(call Package/snowflake/Default)
  TITLE+= Distinct Counter
endef

define Package/snowflake-probetest
$(call Package/snowflake/Default)
  TITLE+= Probe test
endef

define Package/snowflake-proxy
$(call Package/snowflake/Default)
  TITLE+= Proxy
endef

define Package/snowflake-server
$(call Package/snowflake/Default)
  TITLE+= Server
endef

define Package/snowflake/description/Default
Snowflake is a system that allows people from all over the world to
access censored websites and applications. Similar to how VPNs assist
users in getting around Internet censorship, Snowflake helps you avoid
being noticed by Internet censors by making your Internet activity appear
as though you're using the Internet for a regular video or voice call.
endef

define Package/snowflake-broker/description
$(call Package/snowflake/description/Default)

This package provides the Snowflake broker service.
endef

define Package/snowflake-client/description
$(call Package/snowflake/description/Default)

This package contains the Snowflake client which provides the bridge to TOR.
endef

define Package/snowflake-distinctcounter/description
$(call Package/snowflake/description/Default)

This package provides the Snowflake distinct counter service.
endef

define Package/snowflake-probetest/description
$(call Package/snowflake/description/Default)

This package provides the Snowflake probe test.
endef

define Package/snowflake-proxy/description
$(call Package/snowflake/description/Default)

This package provides the standalone Snowflake proxy.
endef

define Package/snowflake-server/description
$(call Package/snowflake/description/Default)

This package provides the Snowflake server.
endef

define Package/snowflake-broker/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/broker $(1)/usr/bin/snowflake-broker
endef

define Package/snowflake-client/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/client $(1)/usr/bin/snowflake-client
endef

define Package/snowflake-distinctcounter/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/distinctcounter $(1)/usr/bin/snowflake-distinctcounter
endef

define Package/snowflake-probetest/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/probetest $(1)/usr/bin/snowflake-probetest
endef

define Package/snowflake-proxy/install
	$(INSTALL_DIR) $(1)/usr/bin $(1)/etc/init.d
	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/proxy $(1)/usr/bin/snowflake-proxy
	$(INSTALL_BIN) ./files/snowflake-proxy.init $(1)/etc/init.d/snowflake-proxy
endef

define Package/snowflake-server/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(GO_PKG_BUILD_BIN_DIR)/server $(1)/usr/bin/snowflake-server
endef

$(eval $(call BuildPackage,snowflake-broker))
$(eval $(call BuildPackage,snowflake-client))
$(eval $(call BuildPackage,snowflake-distinctcounter))
$(eval $(call BuildPackage,snowflake-probetest))
$(eval $(call BuildPackage,snowflake-proxy))
$(eval $(call BuildPackage,snowflake-server))