aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Urankar <mikael@FreeBSD.org>2022-06-23 11:21:16 +0000
committerMikael Urankar <mikael@FreeBSD.org>2022-06-23 11:38:16 +0000
commit9aad8301d5f7aadc3240a2aa4905358b6a40eb82 (patch)
tree3ddd2c9b5c6d569a00836eec3cf44316e25fe4fe
parent3e8236085199a7aa24fe60fadf8a9777612b54d2 (diff)
-rw-r--r--multimedia/Makefile1
-rw-r--r--multimedia/ringrtc/Makefile296
-rw-r--r--multimedia/ringrtc/distinfo317
-rw-r--r--multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm11
-rw-r--r--multimedia/ringrtc/files/patch-boringssl35
-rw-r--r--multimedia/ringrtc/files/patch-cargo-crates_neon-0.9.1_src_lib.rs10
-rw-r--r--multimedia/ringrtc/files/patch-src_rust_build.rs13
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn23
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_base_third__party_libevent_BUILD.gn16
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn30
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn44
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn110
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni9
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py26
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni14
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map29
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn53
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn27
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py10
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni44
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py17
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn10
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_gn11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc10
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc12
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h13
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc15
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h13
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc47
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc39
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h19
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn15
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_testing_BUILD.gn27
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni11
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h28
-rw-r--r--multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn18
-rw-r--r--multimedia/ringrtc/pkg-descr4
-rw-r--r--multimedia/ringrtc/update.txt5
-rw-r--r--multimedia/ringrtc/webrtc_fetch.sh107
48 files changed, 1638 insertions, 0 deletions
diff --git a/multimedia/Makefile b/multimedia/Makefile
index 6d4b2ef5b41c..5bdea60b01a2 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -363,6 +363,7 @@
SUBDIR += recmpeg
SUBDIR += recordmydesktop
SUBDIR += replex
+ SUBDIR += ringrtc
SUBDIR += rtmpdump
SUBDIR += rubygem-av
SUBDIR += rubygem-clutter-gstreamer
diff --git a/multimedia/ringrtc/Makefile b/multimedia/ringrtc/Makefile
new file mode 100644
index 000000000000..d749103d0365
--- /dev/null
+++ b/multimedia/ringrtc/Makefile
@@ -0,0 +1,296 @@
+PORTNAME= ringrtc
+DISTVERSIONPREFIX= v
+DISTVERSION= 2.20.8
+CATEGORIES= multimedia
+MASTER_SITES= LOCAL/mikael/ringrtc/:base \
+ LOCAL/mikael/ringrtc/:boringssl \
+ LOCAL/mikael/ringrtc/:build \
+ LOCAL/mikael/ringrtc/:buildtools \
+ LOCAL/mikael/ringrtc/:catapult \
+ LOCAL/mikael/ringrtc/:icu \
+ LOCAL/mikael/ringrtc/:nasm \
+ LOCAL/mikael/ringrtc/:libjpeg_turbo \
+ LOCAL/mikael/ringrtc/:libsrtp \
+ LOCAL/mikael/ringrtc/:libvpx \
+ LOCAL/mikael/ringrtc/:libyuv \
+ LOCAL/mikael/ringrtc/:third_party \
+ LOCAL/mikael/ringrtc/:testing
+DISTFILES= base-${BASE_REV}.tar.gz:base \
+ boringssl-${BORINGSSL_REV}.tar.gz:boringssl \
+ build-${BUILD_REV}.tar.gz:build \
+ buildtools-${BUILDTOOLS_REV}.tar.gz:buildtools \
+ catapult-${CATAPULT_REV}.tar.gz:catapult \
+ icu-${ICU_REV}.tar.gz:icu \
+ nasm-${NASM_REV}.tar.gz:nasm \
+ libjpeg_turbo-${LIBJPEG_TURBO_REV}.tar.gz:libjpeg_turbo \
+ libsrtp-${LIBSRTP_REV}.tar.gz:libsrtp \
+ libvpx-${LIBVPX_REV}.tar.gz:libvpx \
+ libyuv-${LIBYUV_REV}.tar.gz:libyuv \
+ third_party-${THIRD_PARTY_REV}.tar.gz:third_party \
+ testing-${TESTING_REV}.tar.gz:testing
+
+MAINTAINER= mikael@FreeBSD.org
+COMMENT= Middleware library for Signal-Desktop
+
+LICENSE= AGPLv3
+LICENSE_FILE= ${WRKSRC}/../../LICENSE
+
+BUILD_DEPENDS= gn:devel/gn
+LIB_DEPENDS= libasound.so:audio/alsa-lib \
+ libfreetype.so:print/freetype2 \
+ libpulse.so:audio/pulseaudio
+
+USES= cargo gnome localbase:ldflags ninja pkgconfig python:3.7+,build \
+ tar:xz
+USE_GNOME= glib20
+USE_GITHUB= yes
+GH_ACCOUNT= signalapp
+GH_TUPLE= signalapp:ringrtc:${DISTVERSIONPREFIX}${DISTVERSION} \
+ signalapp:webrtc:${WEBRTC_REV}:webrtc
+
+# Add extra-patch-no-mempcpy-nasm only when there's no mempcpy() in base.
+# Nested variable expansion avoids executing the test when not needed for
+# expanding EXTRA_PATCHES.
+EXTRA_PATCHES+= ${"${:!${GREP} mempcpy ${CROSS_SYSROOT}/usr/include/string.h \
+ || ${TRUE}!}" == "":?${PATCHDIR}/extra-patch-no-mempcpy-nasm:}
+
+# sh net-im/signal-desktop/get_deps.sh
+WEBRTC_REV= 4896c
+
+# modify webrtc_fetch.sh, then sh webrtc_fetch.sh
+BASE_REV= bee216d6736d6a471879c5fcd32c8aba863d4755
+BORINGSSL_REV= 4d955d20d27bcf3ae71df091ad17d95229a7eb56
+BUILD_REV= b42b2033819f95b3e43f24e541938c671110966d
+BUILDTOOLS_REV= d8c375426d8f7f4147f7d4109bb63c12655fb8d6
+CATAPULT_REV= 389f33bb40a3345b73a68613178c789476ceaecf
+ICU_REV= a9359a84a3969b3019db7d62899afb19642eefcd
+LIBJPEG_TURBO_REV= 22f1a22c99e9dde8cd3c72ead333f425c5a7aa77
+LIBSRTP_REV= 5b7c744eb8310250ccc534f3f86a2015b3887a0a
+LIBVPX_REV= df0d06de6d3b64e35b9e75ad72c571af061bc7b3
+LIBYUV_REV= 3aebf69d668177e7ee6dbbe0025e5c3dbb525ff2
+NASM_REV= 9215e8e1d0fe474ffd3e16c1a07a0f97089e6224
+TESTING_REV= c4769e51cb122096ea4cdc5ed6f7e57aa2315447
+THIRD_PARTY_REV= 7835795588c74a353beb1e03b74d45fabfdf295f
+
+BINARY_ALIAS= python3=${PYTHON_CMD}
+
+# Keep in sync with https://github.com/signalapp/ringrtc/blob/${DISTVERSION}/bin/build-electron#L96
+# Run "gn args out/Release --list" for all variables.
+# Some parts don't have use_system_* flag, and can be turned on/off by using
+# replace_gn_files.py script, some parts just turned on/off for target host
+# OS "target_os == is_bsd", like libusb, libpci.
+GN_ARGS+= rtc_build_examples=false \
+ rtc_build_tools=false \
+ rtc_include_tests=false \
+ rtc_enable_protobuf=false \
+ rtc_use_x11=false \
+ rtc_enable_sctp=false \
+ rtc_libvpx_build_vp9=false \
+ rtc_include_ilbc=false \
+ use_custom_libcxx=false \
+ is_debug=false \
+ is_clang=true \
+ clang_use_chrome_plugins=false \
+ extra_cxxflags="${CXXFLAGS}" \
+ extra_ldflags="${LDFLAGS}"
+
+MAKE_ARGS= -C out/${BUILDTYPE}
+
+WRKSRC= ${WRKDIR}/${PORTNAME}-${DISTVERSION}/src/rust
+WEBRTCDIR= ${WRKDIR}/${PORTNAME}-${DISTVERSION}/src/webrtc/src
+
+# fetch -qo - https://raw.githubusercontent.com/signalapp/ringrtc/v2.20.8/src/rust/Cargo.lock | awk -f /usr/ports/Mk/Scripts/cargo-crates.awk
+CARGO_CRATES= aes-0.7.5 \
+ aho-corasick-0.7.18 \
+ anyhow-1.0.53 \
+ atty-0.2.14 \
+ autocfg-1.1.0 \
+ base64-0.13.0 \
+ bitflags-1.3.2 \
+ block-buffer-0.9.0 \
+ bumpalo-3.9.1 \
+ byteorder-1.4.3 \
+ bytes-1.1.0 \
+ cc-1.0.72 \
+ cesu8-1.1.0 \
+ cfg-if-1.0.0 \
+ chunked_transfer-1.4.0 \
+ cipher-0.3.0 \
+ combine-4.6.3 \
+ cpufeatures-0.2.1 \
+ crypto-mac-0.11.1 \
+ cslice-0.2.0 \
+ ctr-0.8.0 \
+ curve25519-dalek-3.2.0 \
+ digest-0.9.0 \
+ either-1.6.1 \
+ env_logger-0.8.4 \
+ fastrand-1.7.0 \
+ fixedbitset-0.2.0 \
+ form_urlencoded-1.0.1 \
+ futures-0.3.21 \
+ futures-channel-0.3.21 \
+ futures-core-0.3.21 \
+ futures-executor-0.3.21 \
+ futures-io-0.3.21 \
+ futures-macro-0.3.21 \
+ futures-sink-0.3.21 \
+ futures-task-0.3.21 \
+ futures-util-0.3.21 \
+ generic-array-0.14.5 \
+ getrandom-0.1.16 \
+ hashbrown-0.11.2 \
+ heck-0.3.3 \
+ hermit-abi-0.1.19 \
+ hex-0.4.3 \
+ hkdf-0.11.0 \
+ hmac-0.11.0 \
+ humantime-2.1.0 \
+ idna-0.2.3 \
+ indexmap-1.8.0 \
+ instant-0.1.12 \
+ itertools-0.10.3 \
+ itoa-1.0.1 \
+ jni-0.19.0 \
+ jni-sys-0.3.0 \
+ js-sys-0.3.56 \
+ lazy_static-1.4.0 \
+ libc-0.2.117 \
+ libloading-0.6.7 \
+ log-0.4.14 \
+ matches-0.1.9 \
+ memchr-2.4.1 \
+ multimap-0.8.3 \
+ neon-0.9.1 \
+ neon-build-0.9.1 \
+ neon-macros-0.9.1 \
+ neon-runtime-0.9.1 \
+ num_cpus-1.13.1 \
+ num_enum-0.5.6 \
+ num_enum_derive-0.5.6 \
+ once_cell-1.9.0 \
+ opaque-debug-0.3.0 \
+ percent-encoding-2.1.0 \
+ petgraph-0.5.1 \
+ pin-project-lite-0.2.8 \
+ pin-utils-0.1.0 \
+ ppv-lite86-0.2.16 \
+ proc-macro-crate-1.1.0 \
+ proc-macro2-1.0.36 \
+ prost-0.8.0 \
+ prost-build-0.8.0 \
+ prost-derive-0.8.0 \
+ prost-types-0.8.0 \
+ quote-1.0.15 \
+ rand-0.7.3 \
+ rand_chacha-0.2.2 \
+ rand_core-0.5.1 \
+ rand_hc-0.2.0 \
+ redox_syscall-0.2.10 \
+ regex-1.5.5 \
+ regex-syntax-0.6.25 \
+ remove_dir_all-0.5.3 \
+ ring-0.16.20 \
+ rustls-0.19.1 \
+ ryu-1.0.9 \
+ same-file-1.0.6 \
+ sct-0.6.1 \
+ semver-0.9.0 \
+ semver-parser-0.7.0 \
+ serde-1.0.136 \
+ serde_derive-1.0.136 \
+ serde_json-1.0.78 \
+ sha2-0.9.9 \
+ slab-0.4.5 \
+ smallvec-1.8.0 \
+ spin-0.5.2 \
+ static_assertions-1.1.0 \
+ subtle-2.4.1 \
+ syn-1.0.86 \
+ synstructure-0.12.6 \
+ tempfile-3.3.0 \
+ termcolor-1.1.2 \
+ thiserror-1.0.30 \
+ thiserror-impl-1.0.30 \
+ tinyvec-1.5.1 \
+ tinyvec_macros-0.1.0 \
+ tokio-1.16.1 \
+ toml-0.5.8 \
+ typenum-1.15.0 \
+ unicode-bidi-0.3.7 \
+ unicode-normalization-0.1.19 \
+ unicode-segmentation-1.9.0 \
+ unicode-xid-0.2.2 \
+ untrusted-0.7.1 \
+ ureq-2.2.0 \
+ url-2.2.2 \
+ version_check-0.9.4 \
+ walkdir-2.3.2 \
+ wasi-0.9.0+wasi-snapshot-preview1 \
+ wasm-bindgen-0.2.79 \
+ wasm-bindgen-backend-0.2.79 \
+ wasm-bindgen-macro-0.2.79 \
+ wasm-bindgen-macro-support-0.2.79 \
+ wasm-bindgen-shared-0.2.79 \
+ web-sys-0.3.56 \
+ webpki-0.21.4 \
+ webpki-roots-0.21.1 \
+ which-4.2.4 \
+ winapi-0.3.9 \
+ winapi-i686-pc-windows-gnu-0.4.0 \
+ winapi-util-0.1.5 \
+ winapi-x86_64-pc-windows-gnu-0.4.0 \
+ x25519-dalek-1.2.0 \
+ zeroize-1.3.0 \
+ zeroize_derive-1.3.2
+
+CARGO_BUILD_ARGS= --features electron
+CARGO_INSTALL= no
+
+USE_LDCONFIG= yes
+
+MAKE_ENV= OUTPUT_DIR=${WEBRTCDIR}/out
+
+PLIST_FILES= lib/libringrtc.so
+
+post-extract:
+ ${MKDIR} ${WRKDIR}/${PORTNAME}-${DISTVERSION}/src/webrtc
+ ${MV} ${WRKDIR}/webrtc-${WEBRTC_REV} ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/base ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/build ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/buildtools ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/testing ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/third_party ${WEBRTCDIR}
+ ${MV} ${WRKDIR}/catapult ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/boringssl ${WEBRTCDIR}/third_party/boringssl/src
+ ${MV} ${WRKDIR}/icu ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/libjpeg_turbo ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/libsrtp ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/libvpx ${WEBRTCDIR}/third_party/libvpx/source
+ ${MV} ${WRKDIR}/libyuv ${WEBRTCDIR}/third_party
+ ${MV} ${WRKDIR}/nasm ${WEBRTCDIR}/third_party
+
+post-patch:
+ ${REINPLACE_CMD} "s|LOCALBASE|${LOCALBASE}|" \
+ ${WEBRTCDIR}/build/toolchain/gcc_toolchain.gni \
+ ${WEBRTCDIR}/buildtools/third_party/libc++/BUILD.gn
+
+ ${ECHO} "# Generated from 'DEPS'" > ${WEBRTCDIR}/build/config/gclient_args.gni
+ ${ECHO} 1591703586 > ${WEBRTCDIR}/build/util/LASTCHANGE.committime
+ ${ECHO} "qqchose " > ${WEBRTCDIR}/build/util/LASTCHANGE
+
+pre-build:
+ cd ${WEBRTCDIR} && \
+ ${SETENV} ${CONFIGURE_ENV} gn gen out/release --args='${GN_ARGS}'
+
+# build webrtc first, ringrtc needs libwebrtc.a
+ cd ${WEBRTCDIR} \
+ && ${MAKE_ENV} CC=ccache CXX=ccache ninja -C out/release
+
+# it's not intended to be used outside of signal-desktop, put that in
+# /usr/local/share/ringrtc instead?
+do-install:
+ ${INSTALL_LIB} ${CARGO_TARGET_DIR}/${CARGO_BUILD_TARGET}/release/libringrtc.so \
+ ${STAGEDIR}${PREFIX}/lib/
+
+.include <bsd.port.mk>
diff --git a/multimedia/ringrtc/distinfo b/multimedia/ringrtc/distinfo
new file mode 100644
index 000000000000..f37e66ca123a
--- /dev/null
+++ b/multimedia/ringrtc/distinfo
@@ -0,0 +1,317 @@
+TIMESTAMP = 1655470080
+SHA256 (base-bee216d6736d6a471879c5fcd32c8aba863d4755.tar.gz) = 08778dd5f85b82d9f4df68756212e1425c56fe9ea366096249fe3fde0a0c9fc7
+SIZE (base-bee216d6736d6a471879c5fcd32c8aba863d4755.tar.gz) = 5198015
+SHA256 (boringssl-4d955d20d27bcf3ae71df091ad17d95229a7eb56.tar.gz) = 4bb8e1a9aae299ad36b4296e72e282756792f3aff04aba2147d040c510f0eac8
+SIZE (boringssl-4d955d20d27bcf3ae71df091ad17d95229a7eb56.tar.gz) = 30883579
+SHA256 (build-b42b2033819f95b3e43f24e541938c671110966d.tar.gz) = a5647852fab800e5a3d0dd9ac4bd28bc027449d86d254df780544630206c78bc
+SIZE (build-b42b2033819f95b3e43f24e541938c671110966d.tar.gz) = 1417417
+SHA256 (buildtools-d8c375426d8f7f4147f7d4109bb63c12655fb8d6.tar.gz) = 62a9e1f5e65ae792a4ae92fa61c7e834f267602287f77d8b2768049c1224aab3
+SIZE (buildtools-d8c375426d8f7f4147f7d4109bb63c12655fb8d6.tar.gz) = 88366
+SHA256 (catapult-389f33bb40a3345b73a68613178c789476ceaecf.tar.gz) = fcd58798d90bcac1e26fc0c86de710632d9fc25076a0ba6af51e9fbc906a1e00
+SIZE (catapult-389f33bb40a3345b73a68613178c789476ceaecf.tar.gz) = 157554598
+SHA256 (icu-a9359a84a3969b3019db7d62899afb19642eefcd.tar.gz) = 589cad17812e1278d1c48656d16f0c3d6b4874d5531060b6e343c32e000864f4
+SIZE (icu-a9359a84a3969b3019db7d62899afb19642eefcd.tar.gz) = 52877531
+SHA256 (nasm-9215e8e1d0fe474ffd3e16c1a07a0f97089e6224.tar.gz) = d4f382150be6408efecf44e7158e909eb8c1a58bcd16c39a434e6b3b31bf5cf7
+SIZE (nasm-9215e8e1d0fe474ffd3e16c1a07a0f97089e6224.tar.gz) = 1550652
+SHA256 (libjpeg_turbo-22f1a22c99e9dde8cd3c72ead333f425c5a7aa77.tar.gz) = 774aadf0ae4827ce77645442f8fba552c0be068c0bec7933fa99f4a490931433
+SIZE (libjpeg_turbo-22f1a22c99e9dde8cd3c72ead333f425c5a7aa77.tar.gz) = 2382951
+SHA256 (libsrtp-5b7c744eb8310250ccc534f3f86a2015b3887a0a.tar.gz) = 727d9475ada02cf1adc336ab22beed08cc3644bf141d97ed8ab3873a1dbac32c
+SIZE (libsrtp-5b7c744eb8310250ccc534f3f86a2015b3887a0a.tar.gz) = 139073
+SHA256 (libvpx-df0d06de6d3b64e35b9e75ad72c571af061bc7b3.tar.gz) = 35aee76014e959078d7429ab6ba80fba98d4b07736755d2046d411c9fda6bf56
+SIZE (libvpx-df0d06de6d3b64e35b9e75ad72c571af061bc7b3.tar.gz) = 5460415
+SHA256 (libyuv-3aebf69d668177e7ee6dbbe0025e5c3dbb525ff2.tar.gz) = 1be57594ecc01e7471dd399d4f9c7a96147cc4e55d0a6b80649c7a37372309a2
+SIZE (libyuv-3aebf69d668177e7ee6dbbe0025e5c3dbb525ff2.tar.gz) = 537974
+SHA256 (third_party-7835795588c74a353beb1e03b74d45fabfdf295f.tar.gz) = 8de79046947dee5981ff003ba10e0f1fd2c66d049c589ac53e7deb1fbaaf0049
+SIZE (third_party-7835795588c74a353beb1e03b74d45fabfdf295f.tar.gz) = 1072053748
+SHA256 (testing-c4769e51cb122096ea4cdc5ed6f7e57aa2315447.tar.gz) = 45ec526935cb4e3d9efe16140b231815e397f5c33c4c634d5c100ec6fc850a06
+SIZE (testing-c4769e51cb122096ea4cdc5ed6f7e57aa2315447.tar.gz) = 4709882
+SHA256 (rust/crates/aes-0.7.5.crate) = 9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8
+SIZE (rust/crates/aes-0.7.5.crate) = 128544
+SHA256 (rust/crates/aho-corasick-0.7.18.crate) = 1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f
+SIZE (rust/crates/aho-corasick-0.7.18.crate) = 112923
+SHA256 (rust/crates/anyhow-1.0.53.crate) = 94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0
+SIZE (rust/crates/anyhow-1.0.53.crate) = 44233
+SHA256 (rust/crates/atty-0.2.14.crate) = d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8
+SIZE (rust/crates/atty-0.2.14.crate) = 5470
+SHA256 (rust/crates/autocfg-1.1.0.crate) = d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa
+SIZE (rust/crates/autocfg-1.1.0.crate) = 13272
+SHA256 (rust/crates/base64-0.13.0.crate) = 904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd
+SIZE (rust/crates/base64-0.13.0.crate) = 62070
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/block-buffer-0.9.0.crate) = 4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4
+SIZE (rust/crates/block-buffer-0.9.0.crate) = 7108
+SHA256 (rust/crates/bumpalo-3.9.1.crate) = a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899
+SIZE (rust/crates/bumpalo-3.9.1.crate) = 77507
+SHA256 (rust/crates/byteorder-1.4.3.crate) = 14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610
+SIZE (rust/crates/byteorder-1.4.3.crate) = 22512
+SHA256 (rust/crates/bytes-1.1.0.crate) = c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8
+SIZE (rust/crates/bytes-1.1.0.crate) = 49640
+SHA256 (rust/crates/cc-1.0.72.crate) = 22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee
+SIZE (rust/crates/cc-1.0.72.crate) = 57495
+SHA256 (rust/crates/cesu8-1.1.0.crate) = 6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c
+SIZE (rust/crates/cesu8-1.1.0.crate) = 10555
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/chunked_transfer-1.4.0.crate) = fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e
+SIZE (rust/crates/chunked_transfer-1.4.0.crate) = 9238
+SHA256 (rust/crates/cipher-0.3.0.crate) = 7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7
+SIZE (rust/crates/cipher-0.3.0.crate) = 12756
+SHA256 (rust/crates/combine-4.6.3.crate) = 50b727aacc797f9fc28e355d21f34709ac4fc9adecfe470ad07b8f4464f53062
+SIZE (rust/crates/combine-4.6.3.crate) = 132015
+SHA256 (rust/crates/cpufeatures-0.2.1.crate) = 95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469
+SIZE (rust/crates/cpufeatures-0.2.1.crate) = 10500
+SHA256 (rust/crates/crypto-mac-0.11.1.crate) = b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714
+SIZE (rust/crates/crypto-mac-0.11.1.crate) = 9551
+SHA256 (rust/crates/cslice-0.2.0.crate) = 697c714f50560202b1f4e2e09cd50a421881c83e9025db75d15f276616f04f40
+SIZE (rust/crates/cslice-0.2.0.crate) = 6114
+SHA256 (rust/crates/ctr-0.8.0.crate) = 049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea
+SIZE (rust/crates/ctr-0.8.0.crate) = 17740
+SHA256 (rust/crates/curve25519-dalek-3.2.0.crate) = 0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61
+SIZE (rust/crates/curve25519-dalek-3.2.0.crate) = 517530
+SHA256 (rust/crates/digest-0.9.0.crate) = d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066
+SIZE (rust/crates/digest-0.9.0.crate) = 13247
+SHA256 (rust/crates/either-1.6.1.crate) = e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457
+SIZE (rust/crates/either-1.6.1.crate) = 13641
+SHA256 (rust/crates/env_logger-0.8.4.crate) = a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3
+SIZE (rust/crates/env_logger-0.8.4.crate) = 33342
+SHA256 (rust/crates/fastrand-1.7.0.crate) = c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf
+SIZE (rust/crates/fastrand-1.7.0.crate) = 11265
+SHA256 (rust/crates/fixedbitset-0.2.0.crate) = 37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d
+SIZE (rust/crates/fixedbitset-0.2.0.crate) = 13597
+SHA256 (rust/crates/form_urlencoded-1.0.1.crate) = 5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191
+SIZE (rust/crates/form_urlencoded-1.0.1.crate) = 8773
+SHA256 (rust/crates/futures-0.3.21.crate) = f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e
+SIZE (rust/crates/futures-0.3.21.crate) = 49935
+SHA256 (rust/crates/futures-channel-0.3.21.crate) = c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010
+SIZE (rust/crates/futures-channel-0.3.21.crate) = 31961
+SHA256 (rust/crates/futures-core-0.3.21.crate) = 0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3
+SIZE (rust/crates/futures-core-0.3.21.crate) = 14601
+SHA256 (rust/crates/futures-executor-0.3.21.crate) = 9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6
+SIZE (rust/crates/futures-executor-0.3.21.crate) = 17306
+SHA256 (rust/crates/futures-io-0.3.21.crate) = fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b
+SIZE (rust/crates/futures-io-0.3.21.crate) = 8902
+SHA256 (rust/crates/futures-macro-0.3.21.crate) = 33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512
+SIZE (rust/crates/futures-macro-0.3.21.crate) = 11250
+SHA256 (rust/crates/futures-sink-0.3.21.crate) = 21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868
+SIZE (rust/crates/futures-sink-0.3.21.crate) = 7843
+SHA256 (rust/crates/futures-task-0.3.21.crate) = 57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a
+SIZE (rust/crates/futures-task-0.3.21.crate) = 11815
+SHA256 (rust/crates/futures-util-0.3.21.crate) = d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a
+SIZE (rust/crates/futures-util-0.3.21.crate) = 153768
+SHA256 (rust/crates/generic-array-0.14.5.crate) = fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803
+SIZE (rust/crates/generic-array-0.14.5.crate) = 28915
+SHA256 (rust/crates/getrandom-0.1.16.crate) = 8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce
+SIZE (rust/crates/getrandom-0.1.16.crate) = 25077
+SHA256 (rust/crates/hashbrown-0.11.2.crate) = ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e
+SIZE (rust/crates/hashbrown-0.11.2.crate) = 85713
+SHA256 (rust/crates/heck-0.3.3.crate) = 6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c
+SIZE (rust/crates/heck-0.3.3.crate) = 10260
+SHA256 (rust/crates/hermit-abi-0.1.19.crate) = 62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33
+SIZE (rust/crates/hermit-abi-0.1.19.crate) = 9979
+SHA256 (rust/crates/hex-0.4.3.crate) = 7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70
+SIZE (rust/crates/hex-0.4.3.crate) = 13299
+SHA256 (rust/crates/hkdf-0.11.0.crate) = 01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b
+SIZE (rust/crates/hkdf-0.11.0.crate) = 171707
+SHA256 (rust/crates/hmac-0.11.0.crate) = 2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b
+SIZE (rust/crates/hmac-0.11.0.crate) = 11385
+SHA256 (rust/crates/humantime-2.1.0.crate) = 9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4
+SIZE (rust/crates/humantime-2.1.0.crate) = 16749
+SHA256 (rust/crates/idna-0.2.3.crate) = 418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8
+SIZE (rust/crates/idna-0.2.3.crate) = 271023
+SHA256 (rust/crates/indexmap-1.8.0.crate) = 282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223
+SIZE (rust/crates/indexmap-1.8.0.crate) = 52583
+SHA256 (rust/crates/instant-0.1.12.crate) = 7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c
+SIZE (rust/crates/instant-0.1.12.crate) = 6128
+SHA256 (rust/crates/itertools-0.10.3.crate) = a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3
+SIZE (rust/crates/itertools-0.10.3.crate) = 118661
+SHA256 (rust/crates/itoa-1.0.1.crate) = 1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35
+SIZE (rust/crates/itoa-1.0.1.crate) = 11059
+SHA256 (rust/crates/jni-0.19.0.crate) = c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec
+SIZE (rust/crates/jni-0.19.0.crate) = 65890
+SHA256 (rust/crates/jni-sys-0.3.0.crate) = 8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130
+SIZE (rust/crates/jni-sys-0.3.0.crate) = 10232
+SHA256 (rust/crates/js-sys-0.3.56.crate) = a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04
+SIZE (rust/crates/js-sys-0.3.56.crate) = 70520
+SHA256 (rust/crates/lazy_static-1.4.0.crate) = e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646
+SIZE (rust/crates/lazy_static-1.4.0.crate) = 10443
+SHA256 (rust/crates/libc-0.2.117.crate) = e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c
+SIZE (rust/crates/libc-0.2.117.crate) = 566541
+SHA256 (rust/crates/libloading-0.6.7.crate) = 351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883
+SIZE (rust/crates/libloading-0.6.7.crate) = 25037
+SHA256 (rust/crates/log-0.4.14.crate) = 51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710
+SIZE (rust/crates/log-0.4.14.crate) = 34582
+SHA256 (rust/crates/matches-0.1.9.crate) = a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f
+SIZE (rust/crates/matches-0.1.9.crate) = 2246
+SHA256 (rust/crates/memchr-2.4.1.crate) = 308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a
+SIZE (rust/crates/memchr-2.4.1.crate) = 64977
+SHA256 (rust/crates/multimap-0.8.3.crate) = e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a
+SIZE (rust/crates/multimap-0.8.3.crate) = 13518
+SHA256 (rust/crates/neon-0.9.1.crate) = 5e85820b585bf3360bf158ac87a75764c48e361c91bbeb69873e6613cc78c023
+SIZE (rust/crates/neon-0.9.1.crate) = 211905
+SHA256 (rust/crates/neon-build-0.9.1.crate) = ad9febc63f515156d4311a0c43899d3ace46352ecdd591c21b98ca3974f2a0d0
+SIZE (rust/crates/neon-build-0.9.1.crate) = 7812
+SHA256 (rust/crates/neon-macros-0.9.1.crate) = 987f12c91eb6ce0b67819f7c5fb4d391de64cf411c605ed027f03507a33943b2
+SIZE (rust/crates/neon-macros-0.9.1.crate) = 6821
+SHA256 (rust/crates/neon-runtime-0.9.1.crate) = 02662cd2e62b131937bdef85d0918b05bc3c204daf4c64af62845403eccb60f3
+SIZE (rust/crates/neon-runtime-0.9.1.crate) = 20937
+SHA256 (rust/crates/num_cpus-1.13.1.crate) = 19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1
+SIZE (rust/crates/num_cpus-1.13.1.crate) = 14752
+SHA256 (rust/crates/num_enum-0.5.6.crate) = 720d3ea1055e4e4574c0c0b0f8c3fd4f24c4cdaf465948206dea090b57b526ad
+SIZE (rust/crates/num_enum-0.5.6.crate) = 13721
+SHA256 (rust/crates/num_enum_derive-0.5.6.crate) = 0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21
+SIZE (rust/crates/num_enum_derive-0.5.6.crate) = 11672
+SHA256 (rust/crates/once_cell-1.9.0.crate) = da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5
+SIZE (rust/crates/once_cell-1.9.0.crate) = 30702
+SHA256 (rust/crates/opaque-debug-0.3.0.crate) = 624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5
+SIZE (rust/crates/opaque-debug-0.3.0.crate) = 5767
+SHA256 (rust/crates/percent-encoding-2.1.0.crate) = d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e
+SIZE (rust/crates/percent-encoding-2.1.0.crate) = 9748
+SHA256 (rust/crates/petgraph-0.5.1.crate) = 467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7
+SIZE (rust/crates/petgraph-0.5.1.crate) = 147173
+SHA256 (rust/crates/pin-project-lite-0.2.8.crate) = e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c
+SIZE (rust/crates/pin-project-lite-0.2.8.crate) = 27847
+SHA256 (rust/crates/pin-utils-0.1.0.crate) = 8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184
+SIZE (rust/crates/pin-utils-0.1.0.crate) = 7580
+SHA256 (rust/crates/ppv-lite86-0.2.16.crate) = eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872
+SIZE (rust/crates/ppv-lite86-0.2.16.crate) = 22245
+SHA256 (rust/crates/proc-macro-crate-1.1.0.crate) = 1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83
+SIZE (rust/crates/proc-macro-crate-1.1.0.crate) = 8535
+SHA256 (rust/crates/proc-macro2-1.0.36.crate) = c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029
+SIZE (rust/crates/proc-macro2-1.0.36.crate) = 41411
+SHA256 (rust/crates/prost-0.8.0.crate) = de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020
+SIZE (rust/crates/prost-0.8.0.crate) = 25532
+SHA256 (rust/crates/prost-build-0.8.0.crate) = 355f634b43cdd80724ee7848f95770e7e70eefa6dcf14fea676216573b8fd603
+SIZE (rust/crates/prost-build-0.8.0.crate) = 8407464
+SHA256 (rust/crates/prost-derive-0.8.0.crate) = 600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba
+SIZE (rust/crates/prost-derive-0.8.0.crate) = 15203
+SHA256 (rust/crates/prost-types-0.8.0.crate) = 603bbd6394701d13f3f25aada59c7de9d35a6a5887cfc156181234a44002771b
+SIZE (rust/crates/prost-types-0.8.0.crate) = 27271
+SHA256 (rust/crates/quote-1.0.15.crate) = 864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145
+SIZE (rust/crates/quote-1.0.15.crate) = 27281
+SHA256 (rust/crates/rand-0.7.3.crate) = 6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03
+SIZE (rust/crates/rand-0.7.3.crate) = 112246
+SHA256 (rust/crates/rand_chacha-0.2.2.crate) = f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402
+SIZE (rust/crates/rand_chacha-0.2.2.crate) = 13267
+SHA256 (rust/crates/rand_core-0.5.1.crate) = 90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19
+SIZE (rust/crates/rand_core-0.5.1.crate) = 21116
+SHA256 (rust/crates/rand_hc-0.2.0.crate) = ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c
+SIZE (rust/crates/rand_hc-0.2.0.crate) = 11670
+SHA256 (rust/crates/redox_syscall-0.2.10.crate) = 8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff
+SIZE (rust/crates/redox_syscall-0.2.10.crate) = 23582
+SHA256 (rust/crates/regex-1.5.5.crate) = 1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286
+SIZE (rust/crates/regex-1.5.5.crate) = 238119
+SHA256 (rust/crates/regex-syntax-0.6.25.crate) = f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b
+SIZE (rust/crates/regex-syntax-0.6.25.crate) = 293293
+SHA256 (rust/crates/remove_dir_all-0.5.3.crate) = 3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7
+SIZE (rust/crates/remove_dir_all-0.5.3.crate) = 9184
+SHA256 (rust/crates/ring-0.16.20.crate) = 3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc
+SIZE (rust/crates/ring-0.16.20.crate) = 5082615
+SHA256 (rust/crates/rustls-0.19.1.crate) = 35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7
+SIZE (rust/crates/rustls-0.19.1.crate) = 208143
+SHA256 (rust/crates/ryu-1.0.9.crate) = 73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f
+SIZE (rust/crates/ryu-1.0.9.crate) = 48391
+SHA256 (rust/crates/same-file-1.0.6.crate) = 93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502
+SIZE (rust/crates/same-file-1.0.6.crate) = 10183
+SHA256 (rust/crates/sct-0.6.1.crate) = b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce
+SIZE (rust/crates/sct-0.6.1.crate) = 26825
+SHA256 (rust/crates/semver-0.9.0.crate) = 1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403
+SIZE (rust/crates/semver-0.9.0.crate) = 17344
+SHA256 (rust/crates/semver-parser-0.7.0.crate) = 388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3
+SIZE (rust/crates/semver-parser-0.7.0.crate) = 10268
+SHA256 (rust/crates/serde-1.0.136.crate) = ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789
+SIZE (rust/crates/serde-1.0.136.crate) = 76158
+SHA256 (rust/crates/serde_derive-1.0.136.crate) = 08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9
+SIZE (rust/crates/serde_derive-1.0.136.crate) = 54776
+SHA256 (rust/crates/serde_json-1.0.78.crate) = d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085
+SIZE (rust/crates/serde_json-1.0.78.crate) = 144364
+SHA256 (rust/crates/sha2-0.9.9.crate) = 4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800
+SIZE (rust/crates/sha2-0.9.9.crate) = 22247
+SHA256 (rust/crates/slab-0.4.5.crate) = 9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5
+SIZE (rust/crates/slab-0.4.5.crate) = 15888
+SHA256 (rust/crates/smallvec-1.8.0.crate) = f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83
+SIZE (rust/crates/smallvec-1.8.0.crate) = 27992
+SHA256 (rust/crates/spin-0.5.2.crate) = 6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d
+SIZE (rust/crates/spin-0.5.2.crate) = 12004
+SHA256 (rust/crates/static_assertions-1.1.0.crate) = a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f
+SIZE (rust/crates/static_assertions-1.1.0.crate) = 18480
+SHA256 (rust/crates/subtle-2.4.1.crate) = 6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601
+SIZE (rust/crates/subtle-2.4.1.crate) = 12630
+SHA256 (rust/crates/syn-1.0.86.crate) = 8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b
+SIZE (rust/crates/syn-1.0.86.crate) = 235126
+SHA256 (rust/crates/synstructure-0.12.6.crate) = f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f
+SIZE (rust/crates/synstructure-0.12.6.crate) = 18429
+SHA256 (rust/crates/tempfile-3.3.0.crate) = 5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4
+SIZE (rust/crates/tempfile-3.3.0.crate) = 27578
+SHA256 (rust/crates/termcolor-1.1.2.crate) = 2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4
+SIZE (rust/crates/termcolor-1.1.2.crate) = 17287
+SHA256 (rust/crates/thiserror-1.0.30.crate) = 854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417
+SIZE (rust/crates/thiserror-1.0.30.crate) = 17748
+SHA256 (rust/crates/thiserror-impl-1.0.30.crate) = aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b
+SIZE (rust/crates/thiserror-impl-1.0.30.crate) = 15230
+SHA256 (rust/crates/tinyvec-1.5.1.crate) = 2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2
+SIZE (rust/crates/tinyvec-1.5.1.crate) = 44942
+SHA256 (rust/crates/tinyvec_macros-0.1.0.crate) = cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c
+SIZE (rust/crates/tinyvec_macros-0.1.0.crate) = 1817
+SHA256 (rust/crates/tokio-1.16.1.crate) = 0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a
+SIZE (rust/crates/tokio-1.16.1.crate) = 552194
+SHA256 (rust/crates/toml-0.5.8.crate) = a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa
+SIZE (rust/crates/toml-0.5.8.crate) = 54219
+SHA256 (rust/crates/typenum-1.15.0.crate) = dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987
+SIZE (rust/crates/typenum-1.15.0.crate) = 40741
+SHA256 (rust/crates/unicode-bidi-0.3.7.crate) = 1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f
+SIZE (rust/crates/unicode-bidi-0.3.7.crate) = 33759
+SHA256 (rust/crates/unicode-normalization-0.1.19.crate) = d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9
+SIZE (rust/crates/unicode-normalization-0.1.19.crate) = 107353
+SHA256 (rust/crates/unicode-segmentation-1.9.0.crate) = 7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99
+SIZE (rust/crates/unicode-segmentation-1.9.0.crate) = 93241
+SHA256 (rust/crates/unicode-xid-0.2.2.crate) = 8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3
+SIZE (rust/crates/unicode-xid-0.2.2.crate) = 14955
+SHA256 (rust/crates/untrusted-0.7.1.crate) = a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a
+SIZE (rust/crates/untrusted-0.7.1.crate) = 7924
+SHA256 (rust/crates/ureq-2.2.0.crate) = 3131cd6cb18488da91da1d10ed31e966f453c06b65bf010d35638456976a3fd7
+SIZE (rust/crates/ureq-2.2.0.crate) = 80014
+SHA256 (rust/crates/url-2.2.2.crate) = a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c
+SIZE (rust/crates/url-2.2.2.crate) = 68555
+SHA256 (rust/crates/version_check-0.9.4.crate) = 49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f
+SIZE (rust/crates/version_check-0.9.4.crate) = 14895
+SHA256 (rust/crates/walkdir-2.3.2.crate) = 808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56
+SIZE (rust/crates/walkdir-2.3.2.crate) = 23516
+SHA256 (rust/crates/wasi-0.9.0+wasi-snapshot-preview1.crate) = cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519
+SIZE (rust/crates/wasi-0.9.0+wasi-snapshot-preview1.crate) = 31521
+SHA256 (rust/crates/wasm-bindgen-0.2.79.crate) = 25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06
+SIZE (rust/crates/wasm-bindgen-0.2.79.crate) = 164276
+SHA256 (rust/crates/wasm-bindgen-backend-0.2.79.crate) = 8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca
+SIZE (rust/crates/wasm-bindgen-backend-0.2.79.crate) = 25776
+SHA256 (rust/crates/wasm-bindgen-macro-0.2.79.crate) = 2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01
+SIZE (rust/crates/wasm-bindgen-macro-0.2.79.crate) = 11806
+SHA256 (rust/crates/wasm-bindgen-macro-support-0.2.79.crate) = bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc
+SIZE (rust/crates/wasm-bindgen-macro-support-0.2.79.crate) = 17861
+SHA256 (rust/crates/wasm-bindgen-shared-0.2.79.crate) = 3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2
+SIZE (rust/crates/wasm-bindgen-shared-0.2.79.crate) = 7204
+SHA256 (rust/crates/web-sys-0.3.56.crate) = c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb
+SIZE (rust/crates/web-sys-0.3.56.crate) = 666465
+SHA256 (rust/crates/webpki-0.21.4.crate) = b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea
+SIZE (rust/crates/webpki-0.21.4.crate) = 58505
+SHA256 (rust/crates/webpki-roots-0.21.1.crate) = aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940
+SIZE (rust/crates/webpki-roots-0.21.1.crate) = 223591
+SHA256 (rust/crates/which-4.2.4.crate) = 2a5a7e487e921cf220206864a94a89b6c6905bfc19f1057fa26a4cb360e5c1d2
+SIZE (rust/crates/which-4.2.4.crate) = 9259
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-util-0.1.5.crate) = 70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178
+SIZE (rust/crates/winapi-util-0.1.5.crate) = 10164
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/x25519-dalek-1.2.0.crate) = 2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077
+SIZE (rust/crates/x25519-dalek-1.2.0.crate) = 88676
+SHA256 (rust/crates/zeroize-1.3.0.crate) = 4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd
+SIZE (rust/crates/zeroize-1.3.0.crate) = 15913
+SHA256 (rust/crates/zeroize_derive-1.3.2.crate) = 3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17
+SIZE (rust/crates/zeroize_derive-1.3.2.crate) = 10299
+SHA256 (signalapp-ringrtc-v2.20.8_GH0.tar.gz) = a7e5052ceecd88d928320880ed5131520f7b4bba70603fb0bd94a017b771672d
+SIZE (signalapp-ringrtc-v2.20.8_GH0.tar.gz) = 601626
+SHA256 (signalapp-webrtc-4896c_GH0.tar.gz) = 2eb34542bd7b01b3192bee9f1f8b5acc87cafe59080fcfd7e86bdcfd2f68b3bb
+SIZE (signalapp-webrtc-4896c_GH0.tar.gz) = 37532961
diff --git a/multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm b/multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm
new file mode 100644
index 000000000000..069a0c98317b
--- /dev/null
+++ b/multimedia/ringrtc/files/extra-patch-no-mempcpy-nasm
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/third_party/nasm/config/config-linux.h.orig 2021-04-14 18:43:05 UTC
++++ ../../src/webrtc/src/third_party/nasm/config/config-linux.h
+@@ -336,7 +336,7 @@
+ #define HAVE_MEMORY_H 1
+
+ /* Define to 1 if you have the `mempcpy' function. */
+-#define HAVE_MEMPCPY 1
++/* #undef HAVE_MEMPCPY */
+
+ /* Define to 1 if you have a working `mmap' system call. */
+ #define HAVE_MMAP 1
diff --git a/multimedia/ringrtc/files/patch-boringssl b/multimedia/ringrtc/files/patch-boringssl
new file mode 100644
index 000000000000..6ce451be1f3b
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-boringssl
@@ -0,0 +1,35 @@
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=259334
+
+--- ../../src/webrtc/src/third_party/boringssl/src/util/generate_build_files.py.orig 2022-05-04 15:47:04 UTC
++++ ../../src/webrtc/src/third_party/boringssl/src/util/generate_build_files.py
+@@ -447,7 +447,7 @@ if(NOT WIN32)
+
+ # pthread_rwlock_t requires a feature flag.
+ if(NOT WIN32)
+- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ")
+ endif()
+
+ if(WIN32)
+--- ../../src/webrtc/src/third_party/boringssl/src/util/BUILD.toplevel.orig 2022-05-04 15:47:04 UTC
++++ ../../src/webrtc/src/third_party/boringssl/src/util/BUILD.toplevel
+@@ -95,7 +95,7 @@ linux_copts = posix_copts + [
+ # This is needed on Linux systems (at least) to get rwlock in pthread, but
+ # it should not be set on Apple platforms, where it instead disables APIs
+ # we use. See compat(5) and sys/cdefs.h.
+- "-D_XOPEN_SOURCE=700",
++ "",
+ ]
+
+ boringssl_copts = select({
+--- ../../src/webrtc/src/third_party/boringssl/src/CMakeLists.txt.orig 2022-05-04 15:46:59 UTC
++++ ../../src/webrtc/src/third_party/boringssl/src/CMakeLists.txt
+@@ -262,7 +262,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ # and sys/cdefs.h. Reportedly, FreeBSD also breaks when this is set. See
+ # https://crbug.com/boringssl/471.
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=700")
++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ")
+ endif()
+
+ if(FUZZ)
diff --git a/multimedia/ringrtc/files/patch-cargo-crates_neon-0.9.1_src_lib.rs b/multimedia/ringrtc/files/patch-cargo-crates_neon-0.9.1_src_lib.rs
new file mode 100644
index 000000000000..ae54dc506c73
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-cargo-crates_neon-0.9.1_src_lib.rs
@@ -0,0 +1,10 @@
+--- cargo-crates/neon-0.9.1/src/lib.rs.orig 2021-03-15 17:51:55 UTC
++++ cargo-crates/neon-0.9.1/src/lib.rs
+@@ -104,6 +104,7 @@ macro_rules! register_module {
+ ($module:pat, $init:block) => {
+ // Mark this function as a global constructor (like C++).
+ #[allow(improper_ctypes)]
++ #[cfg_attr(target_os = "freebsd", link_section = ".ctors")]
+ #[cfg_attr(target_os = "linux", link_section = ".ctors")]
+ #[cfg_attr(target_os = "android", link_section = ".ctors")]
+ #[cfg_attr(target_os = "macos", link_section = "__DATA,__mod_init_func")]
diff --git a/multimedia/ringrtc/files/patch-src_rust_build.rs b/multimedia/ringrtc/files/patch-src_rust_build.rs
new file mode 100644
index 000000000000..716ac6b05baa
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_rust_build.rs
@@ -0,0 +1,13 @@
+--- build.rs.orig 2021-03-15 17:47:59 UTC
++++ build.rs
+@@ -21,7 +21,9 @@ fn main() {
+ println!("cargo:rustc-link-search=native=../../src/webrtc/src/out/Release/obj/",);
+ }
+
+- if cfg!(target_os = "macos") {
++ if cfg!(target_os = "freebsd") {
++ println!("cargo:rustc-link-lib=dylib=c++");
++ } else if cfg!(target_os = "macos") {
+ println!("cargo:rustc-link-lib=dylib=c++");
+ println!("cargo:rustc-link-lib=framework=Foundation");
+ println!("cargo:rustc-link-lib=framework=CoreAudio");
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn
new file mode 100644
index 000000000000..841b000a27ad
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_BUILD.gn
@@ -0,0 +1,23 @@
+--- ../../src/webrtc/src/BUILD.gn.orig 2021-03-15 15:09:17 UTC
++++ ../../src/webrtc/src/BUILD.gn
+@@ -188,6 +188,9 @@ config("common_inherited_config") {
+ if (is_linux || is_chromeos) {
+ defines += [ "WEBRTC_LINUX" ]
+ }
++ if (is_bsd) {
++ defines += [ "WEBRTC_BSD" ]
++ }
+ if (is_mac) {
+ defines += [ "WEBRTC_MAC" ]
+ }
+@@ -431,10 +434,6 @@ config("common_config") {
+ "/U_UNICODE",
+ ]
+ }
+-}
+-
+-config("common_objc") {
+- frameworks = [ "Foundation.framework" ]
+ }
+
+ if (!build_with_chromium) {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_base_third__party_libevent_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_base_third__party_libevent_BUILD.gn
new file mode 100644
index 000000000000..dcfcc07ee16c
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_base_third__party_libevent_BUILD.gn
@@ -0,0 +1,16 @@
+--- ../../src/webrtc/src/base/third_party/libevent/BUILD.gn.orig 2021-03-15 17:07:00 UTC
++++ ../../src/webrtc/src/base/third_party/libevent/BUILD.gn
+@@ -43,6 +43,13 @@ static_library("libevent") {
+ "mac/event-config.h",
+ ]
+ include_dirs = [ "mac" ]
++ } else if (is_bsd) {
++ sources += [
++ "kqueue.c",
++ "freebsd/config.h",
++ "freebsd/event-config.h",
++ ]
++ include_dirs = [ "freebsd" ]
+ } else if (is_linux || is_chromeos) {
+ sources += [
+ "epoll.c",
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn
new file mode 100644
index 000000000000..1b4166ee0725
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILD.gn
@@ -0,0 +1,30 @@
+--- ../../src/webrtc/src/build/config/BUILD.gn.orig 2021-05-26 12:26:11 UTC
++++ ../../src/webrtc/src/build/config/BUILD.gn
+@@ -128,7 +128,7 @@ config("debug") {
+ # builds, and we have to tell it to turn it off.
+ defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
+ }
+- } else if ((is_linux || is_chromeos) && current_cpu == "x64" &&
++ } else if ((is_linux || is_chromeos || is_bsd) && current_cpu == "x64" &&
+ enable_iterator_debugging) {
+ # Enable libstdc++ debugging facilities to help catch problems early, see
+ # http://crbug.com/65151 .
+@@ -227,9 +227,7 @@ config("default_libs") {
+ ]
+ } else if (is_linux || is_chromeos) {
+ libs = [
+- "dl",
+ "pthread",
+- "rt",
+ ]
+ }
+ }
+@@ -308,7 +306,7 @@ config("executable_config") {
+ "//build/config/ios:ios_dynamic_flags",
+ "//build/config/ios:ios_executable_flags",
+ ]
+- } else if (is_linux || is_chromeos || is_android || current_os == "aix") {
++ } else if (is_linux || is_bsd || is_chromeos || is_android || current_os == "aix") {
+ configs += [ "//build/config/gcc:executable_config" ]
+ if (is_chromecast) {
+ configs += [ "//build/config/chromecast:executable_config" ]
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..2c9220f9e4a0
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_BUILDCONFIG.gn
@@ -0,0 +1,44 @@
+--- ../../src/webrtc/src/build/config/BUILDCONFIG.gn.orig 2021-11-15 18:52:18 UTC
++++ ../../src/webrtc/src/build/config/BUILDCONFIG.gn
+@@ -136,7 +136,7 @@ declare_args() {
+ is_official_build = false
+
+ # Set to true when compiling with the Clang compiler.
+- is_clang = current_os != "linux" ||
++ is_clang = current_os != "linux" || current_os == "freebsd" ||
+ (current_cpu != "s390x" && current_cpu != "s390" &&
+ current_cpu != "ppc64" && current_cpu != "ppc" &&
+ current_cpu != "mips" && current_cpu != "mips64" &&
+@@ -189,8 +189,8 @@ if (host_toolchain == "") {
+ # TODO(dpranke): Add some sort of assert here that verifies that
+ # no toolchain omitted host_toolchain from its toolchain_args().
+
+- if (host_os == "linux") {
+- if (target_os != "linux") {
++ if (host_os == "linux" || host_os == "freebsd") {
++ if (target_os != "linux" && target_os != "freebsd") {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+ } else if (is_clang) {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+@@ -229,7 +229,7 @@ if (target_os == "android") {
+ assert(host_os == "linux" || host_os == "mac",
+ "Android builds are only supported on Linux and Mac hosts.")
+ _default_toolchain = "//build/toolchain/android:android_clang_$target_cpu"
+-} else if (target_os == "chromeos" || target_os == "linux") {
++} else if (target_os == "chromeos" || target_os == "linux" || target_os == "freebsd") {
+ # See comments in build/toolchain/cros/BUILD.gn about board compiles.
+ if (is_clang) {
+ _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
+@@ -296,10 +296,11 @@ is_android = current_os == "android"
+ is_chromeos = current_os == "chromeos"
+ is_fuchsia = current_os == "fuchsia"
+ is_ios = current_os == "ios"
+-is_linux = current_os == "linux"
++is_linux = current_os == "linux" || current_os == "freebsd"
+ is_mac = current_os == "mac"
+ is_nacl = current_os == "nacl"
+ is_win = current_os == "win" || current_os == "winuwp"
++is_bsd = current_os == "freebsd"
+
+ is_apple = is_ios || is_mac
+ is_posix = !is_win && !is_fuchsia
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..dc2d466a60da
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_BUILD.gn
@@ -0,0 +1,110 @@
+--- ../../src/webrtc/src/build/config/compiler/BUILD.gn.orig 2022-02-16 12:34:12 UTC
++++ ../../src/webrtc/src/build/config/compiler/BUILD.gn
+@@ -140,7 +140,7 @@ declare_args() {
+ #
+ # TODO(crbug.com/1131993): Enabling this when 'is_android' is true breaks
+ # content_shell_test_apk on both ARM and x86.
+- init_stack_vars = !is_android
++ init_stack_vars = !is_android && !is_bsd
+
+ # This argument is to control whether enabling text section splitting in the
+ # final binary. When enabled, the separated text sections with prefix
+@@ -356,7 +356,7 @@ config("compiler") {
+ }
+
+ # Linker warnings.
+- if (fatal_linker_warnings && !is_apple && current_os != "aix" &&
++ if (fatal_linker_warnings && !is_bsd &&!is_apple && current_os != "aix" &&
+ current_os != "zos") {
+ ldflags += [ "-Wl,--fatal-warnings" ]
+ }
+@@ -533,7 +533,7 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && current_os != "zos") {
++ if (is_clang && !is_bsd && !is_nacl && current_os != "zos") {
+ cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+
+ # TODO(hans): Remove this once Clang generates better optimized debug info
+@@ -930,7 +930,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-mtune=$arm_tune" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
++ if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd) {
+ cflags += [ "--target=aarch64-linux-gnu" ]
+ ldflags += [ "--target=aarch64-linux-gnu" ]
+ }
+@@ -1251,7 +1251,7 @@ config("compiler_deterministic") {
+ # different build directory like "out/feature_a" and "out/feature_b" if
+ # we build same files with same compile flag.
+ # Other paths are already given in relative, no need to normalize them.
+- if (is_nacl) {
++ if (is_nacl || is_bsd) {
+ # TODO(https://crbug.com/1231236): Use -ffile-compilation-dir= here.
+ cflags += [
+ "-Xclang",
+@@ -1264,7 +1264,7 @@ config("compiler_deterministic") {
+ # and -fcoverage-compilation-dir=.
+ cflags += [ "-ffile-compilation-dir=." ]
+ }
+- if (!is_win) {
++ if (!is_win && !is_bsd) {
+ # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
+ asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
+ }
+@@ -1302,7 +1302,7 @@ config("clang_revision") {
+ }
+
+ config("clang_revision") {
+- if (is_clang && clang_base_path == default_clang_base_path) {
++ if (is_clang && !is_bsd && clang_base_path == default_clang_base_path) {
+ update_args = [
+ "--print-revision",
+ "--verify-version=$clang_version",
+@@ -1541,7 +1541,7 @@ config("default_warnings") {
+ "-Wno-ignored-pragma-optimize",
+ ]
+
+- if (!is_nacl) {
++ if (!is_nacl && !is_bsd) {
+ # TODO(https://crbug.com/1300731) Clean up and enable.
+ cflags += [ "-Wno-unqualified-std-cast-call" ]
+ }
+@@ -1854,7 +1854,7 @@ config("thin_archive") {
+ # archives.
+ # TODO(crbug.com/1221615): Enable on is_apple if use_lld once that no longer
+ # confuses lldb.
+- if ((is_posix && !is_nacl && !is_apple) || is_fuchsia) {
++ if ((is_posix && !is_nacl && !is_apple && !is_bsd) || is_fuchsia) {
+ arflags = [ "-T" ]
+ } else if (is_win && use_lld) {
+ arflags = [ "/llvmlibthin" ]
+@@ -2355,7 +2355,7 @@ config("symbols") {
+ # flag, so we can use use -g1 for pnacl and nacl-clang compiles.
+ # gcc nacl is is_nacl && !is_clang, pnacl and nacl-clang are && is_clang.
+ if ((!is_nacl || is_clang) && current_os != "zos") {
+- cflags += [ "-g2" ]
++ cflags += [ "-g0" ]
+ }
+
+ if (!is_nacl && is_clang && !is_tsan && !is_asan &&
+@@ -2394,7 +2394,7 @@ config("symbols") {
+ # DWARF info may be corrupt; offsets in a range list entry are in different
+ # sections" there. Maybe just a bug in nacl_switch_32.S.
+ _enable_gdb_index =
+- symbol_level == 2 && !is_apple && !is_nacl && current_cpu != "x86" &&
++ symbol_level == 2 && !is_bsd && !is_apple && !is_nacl && current_cpu != "x86" &&
+ current_os != "zos" && (use_gold || use_lld) &&
+ # Disable on non-fission 32-bit Android because it pushes
+ # libcomponents_unittests over the 4gb size limit.
+@@ -2413,7 +2413,7 @@ config("symbols") {
+ }
+
+ if (is_clang && (!is_nacl || is_nacl_saigo) && current_os != "zos") {
+- if (is_apple) {
++ if (is_apple || is_bsd) {
+ # TODO(https://crbug.com/1050118): Investigate missing debug info on mac.
+ # Make sure we don't use constructor homing on mac.
+ cflags += [
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..e002a799ffb3
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_compiler_compiler.gni
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/build/config/compiler/compiler.gni.orig 2021-11-15 18:52:18 UTC
++++ ../../src/webrtc/src/build/config/compiler/compiler.gni
+@@ -219,7 +219,7 @@ declare_args() {
+
+ declare_args() {
+ # Whether to use the gold linker from binutils instead of lld or bfd.
+- use_gold = !use_lld && !(is_chromecast && is_linux &&
++ use_gold = !use_lld && !is_bsd && !(is_chromecast && is_linux &&
+ (current_cpu == "arm" || current_cpu == "mipsel")) &&
+ (((is_linux || is_chromeos_lacros) &&
+ (current_cpu == "x64" || current_cpu == "x86" ||
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni
new file mode 100644
index 000000000000..b87b4940126d
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_features.gni
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/build/config/features.gni.orig 2020-09-19 19:50:44 UTC
++++ ../../src/webrtc/src/build/config/features.gni
+@@ -26,7 +26,7 @@ declare_args() {
+ proprietary_codecs = is_chrome_branded || is_chromecast
+
+ # libudev usage. This currently only affects the content layer.
+- use_udev = (is_linux || is_chromeos) && !is_chromecast
++ use_udev = (is_linux || is_chromeos) && !is_chromecast && !is_bsd
+
+ use_dbus = (is_linux || is_chromeos) && !is_chromecast
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni
new file mode 100644
index 000000000000..413823ab125f
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_freetype_freetype.gni
@@ -0,0 +1,9 @@
+--- ../../src/webrtc/src/build/config/freetype/freetype.gni.orig 2019-03-18 08:59:45 UTC
++++ ../../src/webrtc/src/build/config/freetype/freetype.gni
+@@ -10,5 +10,5 @@ declare_args() {
+ # than version 2.7.1 and have color bitmap support compiled in. WARNING:
+ # System FreeType configurations other than as described WILL INTRODUCE TEXT
+ # RENDERING AND SECURITY REGRESSIONS.
+- use_system_freetype = false
++ use_system_freetype = true
+ }
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..491318b9893b
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/build/config/linux/BUILD.gn.orig 2021-10-13 07:49:03 UTC
++++ ../../src/webrtc/src/build/config/linux/BUILD.gn
+@@ -39,7 +39,7 @@ config("runtime_library") {
+
+ if ((!(is_chromeos_ash || is_chromeos_lacros) ||
+ default_toolchain != "//build/toolchain/cros:target") &&
+- (!use_custom_libcxx || current_cpu == "mipsel")) {
++ (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+ libs = [ "atomic" ]
+ }
+ }
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..71f94e8ca65d
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_linux_pkg-config.py
@@ -0,0 +1,26 @@
+--- ../../src/webrtc/src/build/config/linux/pkg-config.py.orig 2019-07-24 18:58:02 UTC
++++ ../../src/webrtc/src/build/config/linux/pkg-config.py
+@@ -59,8 +59,12 @@ def SetConfigPath(options):
+ print("You must specify an architecture via -a if using a sysroot.")
+ sys.exit(1)
+
+- libdir = sysroot + '/usr/' + options.system_libdir + '/pkgconfig'
+- libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ if "linux" in sys.platform:
++ libdir = sysroot + '/libdata/' + options.system_libdir + '/pkgconfig'
++ libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ elif "bsd" in sys.platform:
++ libdir = sysroot + '/libdata/pkgconfig'
++ libdir += ':' + '/usr/libdata/pkgconfig'
+ os.environ['PKG_CONFIG_LIBDIR'] = libdir
+ return libdir
+
+@@ -109,7 +113,7 @@ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if "bsd" not in sys.platform:
+ print("[[],[],[],[],[]]")
+ return 0
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni
new file mode 100644
index 000000000000..d99908dcc440
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_config_sysroot.gni
@@ -0,0 +1,14 @@
+--- ../../src/webrtc/src/build/config/sysroot.gni.orig 2020-05-13 18:39:36 UTC
++++ ../../src/webrtc/src/build/config/sysroot.gni
+@@ -21,9 +21,9 @@ declare_args() {
+
+ # Controls default is_linux sysroot. If set to true, and sysroot
+ # is empty, default sysroot is calculated.
+- use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
++ use_sysroot = !is_bsd && (current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+- current_cpu == "mipsel" || current_cpu == "mips64el"
++ current_cpu == "mipsel" || current_cpu == "mips64el")
+ }
+
+ if (sysroot == "") {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py
new file mode 100644
index 000000000000..de29ca56ea78
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_detect__host__arch.py
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/build/detect_host_arch.py.orig 2019-07-24 18:58:02 UTC
++++ ../../src/webrtc/src/build/detect_host_arch.py
+@@ -21,6 +21,8 @@ def HostArch():
+ host_arch = 'ia32'
+ elif host_arch in ['x86_64', 'amd64']:
+ host_arch = 'x64'
++ elif host_arch.startswith('arm64'):
++ host_arch = 'arm64'
+ elif host_arch.startswith('arm'):
+ host_arch = 'arm'
+ elif host_arch.startswith('aarch64'):
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py
new file mode 100644
index 000000000000..595c77c9eec6
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/build/gn_run_binary.py.orig 2019-07-24 18:58:02 UTC
++++ ../../src/webrtc/src/build/gn_run_binary.py
+@@ -24,7 +24,7 @@ if not os.path.isabs(path):
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome"})
+ if ret != 0:
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map
new file mode 100644
index 000000000000..c8d92e94a5bb
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_chrome.map
@@ -0,0 +1,29 @@
+--- ../../src/webrtc/src/build/linux/chrome.map.orig 2021-05-01 21:15:31 UTC
++++ ../../src/webrtc/src/build/linux/chrome.map
+@@ -1,4 +1,7 @@
+ {
++local:
++ *;
++
+ global:
+ __bss_start;
+ __data_start;
+@@ -20,6 +23,10 @@ global:
+ # Program entry point.
+ _start;
+
++ # FreeBSD specific variables.
++ __progname;
++ environ;
++
+ # Memory allocation symbols. We want chrome and any libraries to
+ # share the same heap, so it is correct to export these symbols.
+ calloc;
+@@ -83,7 +90,4 @@ global:
+ localtime_r;
+
+ v8dbg_*;
+-
+-local:
+- *;
+ };
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..9ece73e22ebc
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- ../../src/webrtc/src/build/linux/libpci/BUILD.gn.orig 2019-03-11 22:00:52 UTC
++++ ../../src/webrtc/src/build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+- name = "LibPciLoader"
+- output_h = "libpci.h"
+- output_cc = "libpci_loader.cc"
+- header = "<pci/pci.h>"
++declare_args() {
++ use_system_libpci = is_bsd
++}
+
+- functions = [
+- "pci_alloc",
+- "pci_init",
+- "pci_cleanup",
+- "pci_scan_bus",
+- "pci_fill_info",
+- "pci_lookup_name",
+- ]
++if (use_system_libpci) {
++ pkg_config("system_libpci") {
++ packages = [ "libpci" ]
++ }
++
++ source_set("libpci") {
++ public_configs = [ ":system_libpci" ]
++ }
++
++} else {
++ # This generates a target named "libpci".
++ generate_library_loader("libpci") {
++ name = "LibPciLoader"
++ output_h = "libpci.h"
++ output_cc = "libpci_loader.cc"
++ header = "<pci/pci.h>"
++
++ functions = [
++ "pci_alloc",
++ "pci_init",
++ "pci_cleanup",
++ "pci_scan_bus",
++ "pci_fill_info",
++ "pci_lookup_name",
++ ]
++ }
+ }
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..3885fd4ebc70
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- ../../src/webrtc/src/build/linux/unbundle/libusb.gn.orig 2019-03-17 01:47:13 UTC
++++ ../../src/webrtc/src/build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..0c49536a7725
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- ../../src/webrtc/src/build/linux/unbundle/replace_gn_files.py.orig 2021-11-15 18:52:18 UTC
++++ ../../src/webrtc/src/build/linux/unbundle/replace_gn_files.py
+@@ -25,6 +25,7 @@ REPLACEMENTS = {
+ 'libevent': 'base/third_party/libevent/BUILD.gn',
+ 'libjpeg': 'third_party/libjpeg.gni',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
+ 'libwebp': 'third_party/libwebp/BUILD.gn',
+ 'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..ac1e2e8ca0ef
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,44 @@
+--- ../../src/webrtc/src/build/toolchain/gcc_toolchain.gni.orig 2022-02-16 12:34:12 UTC
++++ ../../src/webrtc/src/build/toolchain/gcc_toolchain.gni
+@@ -53,6 +53,11 @@ if (enable_resource_allowlist_generation) {
+ "enable_resource_allowlist_generation=true does not work for target_os=$target_os")
+ }
+
++declare_args() {
++ extra_cxxflags = ""
++ extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -780,13 +785,22 @@ template("clang_toolchain") {
+ # use_gold too.
+ template("clang_toolchain") {
+ gcc_toolchain(target_name) {
+- prefix = rebase_path("$clang_base_path/bin", root_build_dir)
+- cc = "${prefix}/clang"
+- cxx = "${prefix}/clang++"
+- ld = cxx
+- readelf = "${prefix}/llvm-readelf"
+- ar = "${prefix}/llvm-ar"
+- nm = "${prefix}/llvm-nm"
++ if (is_bsd) {
++ prefix = "%%LOCALBASE%%/bin"
++ cc = "cc"
++ cxx = "c++"
++ ld = cxx
++ ar = "llvm-ar"
++ nm = "${prefix}/nm"
++ } else {
++ prefix = rebase_path("$clang_base_path/bin", root_build_dir)
++ cc = "$prefix/clang"
++ cxx = "$prefix/clang++"
++ ld = cxx
++ readelf = "${prefix}/readelf"
++ ar = "${prefix}/llvm-ar"
++ nm = "${prefix}/llvm-nm"
++ }
+
+ forward_variables_from(invoker,
+ [
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..7fcb1e54e0bf
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- ../../src/webrtc/src/build/toolchain/get_concurrent_links.py.orig 2021-05-01 21:15:31 UTC
++++ ../../src/webrtc/src/build/toolchain/get_concurrent_links.py
+@@ -53,6 +53,14 @@ def _GetTotalMemoryInBytes():
+ return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ except Exception:
+ return 0
++ elif sys.platform.startswith('freebsd'):
++ try:
++ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++ # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++ # 1 * ... to needed amount
++ return max(1, avail_bytes / (1 * (2 ** 30))) # total / 4GB
++ except Exception:
++ return 1
+ # TODO(scottmg): Implement this for other platforms.
+ return 0
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn
new file mode 100644
index 000000000000..320feb4a299d
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_buildtools_third__party_libc++_BUILD.gn
@@ -0,0 +1,10 @@
+--- ../../src/webrtc/src/buildtools/third_party/libc++/BUILD.gn.orig 2021-09-19 10:01:13 UTC
++++ ../../src/webrtc/src/buildtools/third_party/libc++/BUILD.gn
+@@ -21,6 +21,7 @@ config("config") {
+ # upstream libc++ requires C++20 so we have to make an exception here.
+ # No other target should override the default -std= flag.
+ "-std:c++20",
++ "-I%%LOCALBASE%%/include",
+ ]
+ } else {
+ cflags += [ "-fPIC" ]
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_gn b/multimedia/ringrtc/files/patch-src_webrtc_src_gn
new file mode 100644
index 000000000000..71ecef1dc7af
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_gn
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/.gn.orig 2022-02-18 09:45:12 UTC
++++ ../../src/webrtc/src/.gn
+@@ -24,7 +24,7 @@ secondary_source = "//build/secondary/"
+ # matching these patterns (see "gn help label_pattern" for format) will not have
+ # their includes checked for proper dependencies when you run either
+ # "gn check" or "gn gen --check".
+-no_check_targets = [ "//third_party/icu/*" ]
++#no_check_targets = [ "//third_party/icu/*" ]
+
+ # These are the list of GN files that run exec_script. This whitelist exists
+ # to force additional review for new uses of exec_script, which is strongly
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 000000000000..b8b3687bf79c
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,10 @@
+--- ../../src/webrtc/src/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -13,6 +13,7 @@
+ #include <string.h>
+
+ #include <algorithm>
++#include <cstdlib>
+ #include <utility>
+
+ #include "absl/algorithm/container.h"
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn
new file mode 100644
index 000000000000..41d4bffa768a
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_modules_video__capture_BUILD.gn
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/modules/video_capture/BUILD.gn.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/modules/video_capture/BUILD.gn
+@@ -53,7 +53,7 @@ if (!build_with_chromium) {
+ "../../system_wrappers",
+ ]
+
+- if (is_linux || is_chromeos) {
++ if ((is_linux || is_chromeos) && !is_bsd) {
+ sources = [
+ "linux/device_info_linux.cc",
+ "linux/device_info_linux.h",
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h
new file mode 100644
index 000000000000..09a45e0b912e
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_byte__order.h
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/rtc_base/byte_order.h.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/byte_order.h
+@@ -89,7 +89,7 @@
+ #endif // defined(WEBRTC_ARCH_LITTLE_ENDIAN)
+
+ #elif defined(WEBRTC_POSIX)
+-#include <endian.h>
++#include <sys/endian.h>
+ #else
+ #error "Missing byte order functions for this arch."
+ #endif // defined(WEBRTC_MAC)
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h
new file mode 100644
index 000000000000..07ff57b51b32
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ifaddrs__converter.h
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/rtc_base/ifaddrs_converter.h.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/ifaddrs_converter.h
+@@ -14,6 +14,8 @@
+ #if defined(WEBRTC_ANDROID)
+ #include "rtc_base/ifaddrs_android.h"
+ #else
++#include <sys/types.h>
++#include <sys/socket.h>
+ #include <ifaddrs.h>
+ #endif // WEBRTC_ANDROID
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc
new file mode 100644
index 000000000000..188ad944e42f
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.cc
@@ -0,0 +1,12 @@
+--- ../../src/webrtc/src/rtc_base/ip_address.cc.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/ip_address.cc
+@@ -11,6 +11,9 @@
+ #if defined(WEBRTC_POSIX)
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
+
+ #include "absl/strings/string_view.h"
+ #ifdef OPENBSD
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h
new file mode 100644
index 000000000000..185f48a7fe05
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_ip__address.h
@@ -0,0 +1,13 @@
+--- ../../src/webrtc/src/rtc_base/ip_address.h.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/ip_address.h
+@@ -17,6 +17,10 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #endif
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#include <sys/socket.h>
++#endif
+ #if defined(WEBRTC_WIN)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc
new file mode 100644
index 000000000000..842e41bd7f37
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.cc
@@ -0,0 +1,15 @@
+--- ../../src/webrtc/src/rtc_base/network.cc.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/network.cc
+@@ -244,7 +244,12 @@ AdapterType GetAdapterTypeFromName(const char* network
+ }
+ #endif
+
++#if defined(WEBRTC_BSD)
++ // Treat all other network interface names as ethernet on BSD
++ return ADAPTER_TYPE_ETHERNET;
++#else
+ return ADAPTER_TYPE_UNKNOWN;
++#endif
+ }
+
+ NetworkManager::NetworkManager() {}
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h
new file mode 100644
index 000000000000..03771162bfcc
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_network.h
@@ -0,0 +1,13 @@
+--- ../../src/webrtc/src/rtc_base/network.h.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/network.h
+@@ -26,6 +26,10 @@
+ #include "rtc_base/system/rtc_export.h"
+ #include "rtc_base/third_party/sigslot/sigslot.h"
+
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
++
+ #if defined(WEBRTC_POSIX)
+ struct ifaddrs;
+ #endif // defined(WEBRTC_POSIX)
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc
new file mode 100644
index 000000000000..a0148e4a21e7
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.cc
@@ -0,0 +1,47 @@
+--- ../../src/webrtc/src/rtc_base/physical_socket_server.cc.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/physical_socket_server.cc
+@@ -50,7 +50,7 @@
+ #include "rtc_base/null_socket_server.h"
+ #include "rtc_base/time_utils.h"
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/sockios.h>
+ #endif
+
+@@ -69,7 +69,7 @@ typedef void* SockOptArg;
+
+ #endif // WEBRTC_POSIX
+
+-#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__)
++#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__native_client__)
+
+ int64_t GetSocketRecvTimestamp(int socket) {
+ struct timeval tv_ioctl;
+@@ -291,7 +291,7 @@ int PhysicalSocket::GetOption(Option opt, int* value)
+ return -1;
+ }
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ *value = (*value != IP_PMTUDISC_DONT) ? 1 : 0;
+ #endif
+ } else if (opt == OPT_DSCP) {
+@@ -309,7 +309,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ if (TranslateOption(opt, &slevel, &sopt) == -1)
+ return -1;
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ value = (value) ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
+ #endif
+ } else if (opt == OPT_DSCP) {
+@@ -550,7 +550,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* s
+ *slevel = IPPROTO_IP;
+ *sopt = IP_DONTFRAGMENT;
+ break;
+-#elif defined(WEBRTC_MAC) || defined(BSD) || defined(__native_client__)
++#elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) || defined(__native_client__)
+ RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported.";
+ return -1;
+ #elif defined(WEBRTC_POSIX)
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h
new file mode 100644
index 000000000000..a6e2186eaa81
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_physical__socket__server.h
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/rtc_base/physical_socket_server.h.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/physical_socket_server.h
+@@ -11,7 +11,7 @@
+ #ifndef RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+ #define RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+
+-#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX)
++#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <sys/epoll.h>
+ #define WEBRTC_USE_EPOLL 1
+ #endif
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc
new file mode 100644
index 000000000000..20380da326db
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_platform__thread__types.cc
@@ -0,0 +1,39 @@
+--- ../../src/webrtc/src/rtc_base/platform_thread_types.cc.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/platform_thread_types.cc
+@@ -11,7 +11,11 @@
+ #include "rtc_base/platform_thread_types.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#else
++#include <pthread_np.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
+@@ -37,6 +41,8 @@ PlatformThreadId CurrentThreadId() {
+ return gettid();
+ #elif defined(WEBRTC_FUCHSIA)
+ return zx_thread_self();
++#elif defined(__FreeBSD__)
++ return pthread_getthreadid_np();
+ #elif defined(WEBRTC_LINUX)
+ return syscall(__NR_gettid);
+ #elif defined(__EMSCRIPTEN__)
+@@ -67,6 +73,7 @@ bool IsThreadRefEqual(const PlatformThreadRef& a, cons
+ }
+
+ void SetCurrentThreadName(const char* name) {
++#if !defined(__FreeBSD__)
+ #if defined(WEBRTC_WIN)
+ // The SetThreadDescription API works even if no debugger is attached.
+ // The names set with this API also show up in ETW traces. Very handy.
+@@ -109,6 +116,7 @@ void SetCurrentThreadName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); // NOLINT
+ #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
+ pthread_setname_np(name);
++#endif
+ #endif
+ }
+
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h
new file mode 100644
index 000000000000..398f042d983c
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_rtc__base_third__party_sigslot_sigslot.h
@@ -0,0 +1,19 @@
+--- ../../src/webrtc/src/rtc_base/third_party/sigslot/sigslot.h.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/rtc_base/third_party/sigslot/sigslot.h
+@@ -178,6 +178,8 @@ class multi_threaded_local {
+ #endif // _SIGSLOT_HAS_WIN32_THREADS
+
+ #ifdef _SIGSLOT_HAS_POSIX_THREADS
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wthread-safety-analysis"
+ // The multi threading policies only get compiled in if they are enabled.
+ class multi_threaded_global {
+ public:
+@@ -201,6 +203,7 @@ class multi_threaded_local {
+ private:
+ pthread_mutex_t m_mutex;
+ };
++#pragma GCC diagnostic pop
+ #endif // _SIGSLOT_HAS_POSIX_THREADS
+
+ template <class mt_policy>
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn
new file mode 100644
index 000000000000..018856d4c844
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_system__wrappers_BUILD.gn
@@ -0,0 +1,15 @@
+--- ../../src/webrtc/src/system_wrappers/BUILD.gn.orig 2021-01-28 23:16:17 UTC
++++ ../../src/webrtc/src/system_wrappers/BUILD.gn
+@@ -58,11 +58,9 @@ rtc_library("system_wrappers") {
+ }
+
+ if (is_linux || is_chromeos) {
+- if (!build_with_chromium) {
++ if (!build_with_chromium && !is_bsd) {
+ sources += [ "source/cpu_features_linux.cc" ]
+ }
+-
+- libs += [ "rt" ]
+ }
+
+ if (is_win) {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_testing_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_testing_BUILD.gn
new file mode 100644
index 000000000000..886b17bbdff3
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_testing_BUILD.gn
@@ -0,0 +1,27 @@
+--- ../../src/webrtc/src/testing/BUILD.gn.orig 2022-02-18 10:35:44 UTC
++++ ../../src/webrtc/src/testing/BUILD.gn
+@@ -44,14 +44,14 @@ group("run_perf_test") {
+ }
+ }
+
+-python_library("run_isolated_script_test") {
+- testonly = true
+- pydeps_file = "//testing/scripts/run_isolated_script_test.pydeps"
+- data = [ "//.vpython3" ]
+-}
++#python_library("run_isolated_script_test") {
++# testonly = true
++# pydeps_file = "//testing/scripts/run_isolated_script_test.pydeps"
++# data = [ "//.vpython3" ]
++#}
+
+-python_library("wpt_android_lib") {
+- testonly = true
+- pydeps_file = "//testing/scripts/run_android_wpt.pydeps"
+- data = [ "//.vpython3" ]
+-}
++#python_library("wpt_android_lib") {
++# testonly = true
++# pydeps_file = "//testing/scripts/run_android_wpt.pydeps"
++# data = [ "//.vpython3" ]
++#}
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni b/multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni
new file mode 100644
index 000000000000..aefefc3dae1e
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_testing_test.gni
@@ -0,0 +1,11 @@
+--- ../../src/webrtc/src/testing/test.gni.orig 2022-02-18 09:31:19 UTC
++++ ../../src/webrtc/src/testing/test.gni
+@@ -17,7 +17,7 @@ declare_args() {
+ # "location_tags.json", and so we don't want to try and upload the tags
+ # for their tests.
+ # And, some build configs may simply turn off generation altogether.
+- tests_have_location_tags = generate_location_tags
++ tests_have_location_tags = false
+ }
+
+ if (is_android) {
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h
new file mode 100644
index 000000000000..b28a5fd20da7
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_nasm_config_config-linux.h
@@ -0,0 +1,28 @@
+--- ../../src/webrtc/src/third_party/nasm/config/config-linux.h 2021-03-15 17:51:55 UTC
++++ ../../src/webrtc/src/third_party/nasm/config/config-linux.h
+@@ -117,7 +117,7 @@
+ #define HAVE_ACCESS 1
+
+ /* Define to 1 if you have the `canonicalize_file_name' function. */
+-#define HAVE_CANONICALIZE_FILE_NAME 1
++//#define HAVE_CANONICALIZE_FILE_NAME 1
+
+ /* Define to 1 if you have the `cpu_to_le16' intrinsic function. */
+ /* #undef HAVE_CPU_TO_LE16 */
+@@ -161,7 +161,7 @@
+ #define HAVE_DECL_STRSEP 1
+
+ /* Define to 1 if you have the <endian.h> header file. */
+-#define HAVE_ENDIAN_H 1
++// #define HAVE_ENDIAN_H 1
+
+ /* Define to 1 if you have the `faccessat' function. */
+ #define HAVE_FACCESSAT 1
+@@ -323,6 +323,7 @@
+
+ /* Define to 1 if you have the <sys/endian.h> header file. */
+ /* #undef HAVE_SYS_ENDIAN_H */
++#define HAVE_SYS_ENDIAN_H 1
+
+ /* Define to 1 if you have the <sys/mman.h> header file. */
+ #define HAVE_SYS_MMAN_H 1
diff --git a/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn
new file mode 100644
index 000000000000..a6421520fc19
--- /dev/null
+++ b/multimedia/ringrtc/files/patch-src_webrtc_src_third__party_opus_BUILD.gn
@@ -0,0 +1,18 @@
+Use VAR_ARRAYS on FreeBSD (same as audio/opus)
+
+--- ../../src/webrtc/src/third_party/opus/BUILD.gn 2021-03-15 17:51:55 UTC
++++ ../../src/webrtc/src/third_party/opus/BUILD.gn
+@@ -37,10 +37,11 @@ config("opus_private_config") {
+ "OPUS_EXPORT=",
+ "ENABLE_HARDENING",
+
++ "VAR_ARRAYS",
+ # Prefer alloca() over variable length arrays which are often inefficient;
+ # the opus code will automatically handle this correctly per-platform.
+- "USE_ALLOCA",
+- "HAVE_ALLOCA_H",
++# "USE_ALLOCA",
++# "HAVE_ALLOCA_H",
+ ]
+
+ include_dirs = [
diff --git a/multimedia/ringrtc/pkg-descr b/multimedia/ringrtc/pkg-descr
new file mode 100644
index 000000000000..fac2dcb84123
--- /dev/null
+++ b/multimedia/ringrtc/pkg-descr
@@ -0,0 +1,4 @@
+RingRTC is a middleware library providing Signal Messenger applications
+with video and voice calling services built on top of WebRTC.
+
+WWW: https://github.com/signalapp/ringrtc
diff --git a/multimedia/ringrtc/update.txt b/multimedia/ringrtc/update.txt
new file mode 100644
index 000000000000..1305dd1bc939
--- /dev/null
+++ b/multimedia/ringrtc/update.txt
@@ -0,0 +1,5 @@
+To update this port:
+Bump DISTVERSION
+eventually bump WEBRTC_REV (sh net-im/signal-desktop/get_deps.sh)
+eventually update *_REV (sh multimedia/ringrtc/webrtc_fetch.sh)
+eventually update CARGO_CRATES (fetch -qo - https://raw.githubusercontent.com/signalapp/ringrtc/vXXX/src/rust/Cargo.lock | awk -f /usr/ports/Mk/Scripts/cargo-crates.awk)
diff --git a/multimedia/ringrtc/webrtc_fetch.sh b/multimedia/ringrtc/webrtc_fetch.sh
new file mode 100644
index 000000000000..910844df26f5
--- /dev/null
+++ b/multimedia/ringrtc/webrtc_fetch.sh
@@ -0,0 +1,107 @@
+#!/bin/sh
+
+WEBRTC_REV=4896c
+
+base_url="https://chromium.googlesource.com/chromium/src/base.git/+archive/"
+boringssl_url="https://boringssl.googlesource.com/boringssl.git/+archive/"
+build_url="https://chromium.googlesource.com/chromium/src/build.git/+archive/"
+buildtools_url="https://chromium.googlesource.com/chromium/src/buildtools.git/+archive/"
+catapult_url="https://chromium.googlesource.com/catapult.git/+archive/"
+icu_url="https://chromium.googlesource.com/chromium/deps/icu.git/+archive/"
+libjpeg_turbo_url="https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git/+archive/"
+libsrtp_url="https://chromium.googlesource.com/chromium/deps/libsrtp.git/+archive/"
+libvpx_url="https://chromium.googlesource.com/webm/libvpx.git/+archive/"
+libyuv_url="https://chromium.googlesource.com/libyuv/libyuv.git/+archive/"
+nasm_url="https://chromium.googlesource.com/chromium/deps/nasm.git/+archive/"
+testing_url="https://chromium.googlesource.com/chromium/src/testing.git/+archive/"
+third_party_url="https://chromium.googlesource.com/chromium/src/third_party.git/+archive/"
+
+fetch -q -o /tmp/DEPS https://raw.githubusercontent.com/signalapp/webrtc/${WEBRTC_REV}/DEPS
+
+base_hash=$(grep 'base@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BASE_REV=\t${base_hash}\n"
+
+boringssl_hash=$(grep 'boringssl.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BORINGSSL_REV=\t${boringssl_hash}\n"
+
+build_hash=$(grep 'build@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BUILD_REV=\t${build_hash}\n"
+
+buildtools_hash=$(grep 'buildtools@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "BUILDTOOLS_REV=\t${buildtools_hash}\n"
+
+catapult_hash=$(grep 'catapult.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "CATAPULT_REV=\t${catapult_hash}\n"
+
+icu_hash=$(grep 'icu.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "ICU_REV=\t${icu_hash}\n"
+
+libjpeg_turbo_hash=$(grep 'libjpeg_turbo.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBJPEG_TURBO_REV=\t${libjpeg_turbo_hash}\n"
+
+libsrtp_hash=$(grep 'libsrtp.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBSRTP_REV=\t${libsrtp_hash}\n"
+
+libvpx_hash=$(grep 'libvpx.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBVPX_REV=\t${libvpx_hash}\n"
+
+libyuv_hash=$(grep 'libyuv.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "LIBYUV_REV=\t${libyuv_hash}\n"
+
+nasm_hash=$(grep 'nasm.git@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "NASM_REV=\t${nasm_hash}\n"
+
+testing_hash=$(grep 'testing@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "TESTING_REV=\t${testing_hash}\n"
+
+third_party_hash=$(grep 'third_party@' /tmp/DEPS | awk -F '@' '{print $2}' | sed -e "s#',##" -e "s#'##")
+printf "THIRD_PARTY_REV=\t${third_party_hash}\n"
+
+echo "fetch -o base-${base_hash}.tar.gz ${base_url}${base_hash}.tar.gz"
+echo "fetch -o boringssl-${boringssl_hash}.tar.gz ${boringssl_url}${boringssl_hash}.tar.gz"
+echo "fetch -o build-${build_hash}.tar.gz ${build_url}${build_hash}.tar.gz"
+echo "fetch -o buildtools-${buildtools_hash}.tar.gz ${buildtools_url}${buildtools_hash}.tar.gz"
+echo "fetch -o catapult-${catapult_hash}.tar.gz ${catapult_url}${catapult_hash}.tar.gz"
+echo "fetch -o icu-${icu_hash}.tar.gz ${icu_url}${icu_hash}.tar.gz"
+echo "fetch -o libjpeg_turbo-${libjpeg_turbo_hash}.tar.gz ${libjpeg_turbo_url}${libjpeg_turbo_hash}.tar.gz"
+echo "fetch -o libsrtp-${libsrtp_hash}.tar.gz ${libsrtp_url}${libsrtp_hash}.tar.gz"
+echo "fetch -o libvpx-${libvpx_hash}.tar.gz ${libvpx_url}${libvpx_hash}.tar.gz"
+echo "fetch -o libyuv-${libyuv_hash}.tar.gz ${libyuv_url}${libyuv_hash}.tar.gz"
+echo "fetch -o nasm-${nasm_hash}.tar.gz ${nasm_url}${nasm_hash}.tar.gz"
+echo "fetch -o testing-${testing_hash}.tar.gz ${testing_url}${testing_hash}.tar.gz"
+echo "fetch -o third_party-${third_party_hash}.tar.gz ${third_party_url}${third_party_hash}.tar.gz"
+
+exit
+
+mkdir -p base boringssl build buildtools catapult icu libjpeg_turbo libsrtp libvpx libyuv nasm testing third_party
+tar xf base-${base_hash}.tar.gz -C base
+tar xf boringssl-${boringssl_hash}.tar.gz -C boringssl
+tar xf build-${build_hash}.tar.gz -C build
+tar xf buildtools-${buildtools_hash}.tar.gz -C buildtools
+tar xf catapult-${catapult_hash}.tar.gz -C catapult
+tar xf icu-${icu_hash}.tar.gz -C icu
+tar xf libjpeg_turbo-${libjpeg_turbo_hash}.tar.gz -C libjpeg_turbo
+tar xf libsrtp-${libsrtp_hash}.tar.gz -C libsrtp
+tar xf libvpx-${libvpx_hash}.tar.gz -C libvpx
+tar xf libyuv-${libyuv_hash}.tar.gz -C libyuv
+tar xf nasm-${nasm_hash}.tar.gz -C nasm
+tar xf testing-${testing_hash}.tar.gz -C testing
+tar xf third_party-${third_party_hash}.tar.gz -C third_party
+
+tar czf /tmp/base-${base_hash}.tar.gz base
+tar czf /tmp/boringssl-${boringssl_hash}.tar.gz boringssl
+tar czf /tmp/build-${build_hash}.tar.gz build
+tar czf /tmp/buildtools-${buildtools_hash}.tar.gz buildtools
+tar czf /tmp/catapult-${catapult_hash}.tar.gz catapult
+tar czf /tmp/icu-${icu_hash}.tar.gz icu
+tar czf /tmp/libjpeg_turbo-${libjpeg_turbo_hash}.tar.gz libjpeg_turbo
+tar czf /tmp/libsrtp-${libsrtp_hash}.tar.gz libsrtp
+tar czf /tmp/libvpx-${libvpx_hash}.tar.gz libvpx
+tar czf /tmp/libyuv-${libyuv_hash}.tar.gz libyuv
+tar czf /tmp/nasm-${nasm_hash}.tar.gz nasm
+tar czf /tmp/testing-${testing_hash}.tar.gz testing
+tar czf /tmp/third_party-${third_party_hash}.tar.gz third_party
+
+rm -rf base boringssl build buildtools catapult icu libjpeg_turbo libsrtp libvpx libyuv nasm testing third_party
+
+exit