File retroarch.spec of Package retroarch

#
# spec file for package retroarch
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%define projectname retroarch
%global flavor @BUILD_FLAVOR@%nil
%define v3 0
%if "%flavor" == "v3"
%define v3 1
%endif

Version:        1.21.0
Release:        0
%if "%{flavor}" != ""
Name:           retroarch%{?flavor:-}%{?flavor}
Provides:       retroarch = %{version}-%{release}
%else
Name:           retroarch
%endif
Summary:        Emulator frontend
License:        GPL-3.0-only
Group:          System/Emulators/Other
URL:            http://www.retroarch.com
Source0:        %{projectname}-%{version}.tar.gz
Source1:        %{projectname}_migrate_old_config.py

BuildRequires:  fdupes
BuildRequires:  gcc-c++
BuildRequires:  libminiupnpc-devel
BuildRequires:  mbedtls-devel
BuildRequires:  p7zip
BuildRequires:  pkgconfig
BuildRequires:  python3-devel
BuildRequires:  unzip
# just like with PPSSPP, Qt frontend is obsolete: https://github.com/libretro/RetroArch/issues/16913
BuildRequires:  pkgconfig(Qt6Concurrent)
BuildRequires:  SDL3-devel
BuildRequires:  SDL3_image-devel
BuildRequires:  SDL3_ttf-devel
BuildRequires:  pkgconfig(Qt6Core)
BuildRequires:  pkgconfig(Qt6Gui)
BuildRequires:  pkgconfig(Qt6Network)
BuildRequires:  pkgconfig(Qt6Widgets)
BuildRequires:  pkgconfig(SDL2_gfx)
BuildRequires:  pkgconfig(SDL2_image)
BuildRequires:  pkgconfig(SDL2_mixer)
BuildRequires:  pkgconfig(SDL2_net)
BuildRequires:  pkgconfig(SDL2_ttf)
BuildRequires:  pkgconfig(alsa)
BuildRequires:  pkgconfig(bluez)
BuildRequires:  pkgconfig(caca)
BuildRequires:  pkgconfig(dbus-1)
BuildRequires:  pkgconfig(dbus-1)
BuildRequires:  pkgconfig(flac)
BuildRequires:  pkgconfig(freetype2)
BuildRequires:  pkgconfig(gbm)
BuildRequires:  pkgconfig(gl)
BuildRequires:  pkgconfig(jack)
BuildRequires:  pkgconfig(libass)
BuildRequires:  pkgconfig(libdrm)
BuildRequires:  pkgconfig(libpipewire-0.3)
BuildRequires:  pkgconfig(libpulse)
BuildRequires:  pkgconfig(libsystemd)
BuildRequires:  pkgconfig(libudev)
BuildRequires:  pkgconfig(libusb-1.0)
BuildRequires:  pkgconfig(libv4l2)
BuildRequires:  pkgconfig(sdl2-compat)
# it uses bundled lua-5.3
#BuildRequires:  pkgconfig(luajit)
BuildRequires:  pkgconfig(openal)
BuildRequires:  pkgconfig(openal)
BuildRequires:  pkgconfig(openssl)
#BuildRequires:  pkgconfig(osmesa)
BuildRequires:  pkgconfig(sdl2)
BuildRequires:  glslang-devel
BuildRequires:  update-desktop-files
BuildRequires:  pkgconfig(SPIRV-Tools)
BuildRequires:  pkgconfig(libavcodec)
BuildRequires:  pkgconfig(libavdevice)
BuildRequires:  pkgconfig(libavformat)
BuildRequires:  pkgconfig(libavutil)
BuildRequires:  pkgconfig(libswscale)
#BuildRequires:  pkgconfig(mpv)
BuildRequires:  pkgconfig(spirv-cross-c-shared)
BuildRequires:  pkgconfig(libdecor-0)
BuildRequires:  pkgconfig(vulkan)
BuildRequires:  pkgconfig(wayland-egl)
BuildRequires:  pkgconfig(wayland-protocols)
BuildRequires:  pkgconfig(x11)
BuildRequires:  pkgconfig(xinerama)
BuildRequires:  pkgconfig(xkbcommon)
BuildRequires:  pkgconfig(xscrnsaver)
BuildRequires:  pkgconfig(xv)
BuildRequires:  pkgconfig(xxf86vm)
BuildRequires:  pkgconfig(zlib)
# libroar is not in OBS ? OpenVG is also absent
#BuildRequires:  pkgconfig(libroar)
#BuildRequires:  pkgconfig(rsound)

# Shared data
Recommends:     retroarch-joypad-autoconfig
Recommends:     libretro-core-info
Recommends:     libretro-database
Recommends:     libretro-glsl-shaders
Recommends:     retroarch-assets

# Emulation cores

# Arcade/MAME
# MAME 2003 Plus has the best performance, supporting most games before 2000
Recommends:     libretro-mame2003-plus

# Atari 2600
Recommends:     libretro-stella
# Atari 5200
Recommends:     libretro-atari800
# Atari 7800
Recommends:     libretro-prosystem
# Atari Jaguar
Recommends:     libretro-virtualjaguar
# Atari Lynx
Recommends:     libretro-handy

# Nintendo Entertainment System (NES)
Recommends:     libretro-nestopia
# Super Nintendo Entertainment System (SNES)
Recommends:     libretro-bsnes
# Nintendo 64 (N64)
Recommends:     libretro-parallel-n64
# GameCube (GC) and Wii (not fully working yet)
Recommends:     libretro-dolphin

# Nintendo Game Boy Color (GBC)
Recommends:     libretro-gambatte
# Nintendo Game Boy Advance (GBA)
Recommends:     libretro-mgba
# Nintendo DS (NDS)
Recommends:     libretro-desmume
# Nintendo 3DS (3DS)
Recommends:     libretro-citra

# Sega Genesis/Mega Drive (MD)
Recommends:     libretro-picodrive
# Sega Saturn (SS)
Recommends:     libretro-yabause
# Sega Dreamcast (DC)
Recommends:     libretro-flycast

# Sony PlayStation (PSX)
%ifarch armv6l armv6hl armv7l armv7hl aarch64
Recommends:     libretro-pcsx-rearmed
%else
Recommends:     libretro-beetle-psx-hw
%endif
# Sony PlayStation 2 (PS2)
Recommends:     libretro-play
# Sony PlayStation Portable (PSP)
Recommends:     libretro-ppsspp

# Amstrad
Recommends:     libretro-crocods
# Amstrad CPC
Recommends:     libretro-cap32
# Bandai WonderSwan
Recommends:     libretro-beetle-wswan
# Fairchild ChannelF
Recommends:     libretro-freechaf
# Game & Watch
Recommends:     libretro-gw
# Mattel Intellivision
Recommends:     libretro-freeintv
# MS DOS
Recommends:     libretro-dosbox
# MSX
Recommends:     libretro-bluemsx
# Neo Geo Pocket
Recommends:     libretro-beetle-ngp
# PC Engine/TurboGrafx-16
Recommends:     libretro-beetle-pce-fast
# ZX 81
Recommends:     libretro-81
# ZX Spectrum
Recommends:     libretro-fuse

# Game and game engine cores

Recommends:     libretro-2048
Recommends:     libretro-3dengine
Recommends:     libretro-chailove
Recommends:     libretro-craft
Recommends:     libretro-easyrpg
Recommends:     libretro-ffmpeg
Recommends:     libretro-gme

# Xbox One/Series controller wireless driver
Recommends:     xpadneo

#v3 handling
%if %{v3}
Conflicts:      retroarch
%endif

%description
RetroArch is a modular multi-system emulator system that is designed to be
fast, lightweight, and portable. It has features few other emulators frontends
have, such as real-time rewinding and game-aware shading.

%prep
%autosetup -n %{projectname}-%version
sed -i -e "s:check_val '' SDL2 -lSDL2.*$:check_pkgconf SDL2 sdl2-compat 2.0.0:g" qb/config.libs.sh
# Change /usr/bin/env python to /usr/bin/python
sed -i s~%{_bindir}/env\ python~%{_bindir}/python~g tools/cg2glsl.py

%build
#    --enable-qt_wrapper \
#    --disable-qt \
#    --enable-osmesa \
export CFLAGS="%{optflags}"
%if %{v3}
export CFLAGS="$CFLAGS -march=x86-64-v3 -O3"
%endif
export CXXFLAGS="$CFLAGS"
./configure --prefix=%{_prefix} \
    --enable-materialui \
    --enable-xmb \
    --enable-sdl2 \
    --enable-udev \
    --enable-threads \
    --enable-thread_storage \
    --enable-ffmpeg \
    --enable-ssa \
    --enable-dylib \
    --enable-networking \
    --enable-networkgamepad \
    --enable-opengl \
    --enable-x11 \
    --enable-xshm \
    --enable-xinerama \
    --enable-kms \
    --enable-wayland \
    --enable-egl \
    --enable-zlib \
    --enable-alsa \
    --enable-al \
    --enable-jack \
    --enable-pulse \
    --enable-pipewire \
    --enable-freetype \
    --enable-xvideo \
    --enable-v4l2 \
    --enable-caca \
    --enable-dbus \
    --enable-plain_drm \
    --enable-qt \
    --enable-dbus \
    --enable-ssl \
%ifarch x86
    --enable-sse \
%endif
%if ( 0%{?suse_version} || 0%{?leap_version} )
    --enable-vulkan \
%endif
    --enable-7zip \
    --enable-xdelta \
    --enable-lua \
    --enable-mmap
make %{?_smp_mflags}

%install
%make_install
install -m 0755 %{SOURCE1} %{buildroot}%{_bindir}/%{projectname}_migrate_old_config

%fdupes %{buildroot}

%post
%{_bindir}/%{projectname}_migrate_old_config

%files
%config(noreplace) %{_sysconfdir}/%{projectname}.cfg
%{_bindir}/%{projectname}
%{_bindir}/%{projectname}_migrate_old_config
%{_bindir}/%{projectname}-cg2glsl
#{_datadir}/%{projectname}
%{_datadir}/applications/com.libretro.RetroArch.desktop
%{_datadir}/metainfo/com.libretro.*.xml
%{_datadir}/pixmaps/com.libretro.RetroArch.svg
%{_mandir}/man?/%{projectname}.?*
%{_mandir}/man?/%{projectname}-cg2glsl.?*
%{_datadir}/doc/%{projectname}

%changelog
openSUSE Build Service is sponsored by