130 lines
2.5 KiB
Bash
Executable File
130 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Start script for VIPS
|
|
|
|
# need extended regexps, hence we insist on bash above
|
|
shopt -s extglob
|
|
# set -x
|
|
|
|
# name we were invoked as
|
|
bname=`basename $0`
|
|
|
|
# check args
|
|
if [[ $# < 1 ]]; then
|
|
echo "usage: $bname [command ...]"
|
|
echo "examples:"
|
|
echo " $bname man vipsthumbnail"
|
|
echo " $bname vips invert /pics/tmp/fred.jpg /pics/tmp/fred2.tif"
|
|
exit 1
|
|
fi
|
|
|
|
# prepend a path component to an environment variable
|
|
# be careful to avoid trailing : characters if the var is not defined, they
|
|
# can cause security problems
|
|
function prepend_var () {
|
|
# we have to use eval to do double indirection, I think
|
|
eval value="\$$1"
|
|
if [ "x$value" = x ]; then
|
|
export $1=$2
|
|
else
|
|
export $1=$2:$value
|
|
fi
|
|
}
|
|
|
|
# try to extract the prefix from a path to an executable
|
|
# eg. "/home/john/vips/bin/fred" -> "/home/john/vips"
|
|
function find_prefix () {
|
|
# try to canonicalise the path
|
|
ep_canon=$1
|
|
|
|
# relative path? prefix with pwd
|
|
if [ ${ep_canon:0:1} != "/" ]; then
|
|
ep_canon=`pwd`/$ep_canon
|
|
fi
|
|
|
|
# replace any "/./" with "/"
|
|
ep_canon=${ep_canon//\/.\//\/}
|
|
|
|
# any "xxx/../" can go
|
|
ep_canon=${ep_canon//+([^\/])\/..\//}
|
|
|
|
# trailing "xxx/.." can go
|
|
ep_canon=${ep_canon/%+([^\/])\/../}
|
|
|
|
# remove trailing "/bin/xxx" to get the prefix
|
|
ep_prefix=${ep_canon/%\/bin\/+([^\/])/}
|
|
|
|
# was there anything to remove in that final step? if not, the path
|
|
# must be wrong
|
|
if [ x$ep_prefix == x$ep_canon ]; then
|
|
return 1
|
|
fi
|
|
|
|
echo $ep_prefix;
|
|
|
|
return 0
|
|
}
|
|
|
|
# try to guess the install prefix from $0
|
|
function guess_prefix () {
|
|
# $0 is a file? must be us
|
|
if [ -f $0 ]; then
|
|
find_prefix $0
|
|
return
|
|
fi
|
|
|
|
# nope, extract program name from $0 and try looking along the
|
|
# searchpath for it
|
|
name=`basename $0`
|
|
|
|
fred=$PATH
|
|
while [ x$fred != x"" ]; do
|
|
path=${fred/:*/}/$name
|
|
fred=${fred/*([^:])?(:)/}
|
|
|
|
if [ -f $path ]; then
|
|
find_prefix $path
|
|
return
|
|
fi
|
|
done
|
|
|
|
# not found on path either ... give up!
|
|
return 1
|
|
}
|
|
|
|
prefix=`guess_prefix`;
|
|
|
|
if [ $? != 0 ]; then
|
|
echo "unable to find $0 from the file name, or from your PATH"
|
|
echo "either run directly, or add the install bin area to "
|
|
echo "your PATH"
|
|
exit 1
|
|
fi
|
|
|
|
export VIPSHOME=$prefix
|
|
|
|
# add VIPSHOME to various paths
|
|
prepend_var MANPATH $VIPSHOME/share/man
|
|
|
|
case `uname` in
|
|
HPUX)
|
|
libvar=SHLIB_PATH
|
|
;;
|
|
|
|
Darwin)
|
|
libvar=DYLD_LIBRARY_PATH
|
|
;;
|
|
|
|
*)
|
|
libvar=LD_LIBRARY_PATH
|
|
;;
|
|
esac
|
|
prepend_var $libvar $VIPSHOME/lib
|
|
|
|
prepend_var PATH $VIPSHOME/bin
|
|
prepend_var PKG_CONFIG_PATH $VIPSHOME/lib/pkgconfig
|
|
prepend_var GI_TYPELIB_PATH $VIPSHOME/lib/girepository-1.0
|
|
|
|
# run, passing in args we were passed
|
|
exec $*
|