#!/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/.blender" BF_LIBS='@LIBDIR@/blender' BF_DATA='/usr/share/blender' 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-bin $@