Подготовить автономную сборку и запуск перед разделением проектов
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Обычный запуск Sprinter в MAME с локальным образом приложения."""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
from mame_profile import add_arguments, from_arguments, write_keyboard_config
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
add_arguments(parser)
|
||||
parser.add_argument("--floppy", help="локальный образ приложения для A:")
|
||||
parser.add_argument("--hdd", help="локальный образ приложения для D:")
|
||||
parser.add_argument("--video", default="soft")
|
||||
parser.add_argument("--script", help="Lua-сценарий запуска/теста")
|
||||
parser.add_argument("--snapshot-dir", help="постоянный каталог снимков")
|
||||
parser.add_argument("--timeout", type=float, help="лимит работы MAME в секундах")
|
||||
parser.add_argument("--dry-run", action="store_true")
|
||||
args = parser.parse_args()
|
||||
try:
|
||||
profile = from_arguments(args)
|
||||
profile.validate(dss=True)
|
||||
if not args.floppy and not args.hdd:
|
||||
raise ValueError("для запуска укажите --floppy или --hdd")
|
||||
media = {name: Path(value).resolve() for name, value in
|
||||
(("floppy", args.floppy), ("hdd", args.hdd)) if value}
|
||||
for name, path in media.items():
|
||||
if not path.is_file():
|
||||
raise ValueError(f"локальный образ {name} не найден: {path}")
|
||||
script = Path(args.script).resolve() if args.script else None
|
||||
if script and not script.is_file():
|
||||
raise ValueError(f"Lua-сценарий не найден: {script}")
|
||||
except ValueError as error:
|
||||
print(f"run_sprinter_mame: {error}", file=sys.stderr)
|
||||
return 2
|
||||
|
||||
with tempfile.TemporaryDirectory(prefix="sprinter-mame-run-") as directory:
|
||||
state = Path(directory)
|
||||
for name in ("cfg", "nvram", "diff", "snapshot"):
|
||||
(state / name).mkdir()
|
||||
snapshots = Path(args.snapshot_dir).resolve() if args.snapshot_dir else state / "snapshot"
|
||||
snapshots.mkdir(parents=True, exist_ok=True)
|
||||
write_keyboard_config(state / "cfg")
|
||||
command = [str(profile.binary), "sprinter", "-noreadconfig",
|
||||
"-rompath", str(profile.rompath), "-bios", profile.bios,
|
||||
"-kbd", "ms_naturl,bios=sp2k", "-video", args.video,
|
||||
"-window", "-skip_gameinfo", "-beta:wd179x:0", "35hd",
|
||||
"-flop2", str(profile.dss_image),
|
||||
"-hard1", str(profile.system_hdd_image)]
|
||||
if "floppy" in media:
|
||||
command += ["-flop1", str(media["floppy"])]
|
||||
if "hdd" in media:
|
||||
command += ["-hard2", str(media["hdd"])]
|
||||
if script:
|
||||
command += ["-autoboot_script", str(script)]
|
||||
for name in ("cfg", "nvram", "diff"):
|
||||
command += ["-" + name + "_directory", str(state / name)]
|
||||
command += ["-snapshot_directory", str(snapshots)]
|
||||
print("MAME:", profile.binary, "ROM:", profile.rompath,
|
||||
"DSS:", profile.dss_image, "BIOS:", profile.bios, flush=True)
|
||||
if args.dry_run:
|
||||
print("Команда:", command)
|
||||
return 0
|
||||
try:
|
||||
return subprocess.run(command, cwd=state, timeout=args.timeout).returncode
|
||||
except subprocess.TimeoutExpired:
|
||||
print("run_sprinter_mame: истёк лимит времени", file=sys.stderr)
|
||||
return 124
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user