Files
guru/net-im/tuwunel/tuwunel-1.7.0.ebuild
Niklaus 'vimja' Hofer d21e7aa630 net-im/tuwunel: add 1.7.0, drop 1.5.1
Signed-off-by: Niklaus 'vimja' Hofer <gentoo-bugzilla@vimja.email>
2026-05-30 19:57:24 +02:00

182 lines
4.5 KiB
Bash

# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Autogenerated by pycargoebuild 0.15.1
EAPI=8
CRATES="
"
LLVM_COMPAT=( 21 )
RUST_MIN_VER="1.94.0"
inherit cargo llvm-r2 linux-info
DESCRIPTION="High Performance Matrix Homeserver in Rust!"
HOMEPAGE="
https://tuwunel.chat
https://github.com/matrix-construct/tuwunel
"
SRC_URI="
https://github.com/matrix-construct/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
https://vimja.cloud/public.php/dav/files/z59eKDyLFokW2KK/${CATEGORY}/${PN}/${P}-vendor.tar.xz
"
# The repository's root directory is a "workspace root".
# It's easier and less error prone to work in src/main.
S="${WORKDIR}/${P}/src/main"
LICENSE="Apache-2.0"
# Dependent crate licenses
LICENSE+="
Apache-2.0 BSD-2 BSD BlueOak-1.0.0 CDLA-Permissive-2.0 ISC MIT
MPL-2.0 UoI-NCSA Unicode-3.0 Unlicense ZLIB
"
SLOT="0"
KEYWORDS="~amd64 ~arm64"
IUSE="jemalloc system-rocksdb gzip zstd lz4 bzip2 systemd brotli ldap io-uring"
# bzip2 looks difficult to un-bundle:
# https://wiki.gentoo.org/wiki/Project:Rust/sys_crates#bzip2-sys
# lz4 cannot be un-bundled:
# https://wiki.gentoo.org/wiki/Writing_Rust_ebuilds#Unbundling_C_libraries
COMMON_DEPEND="
jemalloc? ( dev-libs/jemalloc:= )
app-arch/snappy:=
zstd? (
app-arch/zstd:=
)
system-rocksdb? (
dev-libs/rocksdb
)
"
RDEPEND="
${COMMON_DEPEND}
acct-user/tuwunel
app-misc/ca-certificates
"
# clang needed for bindgen
DEPEND="
${COMMON_DEPEND}
$(llvm_gen_dep '
llvm-core/clang:${LLVM_SLOT}
llvm-core/llvm:${LLVM_SLOT}
')
"
# Required for pkg-config crate:
# https://wiki.gentoo.org/wiki/Writing_Rust_ebuilds#pkg-config_crate
BDEPEND="virtual/pkgconfig"
# rust does not use *FLAGS from make.conf, silence portage warning
# update with proper path to binaries this crate installs, omit leading /
QA_FLAGS_IGNORED="usr/bin/${PN}"
# TODO
DOCS=( {APPSERVICES,CODE_OF_CONDUCT,DEPLOY,README,TURN}.md )
pkg_setup() {
CONFIG_CHECK=""
# IO-Uring requires kernel support.
if use io-uring; then
CONFIG_CHECK+=" ~IO_URING"
ERROR_IO_URING="${P} requires io-uring in-kernel support."
fi
if [[ -n ${CONFIG_CHECK} ]]; then
linux-info_pkg_setup
fi
llvm-r2_pkg_setup
rust_pkg_setup
}
# See here for how this works and why it's needed:
# https://wiki.gentoo.org/wiki/Writing_Rust_ebuilds#Using_a_vendor_tarball_like_in_Go_ebuilds
src_prepare() {
ln -s "${WORKDIR}/vendor/" "${WORKDIR}/${P}/vendor" || die
sed -i "${ECARGO_HOME}/config.toml" -e '/source.crates-io/d' || die
sed -i "${ECARGO_HOME}/config.toml" -e '/replace-with = "gentoo"/d' || die
sed -i "${ECARGO_HOME}/config.toml" -e '/local-registry = "\/nonexistent"/d' || die
cat "${WORKDIR}/vendor/vendor-config.toml" >> "${ECARGO_HOME}/config.toml" || die
eapply_user
}
src_configure() {
# Required for pkg-config crate:
# https://wiki.gentoo.org/wiki/Writing_Rust_ebuilds#pkg-config_crate
export PKG_CONFIG_ALLOW_CROSS=1
# Required to un-bundle jemalloc:
# https://wiki.gentoo.org/wiki/Writing_Rust_ebuilds#Common_-sys_crates
export JEMALLOC_OVERRIDE="${ESYSROOT}/usr/$(get_libdir)/libjemalloc.so"
if use zstd; then
# Required to un-bundle zstd:
# https://wiki.gentoo.org/wiki/Project:Rust/sys_crates#zstd-sys
export ZSTD_SYS_USE_PKG_CONFIG=1
fi
if use system-rocksdb; then
# https://wiki.gentoo.org/wiki/Writing_Rust_ebuilds#Common_-sys_crates
export SNAPPY_LIB_DIR="${ESYSROOT}/usr/$(get_libdir)"
export ROCKSDB_INCLUDE_DIR="${ESYSROOT}/usr/include"
export ROCKSDB_LIB_DIR="${ESYSROOT}/usr/$(get_libdir)"
fi
local myfeatures=(
element_hacks
media_thumbnail
release_max_log_level
url_preview
$(usev io-uring io_uring)
$(usev systemd)
$(usev jemalloc)
$(usev ldap)
$(usev jemalloc jemalloc_conf)
$(usev zstd zstd_compression)
$(usev lz4 lz4_compression)
$(usev gzip gzip_compression)
$(usev bzip2 bzip2_compression)
$(usev brotli brotli_compression)
)
rust_pkg_setup
cargo_src_configure --no-default-features --frozen
}
src_install() {
cargo_src_install
keepdir /var/lib/tuwunel
fowners tuwunel:tuwunel /var/lib/tuwunel
fperms 750 /var/lib/tuwunel
keepdir /var/log/tuwunel
fowners tuwunel:tuwunel /var/log/tuwunel
fperms 750 /var/log/tuwunel
insinto /etc/tuwunel
newins "${WORKDIR}"/"${P}"/tuwunel-example.toml tuwunel.toml
insinto /etc/logrotate.d
newins "${FILESDIR}"/tuwunel.logrotate-r1 tuwunel
newinitd "${FILESDIR}"/tuwunel.init-r1 tuwunel
newconfd "${FILESDIR}"/tuwunel.conf-r1 tuwunel
# TODO: Add systemd service.
}
src_test() {
mkdir -p "${T}/var/lib/tuwunel" || die
TUWUNEL_DATABASE_PATH="${T}/var/lib/tuwunel" cargo_src_test
}