From 2d09eae9109952e518ee737a329d283ce936645b Mon Sep 17 00:00:00 2001 From: Arrowmaster Date: Thu, 31 Jul 2025 20:11:00 -0400 Subject: [PATCH 1/7] run.sh: formatting cleanup --- assets/nix/run.sh | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/assets/nix/run.sh b/assets/nix/run.sh index 8beddc5..67a3177 100755 --- a/assets/nix/run.sh +++ b/assets/nix/run.sh @@ -1,6 +1,6 @@ #!/bin/sh # Doorstop start script -# +# # Run the script to start the game with Doorstop enabled # # There are two ways to use this script @@ -8,8 +8,6 @@ # 1. Via CLI: Run ./run.sh [doorstop arguments] [game arguments] # 2. Via config: edit the options below and run ./run.sh without any arguments -# 0 is false, 1 is true - # LINUX: name of Unity executable # MACOS: name of the .app directory executable_name="" @@ -19,6 +17,7 @@ executable_name="" # General Config Options # Enable Doorstop? +# 0 is false, 1 is true enabled="1" # Path to the assembly to load and execute @@ -135,7 +134,7 @@ abs_path() { } _readlink() { - # relative links with readlink (without -f) do not preserve the path info + # relative links with readlink (without -f) do not preserve the path info ab_path="$(abs_path "$1")" link="$(readlink "${ab_path}")" case $link in @@ -145,11 +144,10 @@ _readlink() { echo "$link" } - resolve_executable_path () { e_path="$(abs_path "$1")" - - while [ -L "${e_path}" ]; do + + while [ -L "${e_path}" ]; do e_path=$(_readlink "${e_path}"); done echo "${e_path}" From 431d8aa14c8ec4d2baa1aea28e41186f3aea2159 Mon Sep 17 00:00:00 2001 From: Arrowmaster Date: Thu, 31 Jul 2025 20:12:00 -0400 Subject: [PATCH 2/7] run.sh: Don't output to stdout --- assets/nix/run.sh | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/assets/nix/run.sh b/assets/nix/run.sh index 67a3177..05f3fd9 100755 --- a/assets/nix/run.sh +++ b/assets/nix/run.sh @@ -73,7 +73,6 @@ fi # Handle first param being executable name if [ -x "$1" ] ; then executable_name="$1" - echo "Target executable: $1" shift fi @@ -95,7 +94,7 @@ case ${os_type} in Linux*) executable_path="${executable_name}" # Handle relative paths - if ! echo "$executable_path" | grep "^/.*$"; then + if [ "$executable_path" = "${executable_path#/}" ]; then executable_path="${BASEDIR}/${executable_path}" fi lib_extension="so" @@ -104,21 +103,24 @@ case ${os_type} in real_executable_name="${executable_name}" # Handle relative directories - if ! echo "$real_executable_name" | grep "^/.*$"; then + if [ "$real_executable_name" = "${real_executable_name#/}" ]; then real_executable_name="${BASEDIR}/${real_executable_name}" fi # If we're not even an actual executable, check .app Info for actual executable - if ! echo "$real_executable_name" | grep "^.*\.app/Contents/MacOS/.*"; then - # Add .app to the end if not given - if ! echo "$real_executable_name" | grep "^.*\.app$"; then - real_executable_name="${real_executable_name}.app" - fi - inner_executable_name=$(defaults read "${real_executable_name}/Contents/Info" CFBundleExecutable) - executable_path="${real_executable_name}/Contents/MacOS/${inner_executable_name}" - else - executable_path="${executable_name}" - fi + case $real_executable_name in + *.app/Contents/MacOS/*) + executable_path="${executable_name}" + ;; + *) + # Add .app to the end if not given + if [ "$real_executable_name" = "${real_executable_name%.app}" ]; then + real_executable_name="${real_executable_name}.app" + fi + inner_executable_name=$(defaults read "${real_executable_name}/Contents/Info" CFBundleExecutable) + executable_path="${real_executable_name}/Contents/MacOS/${inner_executable_name}" + ;; + esac lib_extension="dylib" ;; *) @@ -153,9 +155,8 @@ resolve_executable_path () { echo "${e_path}" } -# Get absolute path of executable and show to user +# Get absolute path of executable executable_path=$(resolve_executable_path "${executable_path}") -echo "${executable_path}" # Figure out the arch of the executable with file file_out="$(LD_PRELOAD="" file -b "${executable_path}")" From 7b6901928cec29492f6babc246909d7f2cea0c26 Mon Sep 17 00:00:00 2001 From: Arrowmaster Date: Thu, 31 Jul 2025 20:13:00 -0400 Subject: [PATCH 3/7] run.sh: Preserve spaces in passed arguments --- assets/nix/run.sh | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/assets/nix/run.sh b/assets/nix/run.sh index 05f3fd9..dbf8e28 100755 --- a/assets/nix/run.sh +++ b/assets/nix/run.sh @@ -189,60 +189,70 @@ doorstop_bool() { } # Read from command line -while :; do +i=0; max=$# +while [ $i -lt $max ]; do case "$1" in --doorstop_enabled) # For backwards compatibility. Renamed to --doorstop-enabled enabled="$(doorstop_bool "$2")" shift + i=$((i+1)) ;; --doorstop_target_assembly) # For backwards compatibility. Renamed to --doorstop-target-assembly target_assembly="$2" shift + i=$((i+1)) ;; --doorstop-enabled) enabled="$(doorstop_bool "$2")" shift + i=$((i+1)) ;; --doorstop-target-assembly) target_assembly="$2" shift + i=$((i+1)) ;; --doorstop-boot-config-override) boot_config_override="$2" shift + i=$((i+1)) ;; --doorstop-mono-dll-search-path-override) dll_search_path_override="$2" shift + i=$((i+1)) ;; --doorstop-mono-debug-enabled) debug_enable="$(doorstop_bool "$2")" shift + i=$((i+1)) ;; --doorstop-mono-debug-suspend) debug_suspend="$(doorstop_bool "$2")" shift + i=$((i+1)) ;; --doorstop-mono-debug-address) debug_address="$2" shift + i=$((i+1)) ;; --doorstop-clr-runtime-coreclr-path) coreclr_path="$2" shift + i=$((i+1)) ;; --doorstop-clr-corlib-dir) corlib_dir="$2" shift + i=$((i+1)) ;; *) - if [ -z "$1" ]; then - break - fi - rest_args="$rest_args $1" + set -- "$@" "$1" ;; esac shift + i=$((i+1)) done # Move variables to environment @@ -275,5 +285,4 @@ else export DYLD_INSERT_LIBRARIES="${doorstop_name}:${DYLD_INSERT_LIBRARIES}" fi -# shellcheck disable=SC2086 -exec "$executable_path" $rest_args +exec "$executable_path" "$@" From 730400c0f8a35b577591d4916c0aa7d6c3ac3dbe Mon Sep 17 00:00:00 2001 From: Arrowmaster Date: Thu, 31 Jul 2025 20:14:00 -0400 Subject: [PATCH 4/7] run.sh: Resolve target_assembly to an absolute path --- assets/nix/run.sh | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/assets/nix/run.sh b/assets/nix/run.sh index dbf8e28..c67e077 100755 --- a/assets/nix/run.sh +++ b/assets/nix/run.sh @@ -88,24 +88,23 @@ arch="" executable_path="" lib_extension="" +abs_path() { + # Resolve relative path to absolute from BASEDIR + if [ "$1" = "${1#/}" ]; then + set -- "${BASEDIR}/${1}" + fi + echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" +} + # Set executable path and the extension to use for the libdoorstop shared object os_type="$(uname -s)" case ${os_type} in Linux*) - executable_path="${executable_name}" - # Handle relative paths - if [ "$executable_path" = "${executable_path#/}" ]; then - executable_path="${BASEDIR}/${executable_path}" - fi + executable_path="$(abs_path "$executable_name")" lib_extension="so" ;; Darwin*) - real_executable_name="${executable_name}" - - # Handle relative directories - if [ "$real_executable_name" = "${real_executable_name#/}" ]; then - real_executable_name="${BASEDIR}/${real_executable_name}" - fi + real_executable_name="$(abs_path "$executable_name")" # If we're not even an actual executable, check .app Info for actual executable case $real_executable_name in @@ -131,10 +130,6 @@ case ${os_type} in ;; esac -abs_path() { - echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" -} - _readlink() { # relative links with readlink (without -f) do not preserve the path info ab_path="$(abs_path "$1")" @@ -255,6 +250,8 @@ while [ $i -lt $max ]; do i=$((i+1)) done +target_assembly="$(abs_path "$target_assembly")" + # Move variables to environment export DOORSTOP_ENABLED="$enabled" export DOORSTOP_TARGET_ASSEMBLY="$target_assembly" From 245ad5e963e78a475bc5563182e7c318b7c61862 Mon Sep 17 00:00:00 2001 From: Arrowmaster Date: Thu, 31 Jul 2025 20:15:00 -0400 Subject: [PATCH 5/7] run.sh: Update SteamLaunch check with a more futureproof check --- assets/nix/run.sh | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/assets/nix/run.sh b/assets/nix/run.sh index c67e077..101273b 100755 --- a/assets/nix/run.sh +++ b/assets/nix/run.sh @@ -63,12 +63,38 @@ corlib_dir="" # Special case: program is launched via Steam # In that case rerun the script via their bootstrapper to ensure Steam overlay works -if [ "$2" = "SteamLaunch" ]; then - steam="$1 $2 $3 $4 $0 $5" - shift 5 - $steam "$@" - exit -fi +steam_arg_helper() { + if [ "$executable_name" != "" ] && [ "$1" != "${1%"$executable_name"}" ]; then + return 0 + elif [ "$executable_name" = "" ] && [ "$1" != "${1%.x86_64}" ]; then + return 0 + elif [ "$executable_name" = "" ] && [ "$1" != "${1%.x86}" ]; then + return 0 + else + return 1 + fi +} +for a in "$@"; do + if [ "$a" = "SteamLaunch" ]; then + rotated=0; max=$# + while [ $rotated -lt $max ]; do + if steam_arg_helper "$1"; then + to_rotate=$(($# - rotated)) + set -- "$@" "$0" + while [ $((to_rotate-=1)) -ge 0 ]; do + set -- "$@" "$1" + shift + done + exec "$@" + else + set -- "$@" "$1" + shift + rotated=$((rotated+1)) + fi + done + exit 1 + fi +done # Handle first param being executable name if [ -x "$1" ] ; then From c9300174a943b6d00608d68e8f72d2f1a0c5e87c Mon Sep 17 00:00:00 2001 From: Arrowmaster Date: Mon, 25 Aug 2025 19:18:54 -0400 Subject: [PATCH 6/7] run.sh: Add missing error message and send all error messages to stderr --- assets/nix/run.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/assets/nix/run.sh b/assets/nix/run.sh index 101273b..9a56d56 100755 --- a/assets/nix/run.sh +++ b/assets/nix/run.sh @@ -92,6 +92,7 @@ for a in "$@"; do rotated=$((rotated+1)) fi done + echo 1>&2 "Please set executable_name to a valid name in a text editor" exit 1 fi done @@ -103,7 +104,7 @@ if [ -x "$1" ] ; then fi if [ -z "${executable_name}" ] || [ ! -x "${executable_name}" ]; then - echo "Please set executable_name to a valid name in a text editor or as the first command line parameter" + echo 1>&2 "Please set executable_name to a valid name in a text editor or as the first command line parameter" exit 1 fi @@ -150,8 +151,8 @@ case ${os_type} in ;; *) # alright whos running games on freebsd - echo "Unknown operating system ($(uname -s))" - echo "Make an issue at https://github.com/NeighTools/UnityDoorstop" + echo 1>&2 "Unknown operating system ($(uname -s))" + echo 1>&2 "Make an issue at https://github.com/NeighTools/UnityDoorstop" exit 1 ;; esac @@ -189,10 +190,10 @@ case "${file_out}" in arch="x86" ;; *) - echo "The executable \"${executable_path}\" is not compiled for x86 or x64 (might be ARM?)" - echo "If you think this is a mistake (or would like to encourage support for other architectures)" - echo "Please make an issue at https://github.com/NeighTools/UnityDoorstop" - echo "Got: ${file_out}" + echo 1>&2 "The executable \"${executable_path}\" is not compiled for x86 or x64 (might be ARM?)" + echo 1>&2 "If you think this is a mistake (or would like to encourage support for other architectures)" + echo 1>&2 "Please make an issue at https://github.com/NeighTools/UnityDoorstop" + echo 1>&2 "Got: ${file_out}" exit 1 ;; esac From 84c075cb5ddf56fa51b35f0287ab544c0e0ced8b Mon Sep 17 00:00:00 2001 From: ManlyMarco <39247311+ManlyMarco@users.noreply.github.com> Date: Tue, 2 Sep 2025 09:35:15 +0200 Subject: [PATCH 7/7] POSIX-compliant redirect --- assets/nix/run.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/nix/run.sh b/assets/nix/run.sh index 9a56d56..5669ec9 100755 --- a/assets/nix/run.sh +++ b/assets/nix/run.sh @@ -92,7 +92,7 @@ for a in "$@"; do rotated=$((rotated+1)) fi done - echo 1>&2 "Please set executable_name to a valid name in a text editor" + echo "Please set executable_name to a valid name in a text editor" 1>&2 exit 1 fi done @@ -104,7 +104,7 @@ if [ -x "$1" ] ; then fi if [ -z "${executable_name}" ] || [ ! -x "${executable_name}" ]; then - echo 1>&2 "Please set executable_name to a valid name in a text editor or as the first command line parameter" + echo "Please set executable_name to a valid name in a text editor or as the first command line parameter" 1>&2 exit 1 fi @@ -151,8 +151,8 @@ case ${os_type} in ;; *) # alright whos running games on freebsd - echo 1>&2 "Unknown operating system ($(uname -s))" - echo 1>&2 "Make an issue at https://github.com/NeighTools/UnityDoorstop" + echo "Unknown operating system ($(uname -s))" 1>&2 + echo "Make an issue at https://github.com/NeighTools/UnityDoorstop" 1>&2 exit 1 ;; esac @@ -190,10 +190,10 @@ case "${file_out}" in arch="x86" ;; *) - echo 1>&2 "The executable \"${executable_path}\" is not compiled for x86 or x64 (might be ARM?)" - echo 1>&2 "If you think this is a mistake (or would like to encourage support for other architectures)" - echo 1>&2 "Please make an issue at https://github.com/NeighTools/UnityDoorstop" - echo 1>&2 "Got: ${file_out}" + echo "The executable \"${executable_path}\" is not compiled for x86 or x64 (might be ARM?)" 1>&2 + echo "If you think this is a mistake (or would like to encourage support for other architectures)" 1>&2 + echo "Please make an issue at https://github.com/NeighTools/UnityDoorstop" 1>&2 + echo "Got: ${file_out}" 1>&2 exit 1 ;; esac