File obs-studio.spec of Package obs-studio-git
%define rel_ver 29.1.0
%define cef_version 5060
Name: obs-studio
Version: 29.1.0
Release: 2
Summary: Free and open source software for video recording and live streaming
License: GPL-2.0-or-later
Group: Productivity/Multimedia/Video/Editors and Convertors
URL: https://obsproject.com/
Source: obs-studio-%{version}.tar.xz
Source1: https://cdn-fastly.obsproject.com/downloads/cef_binary_%{cef_version}_linux64.tar.bz2
Source2: obs-vkcapture-0a976a6d7ce14c0de0c6c4c91af336b82c1294df.tar.gz
Patch0: 6207.patch
Patch1: amf-texture-patch.patch
Patch2: add-plugins.patch
BuildRequires: cmake >= 2.8.12
BuildRequires: fdupes
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: hicolor-icon-theme
BuildRequires: qt6-base-private-devel
BuildRequires: qt6-base-devel
BuildRequires: qt6-wayland-devel
BuildRequires: libuuid-devel
BuildRequires: mbedtls-devel
BuildRequires: pciutils-devel
BuildRequires: pkgconfig
BuildRequires: sndio-devel
BuildRequires: swig
BuildRequires: update-desktop-files
BuildRequires: wayland-devel
BuildRequires: AMF-devel
BuildRequires: ffmpeg-6-private-devel
BuildRequires: websocketpp-devel
BuildRequires: pkgconfig(Qt6Svg)
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(fdk-aac)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(jack)
BuildRequires: pkgconfig(jansson)
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavdevice)
BuildRequires: pkgconfig(libavfilter)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavutil)
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(libpipewire-0.3) >= 0.3.40
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libswresample)
BuildRequires: pkgconfig(libswscale)
BuildRequires: pkgconfig(libudev)
BuildRequires: pkgconfig(libv4l2)
BuildRequires: pkgconfig(libva)
BuildRequires: pkgconfig(libglvnd)
BuildRequires: pkgconfig(srt) >= 1.5.1
BuildRequires: pkgconfig(librist)
BuildRequires: pkgconfig(luajit)
BuildRequires: pkgconfig(python3)
BuildRequires: pkgconfig(speexdsp)
BuildRequires: pkgconfig(vlc-plugin)
BuildRequires: pkgconfig(x264)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xinerama)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(nspr)
BuildRequires: pkgconfig(nss)
BuildRequires: libjansson-devel
BuildRequires: nlohmann_json-devel
BuildRequires: asio-devel
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description
OBS Studio is software designed for capturing, compositing, encoding, recording, and streaming video content, efficiently.
%package libs
Summary: Open Broadcaster Software Studio libraries
%{?_qt6:Requires: %{_qt6}%{?_isa} >= %{_qt6_version}}
%description libs
Library files for Open Broadcaster Software
%package devel
Summary: Open Broadcaster Software Studio header files
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description devel
Header files for Open Broadcaster Software
%prep
%setup -q
# remove -Werror flag to mitigate FTBFS with ffmpeg 5.1
sed -i 's|-Werror-implicit-function-declaration||g' CMakeLists.txt
## remove Werror to fix compile error
# there's probably a cleaner way to do this by modifying what compile flags
# the rpmbuilder adds
sed -i 's| -Werror||g' cmake/Modules/CompilerConfig.cmake
patch -Np1 < %{PATCH0}
patch -Np1 < %{PATCH1}
patch -Np1 < %{PATCH2}
mkdir -p %{_builddir}/SOURCES/CEF
tar -xjf %{SOURCE1} -C %{_builddir}/SOURCES/CEF --strip-components=1
mkdir -p plugins/obs-vkcapture
tar -xf %{SOURCE2} -C plugins/obs-vkcapture --strip-components=1
cd plugins/obs-vkcapture
sed -i 's/install_obs_plugin_with_data/setup_plugin_target/g' CMakeLists.txt
sed -i 's/obs\///g' src/vkcapture.c
cd ../../
%build
mkdir -p build && cd build
cmake \
-DUNIX_STRUCTURE=1 \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DENABLE_BROWSER=ON \
-DENABLE_LIBFDK=ON \
-DENABLE_JACK=ON \
-DENABLE_SNDIO=ON \
-DENABLE_AJA=OFF \
-DLUAJIT_INCLUDE_DIR="$(pkg-config --cflags luajit | cut -d'I' -f2)" \
-DCEF_ROOT_DIR="%{_builddir}/SOURCES/CEF" \
-DOBS_VERSION_OVERRIDE="%{rel_ver}" \
..
%install
%cmake_install
# Add missing files to enable the build of obs-ndi
mkdir -p %{buildroot}%{_libdir}/cmake/libobs/
install -Dm644 UI/obs-frontend-api/obs-frontend-api.h %{buildroot}%{_includedir}/obs/
install -Dm644 cmake/external/ObsPluginHelpers.cmake %{buildroot}%{_libdir}/cmake/libobs/
# cleanup gamecapture plugin files, we ship these in a separate package obs-studio-gamecapture to allow 32 and 64 bit versions
rm %{buildroot}/%{_bindir}/obs-vkcapture
rm %{buildroot}/%{_bindir}/obs-glcapture
rm %{buildroot}/%{_bindir}/obs-gamecapture
rm %{buildroot}/%{_datadir}/vulkan/implicit_layer.d/*.json
rm %{buildroot}/%{_libdir}/libobs_glcapture.so
rm %{buildroot}/%{_libdir}/libVkLayer_obs_vkcapture.so
# copy CEF license because we need to distribute it with the binary
cp %{_builddir}/SOURCES/CEF/LICENSE.txt cef_license.txt
# delete unessesary files
rm -rf %{buildroot}/home
%fdupes %{buildroot}%{_datadir}/obs
%suse_update_desktop_file com.obsproject.Studio
%post
/sbin/ldconfig
%icon_theme_cache_post
%postun
/sbin/ldconfig
%icon_theme_cache_postun
%files
%doc README.rst
%license UI/data/license/gplv2.txt
%license COPYING
%license cef_license.txt
%{_bindir}/obs
%{_bindir}/obs-ffmpeg-mux
%{_bindir}/obs-amf-test
%{_datadir}/metainfo/com.obsproject.Studio.appdata.xml
%{_datadir}/applications/com.obsproject.Studio.desktop
%{_datadir}/icons/hicolor/*/apps/com.obsproject.Studio.*
%{_datadir}/obs/
%files libs
%{_libdir}/obs-plugins/
%{_libdir}/obs-scripting/
# unversioned so files packaged for third-party plugins (cf. rfbz#5999)
%{_libdir}/*.so
%{_libdir}/*.so.*
%files devel
%{_libdir}/cmake/libobs/
%{_libdir}/cmake/obs-frontend-api/
%{_libdir}/pkgconfig/libobs.pc
%{_includedir}/obs/
%changelog