From 3803f14160c30ac470bc957f8a0f2dbe67c4fd57 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Fri, 13 Nov 2026 16:40:02 -0800 Subject: Added full builds --- site/macos-app.sh | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 site/macos-app.sh (limited to 'site/macos-app.sh') diff --git a/site/macos-app.sh b/site/macos-app.sh new file mode 100755 index 0000000..e7b9bc3 --- /dev/null +++ b/site/macos-app.sh @@ -0,0 +1,67 @@ +#!/bin/sh +# Builds Rookery.app for macOS without a Mac: a macOS Java runtime made by jlink from the macOS JDK's +# jmods, the universal jar, an Info.plist and a small launcher. It is not signed or notarized. +# usage: site/macos-app.sh [dir holding aarch64/ and x64/ macOS JDKs (jmods only is enough)] +set -eu + +root=$(cd "$(dirname "$0")/.." && pwd) +version=${1:?usage: macos-app.sh [jdk dir]} +jdks=${2:-/opt/macjdk} +jar=$root/desktop/build/libs/rookery-universal.jar +out=$root/desktop/build/macos + +# Use the same modules the desktop build decided the app needs (Compose records them in the runtime's release file). +release=$(ls "$root"/desktop/build/compose/binaries/main/app/rookery/lib/runtime/release \ + "$root"/desktop/build/compose/binaries/main/app/rookery.app/Contents/runtime/Contents/Home/release 2>/dev/null | head -1) +modules=$(sed -n 's/^MODULES="\(.*\)"/\1/p' "$release" | tr ' ' ',') +[ -n "$modules" ] || { echo "no module list in $release" >&2; exit 1; } + +work=$(mktemp -d) +trap 'rm -rf "$work"' EXIT +mkdir -p "$out" + +for pair in aarch64:arm64 x64:x64; do + jdk=${pair%%:*}; name=${pair##*:} + app=$work/$name/Rookery.app + mkdir -p "$app/Contents/MacOS" "$app/Contents/Resources" "$app/Contents/app" + + cp "$root/site/assets/rookery.icns" "$app/Contents/Resources/rookery.icns" + jlink --module-path "$jdks/$jdk/Contents/Home/jmods" --add-modules "$modules" \ + --strip-java-debug-attributes --no-header-files --no-man-pages --compress zip-6 --output "$app/Contents/runtime" + cp "$jar" "$app/Contents/app/rookery.jar" + # the universal jar carries every platform's graphics library; this app only needs its own + case $name in arm64) other=x64 ;; *) other=arm64 ;; esac + zip -qd "$app/Contents/app/rookery.jar" 'libskiko-linux-*' 'skiko-windows-*' "libskiko-macos-$other*" > /dev/null || true + + cat > "$app/Contents/MacOS/rookery" <<'LAUNCHER' +#!/bin/sh +here=$(cd "$(dirname "$0")/.." && pwd) +exec "$here/runtime/bin/java" -Xdock:name=Rookery -Xmx256m -XX:+UseSerialGC -jar "$here/app/rookery.jar" "$@" +LAUNCHER + chmod +x "$app/Contents/MacOS/rookery" + + cat > "$app/Contents/Info.plist" < + + + + CFBundleNameRookery + CFBundleDisplayNameRookery + CFBundleIdentifiercoffee.liz.rookery + CFBundleExecutablerookery + CFBundlePackageTypeAPPL + CFBundleIconFilerookery + CFBundleShortVersionString$version + CFBundleVersion$version + LSMinimumSystemVersion11.0 + NSHighResolutionCapable + NSBluetoothAlwaysUsageDescriptionConnects to your smart cube. + NSMicrophoneUsageDescriptionListens to a stackmat timer on an audio input. + + +PLIST + + rm -f "$out/rookery-macos-$name.zip" + (cd "$work/$name" && zip -qry "$out/rookery-macos-$name.zip" Rookery.app) + echo "macos: rookery-macos-$name.zip $(du -h "$out/rookery-macos-$name.zip" | cut -f1)" +done -- cgit v1.3