3 eea5f6ad 2005-01-17 devnull test -f $PLAN9/config && . $PLAN9/config
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
10 a4980b39 2009-07-15 BHuntsman nmflags=""
11 a4980b39 2009-07-15 BHuntsman extralibs="-lm"
12 a4980b39 2009-07-15 BHuntsman tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
13 a4980b39 2009-07-15 BHuntsman case "$tag" in
14 a4980b39 2009-07-15 BHuntsman *FreeBSD*)
16 a4980b39 2009-07-15 BHuntsman userpath=true
17 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
18 a4980b39 2009-07-15 BHuntsman case "`uname -r`" in
20 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lkse"
22 a4980b39 2009-07-15 BHuntsman [5-9].*)
23 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lpthread"
29 a4980b39 2009-07-15 BHuntsman userpath=true
30 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
32 a4980b39 2009-07-15 BHuntsman *OSF1*)
34 a4980b39 2009-07-15 BHuntsman userpath=true
35 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
36 a4980b39 2009-07-15 BHuntsman nmflags="-B"
38 a4980b39 2009-07-15 BHuntsman *Linux*)
40 a4980b39 2009-07-15 BHuntsman userpath=true
41 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
42 a4980b39 2009-07-15 BHuntsman case "${SYSVERSION:-`uname -r`}" in
44 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lpthread"
48 a4980b39 2009-07-15 BHuntsman *Darwin*)
49 fa662c95 2009-09-11 russcox ld="gcc -m32"
51 a4980b39 2009-07-15 BHuntsman *SunOS*)
52 a4980b39 2009-07-15 BHuntsman ld="${CC9:-cc} -g"
53 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
54 a4980b39 2009-07-15 BHuntsman # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
55 a4980b39 2009-07-15 BHuntsman for i in "$libsl $@"
57 a4980b39 2009-07-15 BHuntsman case "$i" in
59 a4980b39 2009-07-15 BHuntsman s=`echo $i | sed 's/-L/-R/'`
60 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs $s"
64 a4980b39 2009-07-15 BHuntsman case "${SYSVERSION:-`uname -r`}" in
65 a4980b39 2009-07-15 BHuntsman 5.[67])
66 a4980b39 2009-07-15 BHuntsman echo do not know how to link right thread library on "$tag" 1>&2
69 a4980b39 2009-07-15 BHuntsman # Some trickery is needed to force use of
70 a4980b39 2009-07-15 BHuntsman # alternate thread lib from /usr/lib/lwp
71 a4980b39 2009-07-15 BHuntsman # Likely, this only works with sun cc,
72 a4980b39 2009-07-15 BHuntsman # for other compiler/loader we would need other flags.
73 a4980b39 2009-07-15 BHuntsman ld="$ld -i"
74 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs /usr/lib/lwp/libthread.so -R/usr/lib/lwp:/usr/lib"
80 a4980b39 2009-07-15 BHuntsman nmflags="-B"
83 a4980b39 2009-07-15 BHuntsman echo do not know how to link on "$tag" 1>&2
87 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
90 3d637e16 2005-01-07 devnull doautolib=false
91 fc165dcb 2005-10-19 devnull doautoframework=false
92 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
95 3d637e16 2005-01-07 devnull verbose=true
98 724b43e6 2005-01-07 devnull target=a.out
99 724b43e6 2005-01-07 devnull if [ "x$1" = "x-o" ]
101 724b43e6 2005-01-07 devnull target=$2
104 3d637e16 2005-01-07 devnull if $doautolib
106 ead3e311 2005-01-04 devnull ofiles=""
107 d210f09d 2008-12-03 jas lpaths="$PLAN9/lib"
110 ead3e311 2005-01-04 devnull case "$i" in
112 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
115 d210f09d 2008-12-03 jas l=`echo $i | sed 's/-L//'`
116 d210f09d 2008-12-03 jas lpaths="$lpaths $l"
122 d210f09d 2008-12-03 jas echo "ofiles $ofiles"
123 d210f09d 2008-12-03 jas echo "lpaths $lpaths"
126 ead3e311 2005-01-04 devnull autolibs=""
127 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
130 a4980b39 2009-07-15 BHuntsman nm $nmflags $ofiles |
131 ead3e311 2005-01-04 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
132 190857f9 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
135 3d637e16 2005-01-07 devnull for i in $a
137 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
138 3d637e16 2005-01-07 devnull eval "need$i=true"
141 f6bb3013 2006-06-25 devnull if $verbose
143 f6bb3013 2006-06-25 devnull echo "autolibs1 $autolibs"
146 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
147 3d637e16 2005-01-07 devnull workq="$autolibs"
148 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
150 3d637e16 2005-01-07 devnull w="$workq"
151 3d637e16 2005-01-07 devnull workq=""
152 3d637e16 2005-01-07 devnull for i in $w
154 359c1e01 2005-01-14 devnull # can't trust the libraries about using
155 866a7d1f 2006-02-14 devnull # libthread or libdraw - we might not be linking with
156 359c1e01 2005-01-14 devnull # those object files.
158 d210f09d 2008-12-03 jas for lpath in $lpaths
161 d210f09d 2008-12-03 jas nm $lpath/lib$i.a 2>/dev/null |
162 d210f09d 2008-12-03 jas grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
163 d210f09d 2008-12-03 jas sed 's/.*__p9l_autolib_//' |
165 d210f09d 2008-12-03 jas egrep -v '^(thread|draw)$'
169 f6bb3013 2006-06-25 devnull # fix up libraries that really need draw
170 f6bb3013 2006-06-25 devnull if [ "x$i" = "xmemdraw" -o "x$i" = "xmemlayer" -o "x$i" = "xframe" ]
172 f6bb3013 2006-06-25 devnull a="$a draw"
174 3d637e16 2005-01-07 devnull okayfn="true"
175 3d637e16 2005-01-07 devnull for j in $a
177 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
179 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
180 3d637e16 2005-01-07 devnull workq="$workq $j"
181 3d637e16 2005-01-07 devnull eval "need$j=true"
183 3d637e16 2005-01-07 devnull if [ $j != $i ]
185 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
188 f6bb3013 2006-06-25 devnull if $verbose
190 f6bb3013 2006-06-25 devnull echo "can$i: $okayfn"
192 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
195 3d637e16 2005-01-07 devnull if $verbose
197 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
200 ead3e311 2005-01-04 devnull for i in $autolibs
202 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
204 c8b6342d 2005-01-13 devnull havethread() { false; }
205 0d85a1cf 2005-02-11 devnull havesec() { false; }
206 f6bb3013 2006-06-25 devnull canmemlayer() { havedraw; }
208 3d637e16 2005-01-07 devnull # now find correct order
209 3d637e16 2005-01-07 devnull libsl=""
210 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
212 3d637e16 2005-01-07 devnull stillneed=""
213 3d637e16 2005-01-07 devnull didnothing=true
214 3d637e16 2005-01-07 devnull for i in $autolibs
216 3d637e16 2005-01-07 devnull if eval "can$i"
218 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
219 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
220 3d637e16 2005-01-07 devnull didnothing=false
222 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
225 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
226 3d637e16 2005-01-07 devnull # to have no dependencies
227 3d637e16 2005-01-07 devnull if $didnothing
230 3d637e16 2005-01-07 devnull for i in $autolibs
234 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
235 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
237 3d637e16 2005-01-07 devnull autolibs="$stillneed"
239 3d637e16 2005-01-07 devnull if $verbose
241 3d637e16 2005-01-07 devnull echo "liborder $libsl"
243 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
245 c8b6342d 2005-01-13 devnull # cycle: lib9 expects p9main, which is defined in libthread. oops.
246 359c1e01 2005-01-14 devnull if havethread
248 359c1e01 2005-01-14 devnull libsl="$libsl -lthread -l9"
251 0d85a1cf 2005-02-11 devnull # cycle: lib9 netcrypt uses libsec
252 0d85a1cf 2005-02-11 devnull if havesec
254 0d85a1cf 2005-02-11 devnull libsl="$libsl -lsec -l9"
257 89eaced6 2006-04-04 devnull if [ "x$needndb" = xtrue -a '(' -f /usr/lib/libresolv.a -o -f /usr/lib/libresolv.dylib ')' ]
259 866a7d1f 2006-02-14 devnull libsl="$libsl -lresolv"
262 a7415518 2007-02-22 devnull if [ "x$needX11" = xtrue -a "x$WSYSTYPE" != xnowsys ]
264 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
266 ead3e311 2005-01-04 devnull X11=/usr/X11R6
268 c968e519 2005-01-18 devnull # x86_64 seems to put its 64-bit libraries in lib64.
269 c968e519 2005-01-18 devnull if [ "${OBJTYPE:-`uname -m`}" = "x86_64" ]
271 c968e519 2005-01-18 devnull libsl="$libsl -L$X11/lib64"
273 ead3e311 2005-01-04 devnull libsl="$libsl -L$X11/lib -lX11"
276 fc165dcb 2005-10-19 devnull if $doautoframework
278 fc165dcb 2005-10-19 devnull ofiles=""
281 fc165dcb 2005-10-19 devnull case "$i" in
283 fc165dcb 2005-10-19 devnull ofiles="$ofiles $i"
288 fc165dcb 2005-10-19 devnull # echo "ofiles $ofiles"
289 fc165dcb 2005-10-19 devnull autoframeworks=""
290 fc165dcb 2005-10-19 devnull if [ "x$ofiles" != "x" ]
293 fc165dcb 2005-10-19 devnull nm $ofiles |
294 fc165dcb 2005-10-19 devnull grep '__p9l_autoframework_[a-zA-Z0-9+-]*$' |
295 fc165dcb 2005-10-19 devnull sed 's/.*__p9l_autoframework_//' |
298 fc165dcb 2005-10-19 devnull for i in $a
300 fc165dcb 2005-10-19 devnull autoframeworks="$autoframeworks $i"
301 fc165dcb 2005-10-19 devnull eval "need$i=true"
305 fc165dcb 2005-10-19 devnull if $verbose
307 fc165dcb 2005-10-19 devnull echo "autoframeworks $autoframeworks"
310 fc165dcb 2005-10-19 devnull for i in $autoframeworks
312 fc165dcb 2005-10-19 devnull eval "have$i() { false; }"
315 fc165dcb 2005-10-19 devnull frameworks=""
316 fc165dcb 2005-10-19 devnull for i in $autoframeworks
318 fc165dcb 2005-10-19 devnull frameworks="-framework $i $frameworks"
322 108559b2 2005-01-19 devnull case "$userpath" in
324 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
326 54bcb7e9 2005-01-16 devnull case "$i" in
328 54bcb7e9 2005-01-16 devnull s=`echo $i | sed 's/-L/-Wl,-rpath,/'`
329 54bcb7e9 2005-01-16 devnull extralibs="$extralibs $s"
336 3d637e16 2005-01-07 devnull if $verbose
338 fc165dcb 2005-10-19 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks
341 237c3090 2005-03-18 devnull xtmp=/tmp/9l.$$.$USER.out
342 237c3090 2005-03-18 devnull xxout() {
343 866a7d1f 2006-02-14 devnull sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . |
344 96f54e3f 2007-03-26 devnull egrep -v 'is (often|almost always) misused|is dangerous, better use'
345 237c3090 2005-03-18 devnull rm -f $xtmp
348 fc165dcb 2005-10-19 devnull if $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks >$xtmp 2>&1
354 724b43e6 2005-01-07 devnull rm -f $target