# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit desktop ffmpeg-compat flag-o-matic qmake-utils xdg
DESCRIPTION="Friend to Friend secure communication and sharing application"
HOMEPAGE="https://retroshare.cc"
SRC_URI="https://download.opensuse.org/repositories/network:/retroshare/Debian_Testing/retroshare-common_${PV}.orig.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/RetroShare"
# NOTE: GitHub releases/archive is impractical to build so we use the OBS repo
# but they squash point releases and include 3rd party libraries in the tarball
LICENSE="AGPL-3 Apache-2.0 CC-BY-SA-4.0 GPL-2 GPL-3 LGPL-3"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="cli +gui +jsonapi keyring libupnp +miniupnp plugins +service +sqlcipher"
REQUIRED_USE="
|| ( gui service )
?? ( libupnp miniupnp )
plugins? ( gui )
service? ( || ( cli jsonapi ) )
"
RDEPEND="
app-arch/bzip2
dev-libs/openssl:0=
virtual/zlib:=
gui? (
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtmultimedia:5
dev-qt/qtnetwork:5
dev-qt/qtprintsupport:5
dev-qt/qtwidgets:5
dev-qt/qtx11extras:5
dev-qt/qtxml:5
x11-libs/libX11
x11-libs/libXScrnSaver
)
keyring? ( app-crypt/libsecret )
libupnp? ( net-libs/libupnp:= )
miniupnp? ( net-libs/miniupnpc:= )
plugins? (
media-libs/speex
media-libs/speexdsp
media-video/ffmpeg-compat:4=
)
sqlcipher? ( dev-db/sqlcipher )
!sqlcipher? ( dev-db/sqlite:3 )
"
DEPEND="
${RDEPEND}
gui? ( dev-qt/designer:5 )
jsonapi? ( >=dev-libs/rapidjson-1.1.0 )
"
BDEPEND="
dev-build/cmake
dev-qt/qtcore:5
virtual/pkgconfig
gui? ( x11-base/xorg-proto )
jsonapi? ( app-text/doxygen )
"
PATCHES=(
"${FILESDIR}"/${P}-fix-miniupnp-api-v18.patch
"${FILESDIR}"/${P}_fix-old-rapidjson.patch
)
src_configure() {
# TODO: fix with >=ffmpeg-7 then drop ffmpeg-compat, or drop/mask plugins
if use plugins; then
ffmpeg_compat_setup 4
ffmpeg_compat_add_flags
fi
local qconfigs=(
$(usex cli '' 'no_')rs_service_terminal_login
$(usex keyring '' 'no_')rs_autologin
$(usex gui '' 'no_')retroshare_gui
$(usex jsonapi '' 'no_')rs_jsonapi
$(usex service '' 'no_')retroshare_service
$(usex sqlcipher '' 'no_')sqlcipher
$(usex plugins '' 'no_')retroshare_plugins
)
local qupnplibs="none"
if use miniupnp; then
qupnplibs="miniupnpc"
elif use libupnp; then
qupnplibs="upnp ixml"
fi
# bug 907898
use elibc_musl && append-flags -D_LARGEFILE64_SOURCE
# REVIEW: qmake is deprecated
# https://github.com/RetroShare/RetroShare/tree/master/jsonapi-generator
eqmake5 CONFIG+="${qconfigs[*]}" \
RS_MAJOR_VERSION=$(ver_cut 1) \
RS_MINOR_VERSION=$(ver_cut 2) \
RS_MINI_VERSION=$(ver_cut 3) \
RS_EXTRA_VERSION="-gentoo-${PR}" \
RS_UPNP_LIB="${qupnplibs}"
}
src_install() {
use service && dobin retroshare-service/src/retroshare-service
insinto /usr/share/retroshare
doins libbitdht/src/bitdht/bdboot.txt
dodoc README.asciidoc
if use gui; then
dobin retroshare-gui/src/retroshare
doins -r retroshare-gui/src/qss
doicon data/${PN}.xpm
domenu data/${PN}.desktop
for i in 24 48 64 128 ; do
doicon -s ${i} "data/${i}x${i}/apps/retroshare.png"
done
fi
if use plugins; then
insinto /usr/lib/retroshare/extensions6
doins plugins/*/lib/*.so
fi
}
pkg_preinst() {
xdg_pkg_preinst
if ! use sqlcipher && ! has_version "net-p2p/retroshare[-sqlcipher]"; then
ewarn "You have disabled GXS database encryption, ${PN} will use SQLite"
ewarn "instead of SQLCipher for GXS databases."
ewarn "Builds using SQLite and builds using SQLCipher have incompatible"
ewarn "database format, so you will need to manually delete GXS"
ewarn "database (loosing all your GXS data and identities) when you"
ewarn "toggle sqlcipher USE flag."
fi
}