# -*- mode: python ; coding: utf-8 -*- """PyInstaller spec: build psppt (onedir). Bundles the read-only resources (DATs, PS1 loader, cover templates, index catalogs, icons) under ``lib/`` next to the executable. User-writable data (credentials, manual covers, PS1 templates, NPS cache, library DB, cover cache) lives in the OS state dir at runtime — see ``app/config.py``. Usage: pyinstaller --clean --noconfirm psppt.spec Output: dist/psppt/ """ from PyInstaller.utils.hooks import collect_dynamic_libs, collect_submodules datas = [ ("data/dats", "data/dats"), ("data/loader", "data/loader"), ("data/supplement.json", "data"), ("data/covers/libretro-index.json", "data/covers"), ("data/covers/openvgdb-index.json", "data/covers"), ("data/covers/UMD_COVER_TEMPLATE.png", "data/covers"), ("data/covers/UMD_COVER_TEMPLATE_FEATURE.png", "data/covers"), ("data/covers/UMD_GAME_COVER_TEMPLATE.png", "data/covers"), ("img/app-icon.png", "img"), ("img/chevron.png", "img"), ("packaging/psppt.desktop", "."), ] a = Analysis( ["run.py"], pathex=[], binaries=collect_dynamic_libs("curl_cffi"), datas=datas, hiddenimports=collect_submodules("curl_cffi"), hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=["tkinter", "unittest", "pydoc"], noarchive=False, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, [], exclude_binaries=True, name="psppt", debug=False, bootloader_ignore_signals=False, strip=False, upx=False, console=False, disable_windowed_traceback=False, contents_directory="lib", ) coll = COLLECT( exe, a.binaries, a.datas, strip=False, upx=False, name="psppt", )