You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
4.9 KiB
197 lines
4.9 KiB
#!/bin/sh
|
|
usage(){
|
|
>&2 cat<<END
|
|
|
|
|
|
lmk-run
|
|
-------
|
|
This script is part of <https://github.com/poikilos/EnlivenMinetest>.
|
|
|
|
Does all of the following
|
|
- Gets and unzips linux-minetest-kit.zip if possible if there is no
|
|
linux-minetest-kit in the current working directory.
|
|
- Compile libraries if there is no linux-minetest-kit/toolstree.
|
|
- Compile minetest if there is no exe matching the specified options.
|
|
|
|
Suggested setup for a user in the sudo group:
|
|
'''
|
|
chgrp sudo /opt
|
|
# continue to Further setup
|
|
'''
|
|
|
|
Suggested setup for minebest user:
|
|
'''
|
|
chgrp minebest /opt
|
|
# continue to Further setup
|
|
'''
|
|
|
|
Further setup:
|
|
'''
|
|
chmod g+w /opt
|
|
cd /opt
|
|
ln -s ~/git/EnlivenMinetest/utilities/lmk-run
|
|
ln -s ~/git/EnlivenMinetest/utilities/get-lmk.sh
|
|
ln -s ~/git/EnlivenMinetest/utilities/fix-lmk-permissions.sh
|
|
'''
|
|
|
|
Examples:
|
|
lmk-run classic client ~/minetest/worlds/center
|
|
# ^ creates classic client and opens the world ~/minetest/worlds/center
|
|
# - requires that the game is in linux-minetest-kit/minetest/games
|
|
# that has the gameid matching the one in the world (same goes for
|
|
# any of the automatically checked world paths).
|
|
|
|
lmk-run classic server
|
|
# ^ creates minetestserver
|
|
|
|
lmk-run finetest server
|
|
# ^ creates finetestserver
|
|
|
|
lmk-run trolltest server
|
|
# ^ creates trolltestserver
|
|
|
|
lmk-run classic client
|
|
# ^ creates minetest
|
|
|
|
lmk-run finetest client
|
|
# ^ creates finetest
|
|
|
|
lmk-run trolltest client
|
|
# ^ creates trolltest
|
|
|
|
|
|
|
|
END
|
|
}
|
|
if [ "x$1" = "x--help" ]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
PREV_DIR="`pwd`"
|
|
if [ "x$1" != "x" ]; then
|
|
LMK_MODE="$1"
|
|
fi
|
|
if [ "x$LMK_MODE" = "x" ]; then
|
|
usage
|
|
>&2 echo "[lmk-run] Error: (or LMK_MODE in environment). It should be classic, finetest, or trolltest."
|
|
exit 1
|
|
fi
|
|
_RAW_APP="$APP"
|
|
EXE_NAME=
|
|
|
|
if [ "x$LMK_MODE" = "xclassic" ]; then
|
|
EXE_NAME="minetest"
|
|
elif [ "x$LMK_MODE" = "xfinetest" ]; then
|
|
EXE_NAME="finetest"
|
|
elif [ "x$LMK_MODE" = "xtrolltest" ]; then
|
|
EXE_NAME="trolltest"
|
|
fi
|
|
|
|
if [ "x$2" != "x" ]; then
|
|
APP="$2"
|
|
echo "[lmk-run] set APP to $2"
|
|
fi
|
|
|
|
APP_ARG=
|
|
if [ "x$APP" = "xclient" ]; then
|
|
APP_ARG="--client"
|
|
elif [ "x$APP" = "xserver" ]; then
|
|
APP_ARG="--server"
|
|
EXE_NAME="${EXE_NAME}server"
|
|
else
|
|
usage
|
|
echo "[lmk-run] Error: You must specify client or server after mode (APP=$APP, \$2=$2)."
|
|
exit 1
|
|
fi
|
|
|
|
echo "[lmk-run] building $EXE_NAME, or running if already exists"
|
|
if [ "x$APP" = "x" ]; then
|
|
usage
|
|
>&2 echo "[lmk-run] Error: specify client or server after the mode."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
|
|
if [ ! -d "linux-minetest-kit" ]; then
|
|
echo "[lmk-run] Running ./get-lmk.sh since there is no linux-minetest-kit directory in `pwd`..."
|
|
./get-lmk.sh
|
|
code=$?
|
|
exit $code
|
|
fi
|
|
cd linux-minetest-kit
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "[lmk-run] Error: cd linux-minetest-kit failed in `pwd`. Try running: ./get-lmk.sh"
|
|
exit 1
|
|
fi
|
|
if [ ! -f "mtcompile-program.pl" ]; then
|
|
>&2 echo "[lmk-run] Error: missing mtcompile-program.pl in `pwd`"
|
|
exit 1
|
|
fi
|
|
$PRE_CMD="sudo -u minebest"
|
|
$PRE_CMD ls > /dev/null
|
|
if [ $? -ne 0 ]; then
|
|
PRE_CMD=""
|
|
>&2 echo "[lmk-run] Warning: running as $USER since 'sudo -u minebest' failed."
|
|
fi
|
|
if [ ! -d toolstree ]; then
|
|
$PRE_CMD bash -e mtcompile-libraries.sh build
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "[lmk-run] Error: '$PRE_CMD bash -e mtcompile-libraries.sh' failed in `pwd`."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "[lmk-run] using existing toolstree in `pwd`"
|
|
fi
|
|
|
|
if [ ! -f minetest/bin/$EXE_NAME ]; then
|
|
echo "[lmk-run] compiling..."
|
|
$PRE_CMD perl mtcompile-program.pl build --$LMK_MODE $APP_ARG
|
|
code=$?
|
|
if [ $code -ne 0 ]; then
|
|
>&2 echo "[lmk-run] Error: '$PRE_CMD perl mtcompile-program.pl build --$LMK_MODE $APP_ARG' failed in `pwd` with code $code."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "[lmk-run] using existing `pwd`/minetest/bin/$EXE_NAME"
|
|
fi
|
|
cd minetest/bin
|
|
if [ $? -ne 0 ]; then
|
|
PRE_CMD=""
|
|
>&2 echo "[lmk-run] 'cd minebest/bin' failed in `pwd`."
|
|
fi
|
|
#if "x$APP" = "xserver" ]; then
|
|
echo "* Looking for a test world to copy..."
|
|
if [ "x$SRC_WORLD" = "x" ]; then
|
|
SRC_WORLD="$3"
|
|
else
|
|
SRC_WORLD=
|
|
fi
|
|
if [ "x$SRC_WORLD" = "x" ]; then
|
|
for dir in ~/minetest-220509/worlds/bg190406 /home/owner/bg190406
|
|
do
|
|
printf "* checking for \"$dir\"..."
|
|
if [ -d $dir ]; then
|
|
SRC_WORLD="$dir"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if [ "x$SRC_WORLD" = "x" ]; then
|
|
echo "No known test world was found. Try making a small world first, and specify it as the 3rd parameter or set SRC_WORLD in the environment. Note that the gameid in the file must exist."
|
|
exit 1
|
|
else
|
|
echo "[lmk-run] found $SRC_WORLD to copy"
|
|
fi
|
|
world_name="`basename $SRC_WORLD`"
|
|
mkdir -p ~/tmp
|
|
dst_world="$HOME/tmp/${world_name}-$EXE_NAME"
|
|
echo "[lmk-run] syncing to $dst_world destructively..."
|
|
rsync -rt --erase $SRC_WORLD/ $dst_world
|
|
if [ $? -ne 0 ]; then
|
|
>&2 echo "[lmk-run] 'rsync -rt --erase $SRC_WORLD/ $dst_world' failed in `pwd`."
|
|
fi
|
|
echo "[lmk-run] running $EXE_NAME --world $dst_world"
|
|
./$EXE_NAME --world $dst_world
|
|
#else
|
|
#fi
|
|
|