114 lines
3.7 KiB
Bash
Executable File
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."
|