diff --git a/package/linux/dfhack b/package/linux/dfhack index d5d221879..46d32f529 100755 --- a/package/linux/dfhack +++ b/package/linux/dfhack @@ -4,28 +4,53 @@ # changed to properly set LD_PRELOAD so as to run DFHACK. # # You can run DF under gdb by passing -g or --gdb as the first argument. +# +# If the file ".dfhackrc" exists in the DF directory or your home directory +# it will be sourced by this script, to let you set environmental variables. +# If it exists in both places it will first source the one in your home +# directory, then the on in the game directory. +# +# Shell variables .dfhackrc can set to affect this script: +# DF_GDB_OPTS: Options to pass to gdb, if it's being run +# DF_VALGRIND_OPTS: Options to pass to valgrind, if it's being run +# DF_HELGRIND_OPTS: Options to pass to helgrind, if it's being run +# DF_RESET_OPTS: Options to pass the reset command at the end of +# this script +# DF_POST_CMD: Shell command to be run at very end of script DF_DIR=$(dirname "$0") cd "${DF_DIR}" export SDL_DISABLE_LOCK_KEYS=1 # Work around for bug in Debian/Ubuntu SDL patch. #export SDL_VIDEO_CENTERED=1 # Centre the screen. Messes up resizing. +# User config files +RC=".dfhackrc" + +if [ -r "$HOME/$RC" ]; then + . $HOME/$RC +fi +if [ -r "./$RC" ]; then + . "./$RC" +fi + +# Now run + case "$1" in -g | --gdb) shift echo "set environment LD_PRELOAD=./libdfhack.so" > gdbcmd.tmp - gdb -x gdbcmd.tmp ./libs/Dwarf_Fortress $* + gdb $DF_GDB_OPTS -x gdbcmd.tmp ./libs/Dwarf_Fortress $* rm gdbcmd.tmp ret=$? ;; -h | --helgrind) shift - LD_PRELOAD=./libdfhack.so valgrind --tool=helgrind --log-file=helgrind.log ./libs/Dwarf_Fortress $* + LD_PRELOAD=./libdfhack.so valgrind $DF_HELGRIND_OPTS --tool=helgrind --log-file=helgrind.log ./libs/Dwarf_Fortress $* ret=$? ;; -v | --valgrind) shift - LD_PRELOAD=./libdfhack.so valgrind --log-file=valgrind.log ./libs/Dwarf_Fortress $* + LD_PRELOAD=./libdfhack.so valgrind $DF_VALGRIND_OPTS --log-file=valgrind.log ./libs/Dwarf_Fortress $* ret=$? ;; *) @@ -35,6 +60,10 @@ case "$1" in esac # Reset terminal to sane state in case of a crash -reset +reset $DF_RESET_OPTS + +if [ -n "$DF_POST_CMD" ]; then + eval $DF_POST_CMD +fi exit $ret