From 7ff6ea124a4886df7424c29c6d0508e6d631ec70 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Wed, 7 May 2025 02:29:32 -0500 Subject: [PATCH] [nostalgia/studio] Add command for bundling Mac app --- Makefile | 4 ++++ util/scripts/pkg-dmg.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100755 util/scripts/pkg-dmg.py diff --git a/Makefile b/Makefile index 7f1fb98f..4994411e 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,10 @@ PROJECT_PLAYER=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP} pkg-gba: build ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME_CAP} +.PHONY: pkg-mac +pkg-mac: install + ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-dmg.py + .PHONY: generate-studio-rsrc generate-studio-rsrc: ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/olympic/studio/applib/src/rsrc.json diff --git a/util/scripts/pkg-dmg.py b/util/scripts/pkg-dmg.py new file mode 100755 index 00000000..08a7417c --- /dev/null +++ b/util/scripts/pkg-dmg.py @@ -0,0 +1,36 @@ +#! /usr/bin/env python3 + +import os +import shutil +import subprocess +import sys + +def rm(path: str): + file_exists = os.path.exists(path) + is_link = os.path.islink(path) + is_dir = os.path.isdir(path) + if (file_exists or is_link) and not is_dir: + os.remove(path) + elif os.path.isdir(path): + shutil.rmtree(path) + + +def mkdir_p(path: str): + if not os.path.exists(path): + os.mkdir(path) + + +def run(args: list[str]): + if subprocess.run(args).returncode != 0: + sys.exit(1) + + + +dmg_dir = 'dist/darwin-arm64-release/NostalgiaStudio' +dmg = f'{dmg_dir}.dmg' +rm(dmg) +rm(dmg_dir) +mkdir_p(dmg_dir) +shutil.copytree('dist/darwin-arm64-release/NostalgiaStudio.app', f'{dmg_dir}/Nostalgia Studio.app') +os.symlink('/Applications', f'{dmg_dir}/Applications') +run(['hdiutil', 'create', '-srcfolder', dmg_dir, dmg])