3 eea5f6ad 2005-01-17 devnull test -f $PLAN9/config && . $PLAN9/config
6 3d637e16 2005-01-07 devnull doautolib=true
7 3d637e16 2005-01-07 devnull verbose=false
9 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
12 3d637e16 2005-01-07 devnull doautolib=false
13 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
16 3d637e16 2005-01-07 devnull verbose=true
19 724b43e6 2005-01-07 devnull target=a.out
20 724b43e6 2005-01-07 devnull if [ "x$1" = "x-o" ]
22 724b43e6 2005-01-07 devnull target=$2
25 3d637e16 2005-01-07 devnull if $doautolib
27 ead3e311 2005-01-04 devnull ofiles=""
30 ead3e311 2005-01-04 devnull case "$i" in
32 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
37 ead3e311 2005-01-04 devnull # echo "ofiles $ofiles"
38 ead3e311 2005-01-04 devnull autolibs=""
39 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
42 ead3e311 2005-01-04 devnull nm $ofiles |
43 ead3e311 2005-01-04 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
44 190857f9 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
47 3d637e16 2005-01-07 devnull for i in $a
49 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
50 3d637e16 2005-01-07 devnull eval "need$i=true"
54 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
55 3d637e16 2005-01-07 devnull workq="$autolibs"
56 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
58 3d637e16 2005-01-07 devnull w="$workq"
60 3d637e16 2005-01-07 devnull for i in $w
62 359c1e01 2005-01-14 devnull # can't trust the libraries about using
63 359c1e01 2005-01-14 devnull # libthread - we might not be linking with
64 359c1e01 2005-01-14 devnull # those object files.
66 3d637e16 2005-01-07 devnull nm $PLAN9/lib/lib$i.a |
67 3d637e16 2005-01-07 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
68 3d637e16 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
69 359c1e01 2005-01-14 devnull sort -u |
70 359c1e01 2005-01-14 devnull grep -v thread
72 3d637e16 2005-01-07 devnull okayfn="true"
73 3d637e16 2005-01-07 devnull for j in $a
75 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
77 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
78 3d637e16 2005-01-07 devnull workq="$workq $j"
79 3d637e16 2005-01-07 devnull eval "need$j=true"
81 3d637e16 2005-01-07 devnull if [ $j != $i ]
83 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
86 3d637e16 2005-01-07 devnull # echo "can$i: $okayfn"
87 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
90 3d637e16 2005-01-07 devnull if $verbose
92 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
95 ead3e311 2005-01-04 devnull for i in $autolibs
97 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
99 c8b6342d 2005-01-13 devnull havethread() { false; }
101 3d637e16 2005-01-07 devnull # now find correct order
102 3d637e16 2005-01-07 devnull libsl=""
103 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
105 3d637e16 2005-01-07 devnull stillneed=""
106 3d637e16 2005-01-07 devnull didnothing=true
107 3d637e16 2005-01-07 devnull for i in $autolibs
109 3d637e16 2005-01-07 devnull if eval "can$i"
111 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
112 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
113 3d637e16 2005-01-07 devnull didnothing=false
115 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
118 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
119 3d637e16 2005-01-07 devnull # to have no dependencies
120 3d637e16 2005-01-07 devnull if $didnothing
123 3d637e16 2005-01-07 devnull for i in $autolibs
127 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
128 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
130 3d637e16 2005-01-07 devnull autolibs="$stillneed"
132 3d637e16 2005-01-07 devnull if $verbose
134 3d637e16 2005-01-07 devnull echo "liborder $libsl"
136 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
138 c8b6342d 2005-01-13 devnull # cycle: lib9 expects p9main, which is defined in libthread. oops.
139 359c1e01 2005-01-14 devnull if havethread
141 359c1e01 2005-01-14 devnull libsl="$libsl -lthread -l9"
144 3d637e16 2005-01-07 devnull if [ "x$needdraw" = xtrue ]
146 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
148 ead3e311 2005-01-04 devnull X11=/usr/X11R6
150 c968e519 2005-01-18 devnull # x86_64 seems to put its 64-bit libraries in lib64.
151 c968e519 2005-01-18 devnull if [ "${OBJTYPE:-`uname -m`}" = "x86_64" ]
153 c968e519 2005-01-18 devnull libsl="$libsl -L$X11/lib64"
155 ead3e311 2005-01-04 devnull libsl="$libsl -L$X11/lib -lX11"
159 2d8fd46b 2004-03-26 devnull extralibs="-lm"
160 8f314994 2004-03-02 devnull tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
161 dbd7b9a9 2003-11-23 devnull case "$tag" in
162 7d0dbb31 2005-01-07 devnull *OpenBSD*)
164 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil -lpthread"
166 7d0dbb31 2005-01-07 devnull *FreeBSD*)
168 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
169 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
170 7d0dbb31 2005-01-07 devnull [5-9].*)
171 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
177 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
179 7d0dbb31 2005-01-07 devnull *Linux*)
181 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
182 eea5f6ad 2005-01-17 devnull case "${SYSVERSION:-`uname -r`}" in
184 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
188 7d0dbb31 2005-01-07 devnull *Darwin*)
191 7d0dbb31 2005-01-07 devnull *SunOS*)
192 7d0dbb31 2005-01-07 devnull ld="${CC9:-cc} -g"
193 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
194 7d0dbb31 2005-01-07 devnull # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
195 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
197 7d0dbb31 2005-01-07 devnull case "$i" in
199 7d0dbb31 2005-01-07 devnull s=`echo $i | sed 's/-L/-R/'`
200 7d0dbb31 2005-01-07 devnull extralibs="$extralibs $s"
206 dbd7b9a9 2003-11-23 devnull echo do not know how to link on "$tag" 1>&2
210 54bcb7e9 2005-01-16 devnull case "$ld" in
212 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
214 54bcb7e9 2005-01-16 devnull case "$i" in
216 54bcb7e9 2005-01-16 devnull s=`echo $i | sed 's/-L/-Wl,-rpath,/'`
217 54bcb7e9 2005-01-16 devnull extralibs="$extralibs $s"
224 3d637e16 2005-01-07 devnull if $verbose
226 ead3e311 2005-01-04 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs
228 c8b6342d 2005-01-13 devnull if $ld -L$PLAN9/lib "$@" $libsl $extralibs
232 724b43e6 2005-01-07 devnull rm -f $target