#!/bin/sh -euf
#
# A wrapper script for Blender
#

# In case user's home directory doesn't contain ~/.blender, symlink it
# from /usr/lib/blender

BF_HOME="$HOME/.blender2.49"
BF_LIBS='@LIBDIR@/blender2.49'
BF_DATA='/usr/share/blender2.49'

BF_HOMEDIRS='plugins/sequence plugins/texture scripts'

bf_update_symlink() {
	[ $# -ne 2 ] && return 1

	# symlink is existing already
	if [ -h "$2" ] ; then

		# broken symlink: remove
		[ -r "$2" ] || rm -f "$2"

		# does not point to proper target: remove
		[ "$(readlink $2)" != "$1" ] && rm -f "$2"
	fi

	# create symlink
	[ ! -e "$2" ] && [ -e "$1" ] && ln -s "$1" "$2"

	return 0
}

bf_rm_broken_links() {
	[ $# -ne 1 ] && return 1
	for slnk in $(find $1 -mindepth 1 -maxdepth 1 -type l) ; do
		[ -r $slnk ] || rm -f $slnk
	done
	return 0
}

# calculate the reference checksum
CHECK_DIRS=
for i in $BF_HOMEDIRS ; do
	CHECK_DIRS="$CHECK_DIRS $BF_LIBS/$i"
done
CHECK_DIRS="$CHECK_DIRS $BF_DATA"
ref=$(find $CHECK_DIRS -mindepth 1 -maxdepth 1 -type f -printf '%p%s%T@\n'| sort)
sum=$(echo -n "$ref" | md5sum)

if [ ! -r "$BF_HOME/checksum" ] || [ -n "$(echo -n $sum | cmp $BF_HOME/checksum -)" ] ; then
	echo Creating/updating homedir symlinks, removing menu cache

	# create directories tree
	for i in $BF_HOMEDIRS ; do
		[ -d "$BF_HOME/$i" ] || install -d "$BF_HOME/$i"
	done

	# remove blender's menu cache, should be recreated by blender
	[ -r "$BF_HOME/Bpymenus" ] && rm -f "$BF_HOME/Bpymenus"

	# symlinks to font and languages list
	bf_update_symlink $BF_DATA/.Blanguages $BF_HOME/.Blanguages
	bf_update_symlink $BF_DATA/.bfont.ttf $BF_HOME/.bfont.ttf

	# symlinks to plugins and scripts
	for i in $BF_HOMEDIRS ; do

		# remove broken links (scripts or plugins was uninstalled)
		bf_rm_broken_links "$BF_HOME/$i"

		for j in $(find "$BF_LIBS/$i" -mindepth 1 -maxdepth 1 -type f -printf '%f\n');
		do
			bf_update_symlink "$BF_LIBS/$i/$j" "$BF_HOME/$i/$j"
		done
	done

	# symlink to libdir/blender/scripts/bpymodules
	bf_update_symlink "$BF_LIBS/scripts/bpymodules" "$BF_HOME/scripts/bpymodules"

	# copy libdir/blender/scripts/bpydata, should be used for scripts configuration data
	[ -e "$BF_HOME/scripts/bpydata" ] || cp -ax "$BF_LIBS/scripts/bpydata" "$BF_HOME/scripts/bpydata"

	# store reference checksum
	echo -n $sum > "$BF_HOME/checksum"
fi

# deal with TEMP environment variable, used in blender
TEMP=${TMP:=/tmp}
export TEMP

# run blender
echo Running Blender
/usr/bin/blender-bin2.49 $@

