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 3d637e16 2005-01-07 devnull if $doautolib
20 ead3e311 2005-01-04 devnull ofiles=""
23 ead3e311 2005-01-04 devnull case "$i" in
25 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
30 ead3e311 2005-01-04 devnull # echo "ofiles $ofiles"
31 ead3e311 2005-01-04 devnull autolibs=""
32 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
35 ead3e311 2005-01-04 devnull nm $ofiles |
36 ead3e311 2005-01-04 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
37 190857f9 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
40 3d637e16 2005-01-07 devnull for i in $a
42 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
43 3d637e16 2005-01-07 devnull eval "need$i=true"
47 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
48 3d637e16 2005-01-07 devnull workq="$autolibs"
49 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
51 3d637e16 2005-01-07 devnull w="$workq"
53 3d637e16 2005-01-07 devnull for i in $w
56 3d637e16 2005-01-07 devnull nm $PLAN9/lib/lib$i.a |
57 3d637e16 2005-01-07 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
58 3d637e16 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
61 3d637e16 2005-01-07 devnull okayfn="true"
62 3d637e16 2005-01-07 devnull for j in $a
64 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
66 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
67 3d637e16 2005-01-07 devnull workq="$workq $j"
68 3d637e16 2005-01-07 devnull eval "need$j=true"
70 3d637e16 2005-01-07 devnull if [ $j != $i ]
72 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
75 3d637e16 2005-01-07 devnull # echo "can$i: $okayfn"
76 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
79 3d637e16 2005-01-07 devnull if $verbose
81 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
84 ead3e311 2005-01-04 devnull for i in $autolibs
86 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
89 3d637e16 2005-01-07 devnull # now find correct order
91 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
93 3d637e16 2005-01-07 devnull stillneed=""
94 3d637e16 2005-01-07 devnull didnothing=true
95 3d637e16 2005-01-07 devnull for i in $autolibs
97 3d637e16 2005-01-07 devnull if eval "can$i"
99 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
100 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
101 3d637e16 2005-01-07 devnull didnothing=false
103 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
106 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
107 3d637e16 2005-01-07 devnull # to have no dependencies
108 3d637e16 2005-01-07 devnull if $didnothing
111 3d637e16 2005-01-07 devnull for i in $autolibs
115 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
116 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
118 3d637e16 2005-01-07 devnull autolibs="$stillneed"
120 3d637e16 2005-01-07 devnull if $verbose
122 3d637e16 2005-01-07 devnull echo "liborder $libsl"
124 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
126 3d637e16 2005-01-07 devnull if [ "x$needdraw" = xtrue ]
128 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
130 ead3e311 2005-01-04 devnull X11=/usr/X11R6
132 ead3e311 2005-01-04 devnull libsl="$libsl -L$X11/lib -lX11"
136 2d8fd46b 2004-03-26 devnull extralibs="-lm"
137 8f314994 2004-03-02 devnull tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
138 dbd7b9a9 2003-11-23 devnull case "$tag" in
139 7d0dbb31 2005-01-07 devnull *OpenBSD*)
141 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil -lpthread"
143 7d0dbb31 2005-01-07 devnull *FreeBSD*)
145 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
146 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
147 7d0dbb31 2005-01-07 devnull [5-9].*)
148 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
154 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
156 7d0dbb31 2005-01-07 devnull *Linux*)
158 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
159 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
161 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
165 7d0dbb31 2005-01-07 devnull *Darwin*)
168 7d0dbb31 2005-01-07 devnull *SunOS*)
169 7d0dbb31 2005-01-07 devnull ld="${CC9:-cc} -g"
170 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
171 7d0dbb31 2005-01-07 devnull # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
172 7d0dbb31 2005-01-07 devnull for i in "$@"
174 7d0dbb31 2005-01-07 devnull case "$i" in
176 7d0dbb31 2005-01-07 devnull s=`echo $i | sed 's/-L/-R/'`
177 7d0dbb31 2005-01-07 devnull extralibs="$extralibs $s"
183 dbd7b9a9 2003-11-23 devnull echo do not know how to link on "$tag" 1>&2
187 3d637e16 2005-01-07 devnull if $verbose
189 ead3e311 2005-01-04 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs
191 ead3e311 2005-01-04 devnull exec $ld -L$PLAN9/lib "$@" $libsl $extralibs