File pcsx2.spec of Package pcsx2

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

%define plutovg  1.1.0
%define plutosvg 0.0.7
%define patches  %(basename %{_sourcedir}/pcsx2_patches-* | cut -d'-' -f2)

Name:           pcsx2
Version:        2.3.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:        _service
Source10:       https://github.com/sammycage/plutovg/archive/v%{plutovg}/plutovg-%{plutovg}.tar.gz
Source11:       https://github.com/sammycage/plutosvg/archive/v%{plutosvg}/plutosvg-%{plutosvg}.tar.gz
Source99:       %{name}.rpmlintrc
Patch0:         fix-use-3rdparty-plutosvg.patch
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(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(plutovg) = %{plutovg}
Provides:       bundled(plutosvg) = %{plutosvg}
Provides:       bundled(pcsx2_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 pcsx2_patches %{patches}

%prep
#%%autosetup -n %%{_sourcedir}/%%{name}-%%{version} -T -D -p1
%setup -q -c -n b -T -D
cd .. && rmdir b && ln -s %{_sourcedir}/%{name}-%{version} b && cd b
%autopatch -p1

mkdir 3rdparty/plutosvg
tar -xf %{SOURCE11} --strip-components=1 -C 3rdparty/plutosvg
tar -xf %{SOURCE10} --strip-components=1 -C 3rdparty/plutosvg/plutovg

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

%build
%define __builder ninja
# -DDISABLE_ADVANCE_SIMD=ON: the name of this option is misleading. it actually
# build multiple binary for different instruction sets. it is more compatible
# to both old and new CPU.
%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 \
	-DDISABLE_ADVANCE_SIMD=ON \
	-DENABLE_SETCAP=OFF \
	-DPACKAGE_MODE=ON \
	-DUSE_VULKAN=ON \
	-DWAYLAND_API=ON \
	-DX11_API=ON
%cmake_build

%install
%cmake_install

7z a -r %{buildroot}%{_datadir}/PCSX2/resources/patches.zip \
	%{_sourcedir}/pcsx2_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/pcsx2-qt.desktop \
	%{buildroot}%{_datadir}/applications/net.pcsx2.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/pcsx2-qt.metainfo.xml.in \
    > %{buildroot}%{_datadir}/metainfo/net.pcsx2.PCSX2.appdata.xml

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

%check
desktop-file-validate %{buildroot}%{_datadir}/applications/net.pcsx2.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.pcsx2.PCSX2.desktop
%{_datadir}/icons/hicolor/512x512/apps/PCSX2.png
%{_datadir}/metainfo/net.pcsx2.PCSX2.appdata.xml

%changelog
openSUSE Build Service is sponsored by