Files
DOOM/macos-app/Scripts/fetch-deps.sh
gronod 6aaf73d70c
Build macOS app / Build DOOM.app (push) Canceled after 0s
macOS port: add app build workflow
2026-09-18 20:01:16 +01:00

114 lines
3.7 KiB
Bash
Executable File

#!/bin/sh
#
# fetch-deps.sh — fetch the binary dependencies for DOOM.app:
# * SDL2.framework -> macos-app/Frameworks/ (embedded in the app)
# * an IWAD (*.wad) -> macos-app/Resources/ (bundled in the app)
#
# Idempotent: anything already present is left alone. Safe to run
# standalone or from the Xcode "Fetch Dependencies" build phase.
#
# Pinned versions:
SDL2_VERSION=2.30.12
SDL2_DMG_URL="https://github.com/libsdl-org/SDL/releases/download/release-${SDL2_VERSION}/SDL2-${SDL2_VERSION}.dmg"
FREEDOOM_VERSION=0.13.0
FREEDOOM_ZIP_URL="https://github.com/freedoom/freedoom/releases/download/v${FREEDOOM_VERSION}/freedoom-${FREEDOOM_VERSION}.zip"
set -euo pipefail
# Repo root = two levels up from this script (macos-app/Scripts/).
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
REPO_ROOT=$(CDPATH= cd -- "$SCRIPT_DIR/../.." && pwd)
FRAMEWORKS_DIR="$REPO_ROOT/macos-app/Frameworks"
RESOURCES_DIR="$REPO_ROOT/macos-app/Resources"
REPO_WADS_DIR="$REPO_ROOT/wads"
mkdir -p "$FRAMEWORKS_DIR" "$RESOURCES_DIR"
TMPDIR_WORK=""
cleanup() {
[ -n "$TMPDIR_WORK" ] && rm -rf "$TMPDIR_WORK"
return 0
}
trap cleanup EXIT
fail() {
echo "fetch-deps.sh: error: $*" >&2
exit 1
}
have_iwad() {
for name in doom2f doom2 plutonia tnt doomu doom doom1 freedoom2 freedoom1; do
[ -f "$RESOURCES_DIR/$name.wad" ] && return 0
done
return 1
}
#
# SDL2.framework
#
if [ -d "$FRAMEWORKS_DIR/SDL2.framework" ]; then
echo "SDL2.framework already present, skipping download."
else
echo "Fetching SDL2.framework $SDL2_VERSION ..."
TMPDIR_WORK=$(mktemp -d /tmp/doomdeps.XXXXXX)
dmg="$TMPDIR_WORK/sdl2.dmg"
curl -fL --progress-bar -o "$dmg" "$SDL2_DMG_URL" \
|| fail "could not download $SDL2_DMG_URL (offline?). Place SDL2.framework in $FRAMEWORKS_DIR manually."
mountpoint="$TMPDIR_WORK/mnt"
mkdir -p "$mountpoint"
hdiutil attach "$dmg" -nobrowse -readonly -mountpoint "$mountpoint" -quiet \
|| fail "could not mount SDL2 dmg."
if [ -d "$mountpoint/SDL2.framework" ]; then
cp -R "$mountpoint/SDL2.framework" "$FRAMEWORKS_DIR/"
else
hdiutil detach "$mountpoint" -quiet || true
fail "SDL2.framework not found inside dmg."
fi
hdiutil detach "$mountpoint" -quiet || true
rm -rf "$TMPDIR_WORK"; TMPDIR_WORK=""
# Remove quarantine attribute so the ad-hoc signed app can load it.
xattr -dr com.apple.quarantine "$FRAMEWORKS_DIR/SDL2.framework" 2>/dev/null || true
echo "Installed $FRAMEWORKS_DIR/SDL2.framework"
fi
#
# IWAD(s) — copy any *.wad from the repo's wads/ dir first; if nothing
# usable ends up in Resources/, download FreeDoom's freedoom2.wad.
#
if [ -d "$REPO_WADS_DIR" ]; then
for wad in "$REPO_WADS_DIR"/*.wad; do
[ -e "$wad" ] || continue
base=$(basename "$wad")
if [ ! -f "$RESOURCES_DIR/$base" ]; then
cp "$wad" "$RESOURCES_DIR/$base"
echo "Copied $base from wads/ into app resources."
fi
done
fi
if have_iwad; then
echo "IWAD present in app resources."
else
echo "Fetching freedoom2.wad $FREEDOOM_VERSION ..."
TMPDIR_WORK=$(mktemp -d /tmp/doomdeps.XXXXXX)
zip="$TMPDIR_WORK/freedoom.zip"
curl -fL --progress-bar -o "$zip" "$FREEDOOM_ZIP_URL" \
|| fail "could not download $FREEDOOM_ZIP_URL (offline?). Drop a doom.wad/freedoom2.wad into $RESOURCES_DIR manually."
unzip -o -q "$zip" -d "$TMPDIR_WORK" \
|| fail "could not unzip freedoom archive."
src="$TMPDIR_WORK/freedoom-$FREEDOOM_VERSION/freedoom2.wad"
[ -f "$src" ] || fail "freedoom2.wad not found inside archive."
cp "$src" "$RESOURCES_DIR/freedoom2.wad"
rm -rf "$TMPDIR_WORK"; TMPDIR_WORK=""
echo "Installed $RESOURCES_DIR/freedoom2.wad"
fi
echo "fetch-deps.sh: done."