#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/../.." && pwd)" cd "$ROOT" case "$(uname -s)" in Darwin) ;; *) echo "wrong platform: $(uname -s) - use cargo xtask build" >&2; exit 1 ;; esac export MACOSX_DEPLOYMENT_TARGET=11.0 export PROFILE=release BUILD="$ROOT/build" APP="$BUILD/bin/femm.app" CONTENTS="$APP/Contents" MACOS="$CONTENTS/MacOS" RESOURCES="$CONTENTS/Resources" ICONSET="$BUILD/AppIcon.iconset" ICNS="$RESOURCES/AppIcon.icns" SVG="$ROOT/assets/femm.svg" echo "Building Triangle..." bash "$ROOT/scripts/macos/build_triangle.sh" TRI="$ROOT/build/triangle/triangle" if [ ! -f "$TRI" ]; then echo "ERROR: triangle binary missing at $TRI" >&2 exit 1 fi echo "Building Rust workspace (release)..." cargo build --release -p femm-app -p femm-mag-solve BIN="$ROOT/target/release/femm" SOLVE="$ROOT/target/release/femm-mag-solve" if [ ! -f "$BIN" ]; then echo "ERROR: femm binary not found at $BIN" >&2 exit 1 fi if [ ! -f "$SOLVE" ]; then echo "ERROR: femm-mag-solve binary not found at $SOLVE" >&2 exit 1 fi rm -rf "$APP" mkdir -p "$MACOS" "$RESOURCES" cp "$BIN" "$MACOS/femm" cp "$SOLVE" "$MACOS/femm-mag-solve" cp "$TRI" "$MACOS/triangle" if [ -f "$SVG" ]; then if ! command -v rsvg-convert >/dev/null; then echo "ERROR: rsvg-convert missing - brew install librsvg" >&2 exit 1 fi if ! command -v iconutil >/dev/null; then echo "ERROR: iconutil missing - install Xcode command line tools" >&2 exit 1 fi rm -rf "$ICONSET" mkdir -p "$ICONSET" for size in 16 32 64 128 256 512 1024; do rsvg-convert --width="$size" --height="$size" "$SVG" -o "$ICONSET/icon_${size}.png" done cp "$ICONSET/icon_16.png" "$ICONSET/icon_16x16.png" cp "$ICONSET/icon_32.png" "$ICONSET/icon_16x16@2x.png" cp "$ICONSET/icon_32.png" "$ICONSET/icon_32x32.png" cp "$ICONSET/icon_64.png" "$ICONSET/icon_32x32@2x.png" cp "$ICONSET/icon_128.png" "$ICONSET/icon_128x128.png" cp "$ICONSET/icon_256.png" "$ICONSET/icon_128x128@2x.png" cp "$ICONSET/icon_256.png" "$ICONSET/icon_256x256.png" cp "$ICONSET/icon_512.png" "$ICONSET/icon_256x256@2x.png" cp "$ICONSET/icon_512.png" "$ICONSET/icon_512x512.png" cp "$ICONSET/icon_1024.png" "$ICONSET/icon_512x512@2x.png" iconutil -c icns "$ICONSET" -o "$ICNS" else echo "WARNING: $SVG not found - app bundle will lack an icon" fi cat > "$CONTENTS/Info.plist" <<'PLIST' CFBundleDevelopmentRegion en CFBundleExecutable femm CFBundleIconFile AppIcon CFBundleIdentifier org.else-if.femm CFBundleInfoDictionaryVersion 6.0 CFBundleName femm CFBundleDisplayName FEMM CFBundlePackageType APPL CFBundleShortVersionString 0.0.1 CFBundleVersion 0.0.1 LSMinimumSystemVersion 11.0 NSHighResolutionCapable PLIST echo "Built: $APP"