# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # NETWORK ACCESS # # this ebuild requires internet access! because javascript packaging. # # to allow network access just for this package: # # * /etc/portage/env/networkaccess: # FEATURES="${FEATURES} -network-sandbox" # # * /etc/portage/package.env/package.env: # net-im/element-desktop networkaccess # # this avoids disabling `network-sandbox` globally. EAPI=8 DESCRIPTION="A glossy Matrix collaboration client for desktop" HOMEPAGE="https://element.io" MY_PV="${PV/_rc/-rc.}" MY_P="$PN-$MY_PV" TMP_P="element-desktop-$MY_PV" S="${WORKDIR}/${TMP_P}" if [[ ${PV} == "9999" ]]; then SCM="git-r3" SRC_URI="" EGIT_REPO_URI="https://github.com/vector-im/element-desktop.git" EGIT_BRANCH="develop" else SRC_URI="https://github.com/vector-im/element-desktop/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz" KEYWORDS="~amd64 ~x86" fi RUST_OPTIONAL=1 inherit desktop xdg-utils rust ${SCM} LICENSE="Apache-2.0 MIT BSD" SLOT="0" IUSE="+native-extensions" REQUIRED_USE="" RESTRICT="network-sandbox" # get dependencies via: # readelf -a element-desktop | ag "Shared library" | ag -o '\[(.*)\]' | tr -d '[]' | while read lib; do qfile /usr/lib/$lib; done | cut -d: -f1 | sort | uniq # don't use ldd - it would show you transitive dependencies! # # libsecret is dlopen'd because of node-keytar RDEPEND=" !net-im/element-desktop-bin =net-im/element-web-${PV} app-crypt/libsecret native-extensions? ( dev-db/sqlcipher ) app-accessibility/at-spi2-core dev-libs/expat dev-libs/glib media-libs/alsa-lib media-libs/mesa net-print/cups sys-apps/dbus x11-libs/cairo x11-libs/gtk+ x11-libs/libdrm x11-libs/libX11 x11-libs/libxcb x11-libs/libXcomposite x11-libs/libXdamage x11-libs/libXext x11-libs/libXfixes x11-libs/libxkbcommon x11-libs/libXrandr x11-libs/pango " DEPEND=" ${RDEPEND} sys-apps/yarn net-libs/nodejs native-extensions? ( ${RUST_DEPEND} ) " PATCHES=() src_prepare() { default sed -i 's@"https://packages.riot.im/desktop/update/"@null@g' ${S}/element.io/release/config.json yarn install --no-fund || die "yarn module installation failed" } src_compile() { if use native-extensions; then yarn run "build:native" || die "native extensions build failed" fi yarn run build || die "build failed" } src_install() { dodoc LICENSE* insinto opt/${PN} exeinto opt/${PN} # main executable launcher cat <<-EOF > "${S}/${PN}" || die #!/bin/bash # support wayland and x11 exec ../../opt/${PN}/${PN} --ozone-platform-hint=auto \$@ EOF dobin "${S}/${PN}" # electron files pushd ${S}/dist/linux-unpacked doins -r locales resources doins *.{pak,bin,dat,json} # `ldd element-desktop` says only libffmpeg.so is needed # but more libs are dlopened doins lib*.so* doexe chrome-sandbox doexe chrome_crashpad_handler doexe ${PN} popd # symlink to the actual webapp dosym ../../../usr/share/webapps/element-web opt/${PN}/resources/webapp # config symlink dosym /etc/${PN}/config.json etc/webapps/element-web/config.json insinto etc/${PN} doins ${S}/element.io/release/config.json # let's enable lab features! sed -ie 's/ "showLabsSettings": false/ "showLabsSettings": true/' $D/etc/$PN/config.json make_desktop_entry "/usr/bin/${PN}" Element element InstantMessaging # element:// url handler cat <<-EOF > "${S}/element-url-handler.desktop" || die [Desktop Entry] Name=Element - URL Handler Type=Application Exec=/usr/bin/${PN} %U Icon=${PN} NoDisplay=true StartupNotify=true Categories=InstantMessaging; MimeType=x-scheme-handler/element; EOF domenu "${S}/element-url-handler.desktop" } pkg_postinst() { xdg_icon_cache_update xdg_desktop_database_update } pkg_postrm() { xdg_icon_cache_update xdg_desktop_database_update }