Files

80 lines
3.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Startet das Habegger Loader Game auf macOS und Linux.
#
# Beim ersten Start wird eine lokale virtuelle Umgebung (.venv) angelegt und
# requirements.txt installiert. Ändert sich requirements.txt oder das Python,
# wird neu installiert bzw. die Umgebung neu gebaut. Alles Weitere siehe
# MAC-START.md.
#
# ./run.sh # Fenster
# ./run.sh --fullscreen # Vollbild (Eventbetrieb)
# ./run.sh --smoke 10 # Selbsttest ohne Eingabegeräte
# PYTHON=python3.12 ./run.sh # bestimmtes Python erzwingen
set -euo pipefail
cd "$(dirname "$0")"
VENV=".venv"
REQ_STAMP="$VENV/.requirements.sha256"
PY_STAMP="$VENV/.python-version"
# --------------------------------------------------------------------------
# 1. Passendes Python finden (neueste zuerst, 3.12 ist die sichere Wahl für
# pygame-Wheels; das alte python3 aus den Xcode-Tools bleibt aussen vor)
# --------------------------------------------------------------------------
if [ -z "${PYTHON:-}" ]; then
for candidate in python3.12 python3.13 python3.11 python3.10 python3.9 python3; do
if command -v "$candidate" >/dev/null 2>&1; then
PYTHON="$candidate"
break
fi
done
fi
if [ -z "${PYTHON:-}" ]; then
echo "✗ Kein Python gefunden."
echo " Installiere Python 3.12: brew install python@3.12"
echo " (Details siehe MAC-START.md)"
exit 1
fi
PY_VERSION="$("$PYTHON" -V 2>&1)"
# --------------------------------------------------------------------------
# 2. Virtuelle Umgebung anlegen bzw. erneuern
# --------------------------------------------------------------------------
if [ -d "$VENV" ] && [ -f "$PY_STAMP" ] && [ "$(cat "$PY_STAMP")" != "$PY_VERSION" ]; then
echo "→ Python hat sich geändert ($(cat "$PY_STAMP") → $PY_VERSION) – .venv wird neu angelegt"
rm -rf "$VENV"
fi
if [ ! -x "$VENV/bin/python" ]; then
echo "→ Lege virtuelle Umgebung an ($PY_VERSION)"
"$PYTHON" -m venv "$VENV"
fi
echo "$PY_VERSION" >"$PY_STAMP"
if ! "$VENV/bin/python" -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 9) else 1)'; then
echo "✗ Python 3.9 oder neuer wird benötigt (gefunden: $PY_VERSION)"
echo " Tipp: brew install python@3.12, danach: rm -rf .venv"
exit 1
fi
# --------------------------------------------------------------------------
# 3. Abhängigkeiten installieren (nur wenn sich requirements.txt geändert hat)
# --------------------------------------------------------------------------
if command -v shasum >/dev/null 2>&1; then
REQ_HASH="$(shasum -a 256 requirements.txt | cut -d' ' -f1)"
else
REQ_HASH="$(sha256sum requirements.txt | cut -d' ' -f1)"
fi
if [ ! -f "$REQ_STAMP" ] || [ "$(cat "$REQ_STAMP")" != "$REQ_HASH" ]; then
echo "→ Installiere Abhängigkeiten aus requirements.txt"
"$VENV/bin/python" -m pip install --quiet --upgrade pip
"$VENV/bin/python" -m pip install --quiet -r requirements.txt
echo "$REQ_HASH" >"$REQ_STAMP"
fi
# --------------------------------------------------------------------------
# 4. Spiel starten (alle Argumente werden weitergegeben)
# --------------------------------------------------------------------------
exec "$VENV/bin/python" main.py "$@"