File pcsx2.spec of Package pcsx2

#
# spec file for package pcsx2
#
# copyright (c) 2025 munix9@googlemail.com
#

%define _patches %(basename -s .tar.gz %{_sourcedir}/%{name}_patches-*.tar.gz | cut -d'-' -f2)

Name:           pcsx2
Version:        2.5.0
Release:        0
Summary:        Sony PlayStation 2 Emulator
License:        GPL-2.0-only AND GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only
URL:            https://pcsx2.net/
Source0:        %{name}-%{version}.tar.gz
Source1:        %{name}_patches-%{_patches}.tar.gz
Source99:       %{name}.rpmlintrc
ExclusiveArch:  x86_64
BuildRequires:  7zip
BuildRequires:  clang
BuildRequires:  cmake
BuildRequires:  desktop-file-utils
BuildRequires:  extra-cmake-modules
BuildRequires:  fdupes
BuildRequires:  git
BuildRequires:  hicolor-icon-theme
BuildRequires:  libbacktrace-devel
BuildRequires:  lld
BuildRequires:  llvm-gold
BuildRequires:  ninja
BuildRequires:  pkgconfig
BuildRequires:  qt6-gui-private-devel
BuildRequires:  cmake(KDDockWidgets-qt6)
BuildRequires:  pkgconfig(Qt6Concurrent)
BuildRequires:  pkgconfig(Qt6Core)
BuildRequires:  pkgconfig(Qt6Gui)
BuildRequires:  pkgconfig(Qt6Linguist)
BuildRequires:  pkgconfig(Qt6Network)
BuildRequires:  pkgconfig(Qt6WaylandClient)
BuildRequires:  pkgconfig(Qt6WaylandCompositor)
BuildRequires:  pkgconfig(Qt6Widgets)
BuildRequires:  pkgconfig(alsa)
BuildRequires:  pkgconfig(dbus-1)
BuildRequires:  pkgconfig(egl)
BuildRequires:  pkgconfig(freetype2)
BuildRequires:  pkgconfig(gl)
BuildRequires:  pkgconfig(jack)
BuildRequires:  pkgconfig(libavcodec)
BuildRequires:  pkgconfig(libavformat)
BuildRequires:  pkgconfig(libavutil)
BuildRequires:  pkgconfig(libcurl)
BuildRequires:  pkgconfig(libjpeg)
BuildRequires:  pkgconfig(liblz4)
BuildRequires:  pkgconfig(liblzma)
BuildRequires:  pkgconfig(libpcap)
BuildRequires:  pkgconfig(libpng16)
BuildRequires:  pkgconfig(libpulse)
BuildRequires:  pkgconfig(libswresample)
BuildRequires:  pkgconfig(libswscale)
BuildRequires:  pkgconfig(libudev)
BuildRequires:  pkgconfig(libwebp)
BuildRequires:  pkgconfig(libzstd)
BuildRequires:  pkgconfig(plutosvg)
BuildRequires:  pkgconfig(samplerate)
BuildRequires:  pkgconfig(sdl3)
BuildRequires:  pkgconfig(shaderc)
BuildRequires:  pkgconfig(sndio)
BuildRequires:  pkgconfig(vulkan)
BuildRequires:  pkgconfig(wayland-egl)
BuildRequires:  pkgconfig(x11)
BuildRequires:  pkgconfig(xrender)
BuildRequires:  pkgconfig(zlib)
Provides:       bundled(%{name}_patches) = %{_patches}

%description
Sony PlayStation 2 emulator. Requires a BIOS image in %{_datadir}/PCSX2/bios
or in ~/.config/PCSX2/bios in your HOME directory (will be created when you
first run PCSX2).
Check https://pcsx2.net/docs/setup/bios for details on which files you need
and how to obtain them.

Includes %{name}_patches %{_patches}

%prep
%autosetup -a1 -p1

sed -e 's/PCSX2_GIT_REV "Unknown"/PCSX2_GIT_REV "%{version}"/' \
    -i cmake/Pcsx2Utils.cmake

%build
%define __builder ninja
%cmake \
	-DBUILD_SHARED_LIBS=OFF \
	-DCMAKE_C_COMPILER=clang \
	-DCMAKE_C_COMPILER_AR=%{_bindir}/ar \
	-DCMAKE_C_COMPILER_RANLIB=%{_bindir}/ranlib \
	-DCMAKE_CXX_COMPILER=clang++ \
	-DCMAKE_CXX_COMPILER_AR=%{_bindir}/ar \
	-DCMAKE_CXX_COMPILER_RANLIB=%{_bindir}/ranlib \
	-DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" \
	-DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" \
	-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
	-DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON \
	-DDISABLE_ADVANCE_SIMD=ON \
	-DENABLE_SETCAP=OFF \
	-DPACKAGE_MODE=ON \
	-DUSE_LINKED_FFMPEG=ON
%cmake_build

%install
%cmake_install

7z a -r %{buildroot}%{_datadir}/PCSX2/resources/patches.zip \
	%{name}_patches-%{_patches}/patches/.
echo "%{_patches}" > %{buildroot}%{_datadir}/PCSX2/resources/patches.version
install -d -m 0755 %{buildroot}%{_datadir}/PCSX2/bios
install -D -m 0644 bin/resources/icons/AppIconLarge.png \
	%{buildroot}%{_datadir}/icons/hicolor/512x512/apps/PCSX2.png
install -D -m 0644 .github/workflows/scripts/linux/%{name}-qt.desktop \
	%{buildroot}%{_datadir}/applications/net.%{name}.PCSX2.desktop

install -d -m 0755 %{buildroot}%{_datadir}/metainfo
_date="$(date -u -d@$SOURCE_DATE_EPOCH -I)"
sed -e "s/@GIT_VERSION@/%{version}/;s/@GIT_DATE@/$_date/" \
    -e '/<custom>/d;/flathub/d;/<\/custom>/d' \
	.github/workflows/scripts/linux/%{name}-qt.metainfo.xml.in \
    > %{buildroot}%{_datadir}/metainfo/net.%{name}.PCSX2.appdata.xml

%fdupes -s %{buildroot}%{_datadir}

%check
desktop-file-validate %{buildroot}%{_datadir}/applications/net.%{name}.PCSX2.desktop
%ctest --parallel 1 --timeout 60 --verbose

%files
%license COPYING.GPLv3
%doc README.md
%caps(cap_net_raw=eip cap_net_admin=eip) %{_bindir}/%{name}-qt
%{_datadir}/PCSX2
%{_datadir}/applications/net.%{name}.PCSX2.desktop
%{_datadir}/icons/hicolor/512x512/apps/PCSX2.png
%{_datadir}/metainfo/net.%{name}.PCSX2.appdata.xml

%changelog
openSUSE Build Service is sponsored by