File obs-studio.spec of Package obs-studio
# Chromium Embedded Framework
%ifarch x86_64
%bcond_without cef
%define cef_binary cef_binary_5060_linux64
%else
%bcond_with cef
%endif
%if 0%{?suse_version} > 1500
%define qt_version 6
%else
%define qt_version 5
%endif
%bcond_without websockets
Name: obs-studio
Version: 29.1.2
Release: 0
Summary: A recording/broadcasting program
Group: Productivity/Multimedia/Video/Editors and Convertors
License: GPL-2.0
URL: https://obsproject.com/
# we fetch the tarball with a source service, because some subprojects are
# not included in the offical tarball (e.g. obs-browser)
Source: %{name}-%{version}.tar.xz
%if %{with cef}
Source17: %{cef_binary}.tar.bz2
%endif
Patch0: 0002-Include-diverse-luajit.patch
Patch1: 0001-Prefix-modinfo-with-sbin-since-not-in-normal-path.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: update-desktop-files
BuildRequires: cmake >= 2.8.12
BuildRequires: fdk-aac-devel
BuildRequires: fdupes
BuildRequires: fontconfig-devel
BuildRequires: freetype2-devel
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: hicolor-icon-theme
BuildRequires: libXcomposite-devel
BuildRequires: libXinerama-devel
BuildRequires: libXrandr-devel
BuildRequires: libcurl-devel
BuildRequires: libjansson-devel
BuildRequires: pciutils-devel
BuildRequires: pipewire-devel
BuildRequires: libpulse-devel
%if "%{qt_version}" == "5"
BuildRequires: libqt5-qtbase-devel >= 5.3
BuildRequires: libqt5-qtbase-private-headers-devel
BuildRequires: libqt5-qtsvg-devel
BuildRequires: libqt5-qtx11extras-devel >= 5.3
%endif
%if "%{qt_version}" == "6"
BuildRequires: cmake(Qt6Core)
BuildRequires: cmake(Qt6Svg)
BuildRequires: qt6-base-private-devel
%endif
BuildRequires: libudev-devel
BuildRequires: libv4l-devel
BuildRequires: libx264-devel
BuildRequires: mbedtls-devel
BuildRequires: pipewire-devel
BuildRequires: pkgconfig
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(jack)
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavdevice)
BuildRequires: pkgconfig(libavfilter)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavutil)
%ifarch %{ix86} x86_64
BuildRequires: pkgconfig(libmfx)
%endif
BuildRequires: pkgconfig(librist)
BuildRequires: pkgconfig(libswresample)
BuildRequires: pkgconfig(libswscale)
BuildRequires: pkgconfig(libva)
BuildRequires: pkgconfig(lua)
BuildRequires: pkgconfig(luajit)
BuildRequires: pkgconfig(srt) >= 1.4
BuildRequires: pkgconfig(uuid)
%if %{with websockets}
BuildRequires: pkgconfig(nlohmann_json) >= 3
BuildRequires: pkgconfig(websocketpp) >= 0.8.0
BuildRequires: pkgconfig(asio) >= 1.12.1
%endif
BuildRequires: python3-devel
%if 0%{?suse_version} != 1315 || 0%{?is_opensuse}
BuildRequires: speexdsp-devel
%endif
BuildRequires: sndio-devel
BuildRequires: swig
BuildRequires: vlc-devel
%if %{with cef}
BuildRequires: mozilla-nss
BuildRequires: mozilla-nspr
%endif
# these deps couldn't be tracked
Requires: librist4
Requires: libsrt1_5
Requires: libspeexdsp1
Recommends: libqt5-qtwayland
ExclusiveArch: x86_64 aarch64
# these are plugins, built as libs and as such should not be mixed up with their originals
%global __provides_exclude_from ^(%{_libdir}/obs-plugins/.*\\.so.*|%{_libdir}/obs-scripting/.*\\.so.*)$
%global __requires_exclude libcef\\.so
%description
Open Broadcaster Software is free and open source software for video recording and live streaming.
%package devel
Summary: A recording/broadcasting program - Development Files
Group: Development/Multimedia
Requires: %{name} = %{version}
%description devel
Open Broadcaster Software is free and open source software for video recording and live streaming.
%prep
%autosetup -p1
%if %{with cef}
tar xvf %{SOURCE17} -C %{_builddir}
%endif
%build
mkdir -p build && cd build
# does not like cmake macro as it fails to link in math.h (-lma
# the compile flags for 15.{4,5} must be relaxed in order to compile obs-studio successfully
cmake \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_INSTALL_PREFIX=/usr \
%if 0%{?suse_version} == 1500
-DCMAKE_C_FLAGS:STRING="$CFLAGS %{optflags} -Wno-error=type-limits -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-error=return-type -Wno-error=unused-but-set-variable -Wno-error=pointer-sign -Wno-error=reorder" \
-DCMAKE_CXX_FLAGS:STRING="$CXXFLAGS %{optflags} -Wno-error=type-limits -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-error=return-type -Wno-error=unused-but-set-variable -Wno-error=pointer-sign -Wno-error=reorder" \
%endif
-DUNIX_STRUCTURE=1 \
%if "%{_lib}" == "lib64"
-DOBS_MULTIARCH_SUFFIX=64 \
%endif
-DOBS_VERSION_OVERRIDE="$(echo "%{version}" | grep -oE "^[^+]+")" \
-DENABLE_AJA=OFF \
%if 0%{?sle_version} > 150000 && 0%{?sle_version} < 150500 && 0%{?is_opensuse}
-DENABLE_PIPEWIRE=OFF \
%endif
-DENABLE_JACK=ON \
-DENABLE_LIBFDK=ON \
-DENABLE_SNDIO=ON \
%if %{with websockets}
-DENABLE_WEBSOCKET=ON \
%else
-DENABLE_WEBSOCKET=OFF \
%endif
%if %{with cef}
-DBUILD_BROWSER=ON \
-DCEF_ROOT_DIR="%{_builddir}/%{cef_binary}" \
%else
-DBUILD_BROWSER=OFF \
%endif
..
%cmake_build
%install
%cmake_install
%suse_update_desktop_file com.obsproject.Studio
%fdupes %{buildroot}%{_datadir}/obs/
%post
/sbin/ldconfig
%icon_theme_cache_postun
%postun
/sbin/ldconfig
%icon_theme_cache_postun
%files
%{_bindir}/obs
%{_bindir}/obs-ffmpeg-mux
# Upstream forces libs dir regardless of arch and building plugins is encumbered
# by moving them to the proper directory.
%{_libdir}/obs-plugins/
%{_libdir}/libobs.so.*
%{_libdir}/libobs-frontend-api.so.*
%{_libdir}/libobs-opengl.so.*
%{_libdir}/libobs-scripting.so.*
%{_libdir}/obs-scripting/
%dir %{_datadir}/metainfo
%{_datadir}/metainfo/com.obsproject.Studio.appdata.xml
%{_datadir}/applications/com.obsproject.Studio.desktop
%{_datadir}/icons/hicolor
%{_datadir}/obs
%files devel
%{_libdir}/libobs.so
%{_libdir}/libobs-frontend-api.so
%{_libdir}/libobs-opengl.so
%{_libdir}/libobs-scripting.so
%{_libdir}/cmake
%{_libdir}/pkgconfig/libobs.pc
%{_includedir}/obs
%changelog