script revision b82b7a319831c374cbbee3fbe16ddf527dd9ecf7
#!/bin/bash
#
# Author: Aaron Voisine <aaron@voisine.org>
# Inkscape Modifications: Michael Wybrow <mjwybrow@users.sourceforge.net>
# Inkscape Modifications: ~suv <suv-sf@users.sourceforge.net>
if test "x$GTK_DEBUG_LAUNCHER" != x; then
set -x
fi
if test "x$GTK_DEBUG_GDB" != x; then
EXEC="gdb --args"
elif test "x$GTK_DEBUG_LLDB" != x; then
EXEC="lldb -- "
elif test "x$GTK_DEBUG_DTRUSS" != x; then
EXEC="dtruss"
else
EXEC=exec
fi
# store absolute path to current script
CWD="$(cd "$(dirname "$0")" && pwd)"
# read xdg user configuration
source "${CWD}/xdg_setup.sh"
# if this is the main script, check if this is the first run for current user
if [ $(basename "$0") == "script" ]; then
source "${CWD}/alert_fccache.sh"
fi
# set prefix for bundled libs and resources
TOP="$CWD"
# change into path prefix (top-level app dir) for osxapp-enabled binary
BASE="$(echo "$CWD" | sed -e 's/\/Contents\/Resources/\//')"
cd "$BASE"
# Brutally add many things to the PATH. If the directories do not exist, they won't be used anyway.
# the 'classic' PATH additions:
# /usr/local/bin which, though standard, doesn't seem to be in the PATH
# Fink
# MacPorts (former DarwinPorts)
# LaTeX distribution for Mac OS X
export PATH="/usr/texbin:/opt/local/bin:/sw/bin/:/usr/local/bin:$PATH"
# Put /usr/bin at beginning of path so we make sure we use Apple's python
# over one that may be installed be Macports, Fink or some other means.
export PATH="/usr/bin:$PATH"
# Put $CWD/bin at beginning of path so we make sure that recursive calls
# to inkscape don't pull in other inkscape binaries with different setup
# also allows to override system python with custom wrapper script
export PATH="$CWD/bin:$PATH"
# Set up PYTHONPATH to use python modules bundled with Inkscape
OSXMINORNO="$(/usr/bin/sw_vers -productVersion | cut -d. -f2)"
build_arch=__build_arch__
if [ $OSXMINORNO -gt "5" ]; then
if [ $OSXMINORNO -eq "6" ]; then
export VERSIONER_PYTHON_VERSION=2.6
else # if [ $OSXMINORNO -ge "7" ]; then
export VERSIONER_PYTHON_VERSION=2.7
fi
if [ $build_arch = "i386" ]; then
export VERSIONER_PYTHON_PREFER_32_BIT=yes
else # build & runtime arch x86_64
export VERSIONER_PYTHON_PREFER_32_BIT=no
fi
fi
PYTHON_VERS="$(python -V 2>&1 | cut -c 8-10)"
export PYTHONPATH="$TOP/lib/python$PYTHON_VERS/site-packages/"
# fallback for missing $INK_CACHE_DIR
if [ -z "$INK_CACHE_DIR" ]; then
INK_CACHE_DIR="${HOME}/.cache/inkscape"
mkdir -p "$INK_CACHE_DIR"
[ $_DEBUG ] && echo "INK_CACHE_DIR: falling back to $INK_CACHE_DIR"
fi
export FONTCONFIG_PATH="$TOP/etc/fonts"
export PANGO_RC_FILE="${INK_CACHE_DIR}/pangorc"
export GTK_IM_MODULE_FILE="${INK_CACHE_DIR}/immodules.cache"
export GDK_PIXBUF_MODULE_FILE="${INK_CACHE_DIR}/loaders.cache"
export GTK_DATA_PREFIX="$TOP"
export GTK_EXE_PREFIX="$TOP"
export GTK_PATH="$TOP"
export GNOME_VFS_MODULE_CONFIG_PATH="$TOP/etc/gnome-vfs-2.0/modules"
export GNOME_VFS_MODULE_PATH="$TOP/lib/gnome-vfs-2.0/modules"
export XDG_DATA_DIRS="$TOP/share"
export ASPELL_CONF="prefix $TOP;"
export POPPLER_DATADIR="$TOP/share/poppler"
# Note: This requires the path with the exact ImageMagic version number.
# Also, that ImageMagick will only work if it does not find a
# version installed into the same PREFIX as it was originally
# installed. Luckily, this is very unlikely given the extra long
# and strangely named install prefix we use.
# The actual version is inserted by the packaging script.
export MAGICK_CONFIGURE_PATH="$TOP/lib/ImageMagick-IMAGEMAGICKVER/config:$TOP/share/ImageMagick-IMAGEMAGICKVER_MAJOR/config"
export MAGICK_CODER_FILTER_PATH="$TOP/lib/ImageMagick-IMAGEMAGICKVER/modules-Q16/filters"
export MAGICK_CODER_MODULE_PATH="$TOP/lib/ImageMagick-IMAGEMAGICKVER/modules-Q16/coders"
export INKSCAPE_SHAREDIR="$TOP/share/inkscape"
export INKSCAPE_PLUGINDIR="$TOP/lib/inkscape"
export INKSCAPE_LOCALEDIR="$TOP/share/locale"
# Handle the case where the directory storing Inkscape has special characters
# ('#', '&', '|') in the name. These need to be escaped to work properly for
# various configuration files.
ESCAPEDTOP=`echo "$TOP" | sed 's/#/\\\\\\\\#/' | sed 's/&/\\\\\\&/g' | sed 's/|/\\\\\\|/g'`
# Set GTK theme (only if there is no .gtkrc-2.0 in the user's home)
if [[ ! -e "$HOME/.gtkrc-2.0" ]]; then
export GTK2_RC_FILES="$ESCAPEDTOP/etc/gtk-2.0/gtkrc"
fi
# If the AppleCollationOrder preference doesn't exist, we fall back to using
# the AppleLocale preference.
LANGSTR=`defaults read .GlobalPreferences AppleCollationOrder 2>/dev/null`
if [ "x$LANGSTR" == "x" -o "x$LANGSTR" == "xroot" ]
then
LANGSTR=`defaults read .GlobalPreferences AppleLocale 2>/dev/null | \
sed 's/_.*//'`
[ $_DEBUG ] && echo "Setting LANGSTR from AppleLocale: $LANGSTR" 1>&2
else
[ $_DEBUG ] && echo "Setting LANGSTR from AppleCollationOrder: $LANGSTR" 1>&2
fi
# NOTE: Have to add ".UTF-8" to the LANG since omitting causes Inkscape
# to crash on startup in locale_from_utf8().
if [ "x$LANGSTR" == "x" ]
then
# override broken script
[ $_DEBUG ] && echo "Overriding empty LANGSTR" 1>&2
export LANG="en_US.UTF-8"
else
tmpLANG="`grep \"\`echo $LANGSTR\`_\" /usr/share/locale/locale.alias | \
tail -n1 | sed 's/\./ /' | awk '{print $2}'`"
if [ "x$tmpLANG" == "x" ]
then
# override broken script
[ $_DEBUG ] && echo "Overriding empty LANG from /usr/share/locale/locale.alias" 1>&2
export LANG="en_US.UTF-8"
else
[ $_DEBUG ] && echo "Setting LANG from /usr/share/locale/locale.alias" 1>&2
export LANG="$tmpLANG.UTF-8"
fi
fi
[ $_DEBUG ] && echo "Setting Language: $LANG" 1>&2
export LC_ALL="$LANG"
sed 's|${INK_CACHE_DIR}|'"$INK_CACHE_DIR|g" "$TOP/etc/pango/pangorc" > "${INK_CACHE_DIR}/pangorc"
sed 's|${CWD}|'"$ESCAPEDTOP|g" "$TOP/etc/pango/pango.modules" \
> "${INK_CACHE_DIR}/pango.modules"
sed 's|${CWD}|'"$ESCAPEDTOP|g" "$TOP/lib/gtk-2.0/__gtk_version__/immodules.cache" \
> "${INK_CACHE_DIR}/immodules.cache"
sed 's|${CWD}|'"$ESCAPEDTOP|g" "$TOP/lib/gdk-pixbuf-2.0/__gdk_pixbuf_version__/loaders.cache" \
> "${INK_CACHE_DIR}/loaders.cache"
if [ "x$GTK_DEBUG_SHELL" != "x" ]; then
exec bash
else
$EXEC "$CWD/bin/inkscape" "$@"
fi
# eof