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 20035ed4 2014-02-28 minux.ma *DragonFly*|*BSD*)
15 9444b8e4 2020-05-18 rsc ld="${CC9:-gcc} $CC9FLAGS"
16 a4980b39 2009-07-15 BHuntsman userpath=true
17 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
19 a4980b39 2009-07-15 BHuntsman *OSF1*)
20 9444b8e4 2020-05-18 rsc ld="${CC9:-cc} $CC9FLAGS"
21 a4980b39 2009-07-15 BHuntsman userpath=true
22 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
23 a4980b39 2009-07-15 BHuntsman nmflags="-B"
25 a4980b39 2009-07-15 BHuntsman *Linux*)
26 9444b8e4 2020-05-18 rsc ld="${CC9:-gcc} $CC9FLAGS"
27 a4980b39 2009-07-15 BHuntsman userpath=true
28 cb8f7357 2020-01-20 rsc extralibs="$extralibs -lutil -lresolv -lpthread"
30 fc567f47 2011-08-02 rsc *Darwin*x86_64*)
31 9444b8e4 2020-05-18 rsc ld="${CC9:-gcc} -m64 $CC9FLAGS"
33 a4980b39 2009-07-15 BHuntsman *Darwin*)
34 9444b8e4 2020-05-18 rsc ld="${CC9:-gcc} -m32 $CC9FLAGS"
36 a4980b39 2009-07-15 BHuntsman *SunOS*)
37 9444b8e4 2020-05-18 rsc ld="${CC9:-cc} -g $CC9FLAGS"
38 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
39 cb8f7357 2020-01-20 rsc # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
40 a4980b39 2009-07-15 BHuntsman for i in "$libsl $@"
42 a4980b39 2009-07-15 BHuntsman case "$i" in
44 a4980b39 2009-07-15 BHuntsman s=`echo $i | sed 's/-L/-R/'`
45 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs $s"
49 a4980b39 2009-07-15 BHuntsman case "${SYSVERSION:-`uname -r`}" in
50 a4980b39 2009-07-15 BHuntsman 5.[67])
51 a4980b39 2009-07-15 BHuntsman echo do not know how to link right thread library on "$tag" 1>&2
54 a4980b39 2009-07-15 BHuntsman # Some trickery is needed to force use of
55 a4980b39 2009-07-15 BHuntsman # alternate thread lib from /usr/lib/lwp
56 a4980b39 2009-07-15 BHuntsman # Likely, this only works with sun cc,
57 a4980b39 2009-07-15 BHuntsman # for other compiler/loader we would need other flags.
58 a4980b39 2009-07-15 BHuntsman ld="$ld -i"
59 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs /usr/lib/lwp/libthread.so -R/usr/lib/lwp:/usr/lib"
64 9444b8e4 2020-05-18 rsc ld="${CC9:-xlc_r} -g -O0 $CC9FLAGS"
65 4982d4eb 2020-05-08 rsc nmflags="-A -B"
66 4982d4eb 2020-05-08 rsc extralibs="$extralibs -lpthread"
69 a4980b39 2009-07-15 BHuntsman echo do not know how to link on "$tag" 1>&2
73 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
76 3d637e16 2005-01-07 devnull doautolib=false
77 fc165dcb 2005-10-19 devnull doautoframework=false
78 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
81 3d637e16 2005-01-07 devnull verbose=true
84 724b43e6 2005-01-07 devnull target=a.out
85 724b43e6 2005-01-07 devnull if [ "x$1" = "x-o" ]
87 724b43e6 2005-01-07 devnull target=$2
90 3d637e16 2005-01-07 devnull if $doautolib
92 ead3e311 2005-01-04 devnull ofiles=""
93 d210f09d 2008-12-03 jas lpaths="$PLAN9/lib"
96 ead3e311 2005-01-04 devnull case "$i" in
98 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
101 d210f09d 2008-12-03 jas l=`echo $i | sed 's/-L//'`
102 d210f09d 2008-12-03 jas lpaths="$lpaths $l"
108 d210f09d 2008-12-03 jas echo "ofiles $ofiles"
109 d210f09d 2008-12-03 jas echo "lpaths $lpaths"
112 ead3e311 2005-01-04 devnull autolibs=""
113 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
116 a4980b39 2009-07-15 BHuntsman nm $nmflags $ofiles |
117 4982d4eb 2020-05-08 rsc grep '__p9l_autolib_[a-zA-Z0-9+-]*' |
118 4982d4eb 2020-05-08 rsc sed 's/.*__p9l_autolib_//; s/:.*//' |
121 3d637e16 2005-01-07 devnull for i in $a
123 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
124 3d637e16 2005-01-07 devnull eval "need$i=true"
127 f6bb3013 2006-06-25 devnull if $verbose
129 f6bb3013 2006-06-25 devnull echo "autolibs1 $autolibs"
132 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
133 3d637e16 2005-01-07 devnull workq="$autolibs"
134 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
136 3d637e16 2005-01-07 devnull w="$workq"
137 3d637e16 2005-01-07 devnull workq=""
138 3d637e16 2005-01-07 devnull for i in $w
140 359c1e01 2005-01-14 devnull # can't trust the libraries about using
141 866a7d1f 2006-02-14 devnull # libthread or libdraw - we might not be linking with
142 359c1e01 2005-01-14 devnull # those object files.
144 d210f09d 2008-12-03 jas for lpath in $lpaths
147 d210f09d 2008-12-03 jas nm $lpath/lib$i.a 2>/dev/null |
148 4982d4eb 2020-05-08 rsc grep '__p9l_autolib_[a-zA-Z0-9+-]*' |
149 4982d4eb 2020-05-08 rsc sed 's/.*__p9l_autolib_//; s/:.*//' |
151 d210f09d 2008-12-03 jas egrep -v '^(thread|draw)$'
155 f6bb3013 2006-06-25 devnull # fix up libraries that really need draw
156 f6bb3013 2006-06-25 devnull if [ "x$i" = "xmemdraw" -o "x$i" = "xmemlayer" -o "x$i" = "xframe" ]
158 f6bb3013 2006-06-25 devnull a="$a draw"
160 3d637e16 2005-01-07 devnull okayfn="true"
161 3d637e16 2005-01-07 devnull for j in $a
163 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
165 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
166 3d637e16 2005-01-07 devnull workq="$workq $j"
167 3d637e16 2005-01-07 devnull eval "need$j=true"
169 3d637e16 2005-01-07 devnull if [ $j != $i ]
171 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
174 f6bb3013 2006-06-25 devnull if $verbose
176 f6bb3013 2006-06-25 devnull echo "can$i: $okayfn"
178 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
181 3d637e16 2005-01-07 devnull if $verbose
183 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
186 ead3e311 2005-01-04 devnull for i in $autolibs
188 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
190 c8b6342d 2005-01-13 devnull havethread() { false; }
191 0d85a1cf 2005-02-11 devnull havesec() { false; }
192 f6bb3013 2006-06-25 devnull canmemlayer() { havedraw; }
194 3d637e16 2005-01-07 devnull # now find correct order
195 3d637e16 2005-01-07 devnull libsl=""
196 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
198 3d637e16 2005-01-07 devnull stillneed=""
199 3d637e16 2005-01-07 devnull didnothing=true
200 3d637e16 2005-01-07 devnull for i in $autolibs
202 3d637e16 2005-01-07 devnull if eval "can$i"
204 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
205 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
206 3d637e16 2005-01-07 devnull didnothing=false
208 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
211 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
212 3d637e16 2005-01-07 devnull # to have no dependencies
213 3d637e16 2005-01-07 devnull if $didnothing
216 3d637e16 2005-01-07 devnull for i in $autolibs
220 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
221 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
223 3d637e16 2005-01-07 devnull autolibs="$stillneed"
225 3d637e16 2005-01-07 devnull if $verbose
227 3d637e16 2005-01-07 devnull echo "liborder $libsl"
229 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
231 c8b6342d 2005-01-13 devnull # cycle: lib9 expects p9main, which is defined in libthread. oops.
232 359c1e01 2005-01-14 devnull if havethread
234 359c1e01 2005-01-14 devnull libsl="$libsl -lthread -l9"
237 0d85a1cf 2005-02-11 devnull # cycle: lib9 netcrypt uses libsec
238 0d85a1cf 2005-02-11 devnull if havesec
240 0d85a1cf 2005-02-11 devnull libsl="$libsl -lsec -l9"
243 89eaced6 2006-04-04 devnull if [ "x$needndb" = xtrue -a '(' -f /usr/lib/libresolv.a -o -f /usr/lib/libresolv.dylib ')' ]
245 866a7d1f 2006-02-14 devnull libsl="$libsl -lresolv"
248 a7415518 2007-02-22 devnull if [ "x$needX11" = xtrue -a "x$WSYSTYPE" != xnowsys ]
250 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
252 ead3e311 2005-01-04 devnull X11=/usr/X11R6
254 5d03af65 2012-05-29 rsc # Don't say -L with a non-existent directory: Xcode complains.
255 c968e519 2005-01-18 devnull # x86_64 seems to put its 64-bit libraries in lib64.
256 5d03af65 2012-05-29 rsc if [ "${OBJTYPE:-`uname -m`}" = "x86_64" -a -d "$X11/lib64" ]
258 c968e519 2005-01-18 devnull libsl="$libsl -L$X11/lib64"
260 5d03af65 2012-05-29 rsc if [ -d "$X11/lib" ]
262 5d03af65 2012-05-29 rsc libsl="$libsl -L$X11/lib"
264 5d03af65 2012-05-29 rsc libsl="$libsl -lX11"
267 fc165dcb 2005-10-19 devnull if $doautoframework
269 fc165dcb 2005-10-19 devnull ofiles=""
272 fc165dcb 2005-10-19 devnull case "$i" in
274 fc165dcb 2005-10-19 devnull ofiles="$ofiles $i"
279 fc165dcb 2005-10-19 devnull # echo "ofiles $ofiles"
280 fc165dcb 2005-10-19 devnull autoframeworks=""
281 fc165dcb 2005-10-19 devnull if [ "x$ofiles" != "x" ]
284 fc165dcb 2005-10-19 devnull nm $ofiles |
285 fc165dcb 2005-10-19 devnull grep '__p9l_autoframework_[a-zA-Z0-9+-]*$' |
286 fc165dcb 2005-10-19 devnull sed 's/.*__p9l_autoframework_//' |
289 fc165dcb 2005-10-19 devnull for i in $a
291 fc165dcb 2005-10-19 devnull autoframeworks="$autoframeworks $i"
292 fc165dcb 2005-10-19 devnull eval "need$i=true"
296 fc165dcb 2005-10-19 devnull if $verbose
298 fc165dcb 2005-10-19 devnull echo "autoframeworks $autoframeworks"
301 fc165dcb 2005-10-19 devnull for i in $autoframeworks
303 fc165dcb 2005-10-19 devnull eval "have$i() { false; }"
306 fc165dcb 2005-10-19 devnull frameworks=""
307 fc165dcb 2005-10-19 devnull for i in $autoframeworks
309 fc165dcb 2005-10-19 devnull frameworks="-framework $i $frameworks"
313 108559b2 2005-01-19 devnull case "$userpath" in
315 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
317 54bcb7e9 2005-01-16 devnull case "$i" in
319 54bcb7e9 2005-01-16 devnull s=`echo $i | sed 's/-L/-Wl,-rpath,/'`
320 54bcb7e9 2005-01-16 devnull extralibs="$extralibs $s"
327 3d637e16 2005-01-07 devnull if $verbose
329 fc165dcb 2005-10-19 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks
332 436ff26c 2019-11-11 crossd xtmp="${TMPDIR-/tmp}/9l.$$.$USER.out"
333 237c3090 2005-03-18 devnull xxout() {
334 cb8f7357 2020-01-20 rsc sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . |
335 cb8f7357 2020-01-20 rsc egrep -v 'is (often|almost always) misused|is dangerous, better use|text-based stub'
336 237c3090 2005-03-18 devnull rm -f $xtmp
339 fc165dcb 2005-10-19 devnull if $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks >$xtmp 2>&1
345 724b43e6 2005-01-07 devnull rm -f $target