mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-08 22:52:59 -04:00
182 lines
4.5 KiB
Bash
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
|
|
|
|
}
|