From 9d0d2c8f68d33999f8d49727b9668d4218019bfb Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Fri, 7 Mar 2025 04:54:42 +0300 Subject: [PATCH] work with init_wine --- config.json | 15 ++++++++++++--- modules/env_var.py | 26 ++++++++++++++++--------- modules/init_wine.py | 46 +++++++++++++++++++++++++++++++++++++++----- portproton.py | 6 +++--- 4 files changed, 73 insertions(+), 20 deletions(-) diff --git a/config.json b/config.json index f3e8841..45007f6 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,16 @@ { - "plugins_ver" : "20", - "libs_ver" : "52", "used_wine" : "PROTON_LG", + "default_wine" : "WINE_LG_10-1", - "default_proton" : "PROTON_LG_9-19" + "default_proton" : "PROTON_LG_9-19", + + "dxvk_git" : "2.5.3-31", + "dxvk_stable" : "1.10.3-28", + "dxvk_legacy" : "1.6.1", + + "vkd3d_git" : "1.1-4367", + "vkd3d_stable" : "1.1-2602", + + "plugins_ver" : "20", + "libs_ver" : "52" } diff --git a/modules/env_var.py b/modules/env_var.py index fb628fa..5044034 100755 --- a/modules/env_var.py +++ b/modules/env_var.py @@ -2,17 +2,21 @@ import os from .log import * # функции обработки переменных LINUX окружения -def print_env_var(var_name): - if var_name in os.environ: - value = os.environ[var_name] - log.info(f"Переменная {var_name}={value}") - else: - log.warning(f"Переменная {var_name} не определена") +def print_env_var(*var_name): + for v in var_name: + if v in os.environ: + value = os.environ[v] + log.info(f"Переменная {v}={value}") + else: + log.warning(f"Переменная {v} не определена") -def set_env_var(var_name, default_value): +def set_env_var_if_none(var_name, default_value): if var_name not in os.environ or not os.environ[var_name]: os.environ[var_name] = default_value +def set_env_var_force(var_name, value): + os.environ[var_name] = value + def get_env_var(var_name): if var_name in os.environ and os.environ[var_name]: return os.environ[var_name] @@ -39,11 +43,15 @@ def env_var(var_name, value): match var_name: case "WINEDLLOVERRIDES": add_to_env_var("WINEDLLOVERRIDES", ";", value) + case "WINEDLLPATH": + add_to_env_var("WINEDLLPATH", ":", value) case "VKD3D_CONFIG": add_to_env_var("VKD3D_CONFIG", ";", value) case "RADV_PERFTEST": add_to_env_var("RADV_PERFTEST", ";", value) - case "PW_VK_INSTANCE_LAYERS": - add_to_env_var("PW_VK_INSTANCE_LAYERS", ":", value) + case "VK_INSTANCE_LAYERS": + add_to_env_var("VK_INSTANCE_LAYERS", ":", value) case "LD_LIBRARY_PATH": add_to_env_var("LD_LIBRARY_PATH", ":", value) + case "PATH": + add_to_env_var("PATH", ":", value) diff --git a/modules/init_wine.py b/modules/init_wine.py index af2351e..60b4180 100644 --- a/modules/init_wine.py +++ b/modules/init_wine.py @@ -1,20 +1,56 @@ +import os + from .log import * +from .env_var import * from .files_worker import * from .config_parser import * def init_wine(dist_path): used_wine_upper = var("used_wine").upper() + # TODO: будем переименовывать все каталоги wine в верхний регистр? + if used_wine_upper != "SYSTEM": if used_wine_upper == "WINE_LG": used_wine = var("default_wine") elif used_wine_upper == "PROTON_LG": used_wine = var("default_proton") - log.info(f"used wine: {used_wine}") wine_path = dist_path + "/" + used_wine - log.info(wine_path) - + + if not os.path.exists(wine_path + "/bin/wine"): + # TODO: если нет wine то качаем и распаковываем + log.warning(f"{used_wine} not found. Try download...") + + if not os.path.exists(wine_path + "/bin/wine"): + log.critical(f"{used_wine} not found. Interrupt!") + + env_var("PATH", wine_path + "/bin") + env_var("LD_LIBRARY_PATH", wine_path + "/lib") + set_env_var_force("WINEDLLPATH", wine_path + "/lib/wine") + if os.path.exists(wine_path + "/lib64/"): + env_var("LD_LIBRARY_PATH", wine_path + "/lib64") + env_var("WINEDLLPATH", wine_path + "/lib64/wine") + + wine_share = wine_path + "/share" + if os.path.exists(wine_share + "/espeak-ng-data/"): + set_env_var_force("ESPEAK_DATA_PATH", wine_share) + if os.path.exists(wine_share + "/media/"): + set_env_var_force("MEDIACONV_BLANK_VIDEO_FILE", wine_share + "/media/blank.mkv") + set_env_var_force("MEDIACONV_BLANK_AUDIO_FILE", wine_share + "/media/blank.ptna") + + # TODO: mono, gecko + else: - # TODO: добавить системный вайн - ... + # TODO: добавить проверку системного вайна + wine_path = "/usr" + + # общие переменные окружения для любой версии wine + set_env_var_force("WINE", wine_path + "/bin/wine") + set_env_var_force("WINELOADER", wine_path + "/bin/wine") + set_env_var_force("WINESERVER", wine_path + "/bin/wineserver") + + log.info(f"wine in used: {used_wine}") + print_env_var("WINELOADER", "WINESERVER", "WINEDLLPATH") + print_env_var("PATH", "LD_LIBRARY_PATH") + # print_env_var("ESPEAK_DATA_PATH", "MEDIACONV_BLANK_VIDEO_FILE", "MEDIACONV_BLANK_AUDIO_FILE") diff --git a/portproton.py b/portproton.py index d95c37a..c1140dc 100755 --- a/portproton.py +++ b/portproton.py @@ -24,6 +24,9 @@ libs_path = data_path + "/libs_v" + var("libs_ver") create_new_dir(dist_path, tmp_path, img_path, vulkan_path) +log.info(f"рабочий каталог: {work_path}") +log.info(f"принятые аргументы: {sys.argv[1:]}") + if __name__ == "__main__": # TODO: реализовать все функции get_* в модуль downloader.py: @@ -48,7 +51,4 @@ if __name__ == "__main__": # версия контейнера будет захардкожена, парсить ничего не надо get_libs(libs_ver) - log.info(work_path) - log.info(sys.argv[1:]) - init_wine(dist_path)