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
openSUSE Build Service is sponsored by