Blame


1 dbd7b9a9 2003-11-23 devnull #!/bin/sh
2 dbd7b9a9 2003-11-23 devnull
3 eea5f6ad 2005-01-17 devnull test -f $PLAN9/config && . $PLAN9/config
4 ead3e311 2005-01-04 devnull libsl=""
5 fc165dcb 2005-10-19 devnull frameworks=""
6 3d637e16 2005-01-07 devnull doautolib=true
7 fc165dcb 2005-10-19 devnull doautoframework=true
8 3d637e16 2005-01-07 devnull verbose=false
9 ead3e311 2005-01-04 devnull
10 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
11 ead3e311 2005-01-04 devnull then
12 ead3e311 2005-01-04 devnull shift
13 3d637e16 2005-01-07 devnull doautolib=false
14 fc165dcb 2005-10-19 devnull doautoframework=false
15 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
16 ead3e311 2005-01-04 devnull then
17 ead3e311 2005-01-04 devnull shift
18 3d637e16 2005-01-07 devnull verbose=true
19 ead3e311 2005-01-04 devnull fi
20 ead3e311 2005-01-04 devnull
21 724b43e6 2005-01-07 devnull target=a.out
22 724b43e6 2005-01-07 devnull if [ "x$1" = "x-o" ]
23 724b43e6 2005-01-07 devnull then
24 724b43e6 2005-01-07 devnull target=$2
25 724b43e6 2005-01-07 devnull fi
26 724b43e6 2005-01-07 devnull
27 3d637e16 2005-01-07 devnull if $doautolib
28 ead3e311 2005-01-04 devnull then
29 ead3e311 2005-01-04 devnull ofiles=""
30 ead3e311 2005-01-04 devnull for i
31 ead3e311 2005-01-04 devnull do
32 ead3e311 2005-01-04 devnull case "$i" in
33 359c1e01 2005-01-14 devnull *.[ao])
34 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
35 ead3e311 2005-01-04 devnull ;;
36 ead3e311 2005-01-04 devnull esac
37 ead3e311 2005-01-04 devnull done
38 ead3e311 2005-01-04 devnull
39 ead3e311 2005-01-04 devnull # echo "ofiles $ofiles"
40 ead3e311 2005-01-04 devnull autolibs=""
41 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
42 ead3e311 2005-01-04 devnull then
43 3d637e16 2005-01-07 devnull a=`
44 ead3e311 2005-01-04 devnull nm $ofiles |
45 ead3e311 2005-01-04 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
46 190857f9 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
47 ead3e311 2005-01-04 devnull sort -u
48 ead3e311 2005-01-04 devnull `
49 3d637e16 2005-01-07 devnull for i in $a
50 3d637e16 2005-01-07 devnull do
51 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
52 3d637e16 2005-01-07 devnull eval "need$i=true"
53 3d637e16 2005-01-07 devnull done
54 ead3e311 2005-01-04 devnull fi
55 f6bb3013 2006-06-25 devnull if $verbose
56 f6bb3013 2006-06-25 devnull then
57 f6bb3013 2006-06-25 devnull echo "autolibs1 $autolibs"
58 f6bb3013 2006-06-25 devnull fi
59 3d637e16 2005-01-07 devnull
60 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
61 3d637e16 2005-01-07 devnull workq="$autolibs"
62 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
63 ead3e311 2005-01-04 devnull do
64 3d637e16 2005-01-07 devnull w="$workq"
65 3d637e16 2005-01-07 devnull workq=""
66 3d637e16 2005-01-07 devnull for i in $w
67 3d637e16 2005-01-07 devnull do
68 359c1e01 2005-01-14 devnull # can't trust the libraries about using
69 866a7d1f 2006-02-14 devnull # libthread or libdraw - we might not be linking with
70 359c1e01 2005-01-14 devnull # those object files.
71 3d637e16 2005-01-07 devnull a=`
72 acc29ab2 2005-07-13 devnull nm $PLAN9/lib/lib$i.a 2>/dev/null |
73 3d637e16 2005-01-07 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
74 3d637e16 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
75 359c1e01 2005-01-14 devnull sort -u |
76 f6bb3013 2006-06-25 devnull egrep -v '^(thread|draw)$'
77 3d637e16 2005-01-07 devnull `
78 f6bb3013 2006-06-25 devnull # fix up libraries that really need draw
79 f6bb3013 2006-06-25 devnull if [ "x$i" = "xmemdraw" -o "x$i" = "xmemlayer" -o "x$i" = "xframe" ]
80 f6bb3013 2006-06-25 devnull then
81 f6bb3013 2006-06-25 devnull a="$a draw"
82 f6bb3013 2006-06-25 devnull fi
83 3d637e16 2005-01-07 devnull okayfn="true"
84 3d637e16 2005-01-07 devnull for j in $a
85 3d637e16 2005-01-07 devnull do
86 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
87 3d637e16 2005-01-07 devnull then
88 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
89 3d637e16 2005-01-07 devnull workq="$workq $j"
90 3d637e16 2005-01-07 devnull eval "need$j=true"
91 3d637e16 2005-01-07 devnull fi
92 3d637e16 2005-01-07 devnull if [ $j != $i ]
93 3d637e16 2005-01-07 devnull then
94 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
95 3d637e16 2005-01-07 devnull fi
96 3d637e16 2005-01-07 devnull done
97 f6bb3013 2006-06-25 devnull if $verbose
98 f6bb3013 2006-06-25 devnull then
99 f6bb3013 2006-06-25 devnull echo "can$i: $okayfn"
100 f6bb3013 2006-06-25 devnull fi
101 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
102 3d637e16 2005-01-07 devnull done
103 ead3e311 2005-01-04 devnull done
104 3d637e16 2005-01-07 devnull if $verbose
105 3d637e16 2005-01-07 devnull then
106 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
107 3d637e16 2005-01-07 devnull fi
108 3d637e16 2005-01-07 devnull
109 ead3e311 2005-01-04 devnull for i in $autolibs
110 ead3e311 2005-01-04 devnull do
111 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
112 ead3e311 2005-01-04 devnull done
113 c8b6342d 2005-01-13 devnull havethread() { false; }
114 0d85a1cf 2005-02-11 devnull havesec() { false; }
115 f6bb3013 2006-06-25 devnull canmemlayer() { havedraw; }
116 3d637e16 2005-01-07 devnull
117 3d637e16 2005-01-07 devnull # now find correct order
118 3d637e16 2005-01-07 devnull libsl=""
119 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
120 ead3e311 2005-01-04 devnull do
121 3d637e16 2005-01-07 devnull stillneed=""
122 3d637e16 2005-01-07 devnull didnothing=true
123 3d637e16 2005-01-07 devnull for i in $autolibs
124 3d637e16 2005-01-07 devnull do
125 3d637e16 2005-01-07 devnull if eval "can$i"
126 3d637e16 2005-01-07 devnull then
127 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
128 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
129 3d637e16 2005-01-07 devnull didnothing=false
130 3d637e16 2005-01-07 devnull else
131 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
132 3d637e16 2005-01-07 devnull fi
133 3d637e16 2005-01-07 devnull done
134 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
135 3d637e16 2005-01-07 devnull # to have no dependencies
136 3d637e16 2005-01-07 devnull if $didnothing
137 ead3e311 2005-01-04 devnull then
138 3d637e16 2005-01-07 devnull j="xxx"
139 3d637e16 2005-01-07 devnull for i in $autolibs
140 3d637e16 2005-01-07 devnull do
141 3d637e16 2005-01-07 devnull j=$i
142 3d637e16 2005-01-07 devnull done
143 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
144 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
145 ead3e311 2005-01-04 devnull fi
146 3d637e16 2005-01-07 devnull autolibs="$stillneed"
147 ead3e311 2005-01-04 devnull done
148 3d637e16 2005-01-07 devnull if $verbose
149 3d637e16 2005-01-07 devnull then
150 3d637e16 2005-01-07 devnull echo "liborder $libsl"
151 3d637e16 2005-01-07 devnull fi
152 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
153 3d637e16 2005-01-07 devnull
154 c8b6342d 2005-01-13 devnull # cycle: lib9 expects p9main, which is defined in libthread. oops.
155 359c1e01 2005-01-14 devnull if havethread
156 c8b6342d 2005-01-13 devnull then
157 359c1e01 2005-01-14 devnull libsl="$libsl -lthread -l9"
158 c8b6342d 2005-01-13 devnull fi
159 c8b6342d 2005-01-13 devnull
160 0d85a1cf 2005-02-11 devnull # cycle: lib9 netcrypt uses libsec
161 0d85a1cf 2005-02-11 devnull if havesec
162 0d85a1cf 2005-02-11 devnull then
163 0d85a1cf 2005-02-11 devnull libsl="$libsl -lsec -l9"
164 866a7d1f 2006-02-14 devnull fi
165 866a7d1f 2006-02-14 devnull
166 89eaced6 2006-04-04 devnull if [ "x$needndb" = xtrue -a '(' -f /usr/lib/libresolv.a -o -f /usr/lib/libresolv.dylib ')' ]
167 866a7d1f 2006-02-14 devnull then
168 866a7d1f 2006-02-14 devnull libsl="$libsl -lresolv"
169 0d85a1cf 2005-02-11 devnull fi
170 0d85a1cf 2005-02-11 devnull
171 a7415518 2007-02-22 devnull if [ "x$needX11" = xtrue -a "x$WSYSTYPE" != xnowsys ]
172 ead3e311 2005-01-04 devnull then
173 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
174 ead3e311 2005-01-04 devnull then
175 ead3e311 2005-01-04 devnull X11=/usr/X11R6
176 ead3e311 2005-01-04 devnull fi
177 c968e519 2005-01-18 devnull # x86_64 seems to put its 64-bit libraries in lib64.
178 c968e519 2005-01-18 devnull if [ "${OBJTYPE:-`uname -m`}" = "x86_64" ]
179 c968e519 2005-01-18 devnull then
180 c968e519 2005-01-18 devnull libsl="$libsl -L$X11/lib64"
181 c968e519 2005-01-18 devnull fi
182 ead3e311 2005-01-04 devnull libsl="$libsl -L$X11/lib -lX11"
183 ead3e311 2005-01-04 devnull fi
184 ead3e311 2005-01-04 devnull fi
185 fc165dcb 2005-10-19 devnull if $doautoframework
186 fc165dcb 2005-10-19 devnull then
187 fc165dcb 2005-10-19 devnull ofiles=""
188 fc165dcb 2005-10-19 devnull for i
189 fc165dcb 2005-10-19 devnull do
190 fc165dcb 2005-10-19 devnull case "$i" in
191 fc165dcb 2005-10-19 devnull *.[ao])
192 fc165dcb 2005-10-19 devnull ofiles="$ofiles $i"
193 fc165dcb 2005-10-19 devnull ;;
194 fc165dcb 2005-10-19 devnull esac
195 fc165dcb 2005-10-19 devnull done
196 ead3e311 2005-01-04 devnull
197 fc165dcb 2005-10-19 devnull # echo "ofiles $ofiles"
198 fc165dcb 2005-10-19 devnull autoframeworks=""
199 fc165dcb 2005-10-19 devnull if [ "x$ofiles" != "x" ]
200 fc165dcb 2005-10-19 devnull then
201 fc165dcb 2005-10-19 devnull a=`
202 fc165dcb 2005-10-19 devnull nm $ofiles |
203 fc165dcb 2005-10-19 devnull grep '__p9l_autoframework_[a-zA-Z0-9+-]*$' |
204 fc165dcb 2005-10-19 devnull sed 's/.*__p9l_autoframework_//' |
205 fc165dcb 2005-10-19 devnull sort -u
206 fc165dcb 2005-10-19 devnull `
207 fc165dcb 2005-10-19 devnull for i in $a
208 fc165dcb 2005-10-19 devnull do
209 fc165dcb 2005-10-19 devnull autoframeworks="$autoframeworks $i"
210 fc165dcb 2005-10-19 devnull eval "need$i=true"
211 fc165dcb 2005-10-19 devnull done
212 fc165dcb 2005-10-19 devnull fi
213 fc165dcb 2005-10-19 devnull
214 fc165dcb 2005-10-19 devnull if $verbose
215 fc165dcb 2005-10-19 devnull then
216 fc165dcb 2005-10-19 devnull echo "autoframeworks $autoframeworks"
217 fc165dcb 2005-10-19 devnull fi
218 fc165dcb 2005-10-19 devnull
219 fc165dcb 2005-10-19 devnull for i in $autoframeworks
220 fc165dcb 2005-10-19 devnull do
221 fc165dcb 2005-10-19 devnull eval "have$i() { false; }"
222 fc165dcb 2005-10-19 devnull done
223 fc165dcb 2005-10-19 devnull
224 fc165dcb 2005-10-19 devnull frameworks=""
225 fc165dcb 2005-10-19 devnull for i in $autoframeworks
226 fc165dcb 2005-10-19 devnull do
227 fc165dcb 2005-10-19 devnull frameworks="-framework $i $frameworks"
228 fc165dcb 2005-10-19 devnull done
229 fc165dcb 2005-10-19 devnull fi
230 fc165dcb 2005-10-19 devnull
231 2d8fd46b 2004-03-26 devnull extralibs="-lm"
232 8f314994 2004-03-02 devnull tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
233 dbd7b9a9 2003-11-23 devnull case "$tag" in
234 7d0dbb31 2005-01-07 devnull *FreeBSD*)
235 7d0dbb31 2005-01-07 devnull ld=gcc
236 108559b2 2005-01-19 devnull userpath=true
237 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
238 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
239 8a26417b 2005-02-08 devnull 5.2.*)
240 8a26417b 2005-02-08 devnull extralibs="$extralibs -lkse"
241 8a26417b 2005-02-08 devnull ;;
242 7d0dbb31 2005-01-07 devnull [5-9].*)
243 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
244 cb27443a 2004-03-25 devnull ;;
245 7d0dbb31 2005-01-07 devnull esac
246 7d0dbb31 2005-01-07 devnull ;;
247 7d0dbb31 2005-01-07 devnull *BSD*)
248 7d0dbb31 2005-01-07 devnull ld=gcc
249 108559b2 2005-01-19 devnull userpath=true
250 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
251 7d0dbb31 2005-01-07 devnull ;;
252 7d0dbb31 2005-01-07 devnull *Linux*)
253 7d0dbb31 2005-01-07 devnull ld=gcc
254 108559b2 2005-01-19 devnull userpath=true
255 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
256 eea5f6ad 2005-01-17 devnull case "${SYSVERSION:-`uname -r`}" in
257 7d0dbb31 2005-01-07 devnull 2.6.*)
258 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
259 2d8fd46b 2004-03-26 devnull ;;
260 7d0dbb31 2005-01-07 devnull esac
261 7d0dbb31 2005-01-07 devnull ;;
262 7d0dbb31 2005-01-07 devnull *Darwin*)
263 7d0dbb31 2005-01-07 devnull ld=gcc
264 7d0dbb31 2005-01-07 devnull ;;
265 7d0dbb31 2005-01-07 devnull *SunOS*)
266 7d0dbb31 2005-01-07 devnull ld="${CC9:-cc} -g"
267 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
268 7d0dbb31 2005-01-07 devnull # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
269 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
270 7d0dbb31 2005-01-07 devnull do
271 7d0dbb31 2005-01-07 devnull case "$i" in
272 7d0dbb31 2005-01-07 devnull -L*)
273 7d0dbb31 2005-01-07 devnull s=`echo $i | sed 's/-L/-R/'`
274 7d0dbb31 2005-01-07 devnull extralibs="$extralibs $s"
275 282c88f9 2004-09-17 devnull ;;
276 282c88f9 2004-09-17 devnull esac
277 7d0dbb31 2005-01-07 devnull done
278 dc305d03 2005-02-08 devnull case "${SYSVERSION:-`uname -r`}" in
279 dc305d03 2005-02-08 devnull 5.[67])
280 dc305d03 2005-02-08 devnull echo do not know how to link right thread library on "$tag" 1>&2
281 dc305d03 2005-02-08 devnull ;;
282 dc305d03 2005-02-08 devnull 5.8)
283 dc305d03 2005-02-08 devnull # Some trickery is needed to force use of
284 dc305d03 2005-02-08 devnull # alternate thread lib from /usr/lib/lwp
285 dc305d03 2005-02-08 devnull # Likely, this only works with sun cc,
286 dc305d03 2005-02-08 devnull # for other compiler/loader we would need other flags.
287 dc305d03 2005-02-08 devnull ld="$ld -i"
288 dc305d03 2005-02-08 devnull extralibs="$extralibs /usr/lib/lwp/libthread.so -R/usr/lib/lwp:/usr/lib"
289 dc305d03 2005-02-08 devnull ;;
290 dc305d03 2005-02-08 devnull esac
291 7d0dbb31 2005-01-07 devnull ;;
292 dbd7b9a9 2003-11-23 devnull *)
293 dbd7b9a9 2003-11-23 devnull echo do not know how to link on "$tag" 1>&2
294 dbd7b9a9 2003-11-23 devnull exit 1
295 dbd7b9a9 2003-11-23 devnull esac
296 dbd7b9a9 2003-11-23 devnull
297 108559b2 2005-01-19 devnull case "$userpath" in
298 108559b2 2005-01-19 devnull true)
299 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
300 54bcb7e9 2005-01-16 devnull do
301 54bcb7e9 2005-01-16 devnull case "$i" in
302 54bcb7e9 2005-01-16 devnull -L*)
303 54bcb7e9 2005-01-16 devnull s=`echo $i | sed 's/-L/-Wl,-rpath,/'`
304 54bcb7e9 2005-01-16 devnull extralibs="$extralibs $s"
305 54bcb7e9 2005-01-16 devnull ;;
306 54bcb7e9 2005-01-16 devnull esac
307 54bcb7e9 2005-01-16 devnull done
308 54bcb7e9 2005-01-16 devnull ;;
309 54bcb7e9 2005-01-16 devnull esac
310 54bcb7e9 2005-01-16 devnull
311 3d637e16 2005-01-07 devnull if $verbose
312 ead3e311 2005-01-04 devnull then
313 fc165dcb 2005-10-19 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks
314 ead3e311 2005-01-04 devnull fi
315 237c3090 2005-03-18 devnull
316 237c3090 2005-03-18 devnull xtmp=/tmp/9l.$$.$USER.out
317 237c3090 2005-03-18 devnull xxout() {
318 866a7d1f 2006-02-14 devnull sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . |
319 96f54e3f 2007-03-26 devnull egrep -v 'is (often|almost always) misused|is dangerous, better use'
320 237c3090 2005-03-18 devnull rm -f $xtmp
321 237c3090 2005-03-18 devnull }
322 237c3090 2005-03-18 devnull
323 fc165dcb 2005-10-19 devnull if $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks >$xtmp 2>&1
324 8953da37 2005-01-07 devnull then
325 237c3090 2005-03-18 devnull xxout
326 c8b6342d 2005-01-13 devnull exit 0
327 c8b6342d 2005-01-13 devnull else
328 237c3090 2005-03-18 devnull xxout
329 724b43e6 2005-01-07 devnull rm -f $target
330 724b43e6 2005-01-07 devnull exit 1
331 8953da37 2005-01-07 devnull fi
332 c8b6342d 2005-01-13 devnull