aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
Diffstat (limited to 'docker')
-rwxr-xr-xdocker/build-inner.sh50
1 files changed, 27 insertions, 23 deletions
diff --git a/docker/build-inner.sh b/docker/build-inner.sh
index bd0ed73..d035e34 100755
--- a/docker/build-inner.sh
+++ b/docker/build-inner.sh
@@ -317,7 +317,6 @@ cat > "${OUT_DIR}/fluorine-manager" <<'LAUNCH'
set -euo pipefail
SELF="$(readlink -f "$0")"
HERE="$(cd "$(dirname "$SELF")" && pwd)"
-export PATH="${HERE}:${PATH}"
# Save the original environment so game launches (Proton/Wine) can restore it.
# Without this, our bundled LD_LIBRARY_PATH leaks into game processes and
@@ -327,40 +326,45 @@ export FLUORINE_ORIG_PATH="${PATH}"
export FLUORINE_ORIG_XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
export FLUORINE_ORIG_QT_PLUGIN_PATH="${QT_PLUGIN_PATH:-}"
-# ── Sync portable Python to data dir (only when outdated) ──
+# ── Sync entire app to ~/.local/share/fluorine/bin/ ──
+# This gives instances a stable symlink target that won't break if the user
+# moves or deletes the original tarball extraction directory.
FLUORINE_DATA="${HOME}/.local/share/fluorine"
-PYTHON_DST="${FLUORINE_DATA}/python"
-PYTHON_SRC="${HERE}/python"
+BIN_DST="${FLUORINE_DATA}/bin"
-if [ -d "${PYTHON_SRC}" ]; then
- CURRENT_VER="$(stat -c '%i:%Y' "${PYTHON_SRC}/bin/python3" 2>/dev/null || echo "unknown")"
- MARKER="${PYTHON_DST}/.version"
+# Use the main binary's mtime as a version fingerprint.
+CURRENT_VER="$(stat -c '%i:%Y' "${HERE}/ModOrganizer-core" 2>/dev/null || echo "unknown")"
+MARKER="${BIN_DST}/.version"
- if [ ! -f "${MARKER}" ] || [ "$(cat "${MARKER}" 2>/dev/null)" != "${CURRENT_VER}" ]; then
- echo "Syncing Python runtime to ${PYTHON_DST}..." >&2
- rm -rf "${PYTHON_DST}"
- mkdir -p "${PYTHON_DST}"
- (cd "${PYTHON_SRC}" && tar --exclude-vcs -cf - .) | (cd "${PYTHON_DST}" && tar -xf -)
- echo "${CURRENT_VER}" > "${MARKER}"
- fi
+if [ ! -f "${MARKER}" ] || [ "$(cat "${MARKER}" 2>/dev/null)" != "${CURRENT_VER}" ]; then
+ echo "Syncing Fluorine to ${BIN_DST}..." >&2
+ rm -rf "${BIN_DST}"
+ mkdir -p "${BIN_DST}"
+ (cd "${HERE}" && tar --exclude-vcs -cf - .) | (cd "${BIN_DST}" && tar -xf -)
+ echo "${CURRENT_VER}" > "${MARKER}"
fi
-export LD_LIBRARY_PATH="${HERE}/lib:${PYTHON_DST}/lib:${LD_LIBRARY_PATH:-}"
-export MO2_BASE_DIR="${HERE}"
-export MO2_PLUGINS_DIR="${HERE}/plugins"
-export MO2_DLLS_DIR="${HERE}/dlls"
-export MO2_PYTHON_DIR="${PYTHON_DST}"
+# Run from the synced location.
+RUN="${BIN_DST}"
+PYTHON_DIR="${RUN}/python"
+
+export PATH="${RUN}:${PATH}"
+export LD_LIBRARY_PATH="${RUN}/lib:${PYTHON_DIR}/lib:${LD_LIBRARY_PATH:-}"
+export MO2_BASE_DIR="${RUN}"
+export MO2_PLUGINS_DIR="${RUN}/plugins"
+export MO2_DLLS_DIR="${RUN}/dlls"
+export MO2_PYTHON_DIR="${PYTHON_DIR}"
# PYTHONHOME is set only for the MO2 process (not exported to children like
# Proton which has its own Python). MO2_PYTHON_DIR lets the
# binary reconstruct it internally.
-MO2_PYTHONHOME="${PYTHON_DST}"
+MO2_PYTHONHOME="${PYTHON_DIR}"
unset PYTHONPATH PYTHONNOUSERSITE PYTHONHOME
# Use bundled Qt6 plugins.
-export QT_PLUGIN_PATH="${HERE}/qt6plugins"
+export QT_PLUGIN_PATH="${RUN}/qt6plugins"
-cd "${HERE}"
-exec env PYTHONHOME="${MO2_PYTHONHOME}" "${HERE}/ModOrganizer-core" "$@"
+cd "${RUN}"
+exec env PYTHONHOME="${MO2_PYTHONHOME}" "${RUN}/ModOrganizer-core" "$@"
LAUNCH
chmod +x "${OUT_DIR}/fluorine-manager"