feat: record config installs in shell extractors

ROCKNIX, EmuELEC, AmberELEC, EmuDeck and RetroDECK records citing a
config now carry the code installing it, whether that keeps a file
already there, and the launch code rewriting its keys. Rescraped at the
pinned revisions.

Records the shipped code never reads are no longer written: EmuELEC's
mame.ini folders (MAME.opt turns paths off), AmberELEC's atari800.cfg
(read only under an option that is off), the six RetroDECK XRoar ROM
lists no machine looks up, and the ROCKNIX melonDS DSi BIOS keys
(DSiExternalBIOSEnable is set by no shipped ini).

Conditions added: ROCKNIX and AmberELEC amiberry kickstarts hold only
outside a WHDLoad --autoload boot, ROCKNIX NanoBoyAdvance exits without
its BIOS, the EmuELEC scummvm.ini copy runs from an action no launch
passes, and the EmuDeck melonDS.toml keys need ExternalBIOSEnable (DS)
or ConsoleType 1 (DSi).
This commit is contained in:
Abdessamad Derraz committed 2026-11-11 11:04:02 +01:00
1 parent 3129eaf10c
commit c5d3e85bac
16 files changed
+1153 -418

No files matched your search

+24 -21
View File
@@ -3180,6 +3180,11 @@ launchers:
search_dir: ~/roms/bios
passes_to: retroarch.cfg system_directory
fails_when_missing: false
installs:
path: /storage/.config/retroarch/retroarch.cfg
source_ref: "packages/sysutils/systemd/scripts/userconfig-setup:20"
kept_if_present: true
overrides: []
source_ref: "packages/games/tools/retroarch/sources/retroarch.cfg:611"
- emulator: retrorun
build: libretro
@@ -3198,25 +3203,6 @@ launchers:
fails_when_missing: false
depends_on_option: self.emulator == 'mame'
source_ref: "packages/amberelec/sources/scripts/runemu.py:233, 252, 255"
- emulator: atari800
build: libretro
kind: fixed_name
names:
- ATARIOSA.ROM
- ATARIXL.ROM
- 5200.rom
- 5200a.rom
- BASIC_Rev_A.rom
- BASIC_Rev_B.rom
- ATARIBAS.ROM
- ATARIOSB.ROM
case_insensitive: false
search_dir: /storage/roms/bios
passes_to: atari800.cfg ROM_OS_A_PAL, ROM_OS_BB01R2, ROM_5200, ROM_5200_A, ROM_BASIC_A,
ROM_BASIC_B, ROM_BASIC_C, ROM_400/800_CUSTOM
fails_when_missing: false
source_ref: "packages/games/libretro/atari800/patches/atari800-01-add-emuelec-platform.patch:27,\
\ packages/amberelec/config/distribution/configs/atari800.cfg:3, 8, 16-22"
- emulator: scummvm
build: libretro
kind: passes_path
@@ -3291,7 +3277,13 @@ launchers:
passes_to: "AmigaA1200-default.uae kickstart_rom_file, $(FILE_PATH) = /storage/.config/amiberry/kickstarts/"
fails_when_missing: false
depends_on_option: "[ `echo $1 | egrep 'AGA|CD32' | wc -l` -eq 1 -o `echo \"$AMIBERRY_TMP_DIR\"\
/* | egrep 'AGA|CD32' | wc -l` -eq 1 ]"
/* | egrep 'AGA|CD32' | wc -l` -eq 1 ], content not booted with --autoload, a\
\ WHDLoad .lha or .zip (amiberry.sh:83, 122)"
installs:
path: /tmp/emulation/amiberry/.amiberry_conf.uae
source_ref: "packages/games/emulators/amiberry/scripts/amiberry.sh:59"
kept_if_present: false
overrides: []
source_ref: "packages/amberelec/sources/scripts/runemu.py:111, packages/games/emulators/amiberry/scripts/amiberry.sh:57-59,\
\ packages/games/emulators/amiberry/config/conf/AmigaA1200-default.uae:35, 85"
- emulator: AMIBERRY
@@ -3305,7 +3297,13 @@ launchers:
passes_to: "AmigaA500-default.uae kickstart_rom_file, $(FILE_PATH) = /storage/.config/amiberry/kickstarts/"
fails_when_missing: false
depends_on_option: "not ([ `echo $1 | egrep 'AGA|CD32' | wc -l` -eq 1 -o `echo \"\
$AMIBERRY_TMP_DIR\"/* | egrep 'AGA|CD32' | wc -l` -eq 1 ])"
$AMIBERRY_TMP_DIR\"/* | egrep 'AGA|CD32' | wc -l` -eq 1 ]), content not booted\
\ with --autoload, a WHDLoad .lha or .zip (amiberry.sh:83, 122)"
installs:
path: /tmp/emulation/amiberry/.amiberry_conf.uae
source_ref: "packages/games/emulators/amiberry/scripts/amiberry.sh:62"
kept_if_present: false
overrides: []
source_ref: "packages/amberelec/sources/scripts/runemu.py:111, packages/games/emulators/amiberry/scripts/amiberry.sh:60-62,\
\ packages/games/emulators/amiberry/config/conf/AmigaA500-default.uae:35, 85"
- emulator: HATARISA
@@ -3317,6 +3315,11 @@ launchers:
search_dir: /storage/roms/bios
passes_to: "Atari-ST-default.cfg [ROM] szTosImageFileName"
fails_when_missing: false
installs:
path: /tmp/hatari/.hatari-temp.cfg
source_ref: "packages/games/emulators/hatarisa/scripts/hatari.sh:36"
kept_if_present: false
overrides: []
source_ref: "packages/amberelec/sources/scripts/runemu.py:113, packages/games/emulators/hatarisa/scripts/hatari.sh:36,\
\ 66, packages/games/emulators/hatarisa/config/conf/Atari-ST-default.cfg:200"
- emulator: pico8
+105 -2
View File
@@ -937,6 +937,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml ColecoVision/Firmware/BIOS.World
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:270, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -948,6 +954,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml MSX/Firmware/BIOS.Japan
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:278, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -959,6 +971,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml MSX2/Firmware/BIOS.Japan
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:283, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -971,6 +989,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml PCEngineCD/Firmware/BIOS.US, PCEngineCD/Firmware/BIOS.Japan
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:291-292, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -982,6 +1006,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml SuperGrafxCD/Firmware/BIOS.Japan
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:300, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -993,6 +1023,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml FamicomDiskSystem/Firmware/BIOS.Japan
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:308, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1007,6 +1043,12 @@ launchers:
passes_to: settings.bml Nintendo64DD/Firmware/BIOS.Japan, Nintendo64DD/Firmware/BIOS.US,
Nintendo64DD/Firmware/BIOS.DEV
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:319-321, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1018,6 +1060,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml GameBoyAdvance/Firmware/BIOS.World
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:332, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1032,6 +1080,12 @@ launchers:
passes_to: settings.bml MasterSystem/Firmware/BIOS.US, MasterSystem/Firmware/BIOS.Japan,
MasterSystem/Firmware/BIOS.Europe
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:340-342, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1043,6 +1097,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml GameGear/Firmware/BIOS.World
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:347, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1056,6 +1116,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml MegaCD/Firmware/BIOS.US, MegaCD/Firmware/BIOS.Japan, MegaCD/Firmware/BIOS.Europe
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:358-360, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1067,6 +1133,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml NeoGeoAES/Firmware/BIOS.World
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:368, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1078,6 +1150,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml NeoGeoPocket/Firmware/BIOS.World
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:378, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1089,6 +1167,12 @@ launchers:
search_dir: "${biosPath}"
passes_to: settings.bml NeoGeoPocketColor/Firmware/BIOS.World
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:383, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: ares
@@ -1103,6 +1187,12 @@ launchers:
passes_to: settings.bml PlayStation/Firmware/BIOS.US, PlayStation/Firmware/BIOS.Japan,
PlayStation/Firmware/BIOS.Europe
fails_when_missing: false
installs:
path: "${HOME}/.var/app/dev.ares.ares/data/ares/settings.bml"
source_ref: "functions/EmuScripts/emuDeckares.sh:26, 42, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/dev.ares.ares/data/ares/settings.bml:388-390, functions/EmuScripts/emuDeckares.sh:6,\
\ 63-64"
- emulator: melonds
@@ -1121,6 +1211,12 @@ launchers:
DSiFirmwarePath, DSiNANDPath
fails_when_missing: false
depends_on_option: ExternalBIOSEnable = 0 in the shipped melonDS.ini
installs:
path: "${HOME}/.var/app/net.kuribo64.melonDS/config/melonDS/melonDS.ini"
source_ref: "functions/EmuScripts/emuDeckMelonDS.sh:29, 48, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "functions/EmuScripts/emuDeckMelonDS.sh:7, 62-68, 71-77, configs/net.kuribo64.melonDS/config/melonDS/melonDS.ini:77"
- emulator: melonds
build: standalone
@@ -1137,8 +1233,15 @@ launchers:
passes_to: "melonDS.toml [DS] FirmwarePath, BIOS7Path, BIOS9Path [DSi] FirmwarePath,\
\ NANDPath, BIOS7Path, BIOS9Path"
fails_when_missing: false
depends_on_option: ExternalBIOSEnable = false in the shipped melonDS.toml
source_ref: "configs/net.kuribo64.melonDS/config/melonDS/melonDS.toml:176, 181-183,\
depends_on_option: "[DS] keys: ExternalBIOSEnable = true, false in the shipped melonDS.toml;\
\ [DSi] keys: ConsoleType = 1, 0 in the shipped melonDS.toml"
installs:
path: "${HOME}/.var/app/net.kuribo64.melonDS/config/melonDS/melonDS.toml"
source_ref: "functions/EmuScripts/emuDeckMelonDS.sh:29, 48, functions/configEmuFP.sh:11,\
\ 15"
kept_if_present: true
overrides: []
source_ref: "configs/net.kuribo64.melonDS/config/melonDS/melonDS.toml:176-178, 181-183,\
\ 186-189, functions/EmuScripts/emuDeckMelonDS.sh:8, 32"
- emulator: mupen64plus_next
build: standalone
+138 -91
View File
@@ -4241,96 +4241,6 @@ launchers:
fails_when_missing: false
depends_on_option: /storage/roms/bios/mame/ini/mame.ini absent
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame
passes_to: mame.ini homepath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:10, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/bios
passes_to: mame.ini rompath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:11, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/hash
passes_to: mame.ini hashpath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:12, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/samples
passes_to: mame.ini samplepath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:13, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/artwork
passes_to: mame.ini artpath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:14, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/ini
passes_to: mame.ini inipath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:16, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/cheat
passes_to: mame.ini cheatpath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:18, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/crosshair
passes_to: mame.ini crosshairpath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:19, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: mame
build: libretro
kind: passes_path
names: []
search_dir: /storage/roms/bios/mame/plugins
passes_to: mame.ini pluginspath
fails_when_missing: false
depends_on_option: mame_read_config = enabled
source_ref: "packages/sx05re/libretro/mame/config/ini/mame.ini:20, packages/sx05re/libretro/mame/config/MAME/MAME.opt:19,\
\ packages/sx05re/emuelec/bin/emuelecRunEmu.sh:357-358, packages/sx05re/libretro/mame/scripts/mame.sh:21-23"
- emulator: pico8
build: standalone
kind: moves
@@ -4384,6 +4294,11 @@ launchers:
passes_to: "settings.ini [BIOS] SearchDirectory (-settings), [BIOS] PathNTSCU, PathNTSCJ,\
\ PathPAL unset"
fails_when_missing: false
installs:
path: /emuelec/configs/duckstation/settings.ini
source_ref: "packages/sx05re/emulators/duckstation/scripts/duckstation.sh:15"
kept_if_present: true
overrides: []
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:207-209, packages/sx05re/emulators/duckstation/config/settings.ini:6-9,\
\ packages/sx05re/emulators/duckstation/package.mk:56, packages/sx05re/emulators/duckstation/scripts/duckstation.sh:40"
- emulator: yabasanshiroSA
@@ -4439,6 +4354,11 @@ launchers:
search_dir: /storage/roms/bios
passes_to: "Atari-ST-default.cfg [ROM] szTosImageFileName (--configfile)"
fails_when_missing: false
installs:
path: /tmp/hatari/.hatari-temp.cfg
source_ref: "packages/sx05re/emulators/hatarisa/scripts/hatari.start:36"
kept_if_present: false
overrides: []
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:172-174, packages/sx05re/emulators/hatarisa/config/conf/Atari-ST-default.cfg:200,\
\ packages/sx05re/emulators/hatarisa/package.mk:39, packages/sx05re/emulators/hatarisa/scripts/hatari.start:36,\
\ 66, 73"
@@ -4450,6 +4370,12 @@ launchers:
passes_to: advmame.rc dir_artwork
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4463,6 +4389,12 @@ launchers:
search_dir: /storage/roms/arcade/artwork
passes_to: advmame.rc dir_artwork
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4475,6 +4407,12 @@ launchers:
passes_to: advmame.rc dir_diff
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4488,6 +4426,12 @@ launchers:
search_dir: /storage/roms/arcade/diff
passes_to: advmame.rc dir_diff
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4500,6 +4444,12 @@ launchers:
passes_to: advmame.rc dir_hi
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4513,6 +4463,12 @@ launchers:
search_dir: /storage/roms/arcade/hi
passes_to: advmame.rc dir_hi
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4525,6 +4481,12 @@ launchers:
passes_to: advmame.rc dir_image
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4538,6 +4500,12 @@ launchers:
search_dir: /storage/roms/arcade/image
passes_to: advmame.rc dir_image
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4550,6 +4518,12 @@ launchers:
passes_to: advmame.rc dir_inp
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4563,6 +4537,12 @@ launchers:
search_dir: /storage/roms/arcade/inp
passes_to: advmame.rc dir_inp
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4575,6 +4555,12 @@ launchers:
passes_to: advmame.rc dir_memcard
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4588,6 +4574,12 @@ launchers:
search_dir: /storage/roms/arcade/memcard
passes_to: advmame.rc dir_memcard
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4600,6 +4592,12 @@ launchers:
passes_to: advmame.rc dir_nvram
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4613,6 +4611,12 @@ launchers:
search_dir: /storage/roms/arcade/nvram
passes_to: advmame.rc dir_nvram
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4625,6 +4629,12 @@ launchers:
passes_to: advmame.rc dir_rom
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4638,6 +4648,12 @@ launchers:
search_dir: /storage/roms/arcade
passes_to: advmame.rc dir_rom
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4649,6 +4665,12 @@ launchers:
search_dir: /storage/roms/bios/advmame/samples
passes_to: advmame.rc dir_sample
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:80"
@@ -4660,6 +4682,12 @@ launchers:
passes_to: advmame.rc dir_snap
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4673,6 +4701,12 @@ launchers:
search_dir: /storage/roms/arcade/snap
passes_to: advmame.rc dir_snap
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4685,6 +4719,12 @@ launchers:
passes_to: advmame.rc dir_sta
fails_when_missing: false
depends_on_option: system != arcade
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4698,6 +4738,12 @@ launchers:
search_dir: /storage/roms/arcade/nvram
passes_to: advmame.rc dir_sta
fails_when_missing: false
installs:
path: /emuelec/configs/advmame/advmame.rc
source_ref: "packages/sx05re/emulators/advancemame/bin/advmame.sh:17, 21"
kept_if_present: false
overrides:
- "packages/sx05re/emulators/advancemame/bin/advmame.sh:27"
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
@@ -4720,7 +4766,8 @@ launchers:
search_dir: /storage/.config/scummvm
passes_to: /storage/roms/bios/scummvm.ini
fails_when_missing: false
depends_on_option: scummvm.start add
depends_on_option: "scummvm.start add, an action no launch runs (emuelecRunEmu.sh\
\ passes libretro, sa)"
source_ref: "packages/sx05re/emulators/scummvmsa/bin/scummvm.start:9, 49-51, 54"
- emulator: dolphin
build: standalone
+230 -82
View File
@@ -16763,6 +16763,11 @@ launchers:
search_dir: $roms_path/doom
passes_to: "gzdoom.ini [IWADSearch.Directories] Path"
fails_when_missing: false
installs:
path: $gzdoom_config
source_ref: "gzdoom/component_prepare.sh:23, 26-30"
kept_if_present: false
overrides: []
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:9, gzdoom/component_prepare.sh:23,\
\ 27-28"
- emulator: gzdoom
@@ -16772,6 +16777,11 @@ launchers:
search_dir: $roms_path/doom
passes_to: "gzdoom.ini [FileSearch.Directories] Path"
fails_when_missing: false
installs:
path: $gzdoom_config
source_ref: "gzdoom/component_prepare.sh:23, 26-30"
kept_if_present: false
overrides: []
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:18, gzdoom/component_prepare.sh:23,\
\ 27-28"
- emulator: gzdoom
@@ -16781,6 +16791,11 @@ launchers:
search_dir: $bios_path/gzdoom
passes_to: "gzdoom.ini [FileSearch.Directories] Path"
fails_when_missing: false
installs:
path: $gzdoom_config
source_ref: "gzdoom/component_prepare.sh:23, 26-30"
kept_if_present: false
overrides: []
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:19, gzdoom/component_prepare.sh:23,\
\ 28"
- emulator: gzdoom
@@ -16790,6 +16805,11 @@ launchers:
search_dir: $roms_path/bios/gzdoom
passes_to: "gzdoom.ini [SoundfontSearch.Directories] Path"
fails_when_missing: false
installs:
path: $gzdoom_config
source_ref: "gzdoom/component_prepare.sh:23, 26-30"
kept_if_present: false
overrides: []
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:31, gzdoom/component_prepare.sh:23,\
\ 27-28"
- emulator: mame
@@ -17023,6 +17043,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: xroar.conf rompath
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:290, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17033,6 +17058,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragon
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:291, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17048,6 +17078,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist d64_1
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:292, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17062,6 +17097,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist d64_2
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:293, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17075,6 +17115,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist d32
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:294, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17087,6 +17132,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist d200e_1
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:295, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17099,6 +17149,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist d200e_2
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:296, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17115,6 +17170,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragon64
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:297, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17129,6 +17189,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragon64_alt
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:298, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17143,6 +17208,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragon32
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:299, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17162,6 +17232,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragon200e
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:300, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17179,6 +17254,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragon200e_alt
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:301, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17190,6 +17270,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragon200e_charset
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:302, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17204,6 +17289,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragonpro_boot
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:303, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17222,6 +17312,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragonpro_basic
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:304, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17236,6 +17331,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:305, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17249,89 +17349,12 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco_ext
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:306, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
kind: names_searched
slot: coco1
names:
- bas10
- bas13
- bas12
- "Color Basic v1.2 (1982)(Tandy)"
- bas11
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco1
fails_when_missing: false
source_ref: "xroar/rd_assets/rd_config/xroar.conf:307, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
kind: names_searched
slot: coco1e
names:
- bas11
- bas13
- bas12
- "Color Basic v1.2 (1982)(Tandy)"
- bas10
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco1e
fails_when_missing: false
source_ref: "xroar/rd_assets/rd_config/xroar.conf:308, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
kind: names_searched
slot: coco1e_ext
names:
- extbas10
- extbas11
- coco
- COCO
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco1e_ext
fails_when_missing: false
source_ref: "xroar/rd_assets/rd_config/xroar.conf:309, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
kind: names_searched
slot: coco2
names:
- bas12
- bas13
- "Color Basic v1.2 (1982)(Tandy)"
- bas11
- bas10
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco2
fails_when_missing: false
source_ref: "xroar/rd_assets/rd_config/xroar.conf:310, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
kind: names_searched
slot: coco2_ext
names:
- extbas11
- extbas10
- coco
- COCO
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco2_ext
fails_when_missing: false
source_ref: "xroar/rd_assets/rd_config/xroar.conf:311, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
kind: names_searched
slot: coco2b
names:
- bas13
- bas12
- "Color Basic v1.2 (1982)(Tandy)"
- bas11
- bas10
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco2b
fails_when_missing: false
source_ref: "xroar/rd_assets/rd_config/xroar.conf:312, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
kind: names_searched
@@ -17342,6 +17365,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist deluxecoco
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:313, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17352,6 +17380,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist deluxecoco1
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:314, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17362,6 +17395,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist deluxecoco2
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:315, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17373,6 +17411,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist deluxecoco3
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:316, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17384,6 +17427,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist mx1600
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:317, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17394,6 +17442,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist mx1600ext
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:318, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17404,6 +17457,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco3
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:319, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17414,6 +17472,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist coco3p
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:320, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17425,6 +17488,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist glenside_ide
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:321, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17435,6 +17503,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist mc10
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:322, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17445,6 +17518,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist alice
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:323, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17460,6 +17538,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragondos
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:324, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17473,6 +17556,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dosplus
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:325, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17486,6 +17574,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist superdos
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:326, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17498,6 +17591,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist cumana
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:327, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17524,6 +17622,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist dragondos_compat
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:328, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17535,6 +17638,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist rsdos
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:329, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17550,6 +17658,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist delta
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:330, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17560,6 +17673,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist rsdos_becker
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:331, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17571,6 +17689,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist mcx128
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:332, xroar/component_prepare.sh:13-15"
- emulator: xroar
build: standalone
@@ -17582,6 +17705,11 @@ launchers:
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
passes_to: romlist mcx128_azerty
fails_when_missing: false
installs:
path: $xroar_config
source_ref: "xroar/component_prepare.sh:13-15"
kept_if_present: false
overrides: []
source_ref: "xroar/rd_assets/rd_config/xroar.conf:333, xroar/component_prepare.sh:13-15"
- emulator: retroarch
build: libretro
@@ -17590,6 +17718,11 @@ launchers:
- scph5500.bin
passes_to: core option duckstation_BIOS.PathNTSCJ
fails_when_missing: false
installs:
path: $retroarch_config_core_options
source_ref: "retroarch/component_prepare.sh:24"
kept_if_present: false
overrides: []
source_ref: "retroarch/rd_assets/rd_config/retroarch-core-options.cfg:165, retroarch/component_prepare.sh:24"
- emulator: retroarch
build: libretro
@@ -17598,6 +17731,11 @@ launchers:
- scph5501.bin
passes_to: core option duckstation_BIOS.PathNTSCU
fails_when_missing: false
installs:
path: $retroarch_config_core_options
source_ref: "retroarch/component_prepare.sh:24"
kept_if_present: false
overrides: []
source_ref: "retroarch/rd_assets/rd_config/retroarch-core-options.cfg:166, retroarch/component_prepare.sh:24"
- emulator: retroarch
build: libretro
@@ -17606,6 +17744,11 @@ launchers:
- scph5502.bin
passes_to: core option duckstation_BIOS.PathPAL
fails_when_missing: false
installs:
path: $retroarch_config_core_options
source_ref: "retroarch/component_prepare.sh:24"
kept_if_present: false
overrides: []
source_ref: "retroarch/rd_assets/rd_config/retroarch-core-options.cfg:167, retroarch/component_prepare.sh:24"
- emulator: retroarch
build: libretro
@@ -17614,4 +17757,9 @@ launchers:
- scph10000.bin
passes_to: core option pcsx2_bios
fails_when_missing: false
installs:
path: $retroarch_config_core_options
source_ref: "retroarch/component_prepare.sh:24"
kept_if_present: false
overrides: []
source_ref: "retroarch/rd_assets/rd_config/retroarch-core-options.cfg:515, retroarch/component_prepare.sh:24"
+133 -19
View File
@@ -570,6 +570,11 @@ launchers:
passes_to: retroarch.cfg system_directory = "~/roms/bios", systemfiles_in_content_dir
= "false"
fails_when_missing: false
installs:
path: /storage/.config/retroarch/retroarch.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/libretro/retroarch/sources/AMD64/retroarch.cfg:3395-3396,\
\ projects/ROCKNIX/packages/emulators/libretro/retroarch/sources/H700/retroarch.cfg:711-712,\
\ projects/ROCKNIX/packages/emulators/libretro/retroarch/sources/RK3326/retroarch.cfg:716-717,\
@@ -594,7 +599,13 @@ launchers:
search_dir: /storage/roms/bios
passes_to: "AmigaA1200-default.uae kickstart_rom_file (amiberry -f)"
fails_when_missing: false
depends_on_option: game name matches AGA|CD32
depends_on_option: "game name matches AGA|CD32, content not booted with --autoload,\
\ a WHDLoad .lha or .zip (start_amiberry.sh:90, 129)"
installs:
path: /tmp/emulation/amiberry/.amiberry_conf.uae
source_ref: "projects/ROCKNIX/packages/emulators/standalone/amiberry/scripts/start_amiberry.sh:64"
kept_if_present: false
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/amiberry/scripts/start_amiberry.sh:17,\
\ 62-69, projects/ROCKNIX/packages/emulators/standalone/amiberry/config/conf/AmigaA1200-default.uae:114"
- emulator: amiberry
@@ -606,7 +617,13 @@ launchers:
search_dir: /storage/roms/bios
passes_to: "AmigaA500-default.uae kickstart_rom_file (amiberry -f)"
fails_when_missing: false
depends_on_option: game name does not match AGA|CD32
depends_on_option: "game name does not match AGA|CD32, content not booted with --autoload,\
\ a WHDLoad .lha or .zip (start_amiberry.sh:90, 129)"
installs:
path: /tmp/emulation/amiberry/.amiberry_conf.uae
source_ref: "projects/ROCKNIX/packages/emulators/standalone/amiberry/scripts/start_amiberry.sh:67"
kept_if_present: false
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/amiberry/scripts/start_amiberry.sh:17,\
\ 62-69, projects/ROCKNIX/packages/emulators/standalone/amiberry/config/conf/AmigaA500-default.uae:114"
- emulator: amiberry
@@ -645,6 +662,11 @@ launchers:
search_dir: /storage/roms/bios
passes_to: "Atari-ST-default.cfg [ROM] szTosImageFileName (--configfile)"
fails_when_missing: false
installs:
path: /tmp/hatari/.hatari-temp.cfg
source_ref: "projects/ROCKNIX/packages/emulators/standalone/hatarisa/scripts/start_hatarisa.sh:35"
kept_if_present: false
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/hatarisa/config/conf/Atari-ST-default.cfg:200,\
\ projects/ROCKNIX/packages/emulators/standalone/hatarisa/scripts/start_hatarisa.sh:35,\
\ 65"
@@ -652,13 +674,20 @@ launchers:
build: standalone
kind: fixed_name
names: []
passes_to: melonDS.ini BIOS9Path, BIOS7Path, FirmwarePath, DSiBIOS9Path, DSiBIOS7Path,
DSiFirmwarePath, DSiNANDPath left empty
passes_to: melonDS.ini BIOS9Path, BIOS7Path, FirmwarePath, DSiNANDPath left empty
fails_when_missing: false
depends_on_option: direct_boot = 0 sets ExternalBIOSEnable=1, otherwise 0
device: AMD64
source_ref: "projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/AMD64/melonDS.ini:84-90,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/package.mk:60, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/scripts/start_melonds.sh:41,\
installs:
path: /storage/.config/melonDS/melonDS.ini
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/scripts/start_melonds.sh:20,\
\ 34"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/AMD64/melonDS.ini:84-86,\
\ 90, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/package.mk:60,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/scripts/start_melonds.sh:41,\
\ 71-73"
- emulator: melonds
build: standalone
@@ -667,24 +696,28 @@ launchers:
- bios9.bin
- bios7.bin
- firmware.bin
- dsi_bios9.bin
- dsi_bios7.bin
- dsi_firmware.bin
- dsi_nand.bin
search_dir: /storage/roms/bios
passes_to: melonDS.ini BIOS9Path, BIOS7Path, FirmwarePath, DSiBIOS9Path, DSiBIOS7Path,
DSiFirmwarePath, DSiNANDPath
passes_to: melonDS.ini BIOS9Path, BIOS7Path, FirmwarePath, DSiNANDPath
fails_when_missing: false
depends_on_option: direct_boot = 0 sets ExternalBIOSEnable=1, otherwise 0
device: RK3399, RK3566, RK3576, RK3588, S922X, SDM845, SM4450, SM6115, SM8250, SM8550,
SM8650, SM8750
source_ref: "projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/InputPlumber/melonDS.ini:94-100,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/RK3399/melonDS.ini:93-99,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/RK3566/melonDS.ini:93-99,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/RK3588/melonDS.ini:93-99,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/S922X/melonDS.ini:95-101,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/SM4450/melonDS.ini:90-96,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/package.mk:60, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/scripts/start_melonds.sh:41,\
installs:
path: /storage/.config/melonDS/melonDS.ini
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/scripts/start_melonds.sh:20,\
\ 34"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/InputPlumber/melonDS.ini:94-96,\
\ 100, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/RK3399/melonDS.ini:93-95,\
\ 99, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/RK3566/melonDS.ini:93-95,\
\ 99, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/RK3588/melonDS.ini:93-95,\
\ 99, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/S922X/melonDS.ini:95-97,\
\ 101, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/config/SM4450/melonDS.ini:90-92,\
\ 96, projects/ROCKNIX/packages/emulators/standalone/melonds-sa/package.mk:60,\
\ projects/ROCKNIX/packages/emulators/standalone/melonds-sa/scripts/start_melonds.sh:41,\
\ 71-73"
- emulator: dsperate
build: standalone
@@ -701,6 +734,12 @@ launchers:
passes_to: "dsperate.ini [paths] bios9, bios7, firmware, bios9i, bios7i, dsi_firmware,\
\ dsi_nand (--config)"
fails_when_missing: false
installs:
path: /storage/.config/dsperate/dsperate.ini
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/dsperate-sa/scripts/start_dsperate.sh:19"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/dsperate-sa/config/H700/dsperate.ini:11-17,\
\ projects/ROCKNIX/packages/emulators/standalone/dsperate-sa/config/InputPlumber/dsperate.ini:11-17,\
\ projects/ROCKNIX/packages/emulators/standalone/dsperate-sa/config/RK3326/dsperate.ini:11-17,\
@@ -716,7 +755,13 @@ launchers:
- gba_bios.bin
search_dir: /storage/roms/bios
passes_to: "config.toml [general] bios_path"
fails_when_missing: false
fails_when_missing: true
installs:
path: /storage/.config/nanoboyadvance/config.toml
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/nanoboyadvance-sa/scripts/start_nanoboyadvance.sh:12"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/nanoboyadvance-sa/config/config.toml:2,\
\ projects/ROCKNIX/packages/emulators/standalone/nanoboyadvance-sa/package.mk:30"
- emulator: xemu
@@ -731,6 +776,13 @@ launchers:
passes_to: "xemu.toml [sys.files] bootrom_path, flashrom_path, eeprom_path, hdd_path\
\ (copied at each launch)"
fails_when_missing: false
installs:
path: /storage/.config/xemu/xemu.toml
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/xemu-sa/scripts/start_xemu.sh:15,\
\ 19"
kept_if_present: false
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/xemu-sa/config/AMD64/xemu.toml:28-31,\
\ projects/ROCKNIX/packages/emulators/standalone/xemu-sa/config/SM4450/xemu.toml:29-32,\
\ projects/ROCKNIX/packages/emulators/standalone/xemu-sa/config/SM8250/xemu.toml:29-32,\
@@ -747,6 +799,12 @@ launchers:
search_dir: /storage/roms/bios/
passes_to: mednafen.cfg gba.bios
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 729, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: mednafen
@@ -758,6 +816,12 @@ launchers:
search_dir: /storage/roms/bios/
passes_to: mednafen.cfg md.cdbios
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 1050, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: mednafen
@@ -769,6 +833,12 @@ launchers:
search_dir: /storage/roms/bios/
passes_to: mednafen.cfg nes.ggrom
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 2292, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: mednafen
@@ -781,6 +851,12 @@ launchers:
search_dir: /storage/roms/bios/
passes_to: mednafen.cfg pce.cdbios, pce.gecdbios
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 3309, 3342, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: mednafen
@@ -792,6 +868,12 @@ launchers:
search_dir: /storage/roms/bios/
passes_to: mednafen.cfg pce_fast.cdbios
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 4128, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: mednafen
@@ -803,6 +885,12 @@ launchers:
search_dir: /storage/roms/bios/
passes_to: mednafen.cfg pcfx.bios
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 4611, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: mednafen
@@ -816,6 +904,12 @@ launchers:
search_dir: /storage/roms/bios/
passes_to: mednafen.cfg psx.bios_eu, psx.bios_jp, psx.bios_na
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 7366-7370, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: mednafen
@@ -834,6 +928,12 @@ launchers:
passes_to: mednafen.cfg ss.bios_jp, ss.bios_na_eu, ss.bios_stv_eu, ss.bios_stv_jp,
ss.bios_stv_na, ss.cart.kof95_path, ss.cart.ultraman_path
fails_when_missing: false
installs:
path: /storage/.config/mednafen/mednafen.cfg
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:21"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/mednafen/config/common/mednafen.template:570,\
\ 9818-9820, 9824-9828, 9834-9836, projects/ROCKNIX/packages/emulators/standalone/mednafen/scripts/start_mednafen.sh:19-21"
- emulator: yabasanshiro
@@ -861,6 +961,13 @@ launchers:
passes_to: "settings.ini [BIOS] SearchDirectory = /storage/roms/bios, [BIOS] PathNTSCU,\
\ PathNTSCJ, PathPAL unset"
fails_when_missing: false
installs:
path: /storage/.config/duckstation/settings.ini
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/duckstation-sa/scripts/start_duckstation.sh:19,\
\ 22"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/duckstation-sa/config/AMD64/settings.ini:134,\
\ projects/ROCKNIX/packages/emulators/standalone/duckstation-sa/config/H700/settings.ini:24,\
\ projects/ROCKNIX/packages/emulators/standalone/duckstation-sa/config/InputPlumber/settings.ini:29-32,\
@@ -878,6 +985,13 @@ launchers:
passes_to: "PCSX2.ini [Folders] Bios = /storage/roms/bios/armsx2, [Filenames] BIOS\
\ unset"
fails_when_missing: false
installs:
path: /storage/.config/ARMSX2/inis/PCSX2.ini
source_ref: "projects/ROCKNIX/packages/sysutils/systemd/scripts/userconfig-setup:13,\
\ projects/ROCKNIX/packages/emulators/standalone/armsx2-sa/scripts/start_armsx2.sh:11,\
\ 16"
kept_if_present: true
overrides: []
source_ref: "projects/ROCKNIX/packages/emulators/standalone/armsx2-sa/config/S922X/ARMSX2/inis/PCSX2.ini:21,\
\ 475, projects/ROCKNIX/packages/emulators/standalone/armsx2-sa/config/inputplumber/ARMSX2/inis/PCSX2.ini:21,\
\ 473, projects/ROCKNIX/packages/emulators/standalone/armsx2-sa/package.mk:117-118"
+55 -29
View File
@@ -7,7 +7,7 @@ runs the script its standalone_emulators table names (/usr/bin/<name>.sh,
installed from the package). Those scripts, and the configs their packages
install, say which file under /storage/roms/bios is opened: yabasanshiro.sh
tests saturn_bios.bin and passes it with -b, Hatari's default config names
tos.img, the atari800 core is built to read a config naming its OS ROMs.
tos.img.
runemu.py is read with ast, the scripts with shell_launchers' readers. An
extractor whose construct is gone raises instead of returning nothing.
@@ -26,7 +26,9 @@ try:
from .shell_launchers import (
LauncherPatternMissing,
Script,
config_placement,
describe_keys,
evidence_fields,
settings,
source_ref,
)
@@ -35,7 +37,9 @@ except ImportError:
from shell_launchers import ( # type: ignore[no-redef]
LauncherPatternMissing,
Script,
config_placement,
describe_keys,
evidence_fields,
settings,
source_ref,
)
@@ -45,8 +49,8 @@ RUNEMU = "packages/amberelec/sources/scripts/runemu.py"
RETROARCH_CFG = "packages/games/tools/retroarch/sources/retroarch.cfg"
RETRORUN = "packages/games/tools/retrorun/retrorun.sh"
HATARI_CONFIG = "packages/games/emulators/hatarisa/config/conf/Atari-ST-default.cfg"
ATARI800_CONFIG = "packages/amberelec/config/distribution/configs/atari800.cfg"
ATARI800_PATCH = "packages/games/libretro/atari800/patches/atari800-01-add-emuelec-platform.patch"
# The first-boot copy of every package's /usr/config into /storage/.config.
USERCONFIG = "packages/sysutils/systemd/scripts/userconfig-setup"
AMIBERRY_PACKAGE = "packages/games/emulators/amiberry/package.mk"
AMIBERRY_CONFIGS = "packages/games/emulators/amiberry/config/conf"
FREEJ2ME = (
@@ -103,16 +107,35 @@ class Runemu:
return path, line
def _evidence(
read: Read, record: Launcher, target: str, keys: list[str],
start: Script | None = None, source_name: str = "",
) -> Launcher:
"""A config record with the steps that put its file at ``target``: the
first-boot copy of /usr/config, then the start script's own copy."""
setup = Script(USERCONFIG, read(USERCONFIG))
placements = [config_placement(setup, target, required=False, sources=("/usr/config/",))]
if start is not None:
placements.append(
config_placement(start, target, keys, source_name=source_name, required=False)
)
fields = evidence_fields(placements)
record.installs = fields["installs"]
record.kept_if_present = fields["kept_if_present"]
record.overrides = fields["overrides"]
return record
def retroarch(read: Read) -> list[Launcher]:
"""system_directory of the retroarch.cfg the retroarch package installs."""
found = [s for s in settings(read(RETROARCH_CFG)) if s.key == "system_directory"]
if len(found) != 1:
raise LauncherPatternMissing(RETROARCH_CFG, "one system_directory")
return [Launcher(
return [_evidence(read, Launcher(
emulator="retroarch", build="libretro", kind="passes_path", names=[],
search_dir=found[0].value, passes_to="retroarch.cfg system_directory",
fails_when_missing=False, source_ref=source_ref([(RETROARCH_CFG, [found[0].line])]),
)]
), "/storage/.config/retroarch/retroarch.cfg", ["system_directory"])]
def retrorun(read: Read) -> list[Launcher]:
@@ -170,10 +193,12 @@ def hatari(read: Read, runemu: Runemu) -> list[Launcher]:
path, table_line = runemu.script("HATARISA")
script = Script(path, read(path))
name = posixpath.basename(HATARI_CONFIG)
copied, _ = script.find(rf"^\s*cp\s+\S*/{re.escape(name)}\s", f"cp of {name}")
copied, copy = script.find(
rf"^\s*cp\s+\S*/{re.escape(name)}\s+\"?(\$\{{?\w+\}}?)", f"cp of {name}"
)
passed, _ = script.find(r"\shatari\s+--configfile\s", "hatari --configfile")
files, lines = _bios_files(HATARI_CONFIG, read(HATARI_CONFIG))
return [Launcher(
return [_evidence(read, Launcher(
emulator="HATARISA", build="standalone", kind="fixed_name",
names=[n for _k, n in files], case_insensitive=False, search_dir=BIOS,
passes_to=describe_keys(name, tuple(k for k, _n in files)),
@@ -181,24 +206,8 @@ def hatari(read: Read, runemu: Runemu) -> list[Launcher]:
source_ref=source_ref([
(RUNEMU, [table_line]), (path, [copied, passed]), (HATARI_CONFIG, lines),
]),
)]
def atari800(read: Read) -> list[Launcher]:
"""The ROM keys of the config the atari800 core is built to read."""
patch = Script(ATARI800_PATCH, read(ATARI800_PATCH))
line, found = patch.find(r'DEFAULT_CFG_NAME="\\"([^"\\]+)\\""', "DEFAULT_CFG_NAME")
built = found.group(1)
if not built.endswith("/" + ATARI800_CONFIG.split("/config/", 1)[1]):
raise LauncherPatternMissing(ATARI800_PATCH, f"DEFAULT_CFG_NAME naming {ATARI800_CONFIG}")
files, lines = _bios_files(ATARI800_CONFIG, read(ATARI800_CONFIG))
return [Launcher(
emulator="atari800", build="libretro", kind="fixed_name",
names=[n for _k, n in files], case_insensitive=False, search_dir=BIOS,
passes_to=describe_keys(posixpath.basename(ATARI800_CONFIG), tuple(k for k, _n in files)),
fails_when_missing=False,
source_ref=source_ref([(ATARI800_PATCH, [line]), (ATARI800_CONFIG, lines)]),
)]
), script.expand(copy.group(1), copied, set()),
[f"[{s}] {k}" if s else k for (s, k), _n in files], script, name)]
def yabasanshiro(read: Read, runemu: Runemu) -> list[Launcher]:
@@ -279,6 +288,15 @@ def amiberry(read: Read, runemu: Runemu) -> list[Launcher]:
installed = re.sub(r"^\$\{INSTALL\}", "", link.link)
path, table_line = runemu.script("AMIBERRY")
script = Script(path, read(path))
# A WHDLoad archive is booted by --autoload, which builds its own setup
# over the config: the kickstart records hold for the other content.
autoload = [n for n, text in script.code() if re.search(r"amiberry .*--autoload", text)]
if not autoload:
raise script.missing("WHDLoad boot with --autoload")
content = (
"content not booted with --autoload, a WHDLoad .lha or .zip "
f"({posixpath.basename(path)}:{', '.join(map(str, autoload))})"
)
launchers = [Launcher(
emulator="AMIBERRY", build="standalone", kind="links", names=[],
case_insensitive=False, search_dir=BIOS,
@@ -314,19 +332,23 @@ def amiberry(read: Read, runemu: Runemu) -> list[Launcher]:
else:
test = _shell_test(script, condition_line)
condition = test
launchers.append(Launcher(
target = re.search(r'"?(\$\{?\w+\}?)"?\s*$', line)
if target is None:
raise script.missing(f"destination of the copy at line {number}")
launchers.append(_evidence(read, Launcher(
emulator="AMIBERRY", build="standalone", kind="fixed_name",
slot=copied.group(1).removesuffix("-default.uae").removeprefix("Amiga"),
names=[found[0].value.removeprefix("$(FILE_PATH)/")], case_insensitive=False,
search_dir=BIOS,
passes_to=f"{copied.group(1)} kickstart_rom_file, $(FILE_PATH) = {rom_path[0].value}",
fails_when_missing=False,
depends_on_option=condition,
depends_on_option=f"{condition}, {content}",
source_ref=source_ref([
(RUNEMU, [table_line]), (path, [condition_line, number]),
(config, [rom_path[0].line, found[0].line]),
]),
))
), script.expand(target.group(1), number, set()), ["kickstart_rom_file"],
script, copied.group(1)))
if len(launchers) == 1:
raise script.missing("cp of a default .uae config")
return launchers
@@ -420,9 +442,13 @@ def easyrpg(read: Read) -> list[Launcher]:
def extract_launchers(read: Read) -> list[dict[str, Any]]:
"""Every launcher record, read through `read(repo-relative path)`."""
runemu = Runemu(read)
# The atari800.cfg AmberELEC ships names the OS ROMs, but the core opens
# it only under its atari800_cfg option, off by default, and finds the
# ROMs by a scan of the content folder (libretro-atari800 atari.c:512-516,
# 537, libretro_core_options.h:1203): no record reads it.
launchers = [
*retroarch(read), *retrorun(read), *mame(runemu),
*atari800(read), *scummvm(read), *freej2me(read), *easyrpg(read),
*scummvm(read), *freej2me(read), *easyrpg(read),
*amiberry(read, runemu), *hatari(read, runemu), *pico8(read, runemu),
*piemu(read, runemu), *yabasanshiro(read, runemu),
]
+10 -1
View File
@@ -39,6 +39,14 @@ class Launcher:
machines: list[str] | None = None
# The platform systems the record is written for, none for every one.
systems: list[str] | None = None
# For a record citing a config: where the platform's code puts it
# ({path, source_ref}), whether that leaves a file already there, and
# the launch code rewriting its keys ([] when none does).
installs: dict[str, str] | None = None
kept_if_present: bool | None = None
overrides: list[str] | None = None
# The feature or option file listing the values the option written takes.
choices_from: str | None = None
def entry(self) -> dict[str, Any]:
"""The platform YAML form, in a fixed key order, unset keys left out."""
@@ -46,7 +54,8 @@ class Launcher:
"emulator", "systems", "build", "kind", "slot", "names", "expands",
"case_insensitive", "search_dir", "passes_to",
"fails_when_missing", "fails_scope", "depends_on_option",
"device", "machines", "source_ref",
"device", "machines", "installs", "kept_if_present", "overrides",
"choices_from", "source_ref",
)
return {key: getattr(self, key) for key in order if getattr(self, key) is not None}
+51 -12
View File
@@ -44,6 +44,8 @@ BIOS = "${biosPath}"
EMULATION_BIOS = "${emulationPath}/bios"
STORAGE = "${storagePath}"
FLATPAK_DATA = "${HOME}/.var/app/"
# The function every EmuScript installs its Flatpak config with.
CONFIG_EMU_FP = "functions/configEmuFP.sh"
# EmuScripts file names that differ from the emulator profile they set up.
# The platform and target scrapers both read them here.
@@ -95,6 +97,31 @@ def _is_bios(value: str) -> bool:
return any(value == root or value.startswith(root + "/") for root in (BIOS, EMULATION_BIOS))
def with_evidence(tree: RepoTree, script: Script, record: Launcher, config: str) -> Launcher:
"""A record citing a shipped config, with the steps that install it.
configEmuFP rsyncs the repository's configs/<app> over the Flatpak's:
the _init call overwrites (keeping a .bak), every other call passes
--ignore-existing and leaves the user's file in place.
"""
fp = Script(CONFIG_EMU_FP, tree.read(CONFIG_EMU_FP))
rsync_line, _ = fp.find(r"^\s*rsync .*\$emudeckBackend/configs/", "rsync of the configs")
keep_line, _ = fp.find(r'overwrite="--ignore-existing"', "--ignore-existing")
calls = {n for n, line in script.code() if re.match(r"\s*configEmuFP\s", line)}
if not calls:
raise script.missing("configEmuFP call")
variable = script.assignment_ending("/" + config)
if variable is None:
raise script.missing(f"config variable for {config}")
record.installs = {
"path": script.expand(variable.value, variable.line, set()),
"source_ref": source_ref([(script.path, calls), (fp.path, {keep_line, rsync_line})]),
}
record.kept_if_present = True
record.overrides = []
return record
def _repo_config(script: Script, path: str) -> str:
"""The repository copy of a Flatpak config EmuDeck installs."""
if not path.startswith(FLATPAK_DATA):
@@ -268,7 +295,8 @@ def ares(tree: RepoTree) -> list[Launcher]:
raise LauncherPatternMissing(path, f"Firmware path under {old}")
for system, found in entries.items():
folder = posixpath.commonpath([posixpath.dirname(t) for _, t, _ in found])
records.append(
records.append(with_evidence(
tree, script,
Launcher(
emulator="ares",
build="standalone",
@@ -281,16 +309,20 @@ def ares(tree: RepoTree) -> list[Launcher]:
search_dir=folder,
passes_to="settings.bml "
+ ", ".join(f"{system}/Firmware/{k}" for k, _, _ in found),
)
)
),
posixpath.basename(path),
))
return records
def melonds(tree: RepoTree) -> list[Launcher]:
"""melonDS.ini paths set by changeLine, melonDS.toml paths shipped and rewritten by sed."""
name = "emuDeckMelonDS.sh"
records = setter_records(tree, name, option_key="ExternalBIOSEnable")
script = _script(tree, name)
records = [
with_evidence(tree, script, record, str(record.passes_to or "").split(" ", 1)[0])
for record in setter_records(tree, name, option_key="ExternalBIOSEnable")
]
# A config whose BIOS keys the setters write again keeps their values.
set_by_setters = {file for file, _, _, value, _ in setters(script) if _is_bios(value)}
for file, old, new, sed_lines in sed_rewrites(script, "melonDS_init"):
@@ -306,22 +338,29 @@ def melonds(tree: RepoTree) -> list[Launcher]:
continue
folder = posixpath.commonpath([posixpath.dirname(t) for _, t in found])
config = posixpath.basename(path)
option = next((s for s in settings(tree.read(path)) if s.key == "ExternalBIOSEnable"), None)
if option is None:
raise LauncherPatternMissing(path, "ExternalBIOSEnable")
shipped = {s.key: s for s in settings(tree.read(path))}
if "ExternalBIOSEnable" not in shipped or "ConsoleType" not in shipped:
raise LauncherPatternMissing(path, "ExternalBIOSEnable and ConsoleType")
option, console = shipped["ExternalBIOSEnable"], shipped["ConsoleType"]
# The DS keys are read under ExternalBIOSEnable, the DSi keys only
# when the console is a DSi (ConsoleType 1).
record = Launcher(
emulator="melonds",
build="standalone",
kind="fixed_name",
names=[posixpath.relpath(t, folder) for _, t in found],
source_ref=source_ref(
[(path, {option.line, *(s.line for s, _ in found)}), (script.path, sed_lines)]
),
source_ref=source_ref([
(path, {option.line, console.line, *(s.line for s, _ in found)}),
(script.path, sed_lines),
]),
search_dir=folder,
passes_to=describe_keys(config, tuple((s.section, s.key) for s, _ in found)),
depends_on_option=f"ExternalBIOSEnable = {option.value} in the shipped {config}",
depends_on_option=(
f"[DS] keys: ExternalBIOSEnable = true, {option.value} in the shipped {config}; "
f"[DSi] keys: ConsoleType = 1, {console.value} in the shipped {config}"
),
)
records.append(record)
records.append(with_evidence(tree, script, record, config))
if len(records) < 2:
raise script.missing("melonDS.toml BIOS paths rewritten by sed")
return records
+67 -52
View File
@@ -14,7 +14,7 @@ from __future__ import annotations
import posixpath
import re
from collections.abc import Callable
from collections.abc import Callable, Iterable
from dataclasses import dataclass, field
from .configgen_launchers import Launcher
@@ -22,6 +22,8 @@ from .rocknix_launchers import fixed_paths
from .shell_launchers import (
LauncherPatternMissing,
Link,
config_placement,
evidence_fields,
RepoTree,
Script,
describe_keys,
@@ -104,6 +106,28 @@ class Runs:
return (RUN_EMU, set(self.of(name).lines))
def _evidence(
record: Launcher,
script: Script,
target: str,
keys: list[str],
source_name: str = "",
rewrites: Iterable[int] = (),
) -> Launcher:
"""A config record with the start script lines that put its file in place.
``rewrites`` are lines the extractor read as rewriting the record's
values without naming their keys (advmame.sh's sed of /roms/mame).
"""
placement = config_placement(script, target, keys, source_name=source_name)
placement.overrides |= set(rewrites)
fields = evidence_fields([placement])
record.installs = fields["installs"]
record.kept_if_present = fields["kept_if_present"]
record.overrides = fields["overrides"]
return record
def _read(tree: RepoTree, path: str) -> Script:
return Script(path, tree.read(path))
@@ -317,7 +341,7 @@ def duckstation(tree: RepoTree, runs: Runs) -> list[Launcher]:
name = posixpath.basename(script.path)
lines = {found[k].line for k in (folder_key, *file_keys) if k in found}
unset = describe_keys("", file_keys).strip()
return [
return [_evidence(
Launcher(
emulator=runs.emulator(name),
build="standalone",
@@ -328,8 +352,11 @@ def duckstation(tree: RepoTree, runs: Runs) -> list[Launcher]:
),
search_dir=found[folder_key].value,
passes_to=f"settings.ini [BIOS] SearchDirectory (-settings), {unset} unset",
)
]
),
script,
script.expand("${CONFIG_DIR}/settings.ini", run_line, set()),
[f"[{s}] {k}" for s, k in (folder_key, *file_keys)],
)]
YABASANSHIRO_SCRIPTS = (
@@ -473,7 +500,7 @@ def hatari(tree: RepoTree, runs: Runs) -> list[Launcher]:
mk = _read(tree, f"{package}/package.mk")
mk_line, _ = mk.find(r"cp -R \$\{PKG_DIR\}/config/\* ", "config install")
name = posixpath.basename(script.path)
return [
return [_evidence(
Launcher(
emulator=runs.emulator(name),
build="standalone",
@@ -485,8 +512,12 @@ def hatari(tree: RepoTree, runs: Runs) -> list[Launcher]:
),
search_dir=value.search_dir,
passes_to=f"{describe_keys(copy.group(1), value.keys)} (--configfile)",
)
]
),
script,
script.expand("${" + copy.group(2) + "}", copy_line, set()),
[f"[{s}] {k}" if s else k for s, k in value.keys],
source_name=copy.group(1),
)]
_ADVMAME_SYSTEM = re.compile(r'^\s*if \[\[ "\$\{1\}" = "([\w-]+)" \]\]; then$')
@@ -535,29 +566,34 @@ def advancemame(tree: RepoTree, runs: Runs) -> list[Launcher]:
(script.path, {run_line, *lines}),
])
found = []
target = script.expand("${CONFIG_DIR}/advmame.rc", run_line, set())
def proved(record: Launcher, key: str) -> Launcher:
return _evidence(record, script, target, [key], rewrites={sed_line})
records = []
for key, folder in value:
rewritten = folder.replace(sed.group(1), sed.group(2))
if rewritten != folder:
# Every system but the one the script rewrites the key for, and
# that system with the rewritten folder.
found.append(Launcher(
records.append(proved(Launcher(
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
source_ref=refs(test_line, sed_line), search_dir=folder,
passes_to=f"advmame.rc {key}",
depends_on_option=f"system != {test.group(1)}",
))
found.append(Launcher(
), key))
records.append(proved(Launcher(
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
source_ref=refs(test_line, sed_line), search_dir=rewritten,
passes_to=f"advmame.rc {key}", systems=[test.group(1)],
))
), key))
continue
found.append(Launcher(
records.append(proved(Launcher(
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
source_ref=refs(), search_dir=folder, passes_to=f"advmame.rc {key}",
))
return found
), key))
return records
def mame(tree: RepoTree, runs: Runs) -> list[Launcher]:
@@ -594,42 +630,11 @@ def mame(tree: RepoTree, runs: Runs) -> list[Launcher]:
)
if not records:
raise script.missing(f"copy into {BIOS_ROOT}")
ini = next((r for r in records if r.names == ["mame*"]), None)
if ini is None:
raise script.missing("copy of mame.ini")
option_path = f"{package}/config/MAME/MAME.opt"
option = next(
(s for s in settings(tree.read(option_path)) if s.key == "mame_read_config"), None
)
if option is None:
raise LauncherPatternMissing(option_path, "mame_read_config")
ini_path = f"{package}/config/ini/mame.ini"
# MAME reads from the folders its *path options name and writes to its
# *_directory ones.
folders = [
(s, [p for p in s.value.split(";") if _under(p)])
for s in settings(tree.read(ini_path), separator=" ")
if s.key.endswith("path")
]
folders = [(s, parts) for s, parts in folders if parts]
if not folders:
raise LauncherPatternMissing(ini_path, f"path under {BIOS_ROOT}")
for setting, parts in folders:
for part in parts:
records.append(
Launcher(
emulator=emulator,
build="libretro",
kind="passes_path",
names=[],
source_ref=source_ref(
[(ini_path, {setting.line}), (option_path, {option.line})]
) + f", {ini.source_ref}",
search_dir=part.rstrip("/"),
passes_to=f"mame.ini {setting.key}",
depends_on_option=f"mame_read_config = {option.value}",
)
)
# mame.ini hands the core no folder: MAME.opt turns on
# mame_mame_paths_enable, so the core passes no path option
# (libretro mame src/osd/libretro/libretro-internal/retro_init.cpp:554-555),
# and the ini MAME would read sits under a working directory no launcher
# sets (src/emu/emuopts.cpp:49). Only the copies are the launcher's.
return records
@@ -644,6 +649,16 @@ def scummvm(tree: RepoTree, runs: Runs) -> list[Launcher]:
core_line, core = script.find(r"-L /tmp/cores/(\w+)_libretro\.so", "libretro start")
arm_line, arm = script.find(r'^\s*"(\w+)"\)', "setup arm", core_line)
copy_line, copy = script.find(r"^\s*cp (\S+) (\S+)$", "copy into the BIOS folder", arm_line)
launched = sorted({
m.group(1) for _, line in runs.script.code()
if (m := re.search(rf"\b{re.escape(name)} (\w+)", line))
})
if not launched:
raise runs.script.missing(f"start of {name} with an action")
action = f"{name} {arm.group(1)}"
if arm.group(1) not in launched:
# The copy runs from the setup action, never from a launch.
action += f", an action no launch runs ({RUN_EMU.rsplit('/', 1)[-1]} passes {', '.join(launched)})"
used = {copy_line}
source = script.expand(copy.group(1), copy_line, used)
target = script.expand(copy.group(2), copy_line, used)
@@ -669,7 +684,7 @@ def scummvm(tree: RepoTree, runs: Runs) -> list[Launcher]:
search_dir=posixpath.dirname(source),
passes_to=target,
fails_when_missing=False,
depends_on_option=f"{name} {arm.group(1)}",
depends_on_option=action,
),
]
+43 -5
View File
@@ -35,6 +35,8 @@ PLACEHOLDER = "RETRODECKBIOSDIR"
# gzdoom/component_prepare.sh:27 rewrites to $roms_path.
ROMS_PLACEHOLDER = "RETRODECKROMSDIR"
CORE_OPTIONS = "retroarch/rd_assets/rd_config/retroarch-core-options.cfg"
# XRoar ROM lists RetroDECK's xroar.conf defines that no machine looks up.
UNREAD_ROMLISTS = frozenset({"coco1", "coco1e", "coco1e_ext", "coco2", "coco2_ext", "coco2b"})
# The component that runs libretro cores.
LIBRETRO_COMPONENT = "retroarch"
# Values of a core option that name a file rather than a setting.
@@ -301,6 +303,19 @@ class Component:
if copied is None:
raise LauncherPatternMissing(f"{script.path}:{number}", f"no preset copied to {target}")
preset = f"{self.name}/rd_assets/rd_config/{copied[1]}"
# The reset copies the preset over the user's file, then fills its
# placeholders: that is the install, and nothing keeps an older file.
evidence: dict[str, Any] = {
"installs": {
"path": target,
"source_ref": source_ref(
[(script.path, copied[0])]
+ [(script.path, line) for _v, line in substitutions.values()]
),
},
"kept_if_present": False,
"overrides": self.launch_rewrites(target),
}
text = self.read(preset)
if text is None:
raise LauncherPatternMissing(preset, "preset is missing")
@@ -332,10 +347,10 @@ class Component:
self.record(
"passes_path", [], [(preset, line_no)] + applied,
search_dir=value, passes_to=f"{self.config_name(target)} {where}",
fails_when_missing=False,
fails_when_missing=False, **evidence,
)
if key == "rompath":
self.romlists(preset, text, value, applied)
self.romlists(preset, text, value, applied, evidence)
if not found:
raise LauncherPatternMissing(preset, f"no {PLACEHOLDER} line")
@@ -349,10 +364,28 @@ class Component:
found[m.group(1)] = (f"${m.group(2)}", line_no)
return found
def launch_rewrites(self, target: str) -> list[str]:
"""The sed lines of the component launcher rewriting ``target``."""
path = f"{self.name}/component_launcher.sh"
text = self.read(path)
if text is None:
return []
return [
source_ref([(path, number)])
for number, line in enumerate(text.splitlines(), 1)
if re.search(r"\bsed\b.*\s-i\b", line) and target in line
]
def romlists(
self, preset: str, text: str, rompath: str, applied: list[tuple[str, int]]
self, preset: str, text: str, rompath: str, applied: list[tuple[str, int]],
evidence: dict[str, Any],
) -> None:
"""XRoar's `romlist NAME=a,b,@other`: the names tried for each ROM, in order."""
"""XRoar's `romlist NAME=a,b,@other`: the names tried for each ROM, in order.
A list no XRoar machine or cartridge looks up is no read: coco1,
coco1e, coco1e_ext, coco2, coco2_ext and coco2b are defined by XRoar
(src/xroar.c:663-670) and named by nothing else.
"""
lists: dict[str, tuple[int, list[str]]] = {}
for line_no, line in enumerate(text.splitlines(), 1):
found = re.match(r"^romlist\s+([\w-]+)=(.*)$", line.strip())
@@ -375,10 +408,12 @@ class Component:
return list(dict.fromkeys(names))
for name, (line_no, _items) in lists.items():
if name in UNREAD_ROMLISTS:
continue
self.record(
"names_searched", expand(name, (name,)), [(preset, line_no)] + applied,
slot=name, search_dir=rompath, passes_to=f"romlist {name}",
fails_when_missing=False,
fails_when_missing=False, **evidence,
)
def read_launcher(self) -> None:
@@ -480,6 +515,7 @@ def core_options(read: Read) -> list[Launcher]:
]
if not copied:
raise LauncherPatternMissing(prepare_path, "the core options preset is never copied")
target = _words(prepare.splitlines()[copied[0] - 1].strip())[-1]
records = []
for line_no, line in enumerate(text.splitlines(), 1):
found = re.match(r'^([\w.-]+)\s*=\s*"([^"]*)"$', line.strip())
@@ -489,6 +525,8 @@ def core_options(read: Read) -> list[Launcher]:
records.append(Launcher(
emulator=LIBRETRO_COMPONENT, build="libretro", kind="core_option", names=[value],
passes_to=f"core option {key}", fails_when_missing=False,
installs={"path": target, "source_ref": source_ref([(prepare_path, copied[0])])},
kept_if_present=False, overrides=[],
source_ref=source_ref([(CORE_OPTIONS, line_no), (prepare_path, copied[0])]),
))
if not records:
+7 -1
View File
@@ -94,6 +94,11 @@ class Launcher:
passes_to: str | None = None
fails_when_missing: bool | str | None = None
depends_on_option: str | None = None
# For a record citing a config: where the platform's code puts it, whether
# that leaves a file already there, and the launch code rewriting it.
installs: dict[str, str] | None = None
kept_if_present: bool | None = None
overrides: list[str] | None = None
lines: list[tuple[str, int]] = field(default_factory=list, repr=False)
def entry(self) -> dict[str, Any]:
@@ -101,7 +106,8 @@ class Launcher:
order = (
"emulator", "package", "repo", "systems", "build", "kind", "slot",
"names", "case_insensitive", "search_dir", "passes_to",
"fails_when_missing", "depends_on_option", "source_ref",
"fails_when_missing", "depends_on_option", "installs", "kept_if_present",
"overrides", "source_ref",
)
return {key: getattr(self, key) for key in order if getattr(self, key) is not None}
+149 -28
View File
@@ -18,6 +18,7 @@ from dataclasses import dataclass
try:
from .configgen_launchers import Launcher
from .shell_launchers import config_placement, evidence_fields
from .shell_launchers import (
LauncherPatternMissing,
Link,
@@ -30,6 +31,7 @@ try:
)
except ImportError:
from configgen_launchers import Launcher
from shell_launchers import config_placement, evidence_fields # type: ignore[no-redef]
from shell_launchers import (
LauncherPatternMissing,
Link,
@@ -46,6 +48,9 @@ DEVICES = f"{ROCKNIX}/devices"
STANDALONE = f"{ROCKNIX}/packages/emulators/standalone"
RETROARCH = f"{ROCKNIX}/packages/emulators/libretro/retroarch"
BIOS_ROOT = "/storage/roms/bios"
CONFIG_ROOT = "/storage/.config"
# The first-boot step copying every package's /usr/config to /storage/.config.
USERCONFIG = f"{ROCKNIX}/packages/sysutils/systemd/scripts/userconfig-setup"
Lines = list[tuple[str, set[int]]]
@@ -186,6 +191,38 @@ def bios_keys(tree: RepoTree, paths: list[str], root: str = BIOS_ROOT) -> list[t
return keys
def with_evidence(
tree: RepoTree,
record: Launcher,
target: str,
keys: list[str],
start: Script | None = None,
writers: tuple[str, ...] = (),
source_name: str = "",
) -> Launcher:
"""A config record with the steps that put its file at ``target``.
The first boot copies /usr/config to /storage/.config, leaving a file
already there. A start script can copy or generate it again, and its
sed lines rewriting one of the record's keys are the overrides.
"""
setup = Script(USERCONFIG, tree.read(USERCONFIG))
placements = [config_placement(setup, target, required=False, sources=("/usr/config/",))]
if start is not None:
placements.append(config_placement(
start, target, keys, writers, source_name, required=False
))
fields = evidence_fields(placements)
record.installs = fields["installs"]
record.kept_if_present = fields["kept_if_present"]
record.overrides = fields["overrides"]
return record
def _keys(value: FixedPaths) -> list[str]:
return [f"[{section}] {key}" if section else key for section, key in value.keys]
def config_records(
tree: RepoTree,
emulator: str,
@@ -193,10 +230,17 @@ def config_records(
file: str,
passes_to_suffix: str = "",
depends_on_option: str | None = None,
target: str = "",
start: Script | None = None,
unread: Callable[[tuple[str, str]], bool] = lambda key: False,
) -> list[Launcher]:
"""fixed_name records for the bios paths of a config installed per device."""
"""fixed_name records for the bios paths of a config installed per device.
``unread`` drops the keys the shipped configs leave the emulator
reading no file from.
"""
configs = device_configs(tree, package, file)
keys = bios_keys(tree, [c.path for c in configs])
keys = [k for k in bios_keys(tree, [c.path for c in configs]) if not unread(k)]
name = posixpath.basename(file)
def read(path: str, text: str) -> tuple[object, set[int]]:
@@ -206,7 +250,8 @@ def config_records(
for device, value, refs in per_device(tree, configs, f"{package}/package.mk", read):
assert isinstance(value, FixedPaths)
described = describe_keys(name, value.keys)
records.append(
records.append(with_evidence(
tree,
Launcher(
emulator=emulator,
build="standalone",
@@ -219,8 +264,11 @@ def config_records(
),
device=device,
depends_on_option=depends_on_option,
)
)
),
target or f"{CONFIG_ROOT}/{posixpath.basename(package)}/{name}",
_keys(value),
start,
))
return records
@@ -241,7 +289,8 @@ def retroarch(tree: RepoTree) -> list[Launcher]:
for device, value, refs in per_device(tree, configs, f"{RETROARCH}/package.mk", read):
assert isinstance(value, tuple)
values = dict(value)
records.append(
records.append(with_evidence(
tree,
Launcher(
emulator="retroarch",
build="libretro",
@@ -251,8 +300,10 @@ def retroarch(tree: RepoTree) -> list[Launcher]:
search_dir=values["system_directory"],
passes_to="retroarch.cfg " + ", ".join(f'{k} = "{v}"' for k, v in value),
device=device,
)
)
),
f"{CONFIG_ROOT}/retroarch/retroarch.cfg",
[k for k, _ in value],
))
return records
@@ -275,6 +326,19 @@ def amiberry(tree: RepoTree) -> list[Launcher]:
)
used: set[int] = {test_line, then_line, else_line, other_line, sed_line}
root = script.expand("${" + sed.group(2) + "}", sed_line, used)
written = re.search(r'"?(\$\{?\w+\}?)"?\s*$', script.lines[then_line - 1])
if written is None:
raise script.missing("destination of the config copy")
target = script.expand(written.group(1), then_line, set())
# A WHDLoad archive is booted by --autoload, which builds its own setup
# (kickstart included) over the config: the record holds for floppies.
autoload = [n for n, line in script.code() if re.search(r"amiberry .*--autoload", line)]
if not autoload:
raise script.missing("WHDLoad boot with --autoload")
content = (
"content not booted with --autoload, a WHDLoad .lha or .zip "
f"({posixpath.basename(script.path)}:{', '.join(map(str, autoload))})"
)
records = []
for config, condition in (
(then.group(1), f"game name matches {test.group(1)}"),
@@ -290,7 +354,8 @@ def amiberry(tree: RepoTree) -> list[Launcher]:
raise LauncherPatternMissing(path, f"key naming a file under {sed.group(1)}")
value, lines = fixed_paths(found, keys, path)
slot = re.fullmatch(r"Amiga(\w+)-default\.uae", config)
records.append(
records.append(with_evidence(
tree,
Launcher(
emulator="amiberry",
build="standalone",
@@ -300,9 +365,13 @@ def amiberry(tree: RepoTree) -> list[Launcher]:
slot=slot.group(1) if slot else config,
search_dir=value.search_dir,
passes_to=f"{describe_keys(config, value.keys)} (amiberry -f)",
depends_on_option=condition,
)
)
depends_on_option=f"{condition}, {content}",
),
target,
_keys(value),
script,
source_name=config,
))
mk = Script(f"{package}/package.mk", tree.read(f"{package}/package.mk"))
links = mk.links(BIOS_ROOT, fixed={"INSTALL": ""})
if not links:
@@ -375,7 +444,11 @@ def hatari(tree: RepoTree) -> list[Launcher]:
if not keys:
raise LauncherPatternMissing(path, f"key naming a file under {BIOS_ROOT}")
value, lines = fixed_paths(found, keys, path)
return [
copied = re.search(r'"?(\$\{?\w+\}?)"?\s*$', script.lines[copy_line - 1])
if copied is None:
raise script.missing("destination of the default config copy")
return [with_evidence(
tree,
Launcher(
emulator="hatari",
build="standalone",
@@ -384,8 +457,12 @@ def hatari(tree: RepoTree) -> list[Launcher]:
source_ref=source_ref([(path, lines), (script.path, {copy_line, run_line})]),
search_dir=value.search_dir,
passes_to=f"{describe_keys(copy.group(1), value.keys)} (--configfile)",
)
]
),
script.expand(copied.group(1), copy_line, set()),
_keys(value),
script,
source_name=copy.group(1),
)]
def melonds(tree: RepoTree) -> list[Launcher]:
@@ -406,7 +483,22 @@ def melonds(tree: RepoTree) -> list[Launcher]:
rf"^\s*{test.group(1)}=\$\(get_setting (\w+) ", f"setting read into {test.group(1)}"
)
condition = f"{setting.group(1)} = {test.group(2)} sets ExternalBIOSEnable=1, otherwise 0"
records = config_records(tree, "melonds", package, "melonDS.ini", depends_on_option=condition)
configs = [c.path for c in device_configs(tree, package, "melonDS.ini")]
# melonDS opens the DSi BIOS and firmware keys only under
# DSiExternalBIOSEnable, off unless a config sets it.
dsi_external = any(
s.key == "DSiExternalBIOSEnable" and s.value not in ("", "0")
for path in configs for s in settings(tree.read(path))
)
def unread(key: tuple[str, str]) -> bool:
return not dsi_external and key[1] in ("DSiBIOS9Path", "DSiBIOS7Path", "DSiFirmwarePath")
conf_line, conf = script.find(r'^\s*CONF_DIR="([^"]+)"', "CONF_DIR")
records = config_records(
tree, "melonds", package, "melonDS.ini", depends_on_option=condition,
target=f"{conf.group(1)}/melonDS.ini", start=script, unread=unread,
)
for record in records:
record.source_ref += (
f", {source_ref([(script.path, {setting_line, test_line, enable_line})])}"
@@ -420,7 +512,10 @@ def dsperate(tree: RepoTree) -> list[Launcher]:
f"{package}/scripts/start_dsperate.sh", tree.read(f"{package}/scripts/start_dsperate.sh")
)
run_line, _ = script.find(r"/usr/bin/dsperate --config ", "dsperate --config")
records = config_records(tree, "dsperate", package, "dsperate.ini", " (--config)")
records = config_records(
tree, "dsperate", package, "dsperate.ini", " (--config)",
target=script.expand("${DSPERATE_INI}", run_line, set()), start=script,
)
for record in records:
record.source_ref += f", {source_ref([(script.path, {run_line})])}"
return records
@@ -434,7 +529,10 @@ def xemu(tree: RepoTree) -> list[Launcher]:
copy_line, _ = script.find(
r'cp -r "\$\{SOURCE_DIR\}/\$\{XEMU_INI\}"', "xemu.toml copy at launch"
)
records = config_records(tree, "xemu", package, "xemu.toml", " (copied at each launch)")
records = config_records(
tree, "xemu", package, "xemu.toml", " (copied at each launch)",
target=script.expand("${CONF_DIR}/${XEMU_INI}", copy_line, set()), start=script,
)
for record in records:
record.source_ref += f", {source_ref([(script.path, {copy_line})])}"
return records
@@ -452,7 +550,9 @@ def nanoboyadvance(tree: RepoTree) -> list[Launcher]:
mk_line, _ = Script(mk_path, tree.read(mk_path)).find(
r"config/config\.toml", "config.toml install"
)
return [
start_path = f"{package}/scripts/start_nanoboyadvance.sh"
return [with_evidence(
tree,
Launcher(
emulator="nanoboyadvance",
build="standalone",
@@ -461,8 +561,14 @@ def nanoboyadvance(tree: RepoTree) -> list[Launcher]:
source_ref=source_ref([(path, lines), (mk_path, {mk_line})]),
search_dir=value.search_dir,
passes_to=describe_keys("config.toml", value.keys),
)
]
# NanoBoyAdvance exits when its BIOS cannot be read
# (src/platform/sdl/main.cpp:180-185 at the build ROCKNIX ships).
fails_when_missing=True,
),
f"{CONFIG_ROOT}/nanoboyadvance/config.toml",
_keys(value),
Script(start_path, tree.read(start_path)),
)]
def mednafen(tree: RepoTree) -> list[Launcher]:
@@ -486,7 +592,9 @@ def mednafen(tree: RepoTree) -> list[Launcher]:
modules: dict[str, list[Setting]] = {}
for setting in firmware:
modules.setdefault(setting.key.split(".", 1)[0], []).append(setting)
return [
home = script.expand("${MEDNAFEN_HOME}", gen_line, set())
return [with_evidence(
tree,
Launcher(
emulator="mednafen",
build="standalone",
@@ -501,9 +609,12 @@ def mednafen(tree: RepoTree) -> list[Launcher]:
slot=module,
search_dir=folder.value,
passes_to="mednafen.cfg " + ", ".join(s.key for s in group),
)
for module, group in modules.items()
]
),
f"{home}/mednafen.cfg",
[s.key for s in group],
script,
writers=("mednafen_gen_config.sh",),
) for module, group in modules.items()]
def yabasanshiro(tree: RepoTree) -> list[Launcher]:
@@ -549,6 +660,8 @@ def directory_records(
file: str,
folder_key: tuple[str, str],
file_keys: tuple[tuple[str, str], ...],
target: str = "",
start: str = "",
) -> list[Launcher]:
"""scans_dir records: the config hands a directory and leaves the file keys empty."""
configs = device_configs(tree, package, file)
@@ -568,7 +681,8 @@ def directory_records(
records = []
for device, folder, refs in per_device(tree, configs, f"{package}/package.mk", read):
passes = f"{name} [{folder_key[0]}] {folder_key[1]} = {folder}, {unset} unset"
records.append(
records.append(with_evidence(
tree,
Launcher(
emulator=emulator,
build="standalone",
@@ -578,8 +692,11 @@ def directory_records(
search_dir=folder,
passes_to=passes,
device=device,
)
)
),
target,
[f"[{s}] {k}" for s, k in (folder_key, *file_keys)],
Script(start, tree.read(start)) if start else None,
))
return records
@@ -591,6 +708,8 @@ def duckstation(tree: RepoTree) -> list[Launcher]:
"settings.ini",
("BIOS", "SearchDirectory"),
(("BIOS", "PathNTSCU"), ("BIOS", "PathNTSCJ"), ("BIOS", "PathPAL")),
f"{CONFIG_ROOT}/duckstation/settings.ini",
f"{STANDALONE}/duckstation-sa/scripts/start_duckstation.sh",
)
@@ -602,6 +721,8 @@ def armsx2(tree: RepoTree) -> list[Launcher]:
"ARMSX2/inis/PCSX2.ini",
("Folders", "Bios"),
(("Filenames", "BIOS"),),
f"{CONFIG_ROOT}/ARMSX2/inis/PCSX2.ini",
f"{STANDALONE}/armsx2-sa/scripts/start_armsx2.sh",
)
+31 -29
View File
@@ -105,22 +105,6 @@ HATARI_CFG = text(
"""
)
ATARI800_CFG = text(
"""
Atari 800 Emulator, Version 3.1.0
ROM_OS_A_NTSC=
ROM_OS_A_PAL=/storage/roms/bios/ATARIOSA.ROM
ROM_5200=/storage/roms/bios/5200.rom
"""
)
ATARI800_PATCH = text(
"""
+ LDFLAGS += -static-libgcc
+ CFLAGS += -DDEFAULT_CFG_NAME="\\"/storage/.config/distribution/configs/atari800.cfg\\""
"""
)
AMIBERRY_MK = text(
"""
makeinstall_target() {
@@ -141,6 +125,17 @@ AMIBERRY_SH = text(
cp $AMIBERRY_CONFIG_DIR/AmigaA500-default.uae "$AMIBERRY_TMP_CONFIG"
fi
}
amiberry -f "$AMIBERRY_TMP_CONFIG" --autoload "$1" >> $AMIBERRY_LOG 2>&1
"""
)
USERCONFIG = text(
"""
#!/bin/bash
if [ ! -e "/storage/.configured" ]
then
rsync -a --ignore-existing --exclude=es_systems.cfg /usr/config/* /storage/.config/ || exit 1
fi
"""
)
@@ -195,8 +190,7 @@ def tree(**overrides: str) -> dict[str, str]:
al.SCRIPTS["piemu"]: PIEMU,
al.SCRIPTS["HATARISA"]: HATARI_SH,
al.HATARI_CONFIG: HATARI_CFG,
al.ATARI800_CONFIG: ATARI800_CFG,
al.ATARI800_PATCH: ATARI800_PATCH,
al.USERCONFIG: USERCONFIG,
al.AMIBERRY_PACKAGE: AMIBERRY_MK,
al.SCRIPTS["AMIBERRY"]: AMIBERRY_SH,
f"{al.AMIBERRY_CONFIGS}/AmigaA1200-default.uae": uae("kick40068.A1200.rom"),
@@ -218,6 +212,13 @@ class Frontends(unittest.TestCase):
(record,) = al.retroarch(read())
self.assertEqual(record.search_dir, "~/roms/bios")
self.assertEqual(record.source_ref, f"{al.RETROARCH_CFG}:2")
# The first boot copies /usr/config and leaves a file already there.
self.assertEqual(record.installs, {
"path": "/storage/.config/retroarch/retroarch.cfg",
"source_ref": f"{al.USERCONFIG}:4",
})
self.assertIs(record.kept_if_present, True)
self.assertEqual(record.overrides, [])
def test_retrorun_directory(self):
(record,) = al.retrorun(read())
@@ -266,6 +267,9 @@ class Standalone(unittest.TestCase):
record.source_ref,
f"{al.RUNEMU}:3, {al.SCRIPTS['HATARISA']}:3-4, {al.HATARI_CONFIG}:2",
)
# Copied over at each launch: nothing the user edits survives.
self.assertEqual(record.installs["source_ref"], f"{al.SCRIPTS['HATARISA']}:3")
self.assertIs(record.kept_if_present, False)
def test_amiberry_link_and_one_kickstart_per_config(self):
link, a1200, a500 = al.amiberry(read(), al.Runemu(read()))
@@ -273,7 +277,11 @@ class Standalone(unittest.TestCase):
self.assertEqual(link.passes_to, "/usr/config/amiberry/kickstarts is a symlink to it")
self.assertEqual((a1200.slot, a1200.names), ("A1200", ["kick40068.A1200.rom"]))
self.assertEqual((a500.slot, a500.names), ("A500", ["kick34005.A500.rom"]))
self.assertEqual(a500.depends_on_option, f"not ({a1200.depends_on_option})")
self.assertTrue(a500.depends_on_option.startswith("not ("))
# A WHDLoad boot replaces the setup the config gives.
self.assertIn("--autoload", a1200.depends_on_option)
self.assertEqual(a1200.installs["source_ref"], f"{al.SCRIPTS['AMIBERRY']}:5")
self.assertEqual(a500.installs["source_ref"], f"{al.SCRIPTS['AMIBERRY']}:7")
def test_a_table_running_another_script_raises(self):
broken = RUNEMU.replace("/usr/bin/yabasanshiro.sh", "/usr/bin/yaba.sh")
@@ -287,15 +295,9 @@ class Standalone(unittest.TestCase):
class Cores(unittest.TestCase):
def test_atari800_built_to_read_the_shipped_config(self):
(record,) = al.atari800(read())
self.assertEqual(record.names, ["ATARIOSA.ROM", "5200.rom"])
self.assertEqual(record.source_ref, f"{al.ATARI800_PATCH}:2, {al.ATARI800_CONFIG}:3-4")
def test_atari800_built_for_another_config_raises(self):
broken = ATARI800_PATCH.replace("atari800.cfg", "other.cfg")
with self.assertRaises(LauncherShapeError):
al.atari800(read(**{al.ATARI800_PATCH: broken}))
def test_atari800_config_is_no_record(self):
# The core reads atari800.cfg only under an option that is off.
self.assertFalse(any(r["emulator"] == "atari800" for r in al.extract_launchers(read())))
def test_scummvm_paths_written_under_bios(self):
theme, extra = al.scummvm(read())
@@ -319,7 +321,7 @@ class Cores(unittest.TestCase):
def test_every_extractor_runs_on_the_fixture(self):
records = al.extract_launchers(read())
# One easyrpg runtime in the fixture, two at the pinned commit.
self.assertEqual(len(records), 16)
self.assertEqual(len(records), 15)
class PlatformFile(unittest.TestCase):
+32 -1
View File
@@ -40,6 +40,9 @@ ARES_SH = text(
UserBIOSPath='/home/deck/Emulation/bios/'
sed -i "s|$UserBIOSPath|${biosPath}\\/|g" "$ares_configFile"
}
ares_init(){
configEmuFP "${ares_emuName}" "${ares_emuPath}" "true"
}
"""
)
@@ -87,6 +90,9 @@ MELONDS_SH = text(
buttonA='Joy_A='
changeLine "$buttonA" "$buttonA""0" "${melonDS_configFile}"
}
melonDS_update(){
configEmuFP "${melonDS_emuName}" "${melonDS_emuPath}"
}
"""
)
@@ -103,6 +109,7 @@ MELONDS_TOML = text(
LastROMFolder = "/run/media/mmcblk0p1/Emulation/roms/ds"
[Emu]
ExternalBIOSEnable = false
ConsoleType = 0
[DS]
FirmwarePath = "/run/media/mmcblk0p1/Emulation/bios/firmware.bin"
BIOS7Path = "/run/media/mmcblk0p1/Emulation/bios/bios7.bin"
@@ -206,8 +213,23 @@ SHADPS4_SH = text(
)
CONFIG_EMU_FP = text(
"""
configEmuFP(){
if [[ $overwrite == 'true' ]]; then
overwrite="--backup --suffix=.bak"
else
overwrite="--ignore-existing"
fi
rsync -avhp --mkpath "$emudeckBackend/configs/${ID}" "$HOME/.var/app/" $overwrite
}
"""
)
def tree(**scripts: str) -> RepoTree:
files = {f"{S}/{name}": body for name, body in scripts.items()}
files[el.CONFIG_EMU_FP] = CONFIG_EMU_FP
files[f"{el.CONFIGS}/dev.ares.ares/data/ares/settings.bml"] = ARES_BML
files[f"{el.CONFIGS}/net.kuribo64.melonDS/config/melonDS/melonDS.ini"] = MELONDS_INI
files[f"{el.CONFIGS}/net.kuribo64.melonDS/config/melonDS/melonDS.toml"] = MELONDS_TOML
@@ -253,8 +275,17 @@ class WrittenIntoTheConfig(unittest.TestCase):
self.assertEqual(
toml["passes_to"], "melonDS.toml [DS] FirmwarePath, BIOS7Path [DSi] NANDPath"
)
# The DS keys wait for ExternalBIOSEnable, the DSi keys for a DSi.
self.assertEqual(
toml["depends_on_option"], "ExternalBIOSEnable = false in the shipped melonDS.toml"
toml["depends_on_option"],
"[DS] keys: ExternalBIOSEnable = true, false in the shipped melonDS.toml; "
"[DSi] keys: ConsoleType = 1, 0 in the shipped melonDS.toml",
)
# configEmuFP's update call passes --ignore-existing.
self.assertIs(toml["kept_if_present"], True)
self.assertEqual(
toml["installs"]["path"],
"${HOME}/.var/app/net.kuribo64.melonDS/config/melonDS/melonDS.toml",
)
def test_a_config_the_setters_rewrite_keeps_their_values(self):
+19 -18
View File
@@ -228,6 +228,9 @@ DUCKSTATION_SH = text(
"""
CONFIG_DIR="/emuelec/configs/duckstation"
duckstation-nogui -fullscreen -settings "${CONFIG_DIR}/settings.ini" -- "${1}"
if [ ! -d "${CONFIG_DIR}" ]; then
cp -rf /usr/config/emuelec/configs/duckstation/* "${CONFIG_DIR}"
fi
"""
)
@@ -319,6 +322,9 @@ ADVMAME_SH = text(
sed -i "s|/roms/arcade|/roms/mame|g" ${CONFIG_DIR}/advmame.rc
fi
SDL_AUDIODRIVER=alsa advmame ${ARG} -quiet
if [ ! -d "${CONFIG_DIR}" ]; then
cp -rf /usr/config/emuelec/configs/advmame/* "${CONFIG_DIR}/"
fi
"""
)
@@ -480,24 +486,12 @@ class LibretroRecords(unittest.TestCase):
self.assertEqual(jar["passes_to"], "${HOME}/roms/bios")
self.assertEqual(jar["depends_on_option"], "/storage/roms/bios/jdk/eeversion exists")
def test_mame_copies_its_own_files_and_reads_only_path_options(self):
def test_mame_copies_its_own_files_and_hands_no_folder(self):
# The core passes no path option and reads no mame.ini: only the
# copies are the launcher's.
found = records(el.mame)
copies = [r for r in found if r["kind"] == "copies"]
self.assertEqual([r["names"] for r in copies], [["fm*"], ["mame*"]])
folders = [(r["passes_to"], r["search_dir"]) for r in found if r["kind"] == "passes_path"]
self.assertEqual(
folders,
[
("mame.ini rompath", "/storage/roms/bios/mame/bios"),
("mame.ini samplepath", "/storage/roms/bios/mame/samples"),
],
)
self.assertTrue(all(r["depends_on_option"] == "mame_read_config = enabled"
for r in found if r["kind"] == "passes_path"))
def test_mame_without_the_read_config_option_raises(self):
with self.assertRaises(LauncherPatternMissing):
records(el.mame, **{f"{el.LIBRETRO}/mame/config/MAME/MAME.opt": "x = 1\n"})
self.assertEqual([r["kind"] for r in found], ["copies", "copies"])
self.assertEqual([r["names"] for r in found], [["fm*"], ["mame*"]])
class StandaloneRecords(unittest.TestCase):
@@ -546,6 +540,12 @@ class StandaloneRecords(unittest.TestCase):
(record,) = records(el.duckstation)
self.assertEqual((record["kind"], record["search_dir"]), ("scans_dir", "/storage/roms/bios"))
def test_duckstation_config_is_kept_when_present(self):
(record,) = records(el.duckstation)
self.assertEqual(record["installs"]["path"], "/emuelec/configs/duckstation/settings.ini")
self.assertIs(record["kept_if_present"], True)
self.assertEqual(record["overrides"], [])
def test_duckstation_with_a_fixed_bios_path_raises(self):
changed = DUCKSTATION_INI.replace("PathPAL =", "PathPAL = /storage/roms/bios/scph5502.bin")
with self.assertRaises(LauncherPatternMissing):
@@ -631,7 +631,8 @@ class StandaloneRecords(unittest.TestCase):
def test_every_extractor_runs_on_the_fixtures(self):
found = el.extract_launchers(tree())
self.assertEqual(len(found), 28)
# The two mame.ini folders are no longer records.
self.assertEqual(len(found), 26)
class Revision(unittest.TestCase):
+59 -27
View File
@@ -85,13 +85,14 @@ MELONDS_SH = text(
sed -i '/^ExternalBIOSEnable=/c\\ExternalBIOSEnable=0' /storage/.config/melonDS/melonDS.ini
fi
fi
CONF_DIR="/storage/.config/melonDS"
"""
)
def melonds_tree() -> RepoTree:
pkg = f"{SA}/melonds-sa"
return RepoTree.from_files(
return rocknix_tree(
{
**devices("AMD64", "H700", "RK3576", "S922X"),
f"{pkg}/package.mk": MELONDS_MK,
@@ -148,6 +149,7 @@ AMIBERRY_SH = text(
cp -rf /usr/config/amiberry ${AMIBERRY_DIR}
fi
cd ${AMIBERRY_DIR}
amiberry -f "${AMIBERRY_TMP_CONFIG}" --autoload "$1" >> ${AMIBERRY_LOG} 2>&1
"""
)
@@ -291,6 +293,22 @@ FLYCAST_SH = text(
)
USERCONFIG = text(
"""
#!/bin/bash
if [ ! -e "/storage/.configured" ]
then
rsync -a --ignore-existing --exclude={es_features.cfg,es_systems.cfg} /usr/config/* /storage/.config/ >/var/log/configure.log 2>&1
fi
"""
)
def rocknix_tree(files: dict[str, str], links: dict[str, str] | None = None) -> RepoTree:
"""A ROCKNIX tree holding the first-boot copy every config record cites."""
return RepoTree.from_files({rl.USERCONFIG: USERCONFIG, **files}, links)
def by(records: list[dict], emulator: str) -> list[dict]:
return [r for r in records if r["emulator"] == emulator]
@@ -302,23 +320,26 @@ class ConfigsPerDevice(unittest.TestCase):
empty, named = records
self.assertEqual(empty["names"], [])
self.assertTrue(empty["passes_to"].endswith("DSiNANDPath left empty"))
# melonDS opens the DSi BIOS and firmware keys only under
# DSiExternalBIOSEnable, which no shipped config sets.
self.assertEqual(
named["names"],
[
"bios9.bin",
"bios7.bin",
"firmware.bin",
"dsi_bios9.bin",
"dsi_bios7.bin",
"dsi_firmware.bin",
"dsi_nand.bin",
],
named["names"], ["bios9.bin", "bios7.bin", "firmware.bin", "dsi_nand.bin"]
)
self.assertEqual(named["search_dir"], "/storage/roms/bios")
self.assertEqual(named["installs"]["path"], "/storage/.config/melonDS/melonDS.ini")
self.assertIs(named["kept_if_present"], True)
self.assertEqual(named["overrides"], [])
def test_a_config_setting_the_dsi_switch_keeps_the_dsi_keys(self):
tree = melonds_tree()
path = f"{SA}/melonds-sa/config/S922X/melonDS.ini"
tree._texts[path] = tree.read(path) + "DSiExternalBIOSEnable=1\n"
named = rl.melonds(tree)[1].entry()
self.assertIn("dsi_bios9.bin", named["names"])
def test_a_linked_device_directory_reads_its_target(self):
named = rl.melonds(melonds_tree())[1].entry()
self.assertIn(f"{SA}/melonds-sa/config/InputPlumber/melonDS.ini:2-8", named["source_ref"])
self.assertIn(f"{SA}/melonds-sa/config/InputPlumber/melonDS.ini:2-4, 8", named["source_ref"])
self.assertNotIn("config/RK3576", named["source_ref"])
def test_the_external_bios_switch_is_the_option(self):
@@ -330,11 +351,14 @@ class ConfigsPerDevice(unittest.TestCase):
def test_identical_configs_give_one_record_without_device(self):
pkg = f"{SA}/dsperate-sa"
tree = RepoTree.from_files(
tree = rocknix_tree(
{
**devices("H700", "RK3576", "S922X"),
f"{pkg}/package.mk": DSPERATE_MK,
f"{pkg}/scripts/start_dsperate.sh": '${EMUPERF} /usr/bin/dsperate --config "${DSPERATE_INI}" "${ROM}"\n',
f"{pkg}/scripts/start_dsperate.sh": (
'${EMUPERF} /usr/bin/dsperate --config "${DSPERATE_INI}" "${ROM}"\n'
'DSPERATE_INI="/storage/.config/dsperate/dsperate.ini"\n'
),
f"{pkg}/config/H700/dsperate.ini": DSPERATE_INI,
f"{pkg}/config/InputPlumber/dsperate.ini": DSPERATE_INI,
f"{pkg}/config/S922X/dsperate.ini": DSPERATE_INI,
@@ -352,10 +376,11 @@ class ConfigsPerDevice(unittest.TestCase):
def test_an_absent_key_and_an_empty_one_hand_over_the_same(self):
pkg = f"{SA}/duckstation-sa"
tree = RepoTree.from_files(
tree = rocknix_tree(
{
**devices("AMD64", "S922X"),
f"{pkg}/package.mk": DUCKSTATION_MK,
f"{pkg}/scripts/start_duckstation.sh": "#!/bin/bash\n",
f"{pkg}/config/AMD64/settings.ini": "[BIOS]\nSearchDirectory = /storage/roms/bios\n",
f"{pkg}/config/S922X/settings.ini": text(
"""
@@ -375,10 +400,11 @@ class ConfigsPerDevice(unittest.TestCase):
def test_a_bios_written_into_a_path_key_is_an_unknown_shape(self):
pkg = f"{SA}/duckstation-sa"
tree = RepoTree.from_files(
tree = rocknix_tree(
{
**devices("S922X"),
f"{pkg}/package.mk": DUCKSTATION_MK,
f"{pkg}/scripts/start_duckstation.sh": "#!/bin/bash\n",
f"{pkg}/config/S922X/settings.ini": "[BIOS]\nSearchDirectory = /storage/roms/bios\nPathNTSCU = scph5501.bin\n",
}
)
@@ -387,7 +413,7 @@ class ConfigsPerDevice(unittest.TestCase):
def test_a_package_without_a_device_copy_raises(self):
pkg = f"{SA}/duckstation-sa"
tree = RepoTree.from_files(
tree = rocknix_tree(
{
**devices("S922X"),
f"{pkg}/package.mk": "makeinstall_target() {\n true\n}\n",
@@ -402,7 +428,7 @@ class NamesTheConfigsFix(unittest.TestCase):
def test_amiberry_machine_follows_the_game_name(self):
pkg = f"{SA}/amiberry"
uae = "amiberry.rom_path=/storage/.config/amiberry/kickstarts/\nkickstart_rom_file=@BIOS_PATH@/{}\nkickstart_ext_rom_file=\n"
tree = RepoTree.from_files(
tree = rocknix_tree(
{
f"{pkg}/scripts/start_amiberry.sh": AMIBERRY_SH,
f"{pkg}/package.mk": AMIBERRY_MK,
@@ -412,9 +438,15 @@ class NamesTheConfigsFix(unittest.TestCase):
)
a1200, a500, link, entered, copied = (r.entry() for r in rl.amiberry(tree))
self.assertEqual((a1200["slot"], a1200["names"]), ("A1200", ["kick40068.A1200.rom"]))
self.assertEqual(a1200["depends_on_option"], "game name matches AGA|CD32")
self.assertEqual(
a1200["depends_on_option"],
"game name matches AGA|CD32, content not booted with --autoload, "
"a WHDLoad .lha or .zip (start_amiberry.sh:17)",
)
self.assertEqual(a1200["installs"]["path"], "${AMIBERRY_TMP_CONFIG}")
self.assertIs(a1200["kept_if_present"], False)
self.assertEqual((a500["slot"], a500["names"]), ("A500", ["kick34005.A500.rom"]))
self.assertEqual(a500["depends_on_option"], "game name does not match AGA|CD32")
self.assertTrue(a500["depends_on_option"].startswith("game name does not match AGA|CD32"))
self.assertEqual(a500["search_dir"], "/storage/roms/bios")
self.assertEqual(
a1200["source_ref"],
@@ -443,7 +475,7 @@ class NamesTheConfigsFix(unittest.TestCase):
def test_mednafen_one_record_per_module(self):
pkg = f"{SA}/mednafen"
tree = RepoTree.from_files(
tree = rocknix_tree(
{
f"{pkg}/config/common/mednafen.template": MEDNAFEN_TEMPLATE,
f"{pkg}/scripts/start_mednafen.sh": MEDNAFEN_SH,
@@ -461,7 +493,7 @@ class NamesTheConfigsFix(unittest.TestCase):
def test_mednafen_without_a_firmware_directory_raises(self):
pkg = f"{SA}/mednafen"
tree = RepoTree.from_files(
tree = rocknix_tree(
{
f"{pkg}/config/common/mednafen.template": "psx.bios_eu scph5502.bin\n",
f"{pkg}/scripts/start_mednafen.sh": MEDNAFEN_SH,
@@ -473,7 +505,7 @@ class NamesTheConfigsFix(unittest.TestCase):
class SearchedNames(unittest.TestCase):
def tree(self, script: str) -> RepoTree:
return RepoTree.from_files({f"{SA}/yabasanshiro-sa/scripts/start_yabasanshiro.sh": script})
return rocknix_tree({f"{SA}/yabasanshiro-sa/scripts/start_yabasanshiro.sh": script})
def test_yabasanshiro_tries_its_names_in_order(self):
(record,) = [r.entry() for r in rl.yabasanshiro(self.tree(YABASANSHIRO_SH))]
@@ -514,7 +546,7 @@ class Links(unittest.TestCase):
def tree(self) -> RepoTree:
scripts = self.all_scripts()
return RepoTree.from_files({p: scripts[e] for e, p in rl.LINK_SCRIPTS})
return rocknix_tree({p: scripts[e] for e, p in rl.LINK_SCRIPTS})
def emulator(self, name: str) -> list[dict]:
return by([r.entry() for r in rl.links(self.tree())], name)
@@ -566,7 +598,7 @@ class Links(unittest.TestCase):
def test_a_script_without_a_bios_link_raises(self):
scripts = self.all_scripts()
scripts["flycast"] = 'ln -sf "/storage/.config/flycast" "/storage/.local/share/flycast"\n'
tree = RepoTree.from_files({p: scripts[e] for e, p in rl.LINK_SCRIPTS})
tree = rocknix_tree({p: scripts[e] for e, p in rl.LINK_SCRIPTS})
with self.assertRaises(LauncherPatternMissing):
rl.links(tree)
@@ -603,7 +635,7 @@ class ProgramsRunOutsideTheBiosFolder(unittest.TestCase):
PATH = f"{SA}/pico-8/scripts/start_pico8.sh"
def test_pico8_runs_its_binary_from_roms(self):
(record,) = [r.entry() for r in rl.pico8(RepoTree.from_files({self.PATH: START_PICO8}))]
(record,) = [r.entry() for r in rl.pico8(rocknix_tree({self.PATH: START_PICO8}))]
self.assertEqual(
(record["emulator"], record["kind"], record["names"], record["search_dir"],
record["passes_to"]),
@@ -615,7 +647,7 @@ class ProgramsRunOutsideTheBiosFolder(unittest.TestCase):
def test_a_script_without_its_binary_choice_raises(self):
broken = START_PICO8.replace('STATIC_BIN="pico8_dyn"', "STATIC_BIN=$OTHER")
with self.assertRaises(LauncherPatternMissing):
rl.pico8(RepoTree.from_files({self.PATH: broken}))
rl.pico8(rocknix_tree({self.PATH: broken}))
class Revision(unittest.TestCase):