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