From e94f20f7ca94a21e8f9b8bf590fbb4ea45eb399e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 2 Oct 2019 20:37:49 +0100 Subject: [PATCH] Reset environment variables before switching mods. --- packaging/linux/AppRun.in | 16 +++++++++++++--- packaging/linux/buildpackage.sh | 2 ++ packaging/linux/openra.appimage.in | 2 +- packaging/linux/restore-environment.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100755 packaging/linux/restore-environment.sh diff --git a/packaging/linux/AppRun.in b/packaging/linux/AppRun.in index 97a12312ea..37fc9498eb 100755 --- a/packaging/linux/AppRun.in +++ b/packaging/linux/AppRun.in @@ -2,11 +2,21 @@ HERE="$(dirname "$(readlink -f "${0}")")" -# Override runtime paths +# Stash original environment values so they can be restored +# when switching to other mods using restore-environment +export OPENRA_ORIG_PATH="${PATH}" +export OPENRA_ORIG_XDG_DATA_DIRS="${XDG_DATA_DIRS}" +export OPENRA_ORIG_DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH}" +export OPENRA_ORIG_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" +export OPENRA_ORIG_MONO_PATH="${MONO_PATH}" +export OPENRA_ORIG_MONO_CFG_DIR="${MONO_CFG_DIR}" +export OPENRA_ORIG_MONO_CONFIG="${MONO_CONFIG}" + +# Override runtime paths to use bundled mono and shared libraries export PATH="${HERE}/usr/bin:${PATH}" export XDG_DATA_DIRS="${HERE}/usr/share:${XDG_DATA_DIRS}" -export DYLD_LIBRARY_PATH="${HERE}/usr/lib:$DYLD_LIBRARY_PATH" -export LD_LIBRARY_PATH="${HERE}/usr/lib:$LD_LIBRARY_PATH" +export DYLD_LIBRARY_PATH="${HERE}/usr/lib:${DYLD_LIBRARY_PATH}" +export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}" export MONO_PATH="${HERE}/usr/lib/mono/4.5" export MONO_CFG_DIR="${HERE}/etc" export MONO_CONFIG="${HERE}/etc/mono/config" diff --git a/packaging/linux/buildpackage.sh b/packaging/linux/buildpackage.sh index e8238b66f8..65cbac2191 100755 --- a/packaging/linux/buildpackage.sh +++ b/packaging/linux/buildpackage.sh @@ -140,6 +140,8 @@ build_appimage() { install -m 0755 gtk-dialog.py "${APPDIR}/usr/bin/gtk-dialog.py" + install -m 0755 restore-environment.sh "${APPDIR}/usr/bin/restore-environment.sh" + # travis-ci doesn't support mounting FUSE filesystems so extract and run the contents manually ./appimagetool-x86_64.AppImage --appimage-extract diff --git a/packaging/linux/openra.appimage.in b/packaging/linux/openra.appimage.in index 754d7f2fe4..29743fea28 100755 --- a/packaging/linux/openra.appimage.in +++ b/packaging/linux/openra.appimage.in @@ -35,7 +35,7 @@ fi # Run the game export SDL_VIDEO_X11_WMCLASS="openra-{MODID}-{TAG}" -mono --debug OpenRA.Game.exe Game.Mod={MODID} Engine.LaunchPath="${LAUNCHER}" "${JOIN_SERVER}" "$@" +mono --debug OpenRA.Game.exe Game.Mod={MODID} Engine.LaunchPath="${LAUNCHER}" Engine.LaunchWrapper="${HERE}/restore-environment.sh" "${JOIN_SERVER}" "$@" # Show a crash dialog if something went wrong if [ $? != 0 ] && [ $? != 1 ]; then diff --git a/packaging/linux/restore-environment.sh b/packaging/linux/restore-environment.sh new file mode 100755 index 0000000000..b68a509ef0 --- /dev/null +++ b/packaging/linux/restore-environment.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# Restore the environment variables that were set by AppRun +export PATH="${OPENRA_ORIG_PATH}" +export XDG_DATA_DIRS="${OPENRA_ORIG_XDG_DATA_DIRS}" +export DYLD_LIBRARY_PATH="${OPENRA_ORIG_DYLD_LIBRARY_PATH}" +export LD_LIBRARY_PATH="${OPENRA_ORIG_LD_LIBRARY_PATH}" +unset OPENRA_ORIG_PATH OPENRA_ORIG_XDG_DATA_DIRS OPENRA_ORIG_DYLD_LIBRARY_PATH OPENRA_ORIG_LD_LIBRARY_PATH + +unset MONO_PATH MONO_CFG_DIR MONO_CONFIG +if [ -n "${OPENRA_ORIG_MONO_PATH}" ]; then + export MONO_PATH="${OPENRA_ORIG_MONO_PATH}" +fi + +if [ -n "${OPENRA_ORIG_MONO_CFG_DIR}" ]; then + export MONO_CFG_DIR="${OPENRA_ORIG_MONO_CFG_DIR}" +fi + +if [ -n "${OPENRA_ORIG_MONO_CONFIG}" ]; then + export MONO_CONFIG="${OPENRA_ORIG_MONO_CONFIG}" +fi + +unset SDL_VIDEO_X11_WMCLASS OPENRA_ORIG_MONO_PATH OPENRA_ORIG_MONO_CFG_DIR OPENRA_ORIG_MONO_CONFIG + +# Run the given command +exec "$@" \ No newline at end of file