Подготовить автономную сборку и запуск перед разделением проектов
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Пути к установленному MAME; исходники fork приложению не нужны."""
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class MameProfile:
|
||||
home: Path | None
|
||||
binary: Path | None
|
||||
rompath: Path | None
|
||||
dss_image: Path | None
|
||||
system_hdd_image: Path | None
|
||||
bios: str
|
||||
|
||||
@classmethod
|
||||
def resolve(cls, overrides: dict[str, str | None] | None = None) -> "MameProfile":
|
||||
values = dict(os.environ)
|
||||
values.update({key: value for key, value in (overrides or {}).items()
|
||||
if value is not None})
|
||||
home = _path(values.get("MAME_HOME"))
|
||||
|
||||
def selected(key: str, suffix: str) -> Path | None:
|
||||
return _path(values.get(key)) or (home / suffix if home else None)
|
||||
|
||||
return cls(home=home,
|
||||
binary=selected("MAME_BIN", "mame.arm"),
|
||||
rompath=selected("MAME_ROMPATH", "roms"),
|
||||
dss_image=selected("MAME_DSS_IMAGE", "IMG/dss171u.img"),
|
||||
system_hdd_image=selected("MAME_SYSTEM_HDD_IMAGE", "IMG/sp_hdd_sys.chd"),
|
||||
bios=values.get("MAME_BIOS") or "v3.06")
|
||||
|
||||
def validate(self, *, dss: bool = False, system_hdd: bool = True) -> None:
|
||||
paths = {"MAME_BIN": self.binary, "MAME_ROMPATH": self.rompath}
|
||||
if dss:
|
||||
paths["MAME_DSS_IMAGE"] = self.dss_image
|
||||
if system_hdd:
|
||||
paths["MAME_SYSTEM_HDD_IMAGE"] = self.system_hdd_image
|
||||
for variable, path in paths.items():
|
||||
if path is None:
|
||||
raise ValueError(f"задайте MAME_HOME или {variable}")
|
||||
if not path.exists():
|
||||
raise ValueError(f"{variable}: файл/каталог не найден: {path}")
|
||||
if self.binary and not self.binary.is_file():
|
||||
raise ValueError(f"MAME_BIN не является файлом: {self.binary}")
|
||||
if self.rompath and not self.rompath.is_dir():
|
||||
raise ValueError(f"MAME_ROMPATH не является каталогом: {self.rompath}")
|
||||
|
||||
|
||||
def _path(value: str | None) -> Path | None:
|
||||
if not value:
|
||||
return None
|
||||
return Path(os.path.expanduser(value)).resolve()
|
||||
|
||||
|
||||
def add_arguments(parser) -> None:
|
||||
"""Одинаковые аргументы для обычного запуска, автотеста и DAP."""
|
||||
for option in ("mame-home", "mame-bin", "mame-rompath", "mame-dss-image",
|
||||
"mame-system-hdd-image", "mame-bios"):
|
||||
parser.add_argument("--" + option, default=None)
|
||||
|
||||
|
||||
def from_arguments(args) -> MameProfile:
|
||||
names = ("MAME_HOME", "MAME_BIN", "MAME_ROMPATH", "MAME_DSS_IMAGE",
|
||||
"MAME_SYSTEM_HDD_IMAGE", "MAME_BIOS")
|
||||
return MameProfile.resolve({name: getattr(args, name.lower(), None)
|
||||
for name in names})
|
||||
|
||||
|
||||
def write_keyboard_config(cfg_directory: Path) -> None:
|
||||
"""Включить обе клавиатуры Sprinter, включая прямой ввод в DSS."""
|
||||
cfg_directory.mkdir(parents=True, exist_ok=True)
|
||||
(cfg_directory / "sprinter.cfg").write_text(
|
||||
'<?xml version="1.0"?>\n'
|
||||
'<mameconfig version="10">\n'
|
||||
' <system name="sprinter">\n'
|
||||
' <input>\n'
|
||||
' <keyboard tag=":" enabled="1" />\n'
|
||||
' <keyboard tag=":kbd:ms_naturl" enabled="1" />\n'
|
||||
' </input>\n'
|
||||
' </system>\n'
|
||||
'</mameconfig>\n', encoding="utf-8")
|
||||
Reference in New Issue
Block a user