diff options
author | Thiago Kenji Okada <thiagokokada@gmail.com> | 2022-04-08 23:22:01 +0100 |
---|---|---|
committer | Thiago Kenji Okada <thiagokokada@gmail.com> | 2022-04-08 23:22:01 +0100 |
commit | eab6133b18ac806a5ca0894c0728d34b5fa935a3 (patch) | |
tree | 751b81d98e0106119cb3c2f4ccc354c0a94d9f69 /pkgs/applications/emulators/retroarch/update_cores.py | |
parent | 3c1b148066610e9afc864bcea8fad4942ca14873 (diff) |
libretro: rename script
Diffstat (limited to 'pkgs/applications/emulators/retroarch/update_cores.py')
-rwxr-xr-x | pkgs/applications/emulators/retroarch/update_cores.py | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/pkgs/applications/emulators/retroarch/update_cores.py b/pkgs/applications/emulators/retroarch/update_cores.py new file mode 100755 index 0000000000000..0facf4e2656ee --- /dev/null +++ b/pkgs/applications/emulators/retroarch/update_cores.py @@ -0,0 +1,167 @@ +#!/usr/bin/env nix-shell +#!nix-shell -I nixpkgs=../../../../ -i python3 -p "python3.withPackages (ps: with ps; [ requests nix-prefetch-github ])" -p "git" + +import json +import sys +import subprocess +from pathlib import Path + +SCRIPT_PATH = Path(__file__).absolute().parent +HASHES_PATH = SCRIPT_PATH / "hashes.json" +CORES = { + "atari800": {"repo": "libretro-atari800"}, + "beetle-gba": {"repo": "beetle-gba-libretro"}, + "beetle-lynx": {"repo": "beetle-lynx-libretro"}, + "beetle-ngp": {"repo": "beetle-ngp-libretro"}, + "beetle-pce-fast": {"repo": "beetle-pce-fast-libretro"}, + "beetle-pcfx": {"repo": "beetle-pcfx-libretro"}, + "beetle-psx": {"repo": "beetle-psx-libretro"}, + "beetle-saturn": {"repo": "beetle-saturn-libretro"}, + "beetle-snes": {"repo": "beetle-bsnes-libretro"}, + "beetle-supergrafx": {"repo": "beetle-supergrafx-libretro"}, + "beetle-vb": {"repo": "beetle-vb-libretro"}, + "beetle-wswan": {"repo": "beetle-wswan-libretro"}, + "blastem": {"repo": "blastem"}, + "bluemsx": {"repo": "bluemsx-libretro"}, + "bsnes": {"repo": "bsnes-libretro"}, + "bsnes-hd": {"repo": "bsnes-hd", "owner": "DerKoun"}, + "bsnes-mercury": {"repo": "bsnes-mercury"}, + "citra": { "repo": "citra", "fetch_submodules": True }, + "desmume": {"repo": "desmume"}, + "desmume2015": {"repo": "desmume2015"}, + "dolphin": {"repo": "dolphin"}, + "dosbox": {"repo": "dosbox-libretro"}, + "eightyone": {"repo": "81-libretro"}, + "fbalpha2012": {"repo": "fbalpha2012"}, + "fbneo": {"repo": "fbneo"}, + "fceumm": {"repo": "libretro-fceumm"}, + "flycast": {"repo": "flycast"}, + "fmsx": {"repo": "fmsx-libretro"}, + "freeintv": {"repo": "freeintv"}, + "gambatte": {"repo": "gambatte-libretro"}, + "genesis-plus-gx": {"repo": "Genesis-Plus-GX"}, + "gpsp": {"repo": "gpsp"}, + "gw": {"repo": "gw-libretro"}, + "handy": {"repo": "libretro-handy"}, + "hatari": {"repo": "hatari"}, + "mame": {"repo": "mame"}, + "mame2000": {"repo": "mame2000-libretro"}, + "mame2003": {"repo": "mame2003-libretro"}, + "mame2003-plus": {"repo": "mame2003-plus-libretro"}, + "mame2010": {"repo": "mame2010-libretro"}, + "mame2015": {"repo": "mame2015-libretro"}, + "mame2016": {"repo": "mame2016-libretro"}, + "melonds": {"repo": "melonds"}, + "mesen": {"repo": "mesen"}, + "mesen-s": {"repo": "mesen-s"}, + "meteor": {"repo": "meteor-libretro"}, + "mgba": {"repo": "mgba"}, + "mupen64plus": {"repo": "mupen64plus-libretro-nx"}, + "neocd": {"repo": "neocd_libretro"}, + "nestopia": {"repo": "nestopia"}, + "np2kai": {"repo": "NP2kai", "owner": "AZO234", "fetch_submodules": True}, + "o2em": {"repo": "libretro-o2em"}, + "opera": {"repo": "opera-libretro"}, + "parallel-n64": {"repo": "parallel-n64"}, + "pcsx2": {"repo": "pcsx2"}, + "pcsx_rearmed": {"repo": "pcsx_rearmed"}, + "picodrive": {"repo": "picodrive", "fetch_submodules": True}, + "play": {"repo": "Play-", "owner": "jpd002", "fetch_submodules": True}, + "ppsspp": {"repo": "ppsspp", "owner": "hrydgard", "fetch_submodules": True}, + "prboom": {"repo": "libretro-prboom"}, + "prosystem": {"repo": "prosystem-libretro"}, + "quicknes": {"repo": "QuickNES_Core"}, + "sameboy": {"repo": "sameboy"}, + "scummvm": {"repo": "scummvm"}, + "smsplus-gx": {"repo": "smsplus-gx"}, + "snes9x": {"repo": "snes9x", "owner": "snes9xgit"}, + "snes9x2002": {"repo": "snes9x2002"}, + "snes9x2005": {"repo": "snes9x2005"}, + "snes9x2010": {"repo": "snes9x2010"}, + "stella": {"repo": "stella", "owner": "stella-emu"}, + "stella2014": {"repo": "stella2014-libretro"}, + "swanstation": {"repo": "swanstation"}, + "tgbdual": {"repo": "tgbdual-libretro"}, + "thepowdertoy": {"repo": "ThePowderToy"}, + "tic80": {"repo": "tic-80", "fetch_submodules": True}, + "vba-m": {"repo": "vbam-libretro"}, + "vba-next": {"repo": "vba-next"}, + "vecx": {"repo": "libretro-vecx"}, + "virtualjaguar": {"repo": "virtualjaguar-libretro"}, + "yabause": {"repo": "yabause"}, +} + + +def info(*msg): + print(*msg, file=sys.stderr) + + +def get_repo_hash_fetchFromGitHub( + repo, + owner="libretro", + deep_clone=False, + fetch_submodules=False, + leave_dot_git=False, + rev=None, +): + extra_args = [] + if deep_clone: + extra_args.append("--deep-clone") + if fetch_submodules: + extra_args.append("--fetch-submodules") + if leave_dot_git: + extra_args.append("--leave-dot-git") + if rev: + extra_args.append("--rev") + extra_args.append(rev) + result = subprocess.run( + ["nix-prefetch-github", owner, repo, *extra_args], + check=True, + capture_output=True, + text=True, + ) + j = json.loads(result.stdout) + # Remove False values + return {k: v for k, v in j.items() if v} + + +def get_repo_hash(fetcher="fetchFromGitHub", **kwargs): + if fetcher == "fetchFromGitHub": + return get_repo_hash_fetchFromGitHub(**kwargs) + else: + raise ValueError(f"Unsupported fetcher: {fetcher}") + + +def get_repo_hashes(cores_to_update=[]): + with open(HASHES_PATH) as f: + repo_hashes = json.loads(f.read()) + + for core, repo in CORES.items(): + if core in cores_to_update: + info(f"Getting repo hash for '{core}'...") + repo_hashes[core] = get_repo_hash(**repo) + else: + info(f"Skipping '{core}'...") + + return repo_hashes + + +def main(): + # If you don't want to update all cores, pass the name of the cores you + # want to update on the command line. E.g.: + # $ ./update.py citra snes9x + if len(sys.argv) > 1: + cores_to_update = sys.argv[1:] + else: + cores_to_update = CORES.keys() + + repo_hashes = get_repo_hashes(cores_to_update) + info(f"Generating '{HASHES_PATH}'...") + with open(HASHES_PATH, "w") as f: + f.write(json.dumps(dict(sorted(repo_hashes.items())), indent=4)) + f.write("\n") + info("Finished!") + + +if __name__ == "__main__": + main() |