aboutsummaryrefslogtreecommitdiff
path: root/launcher/package/linux
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/package/linux')
-rwxr-xr-xlauncher/package/linux/MultiMC93
-rwxr-xr-xlauncher/package/linux/multimc.desktop11
2 files changed, 104 insertions, 0 deletions
diff --git a/launcher/package/linux/MultiMC b/launcher/package/linux/MultiMC
new file mode 100755
index 00000000..da6373bc
--- /dev/null
+++ b/launcher/package/linux/MultiMC
@@ -0,0 +1,93 @@
+#!/bin/bash
+# Basic start script for running MultiMC with the libs packaged with it.
+
+function printerror {
+ printf "$1"
+ if which zenity >/dev/null; then zenity --error --text="$1" &>/dev/null;
+ elif which kdialog >/dev/null; then kdialog --error "$1" &>/dev/null;
+ fi
+}
+
+if [[ $EUID -eq 0 ]]; then
+ printerror "This program should not be run using sudo or as the root user!\n"
+ exit 1
+fi
+
+
+MMC_DIR="$(dirname "$(readlink -f "$0")")"
+echo "MultiMC Dir: ${MMC_DIR}"
+
+# Set up env - filter out input LD_ variables but pass them in under different names
+export GAME_LIBRARY_PATH=${GAME_LIBRARY_PATH-${LD_LIBRARY_PATH}}
+export GAME_PRELOAD=${GAME_PRELOAD-${LD_PRELOAD}}
+export LD_LIBRARY_PATH="${MMC_DIR}/bin":$MMC_LIBRARY_PATH
+export LD_PRELOAD=$MMC_PRELOAD
+export QT_PLUGIN_PATH="${MMC_DIR}/plugins"
+export QT_FONTPATH="${MMC_DIR}/fonts"
+
+# Detect missing dependencies...
+DEPS_LIST=`ldd "${MMC_DIR}"/plugins/*/*.so 2>/dev/null | grep "not found" | sort -u | awk -vORS=", " '{ print $1 }'`
+if [ "x$DEPS_LIST" = "x" ]; then
+ # We have all our dependencies. Run MultiMC.
+ echo "No missing dependencies found."
+
+ # Just to be sure...
+ chmod +x "${MMC_DIR}/bin/MultiMC"
+
+ # Run MultiMC
+ "${MMC_DIR}/bin/MultiMC" -d "${MMC_DIR}" "$@"
+
+ # Run MultiMC in valgrind
+ # valgrind --log-file="valgrind.log" --leak-check=full --track-origins=yes "${MMC_DIR}/bin/MultiMC" -d "${MMC_DIR}" "$@"
+
+ # Run MultiMC with callgrind, delay instrumentation
+ # valgrind --log-file="valgrind.log" --tool=callgrind --instr-atstart=no "${MMC_DIR}/bin/MultiMC" -d "${MMC_DIR}" "$@"
+ # use callgrind_control -i on/off to profile actions
+
+ # Exit with MultiMC's exit code.
+ exit $?
+else
+ # apt
+ if which apt-file &>/dev/null; then
+ LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
+ COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do apt-file -l search $LIBRARY; done`
+ COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
+ INSTALL_CMD="sudo apt-get install $COMMAND_LIBS"
+ # pacman
+ elif which pkgfile &>/dev/null; then
+ LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
+ COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do pkgfile $LIBRARY; done`
+ COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
+ INSTALL_CMD="sudo pacman -S $COMMAND_LIBS"
+ # dnf
+ elif which dnf &>/dev/null; then
+ LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
+ COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do dnf whatprovides -q $LIBRARY; done`
+ COMMAND_LIBS=`echo "$COMMAND_LIBS" | grep -v 'Repo' | sort -u | awk -vORS=" " '{ print $1 }'`
+ INSTALL_CMD="sudo dnf install $COMMAND_LIBS"
+ # yum
+ elif which yum &>/dev/null; then
+ LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
+ COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do yum whatprovides $LIBRARY; done`
+ COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
+ INSTALL_CMD="sudo yum install $COMMAND_LIBS"
+ # zypper
+ elif which zypper &>/dev/null; then
+ LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
+ COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do zypper wp $LIBRARY; done`
+ COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
+ INSTALL_CMD="sudo zypper install $COMMAND_LIBS"
+ # emerge
+ elif which pfl &>/dev/null; then
+ LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
+ COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do pfl $LIBRARY; done`
+ COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
+ INSTALL_CMD="sudo emerge $COMMAND_LIBS"
+ fi
+
+ MESSAGE="Error: MultiMC is missing the following libraries that it needs to work correctly:\n\t${DEPS_LIST}\nPlease install them from your distribution's package manager."
+ MESSAGE="$MESSAGE\n\nHint (please apply common sense): $INSTALL_CMD\n"
+
+ printerror "$MESSAGE"
+ exit 1
+fi
diff --git a/launcher/package/linux/multimc.desktop b/launcher/package/linux/multimc.desktop
new file mode 100755
index 00000000..c25be047
--- /dev/null
+++ b/launcher/package/linux/multimc.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Version=1.0
+Name=MultiMC
+GenericName=Minecraft Launcher
+Comment=Free, open source launcher and instance manager for Minecraft.
+Type=Application
+Terminal=false
+Exec=multimc
+Icon=multimc
+Categories=Game
+Keywords=game;minecraft;