File steam.spec of Package steam

# #
# spec file for package steam
#
# 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/
#


# Binary package; No DEBUGGING should be generated
%global debug_package %{nil}
#
# Define PACKAGE_ID
%global appstream_id  com.valvesoftware.Steam
#
# For SUSE Only; defined in FEDORA and MAGEIA
%if 0%{?sle_version} && 0%{?is_opensuse} || 0%{?suse_version}
%define _metainfodir  %{_datadir}/metainfo/
%endif
#
# For MAGEIA Only; This MACRO is non-existing there
%if 0%{?mageia}
%define _mandir       %{_datadir}/man/
%endif
#
# Combine 32+64-bit Dependencies for SUSE Only
%define suse_dependency()            \
%ifarch   %{ix86}                    \
Requires: %{1}                       \
%else                                \
Requires: %{1}                       \
Requires: %{1}-32bit                 \
%endif                               \
%{nil}
%define suse_booldependency()        \
%ifarch   x86_64                     \
Requires: (%{1}-32bit if %{1})       \
%endif                               \
%{nil}
%define suse_nvidia_dependency()     \
%ifarch              x86_64          \
%suse_booldependency %{1}G04         \
%suse_booldependency %{1}G05         \
%endif                               \
%{nil}
%define suse_nvidia_new_dependency() \
%ifarch              x86_64          \
%suse_booldependency %{1}-G06        \
%endif                               \
%{nil}
#
# Combine 32+64-bit Dependencies for Fedora Only
%define fedora_dependency()          \
%ifarch   %{ix86}                    \
Requires: %{1}%{?_isa}               \
%else                                \
Requires: %{1}%{?_isa}               \
Requires: %{1}(x86-32)               \
%endif                               \
%{nil}
#
# Combine 32+64-bit Dependencies for Mageia Only
%define mageia_dependency()          \
%ifarch   %{ix86}                    \
Requires: lib%{1}                    \
%else                                \
Requires: lib64%{1}                  \
Requires: lib%{1}                    \
%endif                               \
%{nil}
#


Name:           steam
Version:        1.0.0.83
Release:        0
Summary:        A digital platform for buying, managing, and playing video games and software

License:        MIT and SUSE-NonFree
URL:            https://steampowered.com/
Source0:        https://repo.steampowered.com/steam/pool/steam/s/steam/steam_1.0.0.83.tar.gz#/%{name}-%{version}.tar.gz
Source1:        https://repo.steampowered.com/steam/pool/steam/s/steam/steam_1.0.0.83.dsc#/%{name}.keyring
Source2:        steam--systemd-file_descriptor_limit.conf
Patch0:         steam-install+run.patch

ExclusiveArch:  %{ix86} x86_64


BuildRequires:  bash
BuildRequires:  desktop-file-utils
BuildRequires:  fdupes
BuildRequires:  hicolor-icon-theme
BuildRequires:  make
BuildRequires:  patchelf
BuildRequires:  (procps or procps-ng)
BuildRequires:  systemd
BuildRequires:  tar
BuildRequires:  zenity
# Only on/for MAGEIA
%if 0%{?mageia}
BuildRequires:  (libappstream-glib8 or lib64appstream-glib8)
#
# For the Rest of RPM-Based Linux Distributions
%else
BuildRequires:  (appstream-glib or libappstream-glib)
%endif
#

# Dependencies on/for SUSE:
%if 0%{?sle_version} && 0%{?is_opensuse} || 0%{?suse_version}
Requires:                   AppStream
Requires:                   curl
Requires:                   dbus-1       dbus-1-glib-tool
Requires:                   glibc-extra  glibc-locale-base
Requires:                   gtk2         gtk2-engine-oxygen
Requires:                   lsb-release
Requires:                   NetworkManager
Requires:                   (pipewire           or pulseaudio)
Requires:                   (alsa-plugins-pulse if pulseaudio)
Requires:                   (pipewire-alsa      if pipewire)
Requires:                   python3
Requires:                   (selinux-policy-targeted-gaming if selinux-policy-targeted)
Requires:                   systemd
Requires:                   tar
Requires:                   xdg-desktop-portal
Requires:                   xrandr
Requires:                   xz
Requires:                   zenity
%suse_dependency            dbus-1-glib
%suse_dependency            fontconfig
%suse_dependency            glibc
%suse_dependency            gtk2-engine-oxygen
%suse_dependency            libcups2
%suse_dependency            libatk-1_0-0
%suse_dependency            libavif16
%suse_dependency            libcairo2
%suse_dependency            libcrypt1
%suse_dependency            libcurl4
%suse_dependency            libdbus-1-3
%suse_dependency            libdrm2
%suse_dependency            libfreetype6
%suse_dependency            libgcc_s1
%suse_dependency            libgcrypt20
%suse_dependency            libgdk_pixbuf-2_0-0
%suse_dependency            libglib-2_0-0
%suse_dependency            libgmodule-2_0-0
%suse_dependency            libgobject-2_0-0
%suse_dependency            libgtk-2_0-0
%suse_dependency            libICE6
%suse_dependency            libogg0
%suse_dependency            libopenal1
%suse_dependency            libpango-1_0-0
%suse_dependency            libpipewire-0_3-0
%suse_dependency            libpixman-1-0
%suse_dependency            libpng12-0
%suse_dependency            libpulse0
%suse_dependency            libSDL2-2_0-0
%suse_dependency            libSM6
%suse_dependency            libstdc++6
%suse_dependency            libtheora1
%suse_dependency            libudev1
%suse_dependency            libusb-1_0-0
%suse_dependency            libva2
%suse_dependency            libva-drm2
%suse_dependency            libva-glx2
%suse_dependency            libva-x11-2
%suse_dependency            libvdpau1
%suse_dependency            libvorbis0
%suse_dependency            libvulkan1
%suse_dependency            libX11-6
%suse_dependency            libxcb-dri2-0
%suse_dependency            libxcb-glx0
%suse_dependency            libxcb-res0
%suse_dependency            libXdmcp6
%suse_dependency            libXext6
%suse_dependency            libXfixes3
%suse_dependency            libXi6
%suse_dependency            libxkbcommon-x11-0
%suse_dependency            libXrandr2
%suse_dependency            libXrender1
%suse_dependency            libXtst6
%suse_dependency            libz1
%suse_dependency            Mesa         Mesa-dri
%suse_dependency            Mesa-libGL1  Mesa-libEGL1
%suse_dependency            mozilla-nspr
%suse_dependency            mozilla-nss
%suse_booldependency        libgbm1
%suse_booldependency        libnm0
%suse_booldependency        libvulkan_intel
%suse_booldependency        libvulkan_radeon
%suse_booldependency        Mesa-libGL1
%suse_nvidia_dependency     nvidia-compute
%suse_nvidia_dependency     nvidia-gl
%suse_nvidia_dependency     x11-video-nvidia
%suse_nvidia_new_dependency nvidia-compute
%suse_nvidia_new_dependency nvidia-gl
%suse_nvidia_new_dependency nvidia-video
%endif
#
# Dependencies on/for FEDORA:
%if 0%{?fedora}
Requires:          appstream
Requires:          cryptlib
Requires:          curl
Requires:          dbus
Requires:          libobjc2
Requires:          lsb_release
Requires:          NetworkManager
Requires:          (pipewire                        or pulseaudio)
Requires:          (alsa-plugins-pulseaudio%{?_isa} if pulseaudio)
Requires:          (pipewire-alsa%{?_isa}           if pipewire)
Requires:          python3
Requires:          systemd
Requires:          tar
Requires:          xdg-desktop-portal
Requires:          xz
Requires:          zenity
%fedora_dependency atk
%fedora_dependency cairo
%fedora_dependency cups-libs
%fedora_dependency dbus-glib
%fedora_dependency dbus-libs
%fedora_dependency fontconfig
%fedora_dependency glibc
%fedora_dependency gtk2
%fedora_dependency oxygen-gtk2
%fedora_dependency libavif
%fedora_dependency libcurl
%fedora_dependency libdrm
%fedora_dependency libgcc
%fedora_dependency libgcrypt
%fedora_dependency libgm2
%fedora_dependency libgo
%fedora_dependency libICE
%fedora_dependency libnsl
%fedora_dependency libobjc
%fedora_dependency libogg
%fedora_dependency libpng
%fedora_dependency libpng12
%fedora_dependency libstdc++
%fedora_dependency libtheora
%fedora_dependency libusb1
%fedora_dependency libva
%fedora_dependency libva-vdpau-driver
%fedora_dependency libxc
%fedora_dependency libxcb
%fedora_dependency libxkbcommon
%fedora_dependency libxkbcommon-x11
%fedora_dependency mesa-dri-drivers
%fedora_dependency mesa-libGL
%fedora_dependency mesa-libEGL
%fedora_dependency mesa-vulkan-drivers
%fedora_dependency nspr
%fedora_dependency nss
%fedora_dependency nss_nis
%fedora_dependency SDL2
%fedora_dependency SDL3
%fedora_dependency vulkan-loader
%fedora_dependency zlib-ng-compat
%endif
#
# Dependencies on/for MAGEIA:
# UNFINISHED YET #
%if 0%{?mageia}
Requires:          appstream
Requires:          curl
Requires:          dbus  dbus-glib
Requires:          fontconfig
Requires:          glibc
Requires:          gtk2-theme-engines
Requires:          libva
Requires:          lsb-release
Requires:          mesa-omx-drivers
Requires:          networkmanager
Requires:          nspr
Requires:          nss
Requires:          oxygen-gtk2
Requires:          (pipewire                     or pulseaudio)
Requires:          (pipewire-alsa                if pipewire)
Requires:          (alsa-plugins-pulse-config    if pulseaudio)
# Only for 32-bits
%ifarch %{ix86}
Requires:          (libalsa-plugins-pulseaudio   if pulseaudio)
# Only for 64-bits
%else
Requires:          (libalsa-plugins-pulseaudio   if pulseaudio)
Requires:          (lib64alsa-plugins-pulseaudio if pulseaudio)
%endif
Requires:          python3
Requires:          systemd
Requires:          tar
Requires:          vaapi-driver-vdpau
Requires:          xdg-desktop-portal
Requires:          xz
Requires:          zenity
%mageia_dependency libdbus1_3
%mageia_dependency libdbus-glib1_2
%mageia_dependency libmesaegl1
%mageia_dependency libmesagl1
%mageia_dependency libmesavulkan-drivers
%mageia_dependency libsdl2.0_0
%mageia_dependency libvulkan-loader1
%endif
# UNFINISHED YET #
#

Recommends:  bubblewrap
Recommends:  (dbus-x11                           or dbus-1-x11)
Recommends:  gamemode
Recommends:  (gnome-shell-extension-appindicator if gnome-shell)
Recommends:  gobject-introspection
Recommends:  (xdg-desktop-portal-gtk             if gnome-shell)
Recommends:  (xdg-desktop-portal-kde             if kwin)
Recommends:  xdg-user-dirs


%description
Steam is a digital distribution platform developed by Valve
that serves as a storefront for video games, software, and even hardware.
It allows users to purchase, download, and manage their game libraries
while offering features like cloud saves, automatic updates,
and multiplayer matchmaking.
Beyond just a store, Steam has evolved into a social hub for gamers,
with community forums, game reviews, and live-streaming capabilities.
It also provides tools for developers through Steamworks,
enabling them to integrate features like digital rights management (DRM),
achievements, and mod support.
Originally launched in 2003,
Steam has grown into one of the largest gaming platforms,
supporting Windows, macOS, Linux, and mobile devices.
It has also expanded into hardware with products like the
Steam Deck and Valve Index.
Nowadays, Steam on Linux uses Proton compatibility layer for Windows-only
games by default.

%prep
%autosetup -p1 -n "%{name}-launcher"

# Extract and Install/Copy `steam-runtime-check-requirements` and `steam-runtime-supervisor` from bootstrap archive to satisfy RPM Lint
mkdir -p  "bootstraplinux_ubuntu12_32/"
tar   -xf "bootstraplinux_ubuntu12_32.tar.xz" -C "bootstraplinux_ubuntu12_32/"
#
# Patch shebang lines to use direct interpreters instead of `/usr/bin/env`
sed -i '1s|#!/usr/bin/env bash|#!/usr/bin/bash|'       "bin_steam.sh"
sed -i '1s|#!/usr/bin/env python3|#!/usr/bin/python3|' "bin_steamdeps.py"
#

%build
#
# Nothing to BUILD - Steam Comes as pre-compiled BINARY
#

%install
# For SUSE
export PATH=$PATH:/usr/sbin
#
%make_install

# Remove '$RPATH' for temporary pre-compiled BINARIES as this is only a masquerade for RPMlint; Better WARNING than ERROR
patchelf --remove-rpath "bootstraplinux_ubuntu12_32/ubuntu12_32/%{name}-runtime/amd64/usr/bin/%{name}-runtime-check-requirements"
patchelf --remove-rpath "bootstraplinux_ubuntu12_32/ubuntu12_32/%{name}-runtime/amd64/usr/bin/%{name}-runtime-supervisor"
# Extract and Install/Copy `steam-runtime-check-requirements` and `steam-runtime-supervisor` from bootstrap archive to satisfy RPMlint
cp  -f  "bootstraplinux_ubuntu12_32/ubuntu12_32/%{name}-runtime/amd64/usr/bin/%{name}-runtime-check-requirements" \
    -t  "%{buildroot}/%{_prefix}/lib/%{name}/"
cp  -f  "bootstraplinux_ubuntu12_32/ubuntu12_32/%{name}-runtime/amd64/usr/bin/%{name}-runtime-supervisor"         \
    -t  "%{buildroot}/%{_prefix}/lib/%{name}/"

#
# Edit non-default GPU Preference in .DESKTOP file; No Need for a Patch
desktop-file-edit \
  --set-key=PrefersNonDefaultGPU --set-value=false \
  "%{name}.desktop"
#
# Raise File Descriptor Limit for SYSTEM and USERS to: 2097152 via a SystemD Configuration File
install -Dm644 %{SOURCE2} -T "%{buildroot}/%{_prefix}/lib/systemd/system.conf.d/10-%{name}.conf"
install -Dm644 %{SOURCE2} -T "%{buildroot}/%{_prefix}/lib/systemd/user.conf.d/11-%{name}.conf"
#
# Remove `steamdeps` SYMLINK in /usr/bin/ as it is related to APT (DEBIAN-Like) only
rm -f %{buildroot}/%{_bindir}/%{name}deps
#

%check
# Search and merge duplicates
%fdupes                                %{buildroot}/
#
desktop-file-validate                 "%{buildroot}/%{_datadir}/applications/%{name}.desktop"
# Only for SUSE and FEDORA
%if 0%{?sle_version} && 0%{?is_opensuse} || 0%{?suse_version} || 0%{?fedora}
appstream-util validate-relax --nonet "%{buildroot}/%{_metainfodir}/%{appstream_id}.metainfo.xml"
%endif
#

%posttrans
# For SUSE
export PATH=$PATH:/usr/sbin
#
# Raise File Descriptor Limit to: 2097152 and then RELOAD SystemD
sysctl -w fs.nr_open=2097152
systemctl daemon-reload
ulimit -Hn

%postuntrans
# For SUSE
export PATH=$PATH:/usr/sbin
#
# Reverting File Descriptor Limit back to: 1048576 and then RELOAD SystemD
sysctl -w fs.nr_open=1048576
systemctl daemon-reload
ulimit -Hn
#

%files
%license "subprojects/%{name}-devices/LICENSE"
%license "%{name}_subscriber_agreement.txt"

%doc     "debian/changelog"  README

      %{_bindir}/%{name}

     "%{_datadir}/pixmaps/%{name}_tray_mono.png"
     "%{_datadir}/pixmaps/%{name}.png"
     "%{_datadir}/applications/%{name}.desktop"
      %{_datadir}/icons/hicolor/*/apps/%{name}.png

     "%{_metainfodir}/%{appstream_id}.metainfo.xml"

      %{_mandir}/man6/%{name}.6*%{?ext_man}*

%dir  %{_prefix}/lib/%{name}
      %{_prefix}/lib/%{name}/*
%dir "%{_prefix}/lib/systemd/system.conf.d/"
     "%{_prefix}/lib/systemd/system.conf.d/10-%{name}.conf"
%dir "%{_prefix}/lib/systemd/user.conf.d/"
     "%{_prefix}/lib/systemd/user.conf.d/11-%{name}.conf"

     "%{_udevrulesdir}/60-%{name}-input.rules"
     "%{_udevrulesdir}/60-%{name}-vr.rules"

%changelog
openSUSE Build Service is sponsored by