File tg_owt.spec of Package tg_owt
%global tg_owt_date 20251117
%global libyuv_date 20251204
%global crc32c_date 20250407
%global abseil_cpp_date 20251204
%global libsrtp_date 20251203
%global _smp_mflags -j2
%define _lto_cflags %{nil}
%define __builder ninja
Name: tg_owt
Version: 0
Release: 0
Summary: WebRTC library for the Telegram messenger
URL: https://github.com/desktop-app/%{name}
License: BSD-3-Clause AND BSD-2-Clause AND Apache-2.0 AND MIT
Source0: %{name}-%{version}.tar.zst
Source1: libyuv-git.%{libyuv_date}.tar.zst
Source2: crc32c-git.%{crc32c_date}.tar.zst
Source3: abseil-cpp-git.%{abseil_cpp_date}.tar.zst
Source4: libsrtp-git.%{libsrtp_date}.tar.zst
Patch0: tg_owt-h264-dlopen.patch
Patch1: tg_owt-pipewire.patch
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(epoxy)
BuildRequires: pkgconfig(gbm)
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavfilter)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavutil)
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libpipewire-0.3)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libswresample)
BuildRequires: pkgconfig(libswscale)
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(opus)
BuildRequires: pkgconfig(vpx)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(xtst)
BuildRequires: pkgconfig(openh264)
BuildRequires: cmake
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: ninja
BuildRequires: yasm
BuildRequires: sed
BuildRequires: findutils
%description
Special fork of the OpenWebRTC library for the Telegram messenger.
%package devel
Summary: Development files for %{name}
Requires: pkgconfig(alsa)
Requires: pkgconfig(epoxy)
Requires: pkgconfig(gbm)
Requires: pkgconfig(libavcodec)
Requires: pkgconfig(libavfilter)
Requires: pkgconfig(libavformat)
Requires: pkgconfig(libavutil)
Requires: pkgconfig(libdrm)
Requires: pkgconfig(libjpeg)
Requires: pkgconfig(libpipewire-0.3)
Requires: pkgconfig(libpulse)
Requires: pkgconfig(libswresample)
Requires: pkgconfig(libswscale)
Requires: pkgconfig(openssl)
Requires: pkgconfig(opus)
Requires: pkgconfig(vpx)
Requires: pkgconfig(x11)
Requires: pkgconfig(xcomposite)
Requires: pkgconfig(xdamage)
Requires: pkgconfig(xext)
Requires: pkgconfig(xfixes)
Requires: pkgconfig(xrandr)
Requires: pkgconfig(xrender)
Requires: pkgconfig(xtst)
Requires: ffmpeg-devel
Requires: %{name} = %{version}-%{release}
%description devel
%{summary}.
%prep
%autosetup -p1
# Fix libsrtp int vs size_t mismatch manually
# This replaces the specific parameter lists in external_hmac files
# avoiding regex issues and patch context failures
sed -i 's/int key_len, int out_len/size_t key_len, size_t out_len/g' src/pc/external_hmac.cc src/pc/external_hmac.h
sed -i 's/int key_len)/size_t key_len)/g' src/pc/external_hmac.cc src/pc/external_hmac.h
sed -i 's/int msg_len, int auth_len/size_t msg_len, size_t auth_len/g' src/pc/external_hmac.cc src/pc/external_hmac.h
sed -i 's/int msg_len)/size_t msg_len)/g' src/pc/external_hmac.cc src/pc/external_hmac.h
# Fix Abseil Nonnull/Nullable annotations
find src -type f \( -name "*.h" -o -name "*.cc" \) -exec \
sed -i \
-e 's/absl::Nonnull<\([^>]*\)>/\1/g' \
-e 's/absl::Nullable<\([^>]*\)>/\1/g' \
{} +
# Extract bundled libs
tar -xf %{SOURCE1} -C src/third_party/libyuv --strip-components=1
tar -xf %{SOURCE2} -C src/third_party/crc32c/src --strip-components=1
tar -xf %{SOURCE3} -C src/third_party/abseil-cpp --strip-components=1
tar -xf %{SOURCE4} -C src/third_party/libsrtp --strip-components=1
# Copy license files
mkdir legal
cp -f -p src/third_party/abseil-cpp/LICENSE legal/LICENSE.abseil-cpp
cp -f -p src/third_party/abseil-cpp/README.md legal/README.abseil-cpp
cp -f -p src/third_party/crc32c/src/LICENSE legal/LICENSE.crc32c
cp -f -p src/third_party/crc32c/src/README.md legal/README.crc32c
cp -f -p src/third_party/libsrtp/LICENSE legal/LICENSE.libsrtp
cp -f -p src/third_party/libsrtp/README.md legal/README.libsrtp
cp -f -p src/third_party/libyuv/LICENSE legal/LICENSE.libyuv
cp -f -p src/third_party/libyuv/PATENTS legal/PATENTS.libyuv
cp -f -p src/third_party/libyuv/README.chromium legal/README.libyuv
cp -f -p src/third_party/pffft/LICENSE legal/LICENSE.pffft
cp -f -p src/third_party/pffft/README.chromium legal/README.pffft
cp -f -p src/third_party/rnnoise/COPYING legal/LICENSE.rnnoise
cp -f -p src/third_party/rnnoise/README.chromium legal/README.rnnoise
cp -f -p src/common_audio/third_party/ooura/LICENSE legal/LICENSE.ooura
cp -f -p src/common_audio/third_party/ooura/README.chromium legal/README.ooura
cp -f -p src/common_audio/third_party/spl_sqrt_floor/LICENSE legal/LICENSE.spl_sqrt_floor
cp -f -p src/common_audio/third_party/spl_sqrt_floor/README.chromium legal/README.spl_sqrt_floor
cp -f -p src/modules/third_party/fft/LICENSE legal/LICENSE.fft
cp -f -p src/modules/third_party/fft/README.chromium legal/README.fft
cp -f -p src/modules/third_party/g711/LICENSE legal/LICENSE.g711
cp -f -p src/modules/third_party/g711/README.chromium legal/README.g711
cp -f -p src/modules/third_party/g722/LICENSE legal/LICENSE.g722
cp -f -p src/modules/third_party/g722/README.chromium legal/README.g722
cp -f -p src/modules/third_party/portaudio/LICENSE legal/LICENSE.portaudio
cp -f -p src/modules/third_party/portaudio/README.chromium legal/README.portaudio
cp -f -p src/rtc_base/third_party/base64/LICENSE legal/LICENSE.base64
cp -f -p src/rtc_base/third_party/base64/README.chromium legal/README.base64
cp -f -p src/rtc_base/third_party/sigslot/LICENSE legal/LICENSE.sigslot
cp -f -p src/rtc_base/third_party/sigslot/README.chromium legal/README.sigslot
%build
export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"
%cmake -LA \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON \
-DBUILD_SHARED_LIBS:BOOL=OFF \
-DTG_OWT_USE_PROTOBUF:BOOL=OFF \
-DTG_OWT_PACKAGED_BUILD:BOOL=ON \
-DTG_OWT_DLOPEN_H264=ON
%cmake_build --verbose
%install
%cmake_install
%files devel
%doc src/AUTHORS src/OWNERS legal/README.*
%license LICENSE src/PATENTS legal/LICENSE.* legal/PATENTS.*
%{_includedir}/%{name}
%{_libdir}/cmake/%{name}
%{_libdir}/lib%{name}.a
%changelog