Blame


1 dbd7b9a9 2003-11-23 devnull #!/bin/sh
2 dbd7b9a9 2003-11-23 devnull
3 ead3e311 2005-01-04 devnull libsl=""
4 ead3e311 2005-01-04 devnull
5 3d637e16 2005-01-07 devnull doautolib=true
6 3d637e16 2005-01-07 devnull verbose=false
7 ead3e311 2005-01-04 devnull
8 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
9 ead3e311 2005-01-04 devnull then
10 ead3e311 2005-01-04 devnull shift
11 3d637e16 2005-01-07 devnull doautolib=false
12 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
13 ead3e311 2005-01-04 devnull then
14 ead3e311 2005-01-04 devnull shift
15 3d637e16 2005-01-07 devnull verbose=true
16 ead3e311 2005-01-04 devnull fi
17 ead3e311 2005-01-04 devnull
18 3d637e16 2005-01-07 devnull if $doautolib
19 ead3e311 2005-01-04 devnull then
20 ead3e311 2005-01-04 devnull ofiles=""
21 ead3e311 2005-01-04 devnull for i
22 ead3e311 2005-01-04 devnull do
23 ead3e311 2005-01-04 devnull case "$i" in
24 190857f9 2005-01-07 devnull *.o)
25 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
26 ead3e311 2005-01-04 devnull ;;
27 ead3e311 2005-01-04 devnull esac
28 ead3e311 2005-01-04 devnull done
29 ead3e311 2005-01-04 devnull
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" ]
33 ead3e311 2005-01-04 devnull then
34 3d637e16 2005-01-07 devnull a=`
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_//' |
38 ead3e311 2005-01-04 devnull sort -u
39 ead3e311 2005-01-04 devnull `
40 3d637e16 2005-01-07 devnull for i in $a
41 3d637e16 2005-01-07 devnull do
42 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
43 3d637e16 2005-01-07 devnull eval "need$i=true"
44 3d637e16 2005-01-07 devnull done
45 ead3e311 2005-01-04 devnull fi
46 3d637e16 2005-01-07 devnull
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" ]
50 ead3e311 2005-01-04 devnull do
51 3d637e16 2005-01-07 devnull w="$workq"
52 3d637e16 2005-01-07 devnull workq=""
53 3d637e16 2005-01-07 devnull for i in $w
54 3d637e16 2005-01-07 devnull do
55 3d637e16 2005-01-07 devnull a=`
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_//' |
59 3d637e16 2005-01-07 devnull sort -u
60 3d637e16 2005-01-07 devnull `
61 3d637e16 2005-01-07 devnull okayfn="true"
62 3d637e16 2005-01-07 devnull for j in $a
63 3d637e16 2005-01-07 devnull do
64 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
65 3d637e16 2005-01-07 devnull then
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"
69 3d637e16 2005-01-07 devnull fi
70 3d637e16 2005-01-07 devnull if [ $j != $i ]
71 3d637e16 2005-01-07 devnull then
72 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
73 3d637e16 2005-01-07 devnull fi
74 3d637e16 2005-01-07 devnull done
75 3d637e16 2005-01-07 devnull # echo "can$i: $okayfn"
76 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
77 3d637e16 2005-01-07 devnull done
78 ead3e311 2005-01-04 devnull done
79 3d637e16 2005-01-07 devnull if $verbose
80 3d637e16 2005-01-07 devnull then
81 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
82 3d637e16 2005-01-07 devnull fi
83 3d637e16 2005-01-07 devnull
84 ead3e311 2005-01-04 devnull for i in $autolibs
85 ead3e311 2005-01-04 devnull do
86 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
87 ead3e311 2005-01-04 devnull done
88 3d637e16 2005-01-07 devnull
89 3d637e16 2005-01-07 devnull # now find correct order
90 3d637e16 2005-01-07 devnull libsl=""
91 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
92 ead3e311 2005-01-04 devnull do
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
96 3d637e16 2005-01-07 devnull do
97 3d637e16 2005-01-07 devnull if eval "can$i"
98 3d637e16 2005-01-07 devnull then
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
102 3d637e16 2005-01-07 devnull else
103 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
104 3d637e16 2005-01-07 devnull fi
105 3d637e16 2005-01-07 devnull done
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
109 ead3e311 2005-01-04 devnull then
110 3d637e16 2005-01-07 devnull j="xxx"
111 3d637e16 2005-01-07 devnull for i in $autolibs
112 3d637e16 2005-01-07 devnull do
113 3d637e16 2005-01-07 devnull j=$i
114 3d637e16 2005-01-07 devnull done
115 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
116 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
117 ead3e311 2005-01-04 devnull fi
118 3d637e16 2005-01-07 devnull autolibs="$stillneed"
119 ead3e311 2005-01-04 devnull done
120 3d637e16 2005-01-07 devnull if $verbose
121 3d637e16 2005-01-07 devnull then
122 3d637e16 2005-01-07 devnull echo "liborder $libsl"
123 3d637e16 2005-01-07 devnull fi
124 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
125 3d637e16 2005-01-07 devnull
126 3d637e16 2005-01-07 devnull if [ "x$needdraw" = xtrue ]
127 ead3e311 2005-01-04 devnull then
128 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
129 ead3e311 2005-01-04 devnull then
130 ead3e311 2005-01-04 devnull X11=/usr/X11R6
131 ead3e311 2005-01-04 devnull fi
132 ead3e311 2005-01-04 devnull libsl="$libsl -L$X11/lib -lX11"
133 ead3e311 2005-01-04 devnull fi
134 ead3e311 2005-01-04 devnull fi
135 ead3e311 2005-01-04 devnull
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*)
140 7d0dbb31 2005-01-07 devnull ld=gcc
141 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil -lpthread"
142 7d0dbb31 2005-01-07 devnull ;;
143 7d0dbb31 2005-01-07 devnull *FreeBSD*)
144 7d0dbb31 2005-01-07 devnull ld=gcc
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"
149 cb27443a 2004-03-25 devnull ;;
150 7d0dbb31 2005-01-07 devnull esac
151 7d0dbb31 2005-01-07 devnull ;;
152 7d0dbb31 2005-01-07 devnull *BSD*)
153 7d0dbb31 2005-01-07 devnull ld=gcc
154 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
155 7d0dbb31 2005-01-07 devnull ;;
156 7d0dbb31 2005-01-07 devnull *Linux*)
157 7d0dbb31 2005-01-07 devnull ld=gcc
158 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
159 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
160 7d0dbb31 2005-01-07 devnull 2.6.*)
161 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
162 2d8fd46b 2004-03-26 devnull ;;
163 7d0dbb31 2005-01-07 devnull esac
164 7d0dbb31 2005-01-07 devnull ;;
165 7d0dbb31 2005-01-07 devnull *Darwin*)
166 7d0dbb31 2005-01-07 devnull ld=gcc
167 7d0dbb31 2005-01-07 devnull ;;
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 "$@"
173 7d0dbb31 2005-01-07 devnull do
174 7d0dbb31 2005-01-07 devnull case "$i" in
175 7d0dbb31 2005-01-07 devnull -L*)
176 7d0dbb31 2005-01-07 devnull s=`echo $i | sed 's/-L/-R/'`
177 7d0dbb31 2005-01-07 devnull extralibs="$extralibs $s"
178 282c88f9 2004-09-17 devnull ;;
179 282c88f9 2004-09-17 devnull esac
180 7d0dbb31 2005-01-07 devnull done
181 7d0dbb31 2005-01-07 devnull ;;
182 dbd7b9a9 2003-11-23 devnull *)
183 dbd7b9a9 2003-11-23 devnull echo do not know how to link on "$tag" 1>&2
184 dbd7b9a9 2003-11-23 devnull exit 1
185 dbd7b9a9 2003-11-23 devnull esac
186 dbd7b9a9 2003-11-23 devnull
187 3d637e16 2005-01-07 devnull if $verbose
188 ead3e311 2005-01-04 devnull then
189 ead3e311 2005-01-04 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs
190 ead3e311 2005-01-04 devnull fi
191 ead3e311 2005-01-04 devnull exec $ld -L$PLAN9/lib "$@" $libsl $extralibs