summaryrefslogtreecommitdiff
path: root/src/SMAPI.Installer
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-08-17 20:11:30 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-11-28 00:01:44 -0500
commit7c5c63d6846d93f772dfda37f394b5f501f49f25 (patch)
tree186cc8ad0cf19a0b3b7653b1caf70f89e38a9472 /src/SMAPI.Installer
parentf6479ea2b61ebcc4eda434d7d5cb664534a99801 (diff)
downloadSMAPI-7c5c63d6846d93f772dfda37f394b5f501f49f25.tar.gz
SMAPI-7c5c63d6846d93f772dfda37f394b5f501f49f25.tar.bz2
SMAPI-7c5c63d6846d93f772dfda37f394b5f501f49f25.zip
fix SMAPI not working on macOS, improve installer validation
Diffstat (limited to 'src/SMAPI.Installer')
-rw-r--r--src/SMAPI.Installer/assets/unix-install.sh10
-rw-r--r--src/SMAPI.Installer/assets/unix-launcher.sh36
-rw-r--r--src/SMAPI.Installer/assets/windows-install.bat29
3 files changed, 65 insertions, 10 deletions
diff --git a/src/SMAPI.Installer/assets/unix-install.sh b/src/SMAPI.Installer/assets/unix-install.sh
index f5de7b16..07df4e6c 100644
--- a/src/SMAPI.Installer/assets/unix-install.sh
+++ b/src/SMAPI.Installer/assets/unix-install.sh
@@ -3,8 +3,12 @@
# Move to script's directory
cd "`dirname "$0"`"
-# if $TERM is not set to xterm, mono will bail out when attempting to write to the console.
-export TERM=xterm
+# make sure .NET 5 is installed
+if ! command -v dotnet >/dev/null 2>&1; then
+ echo "Oops! You must have .NET 5 installed to use SMAPI: https://dotnet.microsoft.com/download";
+ read
+ exit 1
+fi
# run installer
-./internal/unix/install
+dotnet internal/unix/SMAPI.Installer.dll
diff --git a/src/SMAPI.Installer/assets/unix-launcher.sh b/src/SMAPI.Installer/assets/unix-launcher.sh
index 21bed803..0e700b61 100644
--- a/src/SMAPI.Installer/assets/unix-launcher.sh
+++ b/src/SMAPI.Installer/assets/unix-launcher.sh
@@ -10,7 +10,15 @@ if [ ! -f "Stardew Valley.dll" ]; then
exit 1
fi
+# make sure .NET 5 is installed
+if ! command -v dotnet >/dev/null 2>&1; then
+ echo "Oops! You must have .NET 5 installed to use SMAPI: https://dotnet.microsoft.com/download";
+ read
+ exit 1
+fi
+
# macOS
+UNAME=$(uname)
if [ "$UNAME" == "Darwin" ]; then
# fix "DllNotFoundException: libgdiplus.dylib" errors when loading images in SMAPI
if [ -f libgdiplus.dylib ]; then
@@ -20,8 +28,32 @@ if [ "$UNAME" == "Darwin" ]; then
ln -s /Library/Frameworks/Mono.framework/Versions/Current/lib/libgdiplus.dylib libgdiplus.dylib
fi
- # launch smapi
- open -a Terminal ./StardewModdingAPI "$@"
+ # Make sure we're running in Terminal (so the user can see errors/warnings/update alerts).
+ if [ ! -t 1 ]; then # https://stackoverflow.com/q/911168/262123
+ # sanity check to make sure we don't have an infinite loop of opening windows
+ SKIP_TERMINAL=false
+ for argument in "$@"; do
+ if [ "$argument" == "--no-reopen-terminal" ]; then
+ SKIP_TERMINAL=true
+ break
+ fi
+ done
+
+ # reopen in Terminal if needed
+ # https://stackoverflow.com/a/29511052/262123
+ if [ "$SKIP_TERMINAL" == "false" ]; then
+ echo "Reopening in the Terminal app..."
+ echo "\"$0\" $@ --no-reopen-terminal" > /tmp/open-smapi-terminal.sh
+ chmod +x /tmp/open-smapi-terminal.sh
+ cat /tmp/open-smapi-terminal.sh
+ open -W -a Terminal /tmp/open-smapi-terminal.sh
+ rm /tmp/open-smapi-terminal.sh
+ exit 0
+ fi
+ fi
+
+ # launch SMAPI
+ dotnet StardewModdingAPI.dll "$@"
# Linux
else
diff --git a/src/SMAPI.Installer/assets/windows-install.bat b/src/SMAPI.Installer/assets/windows-install.bat
index 3ca13528..8623f321 100644
--- a/src/SMAPI.Installer/assets/windows-install.bat
+++ b/src/SMAPI.Installer/assets/windows-install.bat
@@ -1,8 +1,27 @@
@echo off
+
+REM make sure we're not running within a zip folder
echo "%~dp0" | findstr /C:"%TEMP%" 1>nul
-if not errorlevel 1 (
- echo Oops! It looks like you're running the installer from inside a zip file. Make sure you unzip the download first.
- pause
-) else (
- start /WAIT /B internal\windows\install.exe
+if %ERRORLEVEL% EQU 0 (
+ echo "Oops! It looks like you're running the installer from inside a zip file. Make sure you unzip the download first."
+ pause
+ exit
)
+
+REM make sure .NET 5 is installed
+WHERE dotnet /q
+if %ERRORLEVEL% NEQ 0 (
+ echo "Oops! You must have .NET 5 (desktop x64) installed to use SMAPI: https://dotnet.microsoft.com/download/dotnet/5.0/runtime"
+ pause
+ exit
+)
+
+REM make sure an antivirus hasn't deleted the installer DLL
+if not exist internal\windows\SMAPI.Installer.dll (
+ echo "Oops! SMAPI can't find its 'internal\windows\SMAPI.Installer.dll' file. Your antivirus might have deleted the file."
+ pause
+ exit
+)
+
+REM start installer
+dotnet internal\windows\SMAPI.Installer.dll