d83526cbf0
The Project Manager GUI does not set up O3DE's Python venv itself; it only
errors ("Missing python venv file .../pyvenv.cfg") when it's absent, which
cascades into "Failed to get engine info" / "Failed to initialize". Nothing
was running get_python.sh on launch.
The wrapper now runs python/get_python.sh when python.sh reports the venv is
missing/stale. get_python.sh downloads Python, creates the venv under the
writable ~/.o3de, and installs the o3de CLI from the prebuilt sdist. It is
idempotent and self-heals a half-built venv (venv creation uses --clear).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
51 lines
2.2 KiB
Bash
Executable File
51 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# Launcher for the O3DE Project Manager inside the Flatpak sandbox.
|
|
#
|
|
# The Debian package installs O3DE under /opt/O3DE/<version>/, which becomes
|
|
# /app/opt/O3DE/<version>/ inside the Flatpak. The version directory name
|
|
# changes with every release, so we discover the executable at runtime instead
|
|
# of hard-coding a path.
|
|
set -eu
|
|
|
|
O3DE_ROOT=/app/opt/O3DE
|
|
|
|
# Bundled shared libraries that ship inside the .deb.
|
|
export LD_LIBRARY_PATH="/app/lib:${O3DE_ROOT}/lib:${LD_LIBRARY_PATH:-}"
|
|
|
|
# Locate the Project Manager executable ("o3de").
|
|
O3DE_BIN=$(find "$O3DE_ROOT" -type f -name o3de -path '*bin/Linux*' 2>/dev/null | head -n 1)
|
|
if [ -z "$O3DE_BIN" ]; then
|
|
O3DE_BIN=$(find "$O3DE_ROOT" -type f -executable -name o3de 2>/dev/null | head -n 1)
|
|
fi
|
|
|
|
if [ -z "$O3DE_BIN" ]; then
|
|
echo "error: O3DE executable not found under $O3DE_ROOT" >&2
|
|
echo " (the .deb layout may have changed)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Make libraries that sit next to the binary discoverable too.
|
|
export LD_LIBRARY_PATH="$(dirname "$O3DE_BIN"):${LD_LIBRARY_PATH}"
|
|
|
|
# Bootstrap O3DE's per-user Python venv if needed. The Project Manager GUI does
|
|
# NOT set this up itself - it just errors out ("Missing python venv file ...") if
|
|
# the venv is absent. So we ensure it here. python.sh exits non-zero when the
|
|
# venv for this engine is missing/stale; get_python.sh then downloads Python,
|
|
# creates the venv (~/.o3de/Python, writable) and installs the 'o3de' CLI from
|
|
# the prebuilt sdist. It is idempotent and self-healing (recreates a broken venv
|
|
# with --clear). cmake, needed for the engine-id calc, ships in the Sdk runtime.
|
|
PYTHON_SH=$(find "$O3DE_ROOT" -type f -path '*/python/python.sh' 2>/dev/null | head -n 1)
|
|
GET_PYTHON=$(find "$O3DE_ROOT" -type f -path '*/python/get_python.sh' 2>/dev/null | head -n 1)
|
|
if [ -n "$GET_PYTHON" ]; then
|
|
if ! "$PYTHON_SH" --version >/dev/null 2>&1; then
|
|
echo "O3DE: setting up the per-user Python environment." >&2
|
|
echo "O3DE: first launch downloads Python and can take several minutes..." >&2
|
|
if ! "$GET_PYTHON"; then
|
|
echo "error: O3DE Python setup failed (see the log above)." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
exec "$O3DE_BIN" "$@"
|