blob: e9d0e58813444bac43184e68ae0d661404140bb0 (
plain) (
blame)
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
#!/bin/sh
##
## slo.h -- (S)eparate (L)inker (O)ptions by library class
## Initially written by Ralf S. Engelschall <rse@apache.org>
##
#
# This script falls under the Apache License.
# See http://www.apache.org/docs/LICENSE
DIFS='
'
#
# parse out -L and -l options from command line
#
DIRS=''
LIBS=''
ARGV=''
optprev=""
OIFS="$IFS" IFS="$DIFS"
for opt
do
# concatenate with previous option if exists
if [ "x$optprev" != "x" ]; then
opt="${optprev}${opt}";
optprev=''
fi
# remember options for arg when used stand-alone
if [ "x$opt" = "x-L" -o "x$opt" = "x-l" ]; then
optprev="$opt"
continue;
fi
# split argument into option plus option argument
arg="`echo $opt | cut -c3-`"
opt="`echo $opt | cut -c1-2`"
# store into containers
case $opt in
-L) DIRS="$DIRS:$arg" ;;
-l) LIBS="$LIBS:$arg" ;;
*) ARGV="$ARGV $opt" ;;
esac
done
IFS="$OIFS"
#
# set linker default directories
#
DIRS_DEFAULT='/lib:/usr/lib'
if [ "x$LD_LIBRARY_PATH" != "x" ]; then
DIRS_DEFAULT="$DIRS_DEFAULT:$LD_LIBRARY_PATH"
fi
#
# sort options by class
#
DIRS_OBJ=''
LIBS_OBJ=''
DIRS_PIC=''
LIBS_PIC=''
DIRS_DSO=''
LIBS_DSO=''
# for each library...
OIFS="$IFS" IFS=':'
for lib in $LIBS; do
[ "x$lib" = "x" ] && continue
found='no'
found_indefdir='no'
found_type=''
found_dir=''
# for each directory...
OIFS2="$IFS" IFS=":$DIFS"
for dir in ${DIRS} switch-to-defdirs ${DIRS_DEFAULT}; do
[ "x$dir" = "x" ] && continue
[ "x$dir" = "xswitch-to-defdirs" ] && found_indefdir=yes
[ ! -d $dir ] && continue
# search the file
OIFS3="$IFS" IFS="$DIFS"
for file in '' `cd $dir && ls lib${lib}.* 2>/dev/null`; do
[ "x$file" = "x" ] && continue
case $file in
*.so|*.so.[0-9]*|*.sl|*.sl.[0-9]* )
found=yes;
found_type=DSO;
break
;;
*.lo|*.la )
found=yes;
found_type=PIC
;;
*.a )
if [ "x$found_type" = "x" ]; then
found=yes
found_type=OBJ
fi
;;
esac
done
IFS="$OIFS3"
if [ "x$found" = "xyes" ]; then
found_dir="$dir"
break
fi
done
IFS="$OIFS2"
if [ "x$found" = "xyes" ]; then
if [ "x$found_indefdir" != "xyes" ]; then
eval "dirlist=\"\${DIRS_${found_type}}:\""
if [ ".`echo \"$dirlist\" | fgrep :$found_dir:`" = . ]; then
eval "DIRS_${found_type}=\"\$DIRS_${found_type}:${found_dir}\""
fi
eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
else
eval "LIBS_${found_type}=\"\$LIBS_${found_type}:$lib\""
fi
else
LIBS_OBJ="$LIBS_OBJ:$lib"
#dirlist="`echo $DIRS $DIRS_DEFAULT | sed -e 's/:/ /g'`"
#echo "splitlibs:Warning: library \"$lib\" not found in any of the following dirs:" 2>&1
#echo "splitlibs:Warning: $dirlist" 1>&1
fi
done
IFS="$OIFS"
#
# also pass-through unused dirs even if it's useless
#
OIFS="$IFS" IFS=':'
for dir in $DIRS; do
dirlist="${DIRS_OBJ}:${DIRS_PIC}:${DIRS_DSO}:"
if [ ".`echo \"$dirlist\" | fgrep :$dir:`" = . ]; then
DIRS_OBJ="$DIRS_OBJ:$dir"
fi
done
IFS="$OIFS"
#
# reassemble the options but seperated by type
#
OIFS="$IFS" IFS="$DIFS"
for type in OBJ PIC DSO; do
OIFS2="$IFS" IFS=':'
eval "libs=\"\$LIBS_${type}\""
opts=''
for lib in $libs; do
[ "x$lib" = "x" ] && continue
opts="$opts -l$lib"
done
eval "LIBS_${type}=\"$opts\""
eval "dirs=\"\$DIRS_${type}\""
opts=''
for dir in $dirs; do
[ "x$dir" = "x" ] && continue
opts="$opts -L$dir"
done
eval "DIRS_${type}=\"$opts\""
IFS="$OIFS2"
done
IFS="$OIFS"
#
# give back results
#
OIFS="$IFS" IFS="$DIFS"
for var in ARGV DIRS_OBJ LIBS_OBJ DIRS_PIC LIBS_PIC DIRS_DSO LIBS_DSO; do
eval "val=\"\$${var}\""
val="`echo $val | sed -e 's/^ *//'`"
echo "SLO_${var}=\"${val}\""
done
IFS="$OIFS"
##EOF##
|