summaryrefslogtreecommitdiff
path: root/net-im/element-desktop/element-desktop-9999.ebuild
diff options
context:
space:
mode:
Diffstat (limited to 'net-im/element-desktop/element-desktop-9999.ebuild')
-rw-r--r--net-im/element-desktop/element-desktop-9999.ebuild234
1 files changed, 234 insertions, 0 deletions
diff --git a/net-im/element-desktop/element-desktop-9999.ebuild b/net-im/element-desktop/element-desktop-9999.ebuild
new file mode 100644
index 000000000000..362d1bf7e390
--- /dev/null
+++ b/net-im/element-desktop/element-desktop-9999.ebuild
@@ -0,0 +1,234 @@
+# Copyright 2009-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..14} )
+
+inherit desktop flag-o-matic multilib python-any-r1 xdg-utils
+
+DESCRIPTION="A glossy Matrix collaboration client for desktop"
+HOMEPAGE="https://element.io/"
+LICENSE="Apache-2.0"
+SLOT="0"
+SRC_URI=""
+REPO="https://github.com/element-hq/element-web"
+ELECTRON_SLOT_DEFAULT="39"
+#ELEMENT_COMMIT_ID="ae245c9b1f06e79cec4829f8cd1555206b0ec8f2"
+IUSE="electron-40 electron-41 electron-42 native-modules"
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="${REPO}.git"
+ EGIT_BRANCH="develop"
+ DOWNLOAD=""
+ IUSE+=" +build-online"
+else
+ IUSE+=" +build-online"
+ # KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+ DOWNLOAD="${REPO}/archive/"
+ if [ -z "$ELEMENT_COMMIT_ID" ]
+ then
+ DOWNLOAD+="v${PV}.tar.gz -> element-web-${PV}.tar.gz"
+ S="${WORKDIR}/element-web-${PV}"
+ else
+ DOWNLOAD+="${ELEMENT_COMMIT_ID}.tar.gz -> element-web-${ELEMENT_COMMIT_ID}.tar.gz"
+ S="${WORKDIR}/element-web-${ELEMENT_COMMIT_ID}"
+ fi
+fi
+
+SRC_URI+="${DOWNLOAD}"
+
+RESTRICT="mirror build-online? ( network-sandbox )"
+REQUIRED_USE="
+ native-modules? ( build-online )
+"
+
+COMMON_DEPEND="
+ ~net-im/element-web-${PV}
+ native-modules? ( dev-db/sqlcipher )
+ electron-40? ( dev-util/electron:40 )
+ electron-41? ( dev-util/electron:41 )
+ electron-42? ( dev-util/electron:42 )
+ !electron-40? (
+ !electron-41? (
+ !electron-42? (
+ dev-util/electron:${ELECTRON_SLOT_DEFAULT}
+ ) ) )
+"
+
+RDEPEND="${COMMON_DEPEND}
+"
+DEPEND="${COMMON_DEPEND}
+"
+
+BDEPEND="
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep '
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ ')
+ native-modules? ( || ( dev-lang/rust dev-lang/rust-bin ) )
+ net-libs/nodejs[corepack]
+"
+
+python_check_deps() {
+ python_has_version "dev-python/setuptools[${PYTHON_USEDEP}]"
+}
+
+#TODO: net-im/element-web -> runtime/buildtime dep
+
+src_unpack() {
+ if use electron-41; then
+ export ELECTRON_SLOT=41
+ elif use electron-40; then
+ export ELECTRON_SLOT=40
+ elif use electron-42; then
+ export ELECTRON_SLOT=42
+ else
+ export ELECTRON_SLOT=$ELECTRON_SLOT_DEFAULT
+ fi
+ if [ -z "$ELEMENT_COMMIT_ID" ]
+ then
+ if [ -f "${DISTDIR}/element-web-${PV}.tar.gz" ]; then
+ unpack "element-web-${PV}.tar.gz" || die
+ else
+ git-r3_src_unpack
+ fi
+ else
+ unpack "element-web-${ELEMENT_COMMIT_ID}.tar.gz" || die
+ fi
+}
+
+src_compile() {
+ # # OLD_PATH=$PATH
+ # PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin/node-gyp-bin:$PATH"
+ # PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/node_modules/npm/bin:$PATH"
+ # PATH="/usr/$(get_libdir)/electron-${ELECTRON_SLOT}:$PATH"
+ # PATH="${S}/node_modules/.bin:$PATH";
+ # export PATH
+ # export CFLAGS="${CFLAGS} -I/usr/include/electron-${ELECTRON_SLOT}/node"
+ # export CPPFLAGS="${CPPFLAGS} -I/usr/include/electron-${ELECTRON_SLOT}/node"
+ export ELECTRON_SKIP_BINARY_DOWNLOAD=1
+ # yarn config set disable-self-update-check true || die
+ # yarn config set nodedir /usr/include/electron-${ELECTRON_SLOT}/node || die
+ # # #! Until electron-builder >=22.11.5
+ # # yarn config set ignore-engines true || die
+
+ sed -i 's/electron-builder install-app-deps/true/' apps/desktop/package.json || die
+
+ # if ! use build-online; then
+ # ONLINE_OFFLINE="--offline --frozen-lockfile"
+ # yarn config set yarn-offline-mirror "${DISTDIR}" || die
+ # fi
+
+ einfo "Removing playwright from dependencies"
+ sed -i '/playwright":/d' apps/desktop/package.json || die
+
+ # einfo "Removing sentry from dependencies"
+ # sed -i '/@sentry/d' apps/desktop/package.json || die
+ # sed -i '/@sentry/d' apps/desktop/src/electron-main.ts || die
+ # sed -i '/configureSentry()/d' apps/desktop/src/electron-main.ts || die
+
+ einfo "Installing node_modules"
+ # sed -i 's/linkWorkspacePackages.*/linkWorkspacePackages: false/' pnpm-workspace.yaml || die
+ pnpm install --no-frozen-lockfile || die
+
+ cd apps/desktop
+ if use native-modules; then
+ pnpm run build:native || die
+ fi
+
+ script -c "pnpm run build" /dev/null || die
+ # pnpm install --no-frozen-lockfile || die
+ # ../../node_modules/.bin/tsc || die
+ # node scripts/copy-res.ts || die
+
+ # # Electron-Builder doesn't support ppc64 due to using precompiled binaries
+ # if ! use ppc64; then
+ # einfo "Editing ElectronFramework.js"
+ # sed -i 's/return unpack(options, createDownloadOpts.*$/return true;/' \
+ # node_modules/app-builder-lib/out/electron/ElectronFramework.js || die
+ # sed -i 's/return beforeCopyExtraFiles(options);$/return true;/' \
+ # node_modules/app-builder-lib/out/electron/ElectronFramework.js || die
+
+ # #!Error: With electron's node: "Unknown argument" electron/electron#25379
+ # #!Error: With electron's node: "Invalid package app.asar"
+ # /usr/bin/node node_modules/.bin/electron-builder --dir || die
+ # else
+ # einfo "Manually preparing app.asar"
+ # local distdir="dist/linux-unpacked/resources"
+ # mkdir -p ${distdir}/node_modules || die
+ # cp -r lib ${distdir} || die
+ # # Copying yarn.lock allows freezing versions to the build versions
+ # cp package.json ${distdir} || die
+ # pushd ${distdir} &> /dev/null || die
+ # pnpm install --no-frozen-lockfile || die
+ # popd &> /dev/null || die
+ # # rm ${distdir}/yarn.lock || die
+ # if use native-modules; then
+ # cp -r .hak/hakModules/matrix-seshat ${distdir}/node_modules/ || die
+ # fi
+
+ # einfo "Creating archive"
+ # /usr/bin/node node_modules/@electron/asar/bin/asar.mjs pack ${distdir} ${distdir}/app.asar \
+ # --unpack-dir '{**/Release,**/matrix-seshat}' || die
+ # # Remove unarchived copies of files (they are still in app.asar)
+ # rm -r ${distdir}/node_modules || die
+ # rm -r ${distdir}/lib || die
+
+ # cp -r build ${distdir} || die
+ # fi
+
+ #cp -r /usr/share/element-web webapp
+ #rm -f webapp/config.json
+ #cp -f /etc/element-web/config.json webapp/config.json
+ #node node_modules/.bin/asar p webapp webapp.asar
+ #node node_modules/.bin/asar l webapp.asar
+
+ # export PATH=${OLD_PATH}
+
+ # #! Fail in CI
+ # if [ ! -z "${NODIE}" ]; then
+ # die "Fail in CI"
+ # fi
+}
+
+src_install() {
+ cd apps/desktop
+
+ insinto "/usr/$(get_libdir)/element-desktop"
+
+ doins -r dist/linux-unpacked/resources/*
+ dosym ../../share/element-web /usr/$(get_libdir)/element-desktop/webapp
+
+ exeinto "/usr/$(get_libdir)/element-desktop"
+ cp "${FILESDIR}/read_flags_file" dist/linux-unpacked/resources/element-desktop
+ sed -i "s|@ELECTRON@|element-desktop|" dist/linux-unpacked/resources/element-desktop
+
+ echo "\"/usr/$(get_libdir)/electron-${ELECTRON_SLOT}/electron\" \
+/usr/$(get_libdir)/element-desktop/app.asar \"\${flags[@]}\" \"\$@\"" >> dist/linux-unpacked/resources/element-desktop
+ doexe dist/linux-unpacked/resources/element-desktop
+ dosym "/usr/$(get_libdir)/element-desktop/element-desktop" /usr/bin/element-desktop
+
+ # # Install icons
+ # local branding size
+ # for size in 16 24 48 64 96 128 256 512 ; do
+ # newicon -s ${size} "build/icons/${size}x${size}.png" \
+ # element-desktop.png
+ # done
+
+ newicon build/icon.png element-desktop.png
+
+ make_desktop_entry "/usr/bin/element-desktop" Element \
+ "element-desktop" "Network;Chat"
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ xdg_desktop_database_update
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+ xdg_desktop_database_update
+}