Skip to content

Commit b7a1944

Browse files
signal-desktop-source: build ringrtc & webrtc from source
Co-authored-by: Marcin Serwin <[email protected]>
1 parent c18b083 commit b7a1944

File tree

6 files changed

+524
-35
lines changed

6 files changed

+524
-35
lines changed

pkgs/by-name/si/signal-desktop-source/package.nix

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,32 @@ let
2222
pnpm = pnpm_10;
2323
electron = electron_35;
2424

25+
nodeOS =
26+
{
27+
"linux" = "linux";
28+
"darwin" = "darwin";
29+
}
30+
.${stdenv.hostPlatform.parsed.kernel.name}
31+
or (throw "unsupported platform ${stdenv.hostPlatform.parsed.kernel.name}");
32+
33+
nodeArch =
34+
{
35+
# https://nodejs.org/api/os.html#osarch
36+
"x86_64" = "x64";
37+
"aarch64" = "arm64";
38+
}
39+
.${stdenv.hostPlatform.parsed.cpu.name}
40+
or (throw "unsupported platform ${stdenv.hostPlatform.parsed.cpu.name}");
41+
2542
electron-headers = runCommand "electron-headers" { } ''
2643
mkdir -p $out
2744
tar -C $out --strip-components=1 -xvf ${electron.headers}
2845
'';
2946

3047
libsignal-node = callPackage ./libsignal-node.nix { inherit nodejs; };
3148

32-
ringrtc-bin = callPackage ./ringrtc-bin.nix { };
49+
webrtc = callPackage ./webrtc.nix { };
50+
ringrtc = callPackage ./ringrtc.nix { inherit webrtc; };
3351

3452
# Noto Color Emoji PNG files for emoji replacement; see below.
3553
noto-fonts-color-emoji-png = noto-fonts-color-emoji.overrideAttrs (prevAttrs: {
@@ -145,12 +163,14 @@ stdenv.mkDerivation (finalAttrs: {
145163
die "libsignal-client version mismatch"
146164
fi
147165
148-
if [ "`jq -r '.dependencies."@signalapp/ringrtc"' < package.json`" != "${ringrtc-bin.version}" ]
166+
if [ "`jq -r '.dependencies."@signalapp/ringrtc"' < package.json`" != "${ringrtc.version}" ]
149167
then
150168
die "ringrtc version mismatch"
151169
fi
152170
153-
cp -r ${ringrtc-bin} node_modules/@signalapp/ringrtc/build
171+
mkdir -p node_modules/@signalapp/ringrtc/build
172+
install -D ${ringrtc}/lib/libringrtc${stdenv.hostPlatform.extensions.library} \
173+
node_modules/@signalapp/ringrtc/build/${nodeOS}/libringrtc-${nodeArch}.node
154174
155175
rm -fr node_modules/@signalapp/libsignal-client/prebuilds
156176
cp -r ${libsignal-node}/lib node_modules/@signalapp/libsignal-client/prebuilds
@@ -218,7 +238,8 @@ stdenv.mkDerivation (finalAttrs: {
218238
passthru = {
219239
inherit
220240
libsignal-node
221-
ringrtc-bin
241+
ringrtc
242+
webrtc
222243
sticker-creator
223244
;
224245
tests.application-launch = nixosTests.signal-desktop;

pkgs/by-name/si/signal-desktop-source/ringrtc-bin.nix

Lines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
rustPlatform,
3+
lib,
4+
fetchFromGitHub,
5+
cmake,
6+
protobuf,
7+
webrtc,
8+
}:
9+
10+
rustPlatform.buildRustPackage (finalAttrs: {
11+
pname = "ringrtc";
12+
version = "2.50.3";
13+
14+
src = fetchFromGitHub {
15+
owner = "signalapp";
16+
repo = "ringrtc";
17+
tag = "v${finalAttrs.version}";
18+
hash = "sha256-EuryWZMMTkrDPheVv0wBsH+zL3LylxSSPS+nNnn3cmM=";
19+
};
20+
useFetchCargoVendor = true;
21+
cargoHash = "sha256-/c+tpTh5X05HLqAHsA/YvWxqy7TSUy49g6OtIQg+rMs=";
22+
23+
cargoBuildFlags = [
24+
"-p"
25+
"ringrtc"
26+
"--features"
27+
"electron"
28+
];
29+
doCheck = false;
30+
31+
nativeBuildInputs = [
32+
protobuf
33+
cmake
34+
];
35+
buildInputs = [
36+
webrtc
37+
];
38+
39+
meta = {
40+
homepage = "https://github.com/signalapp/ringrtc";
41+
description = "RingRTC library used by Signal";
42+
license = lib.licenses.agpl3Only;
43+
platforms = lib.platforms.unix;
44+
};
45+
})

pkgs/by-name/si/signal-desktop-source/update.sh

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env nix-shell
2-
#!nix-shell -i bash -p bash nix-update common-updater-scripts curl coreutils jq
2+
#!nix-shell -i bash -p bash nix-update common-updater-scripts curl coreutils jq gclient2nix
33

44
set -ex
55

@@ -19,10 +19,12 @@ releaseEpoch=`date -d $releaseDate +%s`
1919
packageJson="`curl_github "https://raw.githubusercontent.com/signalapp/Signal-Desktop/refs/tags/$releaseTag/package.json"`"
2020
2121
latestVersion="`jq -r '.version' <<< $packageJson`"
22-
nodeVersion="`jq -r '.engines.node' <<< $packageJson | head -c2`"
23-
electronVersion="`jq -r '.devDependencies.electron' <<< $packageJson | head -c2`"
22+
nodeVersion="`jq -r '.engines.node' <<< $packageJson | cut -d. -f1`"
23+
electronVersion="`jq -r '.devDependencies.electron' <<< $packageJson | cut -d. -f1`"
2424
libsignalClientVersion=`jq -r '.dependencies."@signalapp/libsignal-client"' <<< $packageJson`
2525
ringrtcVersion=`jq -r '.dependencies."@signalapp/ringrtc"' <<< $packageJson`
26+
ringrtcVersionProperties="`curl_github "https://raw.githubusercontent.com/signalapp/ringrtc/refs/tags/v$ringrtcVersion/config/version.properties"`"
27+
webrtcVersion="`grep --only-matching "^webrtc.version=.*$" <<< $ringrtcVersionProperties | sed "s/webrtc.version=//g"`"
2628
2729
sed -E -i "s/(nodejs_)../\1$nodeVersion/" $SCRIPT_DIR/package.nix
2830
sed -E -i "s/(electron_)../\1$electronVersion/" $SCRIPT_DIR/package.nix
@@ -44,4 +46,9 @@ update-source-version signal-desktop-source.libsignal-node \
4446
--ignore-same-version \
4547
--source-key=npmDeps
4648
47-
update-source-version signal-desktop-source.ringrtc-bin "$ringrtcVersion"
49+
update-source-version signal-desktop-source.ringrtc "$ringrtcVersion"
50+
update-source-version signal-desktop-source.ringrtc \
51+
--ignore-same-version \
52+
--source-key=cargoDeps.vendorStaging
53+
54+
gclient2nix generate "https://github.com/signalapp/webrtc@$webrtcVersion" > $SCRIPT_DIR/webrtc-sources.json

0 commit comments

Comments
 (0)