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.
		
		
		
		
		
			
		
			
				
					
					
						
							333 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							333 lines
						
					
					
						
							10 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.
							 | 
						|
								
							 | 
						|
								This script 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). However, trying to
							 | 
						|
								download bucket_game will occur automatically.
							 | 
						|
								
							 | 
						|
								Available games in linux-minetest-kit/minetest/games:
							 | 
						|
								`ls linux-minetest-kit/minetest/games`
							 | 
						|
								(end of list)
							 | 
						|
								
							 | 
						|
								Available worlds in linux-minetest-kit/minetest/worlds:
							 | 
						|
								`ls linux-minetest-kit/minetest/worlds`
							 | 
						|
								(end of list)
							 | 
						|
								
							 | 
						|
								These lists may change if the script proceeds further if an error has occurred.
							 | 
						|
								
							 | 
						|
								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
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								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=
							 | 
						|
								
							 | 
						|
								OTHER_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"
							 | 
						|
								    OTHER_EXE_NAME="${EXE_NAME}server"
							 | 
						|
								elif [ "x$APP" = "xserver" ]; then
							 | 
						|
								    APP_ARG="--server"
							 | 
						|
								    OTHER_EXE_NAME="$EXE_NAME"
							 | 
						|
								    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=$?
							 | 
						|
								    if [ $code -ne 0 ]; then
							 | 
						|
								        echo "[lmk-run] ./get-lmk.sh failed with code $code"
							 | 
						|
								        exit $code
							 | 
						|
								    fi
							 | 
						|
								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
							 | 
						|
								LMK_DIR=`pwd`
							 | 
						|
								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
							 | 
						|
								    if [ -d minetest ]; then
							 | 
						|
								        OLD_MODE=
							 | 
						|
								        OLD_EXE_NAME=
							 | 
						|
								        if [ -f minetest/bin/finetestserver ]; then
							 | 
						|
								            OLD_MODE=finetest
							 | 
						|
								            OLD_EXE_NAME=finetestserver
							 | 
						|
								        elif [ -f minetest/bin/finetest ]; then
							 | 
						|
								            OLD_MODE=finetest
							 | 
						|
								            OLD_EXE_NAME=finetest
							 | 
						|
								        elif [ -f minetest/bin/minetestserver ]; then
							 | 
						|
								            OLD_MODE=minetest
							 | 
						|
								            OLD_EXE_NAME=minetestserver
							 | 
						|
								        elif [ -f minetest/bin/minetest ]; then
							 | 
						|
								            OLD_MODE=minetest
							 | 
						|
								            OLD_EXE_NAME=minetest
							 | 
						|
								        elif [ -f minetest/bin/trolltestserver ]; then
							 | 
						|
								            OLD_MODE=trolltest
							 | 
						|
								            OLD_EXE_NAME=trolltestserver
							 | 
						|
								        elif [ -f minetest/bin/trolltest ]; then
							 | 
						|
								            OLD_MODE=trolltest
							 | 
						|
								            OLD_EXE_NAME=trolltest
							 | 
						|
								        else
							 | 
						|
								            >&2 echo "[lmk-run] Error: mode couldn't be detected for the old minetest directory, so it will become minetest-. Its bin dir contains: `ls minetest/bin` one of the following was expected: minetest minetestserver finetest finetestserver trolltest trolltestserver"
							 | 
						|
								        fi
							 | 
						|
								        if [ ! -d minetest-$OLD_EXE_NAME ]; then
							 | 
						|
								            mv minetest minetest-$OLD_EXE_NAME
							 | 
						|
								        else
							 | 
						|
								            if [ ! -d minetest-$EXE_NAME/games/bucket_game ]; then
							 | 
						|
								                if [ -d minetest/games/bucket_game ]; then
							 | 
						|
								                    mkdir -p minetest-$EXE_NAME/games/
							 | 
						|
								                    echo "[lmk-run] mv minetest/games/bucket_game minetest-$EXE_NAME/games/"
							 | 
						|
								                    mv minetest/games/bucket_game minetest-$EXE_NAME/games/
							 | 
						|
								                else
							 | 
						|
								                    echo "[lmk-run] There is no minetest/games/bucket_game to back up."
							 | 
						|
								                fi
							 | 
						|
								            else
							 | 
						|
								                echo "[lmk-run] There is already a backup minetest-$EXE_NAME/games/bucket_game"
							 | 
						|
								            fi
							 | 
						|
								            echo "[lmk-run] removing `pwd`/minetest!"
							 | 
						|
								            rm -rf minetest
							 | 
						|
								        fi
							 | 
						|
								    fi
							 | 
						|
								    if [ -f minetest-$EXE_NAME/bin/$EXE_NAME ]; then
							 | 
						|
								        echo "[lmk-run] reusing minetest-$EXE_NAME..."
							 | 
						|
								        mv minetest-$EXE_NAME minetest
							 | 
						|
								    else
							 | 
						|
								        echo "[lmk-run] there is no file minetest-$EXE_NAME/bin/$EXE_NAME so compiling to minetest/bin..."
							 | 
						|
								        $PRE_CMD perl mtcompile-program.pl build --$LMK_MODE $APP_ARG --safe
							 | 
						|
								        # if [ -f "minetest-$EXE_NAME/bin/$OTHER_EXE_NAME" ]; then
							 | 
						|
								        #     echo "[lmk-run] mv minetest-$EXE_NAME/bin/$OTHER_EXE_NAME minetest/bin/"
							 | 
						|
								        #     mv "minetest-$EXE_NAME/bin/$OTHER_EXE_NAME" "minetest/bin/"
							 | 
						|
								        # fi
							 | 
						|
								    fi
							 | 
						|
								    if [ ! -d minetest/games/bucket_game ]; then
							 | 
						|
								        if [ -d minetest-$EXE_NAME/games/bucket_game ]; then
							 | 
						|
								            mkdir -p minetest/games/
							 | 
						|
								            echo "[lmk-run] rsync -rt minetest-$EXE_NAME/games/bucket_game/ minetest/games/bucket_game"
							 | 
						|
								            rsync -rt minetest-$EXE_NAME/games/bucket_game/ minetest/games/bucket_game
							 | 
						|
								            if [ $? -ne 0 ]; then
							 | 
						|
								                exit 1
							 | 
						|
								            fi
							 | 
						|
								        fi
							 | 
						|
								    fi
							 | 
						|
								    # --safe: Don't delete existing source trees automatically.
							 | 
						|
								    # --noclean: If --noclean is specified,  this script tries to reuse
							 | 
						|
								    #     the existing source tree,  if there is one,  and doesn't
							 | 
						|
								    #     deleted "build" files afterward. The "--git*" and "--debug"
							 | 
						|
								    #     switches  imply this switch. Aliases: --notidy
							 | 
						|
								
							 | 
						|
								    code=$?
							 | 
						|
								    if [ $code -ne 0 ]; then
							 | 
						|
								        extra_msg=""
							 | 
						|
								        if [ -f "minetest/bin/$EXE_NAME" ]; then
							 | 
						|
								            extra_msg=", but minetest/bin/$EXE_NAME exists, so you can probably run lmk-run again and it will probably run (after syncing to the tmp world as usual)."
							 | 
						|
								        fi
							 | 
						|
								        >&2 echo "[lmk-run] Error: '$PRE_CMD perl mtcompile-program.pl build --$LMK_MODE $APP_ARG --safe' failed in `pwd` with code $code"
							 | 
						|
								        exit 1
							 | 
						|
								    fi
							 | 
						|
								else
							 | 
						|
								    echo "[lmk-run] using existing `pwd`/minetest/bin/$EXE_NAME"
							 | 
						|
								fi
							 | 
						|
								LMK_DIR="`pwd`"
							 | 
						|
								
							 | 
						|
								#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
							 | 
						|
								    usage
							 | 
						|
								    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"
							 | 
						|
								dst_world="$LMK_DIR/minetest/worlds/${world_name}-$EXE_NAME"
							 | 
						|
								echo "[lmk-run] syncing to $dst_world destructively..."
							 | 
						|
								rsync -rt --delete $SRC_WORLD/ $dst_world
							 | 
						|
								if [ ! -d "$LMK_DIR/minetest/games/bucket_game" ]; then
							 | 
						|
								    if [ -d "$LMK_DIR/minetest-$EXE_NAME/games/bucket_game" ]; then
							 | 
						|
								        mkdir -p $LMK_DIR/minetest/games/
							 | 
						|
								        # echo "[lmk-run] rsync -rt $LMK_DIR/minetest-$EXE_NAME/games/bucket_game/ minetest/games/bucket_game"
							 | 
						|
								        echo "[lmk-run] mv $LMK_DIR/minetest-$EXE_NAME/games/bucket_game $LMK_DIR/minetest/games/"
							 | 
						|
								        mv $LMK_DIR/minetest-$EXE_NAME/games/bucket_game $LMK_DIR/minetest/games/
							 | 
						|
								        if [ $? -ne 0 ]; then
							 | 
						|
								            exit 1
							 | 
						|
								        fi
							 | 
						|
								    else
							 | 
						|
								        echo "[lmk-run] Downloading bucket_game as linux-minetest-kit/minetest/games/bucket_game"
							 | 
						|
								        cd "$LMK_DIR"
							 | 
						|
								        cd minetest/games
							 | 
						|
								        if [ $? -ne 0 ]; then
							 | 
						|
								            >&2 echo "[lmk-run] 'cd minetest/games' failed in `pwd`."
							 | 
						|
								            exit 1
							 | 
						|
								        fi
							 | 
						|
								        rsync -rt mtio:/opt/minebest/assemble/prod/bucket_game.zip .
							 | 
						|
								        if [ $? -ne 0 ]; then
							 | 
						|
								            >&2 echo "[lmk-run] 'rsync -rt mtio:/opt/minebest/assemble/prod/bucket_game.zip .' failed in `pwd`."
							 | 
						|
								            # TODO: try wget
							 | 
						|
								            exit 1
							 | 
						|
								        fi
							 | 
						|
								        unzip bucket_game.zip
							 | 
						|
								        if [ $? -ne 0 ]; then
							 | 
						|
								            >&2 echo "[lmk-run] Error: 'unzip bucket_game.zip' failed in `pwd`"
							 | 
						|
								            exit 1
							 | 
						|
								        fi
							 | 
						|
								        if [ ! -d "bucket_game" ]; then
							 | 
						|
								            >&2 echo "[lmk-run] Error: 'unzip bucket_game.zip' didn't produce bucket_game in `pwd`"
							 | 
						|
								            exit 1
							 | 
						|
								        fi
							 | 
						|
								    fi
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								cd "$LMK_DIR"
							 | 
						|
								cd minetest/bin
							 | 
						|
								if [ $? -ne 0 ]; then
							 | 
						|
								    PRE_CMD=""
							 | 
						|
								    >&2 echo "[lmk-run] 'cd minebest/bin' failed in `pwd`."
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								if [ $? -ne 0 ]; then
							 | 
						|
								    >&2 echo "[lmk-run] 'rsync -rt --delete $SRC_WORLD/ $dst_world' failed in `pwd`."
							 | 
						|
								fi
							 | 
						|
								if [ ! -d "$dst_world" ]; then
							 | 
						|
								    >&2 echo "[lmk-run] Error: '$dst_world' doesn't exist."
							 | 
						|
								fi
							 | 
						|
								echo "[lmk-run] running $EXE_NAME --world $dst_world"
							 | 
						|
								./$EXE_NAME --world $dst_world
							 | 
						|
								#else
							 | 
						|
								#fi
							 | 
						|
								
							 |