51 lines
2.0 KiB
Bash
Executable File
51 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
BF_DIST_BIN=$(dirname "$(readlink -f "$0")")
|
|
BF_PROGRAM="blender"
|
|
|
|
# Attempt to preload system TBB library if it is newer than the one we bundled.
|
|
# This solves problems with the Intel ray-tracing library using this newer TBB
|
|
# while Blender is already using an older one.
|
|
|
|
# Library name with major version that we needed.
|
|
BF_TBB_LIB_NAME=$(readlink ${BF_DIST_BIN}/lib/libtbb.so)
|
|
|
|
if [ -n "$BF_TBB_LIB_NAME" ]; then
|
|
BF_TBB_LIB_NAME=$(basename $BF_TBB_LIB_NAME)
|
|
# Get absolute path from LD_DEBUG output trying to preload this library.
|
|
# We have not found a better alternative that takes into account LD_LIBRARY_PATH.
|
|
BF_TBB_LD_OUTPUT=$(LD_DEBUG=versions LD_PRELOAD="$BF_TBB_LIB_NAME" /bin/true 2>&1 >/dev/null)
|
|
BF_TBB_LIB_PATH=$(echo "$BF_TBB_LD_OUTPUT" |
|
|
grep "calling init:" |
|
|
grep "$BF_TBB_LIB_NAME" |
|
|
(sed -n "s/.*calling init: \([^[:space:]]\+\).*\/$BF_TBB_LIB_NAME$/\1/p" 2>/dev/null))
|
|
fi
|
|
|
|
if [ -n "$BF_TBB_LIB_PATH" ]; then
|
|
# If the library exists, compare its version to the one we bundle.
|
|
BF_TBB_SYSTEM_NAME=$(readlink $BF_TBB_LIB_PATH/$BF_TBB_LIB_NAME)
|
|
BF_TBB_BUNDLED_NAME=$(readlink $BF_DIST_BIN/lib/$BF_TBB_LIB_NAME)
|
|
if [ -n "$BF_TBB_SYSTEM_NAME" ] && [ -n "$BF_TBB_BUNDLED_NAME" ]; then
|
|
BF_TBB_SYSTEM_NAME=$(basename $BF_TBB_SYSTEM_NAME)
|
|
BF_TBB_BUNDLED_NAME=$(basename $BF_TBB_BUNDLED_NAME)
|
|
BF_TBB_NEWEST_NAME=$(printf "%s\n%s\n" "$BF_TBB_SYSTEM_NAME" "$BF_TBB_BUNDLED_NAME" |
|
|
(sort -V 2>/dev/null) |
|
|
(tail -n 1 2>/dev/null))
|
|
# If the system TBB version is newer, preload it.
|
|
if [ "$BF_TBB_SYSTEM_NAME" = "$BF_TBB_NEWEST_NAME" ]; then
|
|
BLENDER_RESTORE_LD_PRELOAD=${LD_PRELOAD}
|
|
LD_PRELOAD=$BF_TBB_LIB_PATH/$BF_TBB_LIB_NAME:${LD_PRELOAD}
|
|
export BLENDER_RESTORE_LD_PRELOAD
|
|
export LD_PRELOAD
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Add own lib folder first, because Steam or other environments may set an
|
|
# $LD_LIBRARY_PATH that has priority over the run-path in the Blender executable,
|
|
# but contains incompatible libraries.
|
|
LD_LIBRARY_PATH=${BF_DIST_BIN}/lib:${LD_LIBRARY_PATH}
|
|
|
|
export LD_LIBRARY_PATH
|
|
|
|
exec "$BF_DIST_BIN/$BF_PROGRAM" "$@"
|