1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 | #!/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 $?
|