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