summaryrefslogtreecommitdiffstats
path: root/application/package/linux/MultiMC
blob: 2d4be9f028232c8991d2121ab785d18ca309a8d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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