diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch')
-rw-r--r-- | nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch | 433 |
1 files changed, 14 insertions, 419 deletions
diff --git a/nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch b/nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch index bcc1fc989836..3c865746377a 100644 --- a/nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch +++ b/nixpkgs/pkgs/tools/package-management/protontricks/steam-run.patch @@ -1,470 +1,65 @@ -diff --git a/src/protontricks/cli/main.py b/src/protontricks/cli/main.py -index c77d287..236c2a9 100755 ---- a/src/protontricks/cli/main.py -+++ b/src/protontricks/cli/main.py -@@ -17,8 +17,7 @@ from ..flatpak import (FLATPAK_BWRAP_COMPATIBLE_VERSION, - get_running_flatpak_version) - from ..gui import (prompt_filesystem_access, select_steam_app_with_gui, - select_steam_installation) --from ..steam import (find_legacy_steam_runtime_path, find_proton_app, -- find_steam_installations, get_steam_apps, -+from ..steam import (find_proton_app, find_steam_installations, get_steam_apps, - get_steam_lib_paths) - from ..util import run_command - from ..winetricks import get_winetricks_path -@@ -67,8 +66,7 @@ def main(args=None, steam_path=None, steam_root=None): - "WINE: path to a custom 'wine' executable\n" - "WINESERVER: path to a custom 'wineserver' executable\n" - "STEAM_RUNTIME: 1 = enable Steam Runtime, 0 = disable Steam " -- "Runtime, valid path = custom Steam Runtime path, " -- "empty = enable automatically (default)\n" -+ "Runtime, empty = enable automatically (default)\n" - "PROTONTRICKS_GUI: GUI provider to use, accepts either 'yad' " - "or 'zenity'" - ), -@@ -204,17 +202,9 @@ def main(args=None, steam_path=None, steam_root=None): - if not steam_path: - exit_("No Steam installation was selected.") - -- # 2. Find the pre-installed legacy Steam Runtime if enabled -- legacy_steam_runtime_path = None -- use_steam_runtime = True -- -+ # 2. Use Steam Runtime if enabled - if os.environ.get("STEAM_RUNTIME", "") != "0" and not args.no_runtime: -- legacy_steam_runtime_path = find_legacy_steam_runtime_path( -- steam_root=steam_root -- ) -- -- if not legacy_steam_runtime_path: -- exit_("Steam Runtime was enabled but couldn't be found!") -+ use_steam_runtime = True - else: - use_steam_runtime = False - logger.info("Steam Runtime disabled.") -@@ -281,7 +271,6 @@ def main(args=None, steam_path=None, steam_root=None): - proton_app=proton_app, - steam_app=steam_app, - use_steam_runtime=use_steam_runtime, -- legacy_steam_runtime_path=legacy_steam_runtime_path, - command=[str(winetricks_path), "--gui"], - use_bwrap=use_bwrap, - start_wineserver=start_background_wineserver -@@ -361,7 +350,6 @@ def main(args=None, steam_path=None, steam_root=None): - proton_app=proton_app, - steam_app=steam_app, - use_steam_runtime=use_steam_runtime, -- legacy_steam_runtime_path=legacy_steam_runtime_path, - use_bwrap=use_bwrap, - start_wineserver=start_background_wineserver, - command=[str(winetricks_path)] + args.winetricks_command -@@ -373,7 +361,6 @@ def main(args=None, steam_path=None, steam_root=None): - steam_app=steam_app, - command=args.command, - use_steam_runtime=use_steam_runtime, -- legacy_steam_runtime_path=legacy_steam_runtime_path, - use_bwrap=use_bwrap, - start_wineserver=start_background_wineserver, - # Pass the command directly into the shell *without* diff --git a/src/protontricks/data/scripts/bwrap_launcher.sh b/src/protontricks/data/scripts/bwrap_launcher.sh -index b5552e1..b11bc99 100644 +index 922c59d..54742a4 100644 --- a/src/protontricks/data/scripts/bwrap_launcher.sh +++ b/src/protontricks/data/scripts/bwrap_launcher.sh @@ -1,4 +1,4 @@ -#!/bin/bash -+#!/usr/bin/env bash ++#!@bash@ # Helper script set -o errexit -@@ -80,6 +80,8 @@ done - log_info "Following directories will be mounted inside container: ${mount_dirs[*]}" - log_info "Using temporary directory: $PROTONTRICKS_TEMP_PATH" - --exec "$STEAM_RUNTIME_PATH"/run --share-pid --launcher \ -+exec steam-run "$STEAM_RUNTIME_PATH"/pressure-vessel/bin/pressure-vessel-wrap \ -+--variable-dir="${PRESSURE_VESSEL_VARIABLE_DIR:-$STEAM_RUNTIME_PATH/var}" \ -+--share-pid --launcher \ - "${mount_params[@]}" -- \ - --bus-name="com.github.Matoking.protontricks.App${STEAM_APPID}_${PROTONTRICKS_SESSION_ID}" diff --git a/src/protontricks/data/scripts/wine_launch.sh b/src/protontricks/data/scripts/wine_launch.sh -index 1f8a432..2d82f2b 100644 +index 1b0a0ce..127f13e 100644 --- a/src/protontricks/data/scripts/wine_launch.sh +++ b/src/protontricks/data/scripts/wine_launch.sh @@ -1,4 +1,4 @@ -#!/bin/bash -+#!/usr/bin/env -S steam-run bash ++#!@bash@ # Helper script created by Protontricks to run Wine binaries using Steam Runtime set -o errexit -@@ -158,8 +158,8 @@ if [[ -n "$PROTONTRICKS_INSIDE_STEAM_RUNTIME" - export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PROTON_LD_LIBRARY_PATH" - log_info "Appending to LD_LIBRARY_PATH: $PROTON_LD_LIBRARY_PATH" - elif [[ "$PROTONTRICKS_STEAM_RUNTIME" = "legacy" ]]; then -- export LD_LIBRARY_PATH="$PROTON_LD_LIBRARY_PATH" -- log_info "LD_LIBRARY_PATH set to $LD_LIBRARY_PATH" -+ export LD_LIBRARY_PATH="$PROTON_LD_LIBRARY_PATH":"$LD_LIBRARY_PATH" -+ log_info "Inserting to head of LD_LIBRARY_PATH: $PROTON_LD_LIBRARY_PATH" - fi - exec "$PROTON_DIST_PATH"/bin/@@name@@ "$@" || : - elif [[ "$PROTONTRICKS_STEAM_RUNTIME" = "bwrap" ]]; then diff --git a/src/protontricks/data/scripts/wineserver_keepalive.sh b/src/protontricks/data/scripts/wineserver_keepalive.sh -index 8168dae..559de33 100644 +index 8168dae..cb3e7d9 100644 --- a/src/protontricks/data/scripts/wineserver_keepalive.sh +++ b/src/protontricks/data/scripts/wineserver_keepalive.sh @@ -1,4 +1,4 @@ -#!/bin/bash -+#!/usr/bin/env bash ++#!@bash@ # A simple keepalive script that will ensure a wineserver process is kept alive # for the duration of the Protontricks session. # This is accomplished by launching a simple Windows batch script that will -diff --git a/src/protontricks/steam.py b/src/protontricks/steam.py -index c39b51d..79de098 100644 ---- a/src/protontricks/steam.py -+++ b/src/protontricks/steam.py -@@ -14,9 +14,8 @@ from .util import lower_dict - - __all__ = ( - "COMMON_STEAM_DIRS", "SteamApp", "find_steam_installations", -- "find_steam_path", "find_legacy_steam_runtime_path", -- "iter_appinfo_sections", "get_appinfo_sections", "get_tool_appid", -- "find_steam_compat_tool_app", "find_appid_proton_prefix", -+ "find_steam_path", "iter_appinfo_sections", "get_appinfo_sections", -+ "get_tool_appid", "find_steam_compat_tool_app", "find_appid_proton_prefix", - "find_proton_app", "get_steam_lib_paths", "get_compat_tool_dirs", - "get_custom_compat_tool_installations_in_dir", - "get_custom_compat_tool_installations", "find_current_steamid3", -@@ -393,37 +392,6 @@ def find_steam_path(): - return None, None - - --def find_legacy_steam_runtime_path(steam_root): -- """ -- Find the legacy Steam Runtime either using the STEAM_RUNTIME env or -- steam_root -- """ -- env_steam_runtime = os.environ.get("STEAM_RUNTIME", "") -- -- if env_steam_runtime == "0": -- # User has disabled Steam Runtime -- logger.info("STEAM_RUNTIME is 0. Disabling Steam Runtime.") -- return None -- elif env_steam_runtime and Path(env_steam_runtime).is_dir(): -- # User has a custom Steam Runtime -- logger.info( -- "Using custom Steam Runtime at %s", env_steam_runtime) -- return Path(env_steam_runtime) -- elif env_steam_runtime in ["1", ""]: -- # User has enabled Steam Runtime or doesn't have STEAM_RUNTIME set; -- # default to enabled Steam Runtime in either case -- steam_runtime_path = steam_root / "ubuntu12_32" / "steam-runtime" -- -- logger.info( -- "Using default Steam Runtime at %s", str(steam_runtime_path)) -- return steam_runtime_path -- -- logger.error( -- "Path in STEAM_RUNTIME doesn't point to a valid Steam Runtime!") -- -- return None -- -- - APPINFO_STRUCT_HEADER = "<4sL" - APPINFO_V27_STRUCT_SECTION = "<LLLLQ20sL" - APPINFO_V28_STRUCT_SECTION = "<LLLLQ20sL20s" diff --git a/src/protontricks/util.py b/src/protontricks/util.py -index 7e95af5..7dc9a29 100644 +index 9262cd0..00b2b2f 100644 --- a/src/protontricks/util.py +++ b/src/protontricks/util.py -@@ -8,14 +8,14 @@ import shutil - import tempfile - import re - from pathlib import Path --from subprocess import PIPE, check_output, run, Popen, DEVNULL -+from subprocess import PIPE, run, Popen, DEVNULL - - import pkg_resources - - __all__ = ( - "SUPPORTED_STEAM_RUNTIMES", "lower_dict", -- "get_legacy_runtime_library_paths", "get_host_library_paths", -- "RUNTIME_ROOT_GLOB_PATTERNS", "get_runtime_library_paths", -+ "get_host_library_paths", "RUNTIME_ROOT_GLOB_PATTERNS", -+ "get_runtime_library_paths", - "WINE_SCRIPT_TEMPLATE", "create_wine_bin_dir", "run_command" - ) - -@@ -43,24 +43,6 @@ def lower_dict(d): - return {k.lower(): _lower_value(v) for k, v in d.items()} - - --def get_legacy_runtime_library_paths(legacy_steam_runtime_path, proton_app): -- """ -- Get LD_LIBRARY_PATH value to use when running a command using Steam Runtime -- """ -- steam_runtime_paths = check_output([ -- str(legacy_steam_runtime_path / "run.sh"), -- "--print-steam-runtime-library-paths" -- ]) -- steam_runtime_paths = str(steam_runtime_paths, "utf-8") -- # Add Proton installation directory first into LD_LIBRARY_PATH -- # so that libwine.so.1 is picked up correctly (see issue #3) -- return "".join([ -- str(proton_app.proton_dist_path / "lib"), os.pathsep, -- str(proton_app.proton_dist_path / "lib64"), os.pathsep, -- steam_runtime_paths -- ]) -- -- - def get_host_library_paths(): - """ - Get host library paths to use when creating the LD_LIBRARY_PATH environment -@@ -72,7 +54,7 @@ def get_host_library_paths(): +@@ -99,7 +99,7 @@ def get_host_library_paths(): # Since that command is unavailable with newer Steam Runtime releases, # do it ourselves here. result = run( - ["/sbin/ldconfig", "-XNv"], -+ ["steam-run", "ldconfig", "-XNv"], ++ ["@steamRun@", "/sbin/ldconfig", "-XNv"], check=True, stdout=PIPE, stderr=PIPE ) lines = result.stdout.decode("utf-8").split("\n") -@@ -90,7 +72,7 @@ RUNTIME_ROOT_GLOB_PATTERNS = ( - ) - - --def get_runtime_library_paths(proton_app, use_bwrap=True): -+def get_runtime_library_paths(proton_app, proton_app_only=True): - """ - Get LD_LIBRARY_PATH value to use when running a command using Steam Runtime - """ -@@ -111,7 +93,7 @@ def get_runtime_library_paths(proton_app, use_bwrap=True): - f"Could not find Steam Runtime runtime root for {runtime_app.name}" - ) - -- if use_bwrap: -+ if proton_app_only: - return "".join([ - str(proton_app.proton_dist_path / "lib"), os.pathsep, - str(proton_app.proton_dist_path / "lib64"), os.pathsep -@@ -313,7 +295,7 @@ def run_command( - wine_environ["STEAM_RUNTIME_PATH"] = \ - str(proton_app.required_tool_app.install_path) - wine_environ["PROTON_LD_LIBRARY_PATH"] = \ -- get_runtime_library_paths(proton_app, use_bwrap=use_bwrap) -+ get_runtime_library_paths(proton_app, proton_app_only=use_bwrap) - - runtime_name = proton_app.required_tool_app.name - logger.info( -@@ -337,13 +319,9 @@ def run_command( - "Current Steam Runtime not recognized by Protontricks." - ) - else: -- # Legacy Steam Runtime requires a different LD_LIBRARY_PATH -- # that is produced by a script. - wine_environ["PROTONTRICKS_STEAM_RUNTIME"] = "legacy" - wine_environ["PROTON_LD_LIBRARY_PATH"] = \ -- get_legacy_runtime_library_paths( -- legacy_steam_runtime_path, proton_app -- ) -+ get_runtime_library_paths(proton_app, proton_app_only=True) - - # bwrap is not available, so ensure it is not launched even if the - # user configured it so -@@ -353,7 +331,6 @@ def run_command( - # configuring the environment and Wine before launching the underlying - # Wine binaries. - wine_bin_dir = create_wine_bin_dir(proton_app) -- wine_environ["LEGACY_STEAM_RUNTIME_PATH"] = str(legacy_steam_runtime_path) - wine_environ["PATH"] = os.pathsep.join( - [str(wine_bin_dir), wine_environ["PATH"]] - ) -diff --git a/tests/cli/test_main.py b/tests/cli/test_main.py -index 0a35f8d..9b96629 100644 ---- a/tests/cli/test_main.py -+++ b/tests/cli/test_main.py -@@ -121,15 +121,10 @@ class TestCLIRun: - assert str(command.args[0]).endswith(".local/bin/winetricks") - assert command.args[1] == "winecfg" - assert command.env["PATH"].startswith(str(wine_bin_dir)) -- assert ( -- "fake_steam_runtime/lib64" in command.env["PROTON_LD_LIBRARY_PATH"] -- ) - assert command.env["WINE"] == str(wine_bin_dir / "wine") - assert command.env["WINELOADER"] == str(wine_bin_dir / "wine") - assert command.env["WINESERVER"] == str(wine_bin_dir / "wineserver") - -- assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \ -- str(steam_runtime_dir / "steam-runtime") - assert command.env["PROTONTRICKS_STEAM_RUNTIME"] == "legacy" - assert "STEAM_RUNTIME_PATH" not in command.env - -@@ -180,16 +175,14 @@ class TestCLIRun: - assert command.env["PATH"].startswith(str(wine_bin_dir)) - - # Compared to the traditional Steam Runtime, PROTON_LD_LIBRARY_PATH -- # will be different -+ # will be the same (it would be different without steam-run.patch) - proton_install_path = Path(proton_app.install_path) - assert command.env["PROTON_LD_LIBRARY_PATH"] == "".join([ - str(proton_install_path / "dist" / "lib"), os.pathsep, - str(proton_install_path / "dist" / "lib64"), os.pathsep - ]) - -- # Environment variables for both legacy and new Steam Runtime exist -- assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \ -- str(steam_runtime_dir / "steam-runtime") -+ # Environment variable for new Steam Runtime exists - assert command.env["STEAM_RUNTIME_PATH"] == \ - str(steam_runtime_soldier.install_path) - assert command.env["PROTONTRICKS_STEAM_RUNTIME"] == "bwrap" -@@ -254,9 +247,7 @@ class TestCLIRun: - str(runtime_root / "lib" / "x86_64-linux-gnu") - ])) - -- # Environment variables for both legacy and new Steam Runtime exist -- assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \ -- str(steam_runtime_dir / "steam-runtime") -+ # Environment variable for new Steam Runtime exists - assert command.env["STEAM_RUNTIME_PATH"] == \ - str(steam_runtime_soldier.install_path) - assert command.env["PROTONTRICKS_STEAM_RUNTIME"] == "legacy" -@@ -407,7 +398,6 @@ class TestCLIRun: - - # Also ensure log messages are included in the error message - assert b"Found Steam directory at" in message -- assert b"Using default Steam Runtime" in message - - def test_run_gui_provider_not_found(self, cli, home_dir, steam_app_factory): - """ -@@ -421,20 +411,6 @@ class TestCLIRun: - - assert "YAD or Zenity is not installed" in result - -- def test_run_steam_runtime_not_found( -- self, cli, steam_dir, steam_app_factory): -- """ -- Try performing a command with Steam Runtime enabled but no -- available Steam Runtime installation -- """ -- steam_app_factory(name="Fake game 1", appid=10) -- result = cli( -- ["10", "winecfg"], env={"STEAM_RUNTIME": "invalid/path"}, -- expect_returncode=1 -- ) -- -- assert "Steam Runtime was enabled but couldn't be found" in result -- - def test_run_proton_not_found(self, cli, steam_dir, steam_app_factory): - steam_app_factory(name="Fake game 1", appid=10) - result = cli(["10", "winecfg"], expect_returncode=1) diff --git a/tests/conftest.py b/tests/conftest.py -index 106e0d9..8236f3a 100644 +index a516437..88bf804 100644 --- a/tests/conftest.py +++ b/tests/conftest.py -@@ -169,7 +169,7 @@ def steam_runtime_dir(steam_dir): +@@ -170,7 +170,7 @@ def steam_runtime_dir(steam_dir): """ (steam_dir.parent / "root" / "ubuntu12_32" / "steam-runtime").mkdir(parents=True) (steam_dir.parent / "root" / "ubuntu12_32" / "steam-runtime" / "run.sh").write_text( - "#!/bin/bash\n" -+ "#!/usr/bin/env -S steam-run bash\n" ++ "#!/bin/sh\n" """if [ "$1" = "--print-steam-runtime-library-paths" ]; then\n""" " echo 'fake_steam_runtime/lib:fake_steam_runtime/lib64'\n" "fi" -@@ -735,7 +735,7 @@ def xdg_user_dir_bin(home_dir): +@@ -764,7 +764,7 @@ def xdg_user_dir_bin(home_dir): # Only mock PICTURES and DOWNLOAD; mocking everything isn't necessary # for the tests. (home_dir / ".local" / "bin" / "xdg-user-dir").write_text( - '#!/bin/bash\n' -+ '#!/usr/bin/env -S steam-run bash\n' ++ '#!/bin/sh\n' 'if [[ "$1" == "PICTURES" ]]; then\n' ' echo "$HOME/Pictures"\n' 'elif [[ "$1" == "DOWNLOAD" ]]; then\n' -diff --git a/tests/test_flatpak.py b/tests/test_flatpak.py -index cb2b9bb..440b704 100644 ---- a/tests/test_flatpak.py -+++ b/tests/test_flatpak.py -@@ -159,36 +159,6 @@ class TestGetInaccessiblePaths: - - assert len(inaccessible_paths) == 0 - -- @pytest.mark.usefixtures("xdg_user_dir_bin") -- def test_flatpak_xdg_user_dir(self, monkeypatch, tmp_path, home_dir): -- """ -- Test that XDG filesystem permissions such as 'xdg-pictures' and -- 'xdg-download' are detected correctly -- """ -- flatpak_info_path = tmp_path / "flatpak-info" -- -- flatpak_info_path.write_text( -- "[Application]\n" -- "name=fake.flatpak.Protontricks\n" -- "\n" -- "[Instance]\n" -- "flatpak-version=1.12.1\n" -- "\n" -- "[Context]\n" -- "filesystems=xdg-pictures;" -- ) -- monkeypatch.setattr( -- "protontricks.flatpak.FLATPAK_INFO_PATH", str(flatpak_info_path) -- ) -- -- inaccessible_paths = get_inaccessible_paths([ -- str(home_dir / "Pictures"), -- str(home_dir / "Download") -- ]) -- -- assert len(inaccessible_paths) == 1 -- assert str(inaccessible_paths[0]) == str(home_dir / "Download") -- - def test_flatpak_unknown_permission(self, monkeypatch, tmp_path, caplog): - """ - Test that unknown filesystem permissions are ignored -diff --git a/tests/test_util.py b/tests/test_util.py -index ec5f4f3..0b0a66c 100644 ---- a/tests/test_util.py -+++ b/tests/test_util.py -@@ -98,44 +98,6 @@ class TestRunCommand: - assert command.env["WINELOADER"] == "/fake/wine" - assert command.env["WINESERVER"] == "/fake/wineserver" - -- def test_unknown_steam_runtime_detected( -- self, home_dir, proton_factory, runtime_app_factory, -- steam_app_factory, caplog): -- """ -- Test that Protontricks will log a warning if it encounters a Steam -- Runtime it does not recognize -- """ -- steam_runtime_medic = runtime_app_factory( -- name="Steam Linux Runtime - Medic", -- appid=14242420, -- runtime_dir_name="medic" -- ) -- proton_app = proton_factory( -- name="Proton 5.20", appid=100, compat_tool_name="proton_520", -- is_default_proton=True, required_tool_app=steam_runtime_medic -- ) -- steam_app = steam_app_factory(name="Fake game", appid=10) -- -- run_command( -- winetricks_path=Path("/usr/bin/winetricks"), -- proton_app=proton_app, -- steam_app=steam_app, -- command=["echo", "nothing"], -- shell=True, -- use_steam_runtime=True -- ) -- -- # Warning will be logged since Protontricks does not recognize -- # Steam Runtime Medic and can't ensure it's being configured correctly -- warning = next( -- record for record in caplog.records -- if record.levelname == "WARNING" -- and "not recognized" in record.getMessage() -- ) -- assert warning.getMessage() == \ -- "Current Steam Runtime not recognized by Protontricks." -- -- - class TestLowerDict: - def test_lower_nested_dict(self): - """ |