#!/bin/sh s_term() { #EC_OK exit 0 } trap s_term 15 die() { retval=$1 shift echo "Fatal error: $*" >&2 exit $retval } warning() { echo "Warning: $*" >&2 } debug() { if [ -n "$DEBUG" ] ; then echo "Debug: $*" >&2 fi } get_platform() { uname -s | LC_ALL=C tr '[A-Z]' '[a-z]' } get_lib_path() { binary="$1" lib="$2" $LDD $LDD_RECURSIVE "$binary" 2>&1 | grep "$lib" | head -n1 | while read lib dummy path ; do echo $path ; done | cut -d' ' -f1 } binary_grep() { pattern="$1" binary="$2" [ -r "$binary" ] || return 1 env LC_ALL=C tr -dc '[:print:]' < "$binary" | grep -F "$pattern" >/dev/null 2>&1 } append_to_library_path() { debug "Append \"$1\" to LD_LIBRARY_PATH" if [ -d "$LIBDIR/$1" ] ; then true else debug "\"$1\" is not a directory" return fi LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}${LIBDIR}/$1" export LD_LIBRARY_PATH } run() { libs="" loader="" if [ "$PLATFORM" = "linux" ] ; then lddOutput="`LANGUAGE=C LANG=C $LDD $LDD_RECURSIVE "$BINARY" 2>&1`" if echo "$lddOutput" | grep gzopen64 >/dev/null 2>&1 ; then append_to_library_path "ldwrap/libz.so.1" fi elif [ "$PLATFORM" = "freebsd" ] ; then #rpath doesn't work here append_to_library_path "" #own gcc prefer for BSD append_to_library_path "ldwrap/gcc" fi if binary_grep "libstdc++.so.6" "$BINARY" ; then libpath="`get_lib_path "$BINARY" "libstdc++.so.6" 2>/dev/null`" if binary_grep "CXXABI_$MIN_CXXABI" "$libpath" ; then true else append_to_library_path "ldwrap/gcc" fi fi for i in 1 2; do libs="`LANGUAGE=C LANG=C $LDD $LDD_RECURSIVE "$BINARY" 2>&1 | \ grep 'not found' | awk '{print $1}'| sort | uniq`" if [ -z "$libs" ]; then break; fi for lib in $libs ; do append_to_library_path "ldwrap/$lib" done done debug "Finally LD_LIBRARY_PATH is \"$LD_LIBRARY_PATH\"" if [ -n "$loader" ] ; then exec $LOADER "$BINARY" "$@" retval=$? else exec "$BINARY" "$@" retval=$? fi return $retval } LDD="/usr/bin/ldd" [ -x "$LDD" ] || die 125 "ldd not found. Fix PATH and try again." PLATFORM=linux PREFIX=/opt/drweb.com LIBDIR=/opt/drweb.com/lib/x86_64-linux-gnu CONFDIR=/etc/opt/drweb.com BINARY="$PREFIX/bin/`basename "$0.real"`" LINKNAME="`basename "$0"`" [ -x "$BINARY" ] || die 104 "$BINARY not found or not executable" if [ -d "$CONFDIR/ldwrap.conf.d" ] ; then for f in $CONFDIR/ldwrap.conf.d/*.conf ; do [ -r "$f" ] && . "$f" done fi MIN_CXXABI=1.3.12 if [ -n "$ARGS" ] ; then run "$@" "$ARGS" else run "$@" fi exit $?