From b0d0cab6c2f6a108fc04fd1aa0ac80073a7e9a39 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Wed, 5 Jun 2024 19:59:43 -0400 Subject: [PATCH] feat: support portable mode (#368) --- .github/linux/appimage.sh | 10 ++++++++-- src/game/config.cpp | 10 ++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/linux/appimage.sh b/.github/linux/appimage.sh index 3d706ba..6905528 100755 --- a/.github/linux/appimage.sh +++ b/.github/linux/appimage.sh @@ -26,6 +26,12 @@ cp .github/linux/Zelda64Recompiled.desktop AppDir/ mv squashfs-root/ deploy ./deploy/AppRun --appdir=AppDir/ -d AppDir/Zelda64Recompiled.desktop -i AppDir/Zelda64Recompiled.png -e AppDir/usr/bin/Zelda64Recompiled --plugin gtk sed -i 's/exec/#exec/g' AppDir/AppRun -echo 'cd "$this_dir"/usr/bin/' >> AppDir/AppRun -echo './Zelda64Recompiled' >> AppDir/AppRun +echo 'if [ -f "portable.txt" ]; then' >> AppDir/AppRun +echo ' APP_FOLDER_PATH=$PWD' >> AppDir/AppRun +echo ' cd "$this_dir"/usr/bin/' >> AppDir/AppRun +echo ' APP_FOLDER_PATH=$APP_FOLDER_PATH ./Zelda64Recompiled' >> AppDir/AppRun +echo 'else' >> AppDir/AppRun +echo ' cd "$this_dir"/usr/bin/' >> AppDir/AppRun +echo ' ./Zelda64Recompiled' >> AppDir/AppRun +echo 'fi' >> AppDir/AppRun ./deploy/usr/bin/linuxdeploy-plugin-appimage --appdir=AppDir diff --git a/src/game/config.cpp b/src/game/config.cpp index c32c379..9ee73ee 100644 --- a/src/game/config.cpp +++ b/src/game/config.cpp @@ -129,6 +129,11 @@ namespace recomp { } std::filesystem::path zelda64::get_app_folder_path() { + // directly check for portable.txt (windows and native linux binary) + if (std::filesystem::exists("portable.txt")) { + return std::filesystem::current_path(); + } + std::filesystem::path recomp_dir{}; #if defined(_WIN32) @@ -141,6 +146,11 @@ std::filesystem::path zelda64::get_app_folder_path() { CoTaskMemFree(known_path); #elif defined(__linux__) + // check for APP_FOLDER_PATH env var used by AppImage + if (getenv("APP_FOLDER_PATH") != nullptr) { + return std::filesystem::path{getenv("APP_FOLDER_PATH")}; + } + const char *homedir; if ((homedir = getenv("HOME")) == nullptr) {