# Maintainer: Celeste <cielesti@protonmail.com>
maintainer="Celeste <cielesti@protonmail.com>"
pkgname=shadowsocks-rust
pkgver=1.23.4
pkgrel=0
pkgdesc="Rust port of shadowsocks"
url="https://github.com/shadowsocks/shadowsocks-rust"
arch="all"
license="MIT"
makedepends="
	cargo
	cargo-auditable
	mimalloc2-dev
	openssl-dev
	"
subpackages="
	$pkgname-sslocal
	$pkgname-ssmanager
	$pkgname-ssserver
	$pkgname-ssservice
	$pkgname-ssurl
	"
source="$pkgname-$pkgver.tar.gz::https://github.com/shadowsocks/shadowsocks-rust/archive/refs/tags/v$pkgver.tar.gz"
options="net !check" # fail for some reason

prepare() {
	default_prepare

	# Rust target triple.
	local target=$(rustc -vV | sed -n 's/host: //p')

	# Build against system-provided libs
	mkdir -p .cargo
	cat >> .cargo/config.toml <<-EOF
		[target.$target]
		mimalloc = { rustc-link-lib = ["mimalloc"] }
	EOF

	cargo fetch --target="$CTARGET" --locked
}

build() {
	local features="
		aead-cipher-2022
		local-dns
		local-http-native-tls
		local-redir
		local-socks4
		local-tunnel
		logging
		manager
		mimalloc
		multi-threaded
		server
		service
		utility
		"
	case "$CARCH" in
	ppc64le|s390x|riscv64|loongarch64)
		;;
	*)
		# ioctl-sys
		features="$features local-tun"
		;;
	esac
	cargo auditable build --release \
		--frozen \
		--bins \
		--no-default-features \
		--features="$(echo $features | tr -s " " ",")"
}

check() {
	cargo test --frozen
}

package() {
	depends="
		$pkgname-sslocal=$pkgver-r$pkgrel
		$pkgname-ssmanager=$pkgver-r$pkgrel
		$pkgname-ssserver=$pkgver-r$pkgrel
		$pkgname-ssservice=$pkgver-r$pkgrel
		$pkgname-ssurl=$pkgver-r$pkgrel
		"
	cd target/release
	install -Dm755 -t "$pkgdir"/usr/bin/ \
		sslocal \
		ssmanager \
		ssserver \
		ssservice \
		ssurl
}

sslocal() {
	pkgdesc="$pkgdesc (sslocal binary)"

	amove usr/bin/sslocal
}

ssmanager() {
	pkgdesc="$pkgdesc (ssmanager binary)"

	amove usr/bin/ssmanager
}

ssserver() {
	pkgdesc="$pkgdesc (ssserver binary)"

	amove usr/bin/ssserver
}

ssservice() {
	pkgdesc="$pkgdesc (ssservice binary)"

	amove usr/bin/ssservice
}

ssurl() {
	pkgdesc="$pkgdesc (ssurl binary)"

	amove usr/bin/ssurl
}

sha512sums="
362bf44f79f7964530a5b52ad71c070d558aeea77fc895427959886f15f30c4e0c6047066256eb374eac2dab285bf79bf2413c2ac4b0ae39493eb7ff0f69e5db  shadowsocks-rust-1.23.4.tar.gz
"
