mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-02-04 01:30:36 +03:00
proton: Move session methods into Session class
This commit is contained in:
parent
adcdea1315
commit
7425001e8e
106
proton
106
proton
@ -44,9 +44,6 @@ def file_is_wine_fake_dll(path):
|
|||||||
except IOError:
|
except IOError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def run_wine(args):
|
|
||||||
subprocess.call(args, env=g_session.env, stderr=g_session.log_file, stdout=g_session.log_file)
|
|
||||||
|
|
||||||
def makedirs(path):
|
def makedirs(path):
|
||||||
try:
|
try:
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
@ -131,8 +128,8 @@ class Proton:
|
|||||||
if not os.path.isdir(self.default_pfx_dir):
|
if not os.path.isdir(self.default_pfx_dir):
|
||||||
#make default prefix
|
#make default prefix
|
||||||
local_env["WINEPREFIX"] = self.default_pfx_dir
|
local_env["WINEPREFIX"] = self.default_pfx_dir
|
||||||
run_wine([self.wine, "wineboot"])
|
g_session.run_wine([self.wine, "wineboot"])
|
||||||
run_wine([self.wineserver, "-w"])
|
g_session.run_wine([self.wineserver, "-w"])
|
||||||
|
|
||||||
class CompatData:
|
class CompatData:
|
||||||
def __init__(self, compatdata):
|
def __init__(self, compatdata):
|
||||||
@ -418,19 +415,7 @@ class Session:
|
|||||||
else:
|
else:
|
||||||
self.compat_config = set()
|
self.compat_config = set()
|
||||||
|
|
||||||
|
def init_wine(self):
|
||||||
if not "STEAM_COMPAT_DATA_PATH" in os.environ:
|
|
||||||
log("No compat data path?")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
g_proton = Proton(os.path.dirname(sys.argv[0]))
|
|
||||||
|
|
||||||
g_proton.extract_tarball()
|
|
||||||
|
|
||||||
g_compatdata = CompatData(os.environ["STEAM_COMPAT_DATA_PATH"])
|
|
||||||
|
|
||||||
g_session = Session()
|
|
||||||
|
|
||||||
if "HOST_LC_ALL" in g_session.env and len(g_session.env["HOST_LC_ALL"]) > 0:
|
if "HOST_LC_ALL" in g_session.env and len(g_session.env["HOST_LC_ALL"]) > 0:
|
||||||
#steam sets LC_ALL=C to help some games, but Wine requires the real value
|
#steam sets LC_ALL=C to help some games, but Wine requires the real value
|
||||||
#in order to do path conversion between win32 and host. steam sets
|
#in order to do path conversion between win32 and host. steam sets
|
||||||
@ -456,8 +441,16 @@ if "PATH" in os.environ:
|
|||||||
else:
|
else:
|
||||||
g_session.env["PATH"] = g_proton.bin_dir
|
g_session.env["PATH"] = g_proton.bin_dir
|
||||||
|
|
||||||
g_proton.make_default_prefix(g_session.env)
|
def check_environment(self, env_name, config_name):
|
||||||
|
if not env_name in g_session.env:
|
||||||
|
return False
|
||||||
|
if nonzero(g_session.env[env_name]):
|
||||||
|
g_session.compat_config.add(config_name)
|
||||||
|
else:
|
||||||
|
g_session.compat_config.discard(config_name)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def init_session(self):
|
||||||
g_session.env["WINEPREFIX"] = g_compatdata.prefix_dir
|
g_session.env["WINEPREFIX"] = g_compatdata.prefix_dir
|
||||||
|
|
||||||
if "PROTON_LOG" in g_session.env and nonzero(g_session.env["PROTON_LOG"]):
|
if "PROTON_LOG" in g_session.env and nonzero(g_session.env["PROTON_LOG"]):
|
||||||
@ -479,27 +472,18 @@ if os.path.exists(g_proton.user_settings_file):
|
|||||||
log("%s" % sys.exc_info()[1])
|
log("%s" % sys.exc_info()[1])
|
||||||
log("************************************************")
|
log("************************************************")
|
||||||
|
|
||||||
def check_environment(env_name, config_name):
|
|
||||||
if not env_name in g_session.env:
|
|
||||||
return False
|
|
||||||
if nonzero(g_session.env[env_name]):
|
|
||||||
g_session.compat_config.add(config_name)
|
|
||||||
else:
|
|
||||||
g_session.compat_config.discard(config_name)
|
|
||||||
return True
|
|
||||||
|
|
||||||
if "wined3d11" in g_session.compat_config:
|
if "wined3d11" in g_session.compat_config:
|
||||||
g_session.compat_config.add("wined3d")
|
g_session.compat_config.add("wined3d")
|
||||||
|
|
||||||
if not check_environment("PROTON_USE_WINED3D", "wined3d"):
|
if not self.check_environment("PROTON_USE_WINED3D", "wined3d"):
|
||||||
check_environment("PROTON_USE_WINED3D11", "wined3d")
|
self.check_environment("PROTON_USE_WINED3D11", "wined3d")
|
||||||
check_environment("PROTON_USE_D9VK", "d9vk")
|
self.check_environment("PROTON_USE_D9VK", "d9vk")
|
||||||
check_environment("PROTON_NO_D3D11", "nod3d11")
|
self.check_environment("PROTON_NO_D3D11", "nod3d11")
|
||||||
check_environment("PROTON_NO_D3D10", "nod3d10")
|
self.check_environment("PROTON_NO_D3D10", "nod3d10")
|
||||||
check_environment("PROTON_NO_ESYNC", "noesync")
|
self.check_environment("PROTON_NO_ESYNC", "noesync")
|
||||||
check_environment("PROTON_NO_FSYNC", "nofsync")
|
self.check_environment("PROTON_NO_FSYNC", "nofsync")
|
||||||
check_environment("PROTON_FORCE_LARGE_ADDRESS_AWARE", "forcelgadd")
|
self.check_environment("PROTON_FORCE_LARGE_ADDRESS_AWARE", "forcelgadd")
|
||||||
check_environment("PROTON_OLD_GL_STRING", "oldglstr")
|
self.check_environment("PROTON_OLD_GL_STRING", "oldglstr")
|
||||||
|
|
||||||
if not "noesync" in g_session.compat_config:
|
if not "noesync" in g_session.compat_config:
|
||||||
g_session.env["WINEESYNC"] = "1"
|
g_session.env["WINEESYNC"] = "1"
|
||||||
@ -560,7 +544,7 @@ if "WINEDLLOVERRIDES" in os.environ:
|
|||||||
else:
|
else:
|
||||||
g_session.env["WINEDLLOVERRIDES"] = s
|
g_session.env["WINEDLLOVERRIDES"] = s
|
||||||
|
|
||||||
def dump_dbg_env(f):
|
def dump_dbg_env(self, f):
|
||||||
f.write("PATH=\"" + g_session.env["PATH"] + "\" \\\n")
|
f.write("PATH=\"" + g_session.env["PATH"] + "\" \\\n")
|
||||||
f.write("\tTERM=\"xterm\" \\\n") #XXX
|
f.write("\tTERM=\"xterm\" \\\n") #XXX
|
||||||
f.write("\tWINEDEBUG=\"-all\" \\\n")
|
f.write("\tWINEDEBUG=\"-all\" \\\n")
|
||||||
@ -582,7 +566,7 @@ def dump_dbg_env(f):
|
|||||||
if "WINE_LARGE_ADDRESS_AWARE" in g_session.env:
|
if "WINE_LARGE_ADDRESS_AWARE" in g_session.env:
|
||||||
f.write("\tWINE_LARGE_ADDRESS_AWARE=\"" + g_session.env["WINE_LARGE_ADDRESS_AWARE"] + "\" \\\n")
|
f.write("\tWINE_LARGE_ADDRESS_AWARE=\"" + g_session.env["WINE_LARGE_ADDRESS_AWARE"] + "\" \\\n")
|
||||||
|
|
||||||
def dump_dbg_scripts():
|
def dump_dbg_scripts(self):
|
||||||
exe_name = os.path.basename(sys.argv[2])
|
exe_name = os.path.basename(sys.argv[2])
|
||||||
|
|
||||||
tmpdir = g_session.env.get("PROTON_DEBUG_DIR", "/tmp") + "/proton_" + os.environ["USER"] + "/"
|
tmpdir = g_session.env.get("PROTON_DEBUG_DIR", "/tmp") + "/proton_" + os.environ["USER"] + "/"
|
||||||
@ -592,7 +576,7 @@ def dump_dbg_scripts():
|
|||||||
f.write("#!/bin/bash\n")
|
f.write("#!/bin/bash\n")
|
||||||
f.write("#Run winedbg with args\n\n")
|
f.write("#Run winedbg with args\n\n")
|
||||||
f.write("cd \"" + os.getcwd() + "\"\n")
|
f.write("cd \"" + os.getcwd() + "\"\n")
|
||||||
dump_dbg_env(f)
|
self.dump_dbg_env(f)
|
||||||
f.write("\t\"" + g_proton.wine_bin + "\" winedbg \"$@\"\n")
|
f.write("\t\"" + g_proton.wine_bin + "\" winedbg \"$@\"\n")
|
||||||
os.chmod(tmpdir + "winedbg", 0o755)
|
os.chmod(tmpdir + "winedbg", 0o755)
|
||||||
|
|
||||||
@ -609,7 +593,7 @@ def dump_dbg_scripts():
|
|||||||
else:
|
else:
|
||||||
f.write(" \"" + arg + "\"")
|
f.write(" \"" + arg + "\"")
|
||||||
f.write(")\n")
|
f.write(")\n")
|
||||||
dump_dbg_env(f)
|
self.dump_dbg_env(f)
|
||||||
f.write("\t\"" + g_proton.wine_bin + "\" winedbg \"${@:-${DEF_CMD[@]}}\"\n")
|
f.write("\t\"" + g_proton.wine_bin + "\" winedbg \"${@:-${DEF_CMD[@]}}\"\n")
|
||||||
os.chmod(tmpdir + "winedbg_run", 0o755)
|
os.chmod(tmpdir + "winedbg_run", 0o755)
|
||||||
|
|
||||||
@ -624,7 +608,7 @@ def dump_dbg_scripts():
|
|||||||
f.write(" exit 1\n")
|
f.write(" exit 1\n")
|
||||||
f.write("fi\n")
|
f.write("fi\n")
|
||||||
f.write("WPID_DEC=$(printf %d 0x$WPID_HEX)\n")
|
f.write("WPID_DEC=$(printf %d 0x$WPID_HEX)\n")
|
||||||
dump_dbg_env(f)
|
self.dump_dbg_env(f)
|
||||||
f.write("\t\"" + g_proton.wine_bin + "\" winedbg --gdb $WPID_DEC\n")
|
f.write("\t\"" + g_proton.wine_bin + "\" winedbg --gdb $WPID_DEC\n")
|
||||||
os.chmod(tmpdir + "gdb_attach", 0o755)
|
os.chmod(tmpdir + "gdb_attach", 0o755)
|
||||||
|
|
||||||
@ -641,7 +625,7 @@ def dump_dbg_scripts():
|
|||||||
else:
|
else:
|
||||||
f.write(" \"" + arg + "\"")
|
f.write(" \"" + arg + "\"")
|
||||||
f.write(")\n")
|
f.write(")\n")
|
||||||
dump_dbg_env(f)
|
self.dump_dbg_env(f)
|
||||||
f.write("\t\"" + g_proton.wine_bin + "\" winedbg --gdb \"${@:-${DEF_CMD[@]}}\"\n")
|
f.write("\t\"" + g_proton.wine_bin + "\" winedbg --gdb \"${@:-${DEF_CMD[@]}}\"\n")
|
||||||
os.chmod(tmpdir + "gdb_run", 0o755)
|
os.chmod(tmpdir + "gdb_run", 0o755)
|
||||||
|
|
||||||
@ -658,17 +642,39 @@ def dump_dbg_scripts():
|
|||||||
else:
|
else:
|
||||||
f.write(" \"" + arg + "\"")
|
f.write(" \"" + arg + "\"")
|
||||||
f.write(")\n")
|
f.write(")\n")
|
||||||
dump_dbg_env(f)
|
self.dump_dbg_env(f)
|
||||||
f.write("\t\"" + g_proton.wine_bin + "\" steam.exe \"${@:-${DEF_CMD[@]}}\"\n")
|
f.write("\t\"" + g_proton.wine_bin + "\" steam.exe \"${@:-${DEF_CMD[@]}}\"\n")
|
||||||
os.chmod(tmpdir + "run", 0o755)
|
os.chmod(tmpdir + "run", 0o755)
|
||||||
|
|
||||||
def run():
|
def run_wine(self, args):
|
||||||
|
subprocess.call(args, env=g_session.env, stderr=g_session.log_file, stdout=g_session.log_file)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
if "PROTON_DUMP_DEBUG_COMMANDS" in g_session.env and nonzero(g_session.env["PROTON_DUMP_DEBUG_COMMANDS"]):
|
if "PROTON_DUMP_DEBUG_COMMANDS" in g_session.env and nonzero(g_session.env["PROTON_DUMP_DEBUG_COMMANDS"]):
|
||||||
try:
|
try:
|
||||||
dump_dbg_scripts()
|
self.dump_dbg_scripts()
|
||||||
except OSError:
|
except OSError:
|
||||||
log("Unable to write debug scripts! " + str(sys.exc_info()[1]))
|
log("Unable to write debug scripts! " + str(sys.exc_info()[1]))
|
||||||
run_wine([g_proton.wine_bin, "steam"] + sys.argv[2:])
|
self.run_wine([g_proton.wine_bin, "steam"] + sys.argv[2:])
|
||||||
|
|
||||||
|
|
||||||
|
if not "STEAM_COMPAT_DATA_PATH" in os.environ:
|
||||||
|
log("No compat data path?")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
g_proton = Proton(os.path.dirname(sys.argv[0]))
|
||||||
|
|
||||||
|
g_proton.extract_tarball()
|
||||||
|
|
||||||
|
g_compatdata = CompatData(os.environ["STEAM_COMPAT_DATA_PATH"])
|
||||||
|
|
||||||
|
g_session = Session()
|
||||||
|
|
||||||
|
g_session.init_wine()
|
||||||
|
|
||||||
|
g_proton.make_default_prefix(g_session.env)
|
||||||
|
|
||||||
|
g_session.init_session()
|
||||||
|
|
||||||
if sys.version_info[0] == 2:
|
if sys.version_info[0] == 2:
|
||||||
binary_stdout = sys.stdout
|
binary_stdout = sys.stdout
|
||||||
@ -680,12 +686,12 @@ else:
|
|||||||
#determine mode
|
#determine mode
|
||||||
if sys.argv[1] == "run":
|
if sys.argv[1] == "run":
|
||||||
#start target app
|
#start target app
|
||||||
run()
|
g_session.run()
|
||||||
elif sys.argv[1] == "waitforexitandrun":
|
elif sys.argv[1] == "waitforexitandrun":
|
||||||
#wait for wineserver to shut down
|
#wait for wineserver to shut down
|
||||||
run_wine([g_proton.wineserver_bin, "-w"])
|
g_session.run_wine([g_proton.wineserver_bin, "-w"])
|
||||||
#then run
|
#then run
|
||||||
run()
|
g_session.run()
|
||||||
elif sys.argv[1] == "getcompatpath":
|
elif sys.argv[1] == "getcompatpath":
|
||||||
#linux -> windows path
|
#linux -> windows path
|
||||||
path = subprocess.check_output([g_proton.wine_bin, "winepath", "-w", sys.argv[2]], env=g_session.env, stderr=g_session.log_file)
|
path = subprocess.check_output([g_proton.wine_bin, "winepath", "-w", sys.argv[2]], env=g_session.env, stderr=g_session.log_file)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user