5 3d637e16 2005-01-07 devnull doautolib=true
6 3d637e16 2005-01-07 devnull verbose=false
8 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
11 3d637e16 2005-01-07 devnull doautolib=false
12 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
15 3d637e16 2005-01-07 devnull verbose=true
18 724b43e6 2005-01-07 devnull target=a.out
19 724b43e6 2005-01-07 devnull if [ "x$1" = "x-o" ]
21 724b43e6 2005-01-07 devnull target=$2
24 3d637e16 2005-01-07 devnull if $doautolib
26 ead3e311 2005-01-04 devnull ofiles=""
29 ead3e311 2005-01-04 devnull case "$i" in
31 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
36 ead3e311 2005-01-04 devnull # echo "ofiles $ofiles"
37 ead3e311 2005-01-04 devnull autolibs=""
38 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
41 ead3e311 2005-01-04 devnull nm $ofiles |
42 ead3e311 2005-01-04 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
43 190857f9 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
46 3d637e16 2005-01-07 devnull for i in $a
48 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
49 3d637e16 2005-01-07 devnull eval "need$i=true"
53 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
54 3d637e16 2005-01-07 devnull workq="$autolibs"
55 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
57 3d637e16 2005-01-07 devnull w="$workq"
59 3d637e16 2005-01-07 devnull for i in $w
62 3d637e16 2005-01-07 devnull nm $PLAN9/lib/lib$i.a |
63 3d637e16 2005-01-07 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
64 3d637e16 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
67 3d637e16 2005-01-07 devnull okayfn="true"
68 3d637e16 2005-01-07 devnull for j in $a
70 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
72 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
73 3d637e16 2005-01-07 devnull workq="$workq $j"
74 3d637e16 2005-01-07 devnull eval "need$j=true"
76 3d637e16 2005-01-07 devnull if [ $j != $i ]
78 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
81 3d637e16 2005-01-07 devnull # echo "can$i: $okayfn"
82 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
85 3d637e16 2005-01-07 devnull if $verbose
87 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
90 ead3e311 2005-01-04 devnull for i in $autolibs
92 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
95 3d637e16 2005-01-07 devnull # now find correct order
97 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
99 3d637e16 2005-01-07 devnull stillneed=""
100 3d637e16 2005-01-07 devnull didnothing=true
101 3d637e16 2005-01-07 devnull for i in $autolibs
103 3d637e16 2005-01-07 devnull if eval "can$i"
105 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
106 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
107 3d637e16 2005-01-07 devnull didnothing=false
109 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
112 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
113 3d637e16 2005-01-07 devnull # to have no dependencies
114 3d637e16 2005-01-07 devnull if $didnothing
117 3d637e16 2005-01-07 devnull for i in $autolibs
121 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
122 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
124 3d637e16 2005-01-07 devnull autolibs="$stillneed"
126 3d637e16 2005-01-07 devnull if $verbose
128 3d637e16 2005-01-07 devnull echo "liborder $libsl"
130 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
132 3d637e16 2005-01-07 devnull if [ "x$needdraw" = xtrue ]
134 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
136 ead3e311 2005-01-04 devnull X11=/usr/X11R6
138 ead3e311 2005-01-04 devnull libsl="$libsl -L$X11/lib -lX11"
142 2d8fd46b 2004-03-26 devnull extralibs="-lm"
143 8f314994 2004-03-02 devnull tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
144 dbd7b9a9 2003-11-23 devnull case "$tag" in
145 7d0dbb31 2005-01-07 devnull *OpenBSD*)
147 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil -lpthread"
149 7d0dbb31 2005-01-07 devnull *FreeBSD*)
151 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
152 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
153 7d0dbb31 2005-01-07 devnull [5-9].*)
154 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
160 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
162 7d0dbb31 2005-01-07 devnull *Linux*)
164 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
165 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
167 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
171 7d0dbb31 2005-01-07 devnull *Darwin*)
174 7d0dbb31 2005-01-07 devnull *SunOS*)
175 7d0dbb31 2005-01-07 devnull ld="${CC9:-cc} -g"
176 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
177 7d0dbb31 2005-01-07 devnull # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
178 7d0dbb31 2005-01-07 devnull for i in "$@"
180 7d0dbb31 2005-01-07 devnull case "$i" in
182 7d0dbb31 2005-01-07 devnull s=`echo $i | sed 's/-L/-R/'`
183 7d0dbb31 2005-01-07 devnull extralibs="$extralibs $s"
189 dbd7b9a9 2003-11-23 devnull echo do not know how to link on "$tag" 1>&2
193 3d637e16 2005-01-07 devnull if $verbose
195 ead3e311 2005-01-04 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs
197 724b43e6 2005-01-07 devnull if ! $ld -L$PLAN9/lib "$@" $libsl $extralibs
199 724b43e6 2005-01-07 devnull rm -f $target