87 lines
3.8 KiB
Python
87 lines
3.8 KiB
Python
import os
|
|
import shutil
|
|
import subprocess
|
|
|
|
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")
|
|
|
|
wine_path = dist_path + "/" + used_wine
|
|
|
|
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:
|
|
def check_system_wine():
|
|
# Способ 2: Проверка через переменные окружения в нестандартных путях
|
|
wine_env_vars = ["WINEPREFIX", "WINEARCH"]
|
|
found_env_vars = {var: os.getenv(var) for var in wine_env_vars if os.getenv(var)}
|
|
if found_env_vars:
|
|
print("Найдены переменные окружения Wine:")
|
|
for var, value in found_env_vars.items():
|
|
print(f"{var}={value}")
|
|
else:
|
|
print("Переменные окружения Wine не найдены.")
|
|
|
|
# Способ 2: Проверка через which в стандартных путях
|
|
wine_path_system= shutil.which("wine")
|
|
if wine_path_system:
|
|
print(f"Wine найден в PATH: {wine_path_system}")
|
|
else:
|
|
print("Wine не найден в PATH.")
|
|
|
|
# Способ 3: Проверка через запуск wine --version
|
|
try:
|
|
result = subprocess.run(['wine', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
|
text=True)
|
|
if result.returncode == 0:
|
|
print(f"Установленная версия: {result.stdout.strip()}")
|
|
else:
|
|
print("Wine не установлен или произошла ошибка.")
|
|
except FileNotFoundError:
|
|
print("Команда wine не найдена.")
|
|
|
|
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")
|