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