Unverified Commit 3edf77d2 authored by Florian Klink's avatar Florian Klink Committed by GitHub
Browse files

signal-desktop-source: build ringrtc & webrtc from source (#397112)

parents fb8cc8c4 b7a19441
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ class Repo:
        )

    def flatten_repr(self) -> dict:
        return {"fetcher": self.fetcher, "attrs": {**({"hash": self.hash} if hasattr(self, "hash") else {}), **self.args}}
        return {"fetcher": self.fetcher, "args": {**({"hash": self.hash} if hasattr(self, "hash") else {}), **self.args}}

    def flatten(self, path: str) -> dict:
        out = {path: self.flatten_repr()}
+25 −4
Original line number Diff line number Diff line
@@ -22,6 +22,23 @@ let
  pnpm = pnpm_10;
  electron = electron_35;

  nodeOS =
    {
      "linux" = "linux";
      "darwin" = "darwin";
    }
    .${stdenv.hostPlatform.parsed.kernel.name}
      or (throw "unsupported platform ${stdenv.hostPlatform.parsed.kernel.name}");

  nodeArch =
    {
      # https://nodejs.org/api/os.html#osarch
      "x86_64" = "x64";
      "aarch64" = "arm64";
    }
    .${stdenv.hostPlatform.parsed.cpu.name}
      or (throw "unsupported platform ${stdenv.hostPlatform.parsed.cpu.name}");

  electron-headers = runCommand "electron-headers" { } ''
    mkdir -p $out
    tar -C $out --strip-components=1 -xvf ${electron.headers}
@@ -29,7 +46,8 @@ let

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

  ringrtc-bin = callPackage ./ringrtc-bin.nix { };
  webrtc = callPackage ./webrtc.nix { };
  ringrtc = callPackage ./ringrtc.nix { inherit webrtc; };

  # Noto Color Emoji PNG files for emoji replacement; see below.
  noto-fonts-color-emoji-png = noto-fonts-color-emoji.overrideAttrs (prevAttrs: {
@@ -145,12 +163,14 @@ stdenv.mkDerivation (finalAttrs: {
      die "libsignal-client version mismatch"
    fi

    if [ "`jq -r '.dependencies."@signalapp/ringrtc"' < package.json`" != "${ringrtc-bin.version}" ]
    if [ "`jq -r '.dependencies."@signalapp/ringrtc"' < package.json`" != "${ringrtc.version}" ]
    then
      die "ringrtc version mismatch"
    fi

    cp -r ${ringrtc-bin} node_modules/@signalapp/ringrtc/build
    mkdir -p node_modules/@signalapp/ringrtc/build
    install -D ${ringrtc}/lib/libringrtc${stdenv.hostPlatform.extensions.library} \
      node_modules/@signalapp/ringrtc/build/${nodeOS}/libringrtc-${nodeArch}.node

    rm -fr node_modules/@signalapp/libsignal-client/prebuilds
    cp -r ${libsignal-node}/lib node_modules/@signalapp/libsignal-client/prebuilds
@@ -218,7 +238,8 @@ stdenv.mkDerivation (finalAttrs: {
  passthru = {
    inherit
      libsignal-node
      ringrtc-bin
      ringrtc
      webrtc
      sticker-creator
      ;
    tests.application-launch = nixosTests.signal-desktop;
+0 −27
Original line number Diff line number Diff line
{
  stdenv,
  lib,
  fetchzip,
  autoPatchelfHook,
  libpulseaudio,
}:
stdenv.mkDerivation (finalAttrs: {
  pname = "ringrtc-bin";
  version = "2.50.3";
  src = fetchzip {
    url = "https://build-artifacts.signal.org/libraries/ringrtc-desktop-build-v${finalAttrs.version}.tar.gz";
    hash = "sha256-UJqH/UiT9j36r6fr673CP/Z4lGaSPXIzAkf72YZfExo=";
  };

  installPhase = ''
    cp -r . $out
  '';

  nativeBuildInputs = [ autoPatchelfHook ];
  buildInputs = [ libpulseaudio ];
  meta = {
    homepage = "https://github.com/signalapp/ringrtc";
    license = lib.licenses.agpl3Only;
    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
  };
})
+45 −0
Original line number Diff line number Diff line
{
  rustPlatform,
  lib,
  fetchFromGitHub,
  cmake,
  protobuf,
  webrtc,
}:

rustPlatform.buildRustPackage (finalAttrs: {
  pname = "ringrtc";
  version = "2.50.3";

  src = fetchFromGitHub {
    owner = "signalapp";
    repo = "ringrtc";
    tag = "v${finalAttrs.version}";
    hash = "sha256-EuryWZMMTkrDPheVv0wBsH+zL3LylxSSPS+nNnn3cmM=";
  };
  useFetchCargoVendor = true;
  cargoHash = "sha256-/c+tpTh5X05HLqAHsA/YvWxqy7TSUy49g6OtIQg+rMs=";

  cargoBuildFlags = [
    "-p"
    "ringrtc"
    "--features"
    "electron"
  ];
  doCheck = false;

  nativeBuildInputs = [
    protobuf
    cmake
  ];
  buildInputs = [
    webrtc
  ];

  meta = {
    homepage = "https://github.com/signalapp/ringrtc";
    description = "RingRTC library used by Signal";
    license = lib.licenses.agpl3Only;
    platforms = lib.platforms.unix;
  };
})
+11 −4
Original line number Diff line number Diff line
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bash nix-update common-updater-scripts curl coreutils jq
#!nix-shell -i bash -p bash nix-update common-updater-scripts curl coreutils jq gclient2nix

set -ex

@@ -19,10 +19,12 @@ releaseEpoch=`date -d $releaseDate +%s`
packageJson="`curl_github "https://raw.githubusercontent.com/signalapp/Signal-Desktop/refs/tags/$releaseTag/package.json"`"

latestVersion="`jq -r '.version' <<< $packageJson`"
nodeVersion="`jq -r '.engines.node' <<< $packageJson | head -c2`"
electronVersion="`jq -r '.devDependencies.electron' <<< $packageJson | head -c2`"
nodeVersion="`jq -r '.engines.node' <<< $packageJson | cut -d. -f1`"
electronVersion="`jq -r '.devDependencies.electron' <<< $packageJson | cut -d. -f1`"
libsignalClientVersion=`jq -r '.dependencies."@signalapp/libsignal-client"' <<< $packageJson`
ringrtcVersion=`jq -r '.dependencies."@signalapp/ringrtc"' <<< $packageJson`
ringrtcVersionProperties="`curl_github "https://raw.githubusercontent.com/signalapp/ringrtc/refs/tags/v$ringrtcVersion/config/version.properties"`"
webrtcVersion="`grep --only-matching "^webrtc.version=.*$" <<< $ringrtcVersionProperties | sed "s/webrtc.version=//g"`"

sed -E -i "s/(nodejs_)../\1$nodeVersion/" $SCRIPT_DIR/package.nix
sed -E -i "s/(electron_)../\1$electronVersion/" $SCRIPT_DIR/package.nix
@@ -44,4 +46,9 @@ update-source-version signal-desktop-source.libsignal-node \
  --ignore-same-version \
  --source-key=npmDeps

update-source-version signal-desktop-source.ringrtc-bin "$ringrtcVersion"
update-source-version signal-desktop-source.ringrtc "$ringrtcVersion"
update-source-version signal-desktop-source.ringrtc \
  --ignore-same-version \
  --source-key=cargoDeps.vendorStaging

gclient2nix generate "https://github.com/signalapp/webrtc@$webrtcVersion" > $SCRIPT_DIR/webrtc-sources.json
Loading