File mpv.spec of Package mpv
%define realname mpv
%define realver 0.40.0
%define srcext tar.gz
%define so_ver 2
# Common info
Name: %{realname}
Version: %{realver}
Release: wiz%{?extraver:0.}1%{?dist}
License: GPL-2.0+
Group: Productivity/Multimedia/Video/Players
URL: https://mpv.io/
Summary: Command line video player
# Install-time parameters
# Build-time parameters
BuildRequires: meson >= 0.62.0
BuildRequires: pkg-config
BuildRequires: ninja
BuildRequires: yasm
# ffmpeg
BuildRequires: pkgconfig(libavcodec) >= 60.31.102
BuildRequires: pkgconfig(libavdevice) >= 60.3.100
BuildRequires: pkgconfig(libavfilter) >= 9.12.100
BuildRequires: pkgconfig(libavformat) >= 60.16.100
BuildRequires: pkgconfig(libavutil) >= 58.29.100
BuildRequires: pkgconfig(libswresample) >= 4.12.100
BuildRequires: pkgconfig(libswscale) >= 7.5.100
#
BuildRequires: pkgconfig(libplacebo) >= 6.338.2
BuildRequires: pkgconfig(libass) >= 0.12.2
BuildRequires: pkgconfig(lcms2) >= 2.6
BuildRequires: pkgconfig(libarchive) >= 3.4.0
BuildRequires: pkgconfig(libbluray) >= 0.3.0
BuildRequires: pkgconfig(lua) < 5.3.0
BuildRequires: pkgconfig(sdl2)
BuildRequires: pkgconfig(uchardet)
BuildRequires: pkgconfig(zimg) >= 2.9
BuildRequires: pkgconfig(zlib)
# audio output dependencies
BuildRequires: pkgconfig(alsa) >= 1.0.18
BuildRequires: pkgconfig(openal) >= 1.13
BuildRequires: pkgconfig(libpipewire-0.3) >= 0.3.57
BuildRequires: pkgconfig(libpulse) >= 1.0
# video output dependencies
BuildRequires: pkgconfig(libdrm) >= 2.4.105
BuildRequires: pkgconfig(gbm) >= 17.1.0
BuildRequires: pkgconfig(libjpeg)
BuildRequires: wayland-devel
BuildRequires: pkgconfig(wayland-client) >= 1.21.0
BuildRequires: pkgconfig(wayland-cursor) >= 1.21.0
BuildRequires: pkgconfig(wayland-protocols) >= 1.31
BuildRequires: pkgconfig(xkbcommon) >= 0.3.0
BuildRequires: pkgconfig(x11) >= 1.0.0
BuildRequires: pkgconfig(xscrnsaver) >= 1.0.0
BuildRequires: pkgconfig(xext) >= 1.0.0
BuildRequires: pkgconfig(xpresent) >= 1.0.0
BuildRequires: pkgconfig(xrandr) >= 1.4.0
BuildRequires: pkgconfig(xv)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(egl) >= 1.4.0
BuildRequires: pkgconfig(wayland-egl) >= 9.0.0
# vulkan
BuildRequires: pkgconfig(vulkan) >= 1.3.238
# hwaccel
BuildRequires: pkgconfig(ffnvcodec) >= 11.1.5.1
BuildRequires: pkgconfig(libva) >= 1.1.0
BuildRequires: pkgconfig(libva-drm) >= 1.1.0
BuildRequires: pkgconfig(libva-wayland) >= 1.1.0
BuildRequires: pkgconfig(libva-x11) >= 1.1.0
BuildRequires: pkgconfig(vdpau) >= 0.2
# man-pages
BuildRequires: python3-docutils
Source0: https://codeload.github.com/mpv-player/mpv/%{srcext}/refs/tags/v%{realver}#/%{realname}-%{realver}%{?extraver}.%{srcext}
%description
mpv is a free (as in freedom) media player for the command line. It supports
a wide variety of media file formats, audio and video codecs, and subtitle types.
%package -n lib%{realname}%{?so_ver}
License: LGPL-2.1+
Group: System/Libraries
Summary: A library providing mpv player functionality
%description -n lib%{realname}%{?so_ver}
mpv is a free (as in freedom) media player for the command line. It supports
a wide variety of media file formats, audio and video codecs, and subtitle types.
mpv can be embedded into other programs as video/audio playback backend.
The recommended way to do so is using libmpv.
%package devel
License: LGPL-2.1+
Group: Development/Languages/C and C++
Summary: Development files for libmpv - mpv player library
%description devel
mpv is a free (as in freedom) media player for the command line. It supports
a wide variety of media file formats, audio and video codecs, and subtitle types.
mpv can be embedded into other programs as video/audio playback backend.
This provides a C API.
%package bash-completion
Group: System/Shells
Summary: Bash Completion for mpv
Requires: mpv = %{version}-%{release}
Enhances: mpv = %{version}-%{release}
Suggests: bash
%description bash-completion
Bash command line completion support for mpv.
%package fish-completion
Group: System/Shells
Summary: Fish Completion for mpv
Requires: mpv = %{version}-%{release}
Enhances: mpv = %{version}-%{release}
Suggests: fish
%description fish-completion
Fish command line completion support for mpv.
%package zsh-completion
Group: System/Shells
Summary: ZSH Completion for mpv
Requires: mpv = %{version}-%{release}
Enhances: mpv = %{version}-%{release}
Suggests: zsh
%description zsh-completion
ZSH command line completion support for mpv.
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}
%{__sed} -ri 's/FF(_PROFILE_[A-Z_]+)/AV\1/' demux/demux_mkv.c
%build
_CFLAGS='%{optflags}'
_LDFLAGS='-Wl,--strip-all -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro'
meson setup build \
--buildtype=release \
--optimization=2 \
--strip \
\
--sysconfdir=%{_sysconfdir} \
--prefix=%{_prefix} \
--libdir=%{_libdir} \
--datadir=%{_datadir} \
--default-library=shared \
\
-Db_lto=true \
-Db_ndebug=if-release \
-Dc_args="$_CFLAGS" \
-Dc_link_args="$_LDFLAGS" \
\
-Dbuild-date=false \
-Dsdl2=enabled \
-Dopenal=enabled \
-Dgl-x11=enabled
ninja -v -C build %{?_smp_mflags}
%install
DESTDIR=%{buildroot} ninja -C build install
%files
%defattr(-,root,root)
%license Copyright LICENSE.GPL LICENSE.LGPL
%doc README.md RELEASE_NOTES
%doc etc/input.conf etc/mplayer-input.conf etc/mpv.conf etc/restore-old-bindings.conf
%dir %{_sysconfdir}/mpv
%config(noreplace) %{_sysconfdir}/mpv/encoding-profiles.conf
%{_bindir}/mpv
%{_datadir}/applications/mpv.desktop
%{_datadir}/icons/hicolor/
%{_datadir}/metainfo/mpv.metainfo.xml
%doc %{_mandir}/man1/mpv.1*
%exclude %{_datadir}/doc
%files -n lib%{realname}%{?so_ver}
%defattr(-,root,root)
%license Copyright LICENSE.LGPL
%{_libdir}/libmpv.so.%{?so_ver}*
%files devel
%defattr(-,root,root)
%license Copyright LICENSE.LGPL
%doc DOCS/tech-overview.txt
%{_includedir}/mpv/
%{_libdir}/libmpv.so
%{_libdir}/pkgconfig/mpv.pc
%files bash-completion
%defattr(-,root,root)
%dir %{_datadir}/bash-completion/completions
%dir %{_datadir}/bash-completion
%{_datadir}/bash-completion/completions/mpv
%files fish-completion
%defattr(-,root,root)
%dir %{_datadir}/fish/vendor_completions.d
%dir %{_datadir}/fish
%{_datadir}/fish/vendor_completions.d/mpv.fish
%files zsh-completion
%defattr(-,root,root)
%dir %{_datadir}/zsh/site-functions
%dir %{_datadir}/zsh
%{_datadir}/zsh/site-functions/_mpv
%post -n lib%{realname}%{?so_ver} -p /sbin/ldconfig
%postun -n lib%{realname}%{?so_ver} -p /sbin/ldconfig
%changelog