ayaports/backports/signal-desktop/APKBUILD
Antoine Martin 612ceeda43
All checks were successful
/ lint (pull_request) Successful in 28s
/ build-x86_64 (pull_request) Successful in 16m15s
/ deploy-x86_64 (pull_request) Successful in 33s
/ build-aarch64 (pull_request) Successful in 1h0m41s
/ deploy-aarch64 (pull_request) Successful in 1m1s
backports/signal-desktop: upgrade to 7.40.1
2025-02-02 22:17:06 -05:00

478 lines
16 KiB
Text

# Contributor: lauren n. liberda <lauren@selfisekai.rocks>
# Contributor: Antoine Martin (ayakael) <dev@ayakael.net>
# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
pkgname=signal-desktop
pkgver=7.40.1
pkgrel=0
pkgdesc="A messaging app for simple private communication with friends"
url="https://github.com/signalapp/Signal-Desktop/"
# same as electron
arch="aarch64 x86_64"
license="AGPL-3.0-only"
_llvmver=19
depends="
electron
font-barlow
font-eb-garamond
font-inter
font-parisienne
"
makedepends="
alsa-lib-dev
aom-dev
brotli-dev
bsd-compat-headers
cargo
cargo-auditable
cbindgen
clang$_llvmver-dev
cmake
crc32c-dev
dav1d-dev
double-conversion-dev
electron-dev
electron-tasje
ffmpeg-dev
git-lfs
glib-dev
gn
jsoncpp-dev
libavif-dev
libjpeg-turbo-dev
libepoxy-dev
libevent-dev
libsecret-dev
libvpx-dev
libwebp-dev
libxml2-dev
lld
llvm$_llvmver-dev
mesa-dev
nodejs
npm
openh264-dev
openssl-dev
opus-dev
pipewire-dev
protoc
pulseaudio-dev
py3-setuptools
python3
re2-dev
samurai
sqlcipher-dev
vips-dev
yarn
"
options="net !check"
# use _check_depends to validate this
_libsignalver=0.65.2
_ringrtcver=2.49.3
_webrtcver=6834c
_stokenizerver=0.2.1
source="
https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz
https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz
https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz
https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst
https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz
libsignal-auditable.patch
signal-use-system-sqlcipher.patch
signal-disable-updates.patch
signal-update-links.patch
signal-show-window-please.patch
ringrtc-webrtc-renamed.patch
webrtc-shared-libs.patch
webrtc-compiler.patch
webrtc-gcc13.patch
webrtc-rollback-red.patch
webrtc-rollback-3rdparty-build-gn.patch
signal-desktop.sh
"
builddir="$srcdir"
# webrtc broken on clang https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101227
export CC=gcc
export CXX=g++
# required to find the tools
export AR=ar
export NM=nm
export LD=g++
# less log spam, reproducible, allow lto with rust
export CFLAGS="${CFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations"
export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations"
export CPPFLAGS="$CPPFLAGS -D__DATE__= -D__TIME__= -D__TIMESTAMP__="
export CARGO_PROFILE_RELEASE_OPT_LEVEL=2
export CARGO_PROFILE_RELEASE_STRIP="symbols"
#export RUSTFLAGS="$RUSTFLAGS -C linker=clang"
export YARN_CACHE_FOLDER="$srcdir/.yarn"
_update_depends() {
msg "Updating extra dependencies version information in $APKBUILD..."
# _libsignalver: follow signal-desktop package.json -> @signalapp/libsignal-client
# _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc
# _webrtcver: follow ringrtc (on version above) -> config/version.properties -> webrtc.version
# downloading tarball generated with abuild snapshot (with gclient dependencies fetched)
# _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION
local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
local _bsqlitever=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/better-sqlite3\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
local _webrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/ringrtc/v$_ringrtcver/config/version.properties | awk -F '=' '{if($1 == "webrtc.version"){print $2}}' | head -n 1)
local _extensionver=$(curl --silent https://raw.githubusercontent.com/signalapp/better-sqlite3/v$_bsqlitever/deps/download.js | grep "const EXTENSION_VERSION" | awk '{print $4}' | tr -d "'" | tr -d ';' | head -n 1)
local _stokenizerver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Sqlcipher-Extension/refs/tags/v$_extensionver/Cargo.lock | sed -n "/^name = \"signal-tokenizer\"$/,/^$/p" | awk -F ' = ' '{if($1=="version"){print $2}}' | tr -d '"')
sed -i \
-e "s|^_libsignalver=.*|_libsignalver=$_libsignalver|" \
-e "s|^_ringrtcver=.*|_ringrtcver=$_ringrtcver|" \
-e "s|^_webrtcver=.*|_webrtcver=$_webrtcver|" \
-e "s|^_stokenizerver=.*|_stokenizerver=$_stokenizerver|" \
APKBUILD
}
# webrtc only, the other dependencies are fine with tarballs
_distbucket="sakamoto/lnl-aports-snapshots/"
snapshot() {
mkdir -p "$srcdir"
cd "$srcdir"
# cleanup if retrying
rm -rf src
rm -rf webrtc-$_webrtcver
rm -f webrtc-$_webrtcver.tar
rm -f webrtc-$_webrtcver.tar.zst
echo "
solutions = [{
'name': 'src',
'url': 'https://github.com/signalapp/webrtc.git@$_webrtcver',
}]
target_cpu = ['x64', 'arm64']
target_cpu_only = True
" > .gclient
gclient sync --no-history --nohooks --tpot-cipd-ignore-platformed
# needed DEPS hooks
python3 'src/build/landmines.py' --landmine-scripts 'src/tools_webrtc/get_landmines.py' --src-dir 'src'
python3 'src/build/util/lastchange.py' -o 'src/build/util/LASTCHANGE'
for elf in $(scanelf -RA -F "%F" src); do
rm -f "$elf"
done
mv src webrtc-$_webrtcver
msg "generating tarball.."
tar -cf webrtc-$_webrtcver.tar \
--exclude="ChangeLog*" \
--exclude="testdata/" \
--exclude="test_data/" \
--exclude="android_rust_toolchain/toolchain/" \
--exclude="base/" \
--exclude-backups \
--exclude-caches-all \
--exclude-vcs \
webrtc-$_webrtcver
zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv webrtc-$_webrtcver.tar -o "$SRCDEST"/webrtc-$_webrtcver.tar.zst
mcli cp "$SRCDEST"/webrtc-$_webrtcver.tar.zst "$_distbucket"
}
prepare() {
# Moves to builddir to use abuild patch logics
for i in Signal-Desktop-$pkgver libsignal-$_libsignalver ringrtc-$_ringrtcver webrtc-$_webrtcver Signal-FTS5-Extension-$_stokenizerver; do
mv "$srcdir"/$i "$builddir"/${i%-*}
done
cd "$builddir"/Signal-Desktop
msg "Installing signal-desktop JS dependencies"
npm ci --ignore-scripts
# remove shipped fonts for system-provided (part 1)
rm -rf fonts/
default_prepare
(
cd "$builddir"/webrtc
local use_system="
brotli
crc32c
dav1d
double-conversion
ffmpeg
flatbuffers
fontconfig
freetype
harfbuzz-ng
highway
icu
jsoncpp
libaom
libavif
libdrm
libevent
libjpeg
libpng
libsecret
libvpx
libwebp
libxml
libxslt
openh264
opus
re2
snappy
woff2
zlib
"
for _lib in $use_system double_conversion libjpeg_turbo; do
msg "Removing buildscripts for system provided $_lib"
find . -type f -path "*{third_party,ringrtc}/$_lib/*" \
\! -path "*third_party/$_lib/chromium/*" \
\! -path "*third_party/$_lib/google/*" \
\! -path './base/third_party/icu/*' \
\! -path './third_party/libxml/*' \
\! -path './third_party/re2/*' \
\! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \
\! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \
\! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \
\! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
-delete
done
msg "Replacing gn files"
python3 build/linux/unbundle/replace_gn_files.py --system-libraries \
$use_system
# allow system dependencies in "official builds"
sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
tools/generate_shim_headers/generate_shim_headers.py
mkdir path
ln -s /usr/bin/python3 path/vpython3
)
(
cd "$builddir"/ringrtc/src/rust
msg "Installing ringrtc rust dependencies"
cargo fetch --target="$CTARGET" --locked
)
(
cd "$builddir"/libsignal
msg "Installing libsignal rust dependencies"
cargo fetch --target="$CTARGET" --locked
)
(
cd "$builddir"/Signal-FTS5-Extension
msg "Installing signal tokenizer rust dependencies"
cargo fetch --target="$CTARGET" --locked
)
(
cd "$builddir"/ringrtc/src/node
msg "Installing ringrtc js dependencies"
npm ci --ignore-scripts
)
(
cd "$builddir"/libsignal/node
# fix target
sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' binding.gyp
msg "Installing libsignal js dependencies"
yarn --ignore-scripts --frozen-lockfile
)
}
build() {
chromium_arch="$(node -e 'console.log(process.arch)')"
# required dependency of ringrtc
(
cd "$builddir"/webrtc
export PATH="$PWD/path:$PATH"
# shellcheck disable=2089
local webrtc_args="
rtc_build_examples=false
rtc_build_tools=false
rtc_enable_protobuf=false
rtc_enable_sctp=false
rtc_include_tests=false
rtc_include_ilbc=false
rtc_libvpx_build_vp9=true
rtc_use_x11=false
build_with_mozilla=false
chrome_pgo_phase=0
clang_use_chrome_plugins=false
clang_base_path=\"/usr\"
custom_toolchain=\"//build/toolchain/linux/unbundle:default\"
is_cfi=false
is_clang=false
is_debug=false
is_official_build=true
host_toolchain=\"//build/toolchain/linux/unbundle:default\"
proprietary_codecs=true
rtc_link_pipewire=true
rtc_use_pipewire=true
symbol_level=0
use_custom_libcxx=false
use_lld=true
use_sysroot=false
"
mkdir -p "$builddir"/ringrtc/out/release
msg "Building signal's webrtc"
# shellcheck disable=2090,2116
gn gen "$builddir"/ringrtc/out/release --args="$(echo $webrtc_args)"
ninja -C "$builddir"/ringrtc/out/release signaldeswebrtc
)
(
cd "$builddir"/ringrtc
msg "Building libringrtc"
OUTPUT_DIR="$builddir"/ringrtc/out \
cargo auditable build --features electron --release -p ringrtc
mkdir -p src/node/build/linux
cp -fv out/release/libsignaldeswebrtc.so src/node/build/linux/libsignaldeswebrtc.so
cp -fv target/release/libringrtc.so src/node/build/linux/libringrtc-$chromium_arch.node
)
(
cd "$builddir"/ringrtc/src/node
msg "Building ringrtc JS glue code"
npm run build
msg "Cleaning dev dependencies for ringrtc"
npm prune --ignore-scripts --omit=dev
)
# module on npm intentionally unbuildable: https://github.com/signalapp/libsignal/issues/464#issuecomment-1160665052
(
cd "$builddir"/libsignal/node
msg "Building libsignal"
node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source
node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source
mkdir -p prebuilds/linux-$chromium_arch
mv build/Release/libsignal_client_linux_$chromium_arch.node prebuilds/linux-$chromium_arch/node.napi.node
msg "Building libsignal glue code"
npm run tsc
msg "Cleaning dev dependencies for libsignal"
npm prune -ignore-scripts --omit=dev
)
(
cd "$builddir"/Signal-FTS5-Extension
msg "Building signal tokenizer"
cargo auditable build --features extension --release --frozen
cbindgen --profile release . -o target/release/signal-tokenizer.h
)
msg "Building signal-desktop"
cd "$builddir"/Signal-Desktop
# from package.json postinstall
npm run build:acknowledgments
npm exec patch-package
rm -rf node_modules/dtrace-provider
# get esbuild installed (needed for next step)
npm rebuild esbuild
# build front
NODE_ENV=production \
SIGNAL_ENV=production \
NODE_OPTIONS=--openssl-legacy-provider \
npm run build:dev
# purge non-production deps
npm prune --ignore-scripts --omit=dev
# use our libsignal
rm -rf node_modules/@signalapp/libsignal-client/
mv "$builddir"/libsignal/node/ node_modules/@signalapp/libsignal-client
# use our libringrtc
rm -rf node_modules/@signalapp/ringrtc/
mv "$builddir"/ringrtc/src/node/ node_modules/@signalapp/ringrtc
mkdir node_modules/@signalapp/better-sqlite3/tokenizer
mv "$builddir"/Signal-FTS5-Extension/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/
mv "$builddir"/Signal-FTS5-Extension/target/release/signal-tokenizer.h node_modules/@signalapp/better-sqlite3/tokenizer/
npm rebuild \
sharp @signalapp/better-sqlite3 spellchecker websocket \
utf-8-validate bufferutil fs-xattr \
--nodedir=/usr/include/electron/node_headers --build-from-source
SIGNAL_ENV=production \
tasje pack
}
check() {
cd "$builddir"/Signal-Desktop
# tests run against downloaded build of electron for glibc, probably can be patched
npm run test
}
package() {
cd "$builddir"/Signal-Desktop/tasje_out
install -Dm644 resources/app.asar "$pkgdir"/usr/lib/$pkgname/app.asar
cp -r resources/app.asar.unpacked "$pkgdir"/usr/lib/$pkgname/app.asar.unpacked
install -Dm644 signal.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop
# this should be in /usr/lib/signal-desktop. however, it does not simply work and I stopped to care
install -Dm755 "$builddir"/ringrtc/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so
install -Dm755 "$srcdir"/signal-desktop.sh "$pkgdir"/usr/bin/signal-desktop
while read -r size; do
install -Dm644 icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png
done < icons/size-list
}
sha512sums="
0d61fc7cd17666925466de76ee2bccc9a84b24328bf8c7fac5fbaf704641f9498ed8d3942e2b3c2a303754818ed51ce2263bace16bfab978584fb03b3e4f1898 Signal-Desktop-7.40.1.tar.gz
96ada8462dcde98ee12eb12bd6ebb62f84105792c7337c3c3e7651b19fa22cd6cc7c3a414d04c309780cd3455c82620b95ad2e73c1916606d9f29bd07a0a3f03 libsignal-0.65.2.tar.gz
f25f57791c18196846599e3794791e0d900cd887a936c6e09c919a60db66d012794a40120e4baae83ad2741b74515d6e2e5a1434cd88c3865100d5f19080a3d1 ringrtc-2.49.3.tar.gz
0da308e8484fd0863947b871d0f702052ab2c416a3ff2a34fb60b7b57867e6663bdd0b882be7efc3645019b9029bd185367ca3f5867d25a3417b76da7e9439a5 webrtc-6834c.tar.zst
84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz
8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch
18d5a0208d75fa910b6c0d531997402bba83290dfc7d7ce903acdcd0ce1d88bd3026ace40ecd32a88c2e429e48530b4e40f207a3d15bd9c0d6ebc8c447fa8ff9 signal-use-system-sqlcipher.patch
fc2af28645364cd85c106304a26811b036f6be048c52137fbbcc112870a84132a181f532563e0569b560fde3cf8c02480666a9b01d804b0008f97c728005b1c7 signal-disable-updates.patch
853de84d636f730694f17bcec63463fa7bfbdd0a7f7a64618a8fc6bc523ce1a9854b4c651753735af735c18101295d3efbe54f83ae0bccbed83c8c1fee3e7049 signal-update-links.patch
882d6889b23a3ebc6449c8b6acec8c3853674a7e94f066d65b57bab674ba8c11d582ba2c760825cb67b9202716e6d8b7123001d1e9f9229e49a0b77e9d978265 signal-show-window-please.patch
02a648bb8541a39c75fec2db39f024a27976afca41908eefa2fe1f2e30b05b5d59f980ccc930021c0b0c09ba8b0cbcae071e9f0dd530543c667adbc4272af552 ringrtc-webrtc-renamed.patch
98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1 webrtc-shared-libs.patch
fe78cdc58c18826fc4227cc8e9377980766229390544578f6a1a6f7322bc3243c066963b589323dbfe4f2bfd37f8859ad84f63cb3783317892e5ae3652270a3a webrtc-compiler.patch
3f1095861a79862ab5a55c86d7e353d272974617afba39e4d4441024bede8d7b9b8e122da90d56a9c3c0965171803d6b9e29e91d78167a08c6bcc86b3eedab18 webrtc-gcc13.patch
8f53dcf3264c5cec338f037e57a7770ec939ee06dfb0c5dfeab23967a3a64d3f861a6b5419766ac892676036b4522bce2f47279ca3658b5c0b6a31c82ac05053 webrtc-rollback-red.patch
f8bd574a0de077a643ced26e8a0e3f162e014bbf91c957bbefd113883a70e2b63e483bf400b7e2da8d09edfe76d4f6a257f194a14124f344f1625c5632d12acb webrtc-rollback-3rdparty-build-gn.patch
87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop.sh
"