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