FEMM/scripts/macos/build.sh

97 lines
3.2 KiB
Bash
Executable File

#!/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
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
BIN="$ROOT/target/release/femm"
if [ ! -f "$BIN" ]; then
echo "ERROR: femm binary not found at $BIN" >&2
exit 1
fi
rm -rf "$APP"
mkdir -p "$MACOS" "$RESOURCES"
cp "$BIN" "$MACOS/femm"
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'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key> <string>en</string>
<key>CFBundleExecutable</key> <string>femm</string>
<key>CFBundleIconFile</key> <string>AppIcon</string>
<key>CFBundleIdentifier</key> <string>org.else-if.femm</string>
<key>CFBundleInfoDictionaryVersion</key> <string>6.0</string>
<key>CFBundleName</key> <string>femm</string>
<key>CFBundleDisplayName</key> <string>FEMM</string>
<key>CFBundlePackageType</key> <string>APPL</string>
<key>CFBundleShortVersionString</key> <string>0.0.1</string>
<key>CFBundleVersion</key> <string>0.0.1</string>
<key>LSMinimumSystemVersion</key> <string>11.0</string>
<key>NSHighResolutionCapable</key> <true/>
</dict>
</plist>
PLIST
echo "Built: $APP"