Blame


1 dbd7b9a9 2003-11-23 devnull #!/bin/sh
2 dbd7b9a9 2003-11-23 devnull
3 eea5f6ad 2005-01-17 devnull test -f $PLAN9/config && . $PLAN9/config
4 ead3e311 2005-01-04 devnull libsl=""
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
9 ead3e311 2005-01-04 devnull
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 a4980b39 2009-07-15 BHuntsman *FreeBSD*)
15 0c6074b6 2010-02-23 rsc ld=${CC9:-gcc}
16 a4980b39 2009-07-15 BHuntsman userpath=true
17 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
18 a4980b39 2009-07-15 BHuntsman case "`uname -r`" in
19 a4980b39 2009-07-15 BHuntsman 5.2.*)
20 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lkse"
21 a4980b39 2009-07-15 BHuntsman ;;
22 17329592 2017-09-14 0intro [5-9].*|1[0-1].*)
23 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lpthread"
24 a4980b39 2009-07-15 BHuntsman ;;
25 a4980b39 2009-07-15 BHuntsman esac
26 a4980b39 2009-07-15 BHuntsman ;;
27 20035ed4 2014-02-28 minux.ma *DragonFly*|*BSD*)
28 0c6074b6 2010-02-23 rsc ld=${CC9:-gcc}
29 a4980b39 2009-07-15 BHuntsman userpath=true
30 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
31 a4980b39 2009-07-15 BHuntsman ;;
32 a4980b39 2009-07-15 BHuntsman *OSF1*)
33 0c6074b6 2010-02-23 rsc ld=${CC9:-cc}
34 a4980b39 2009-07-15 BHuntsman userpath=true
35 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lutil"
36 a4980b39 2009-07-15 BHuntsman nmflags="-B"
37 a4980b39 2009-07-15 BHuntsman ;;
38 a4980b39 2009-07-15 BHuntsman *Linux*)
39 0c6074b6 2010-02-23 rsc ld=${CC9:-gcc}
40 a4980b39 2009-07-15 BHuntsman userpath=true
41 fd3496d3 2014-10-20 0intro extralibs="$extralibs -lutil -lresolv"
42 a4980b39 2009-07-15 BHuntsman case "${SYSVERSION:-`uname -r`}" in
43 e4d6099e 2017-10-13 0intro 2.6.* | 3.* | 4.*)
44 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lpthread"
45 a4980b39 2009-07-15 BHuntsman ;;
46 a4980b39 2009-07-15 BHuntsman esac
47 a4980b39 2009-07-15 BHuntsman ;;
48 fc567f47 2011-08-02 rsc *Darwin*x86_64*)
49 fc567f47 2011-08-02 rsc ld="${CC9:-gcc} -m64"
50 fc567f47 2011-08-02 rsc ;;
51 a4980b39 2009-07-15 BHuntsman *Darwin*)
52 0c6074b6 2010-02-23 rsc ld="${CC9:-gcc} -m32"
53 a4980b39 2009-07-15 BHuntsman ;;
54 a4980b39 2009-07-15 BHuntsman *SunOS*)
55 a4980b39 2009-07-15 BHuntsman ld="${CC9:-cc} -g"
56 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
57 a4980b39 2009-07-15 BHuntsman # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
58 a4980b39 2009-07-15 BHuntsman for i in "$libsl $@"
59 a4980b39 2009-07-15 BHuntsman do
60 a4980b39 2009-07-15 BHuntsman case "$i" in
61 a4980b39 2009-07-15 BHuntsman -L*)
62 a4980b39 2009-07-15 BHuntsman s=`echo $i | sed 's/-L/-R/'`
63 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs $s"
64 a4980b39 2009-07-15 BHuntsman ;;
65 a4980b39 2009-07-15 BHuntsman esac
66 a4980b39 2009-07-15 BHuntsman done
67 a4980b39 2009-07-15 BHuntsman case "${SYSVERSION:-`uname -r`}" in
68 a4980b39 2009-07-15 BHuntsman 5.[67])
69 a4980b39 2009-07-15 BHuntsman echo do not know how to link right thread library on "$tag" 1>&2
70 a4980b39 2009-07-15 BHuntsman ;;
71 a4980b39 2009-07-15 BHuntsman 5.8)
72 a4980b39 2009-07-15 BHuntsman # Some trickery is needed to force use of
73 a4980b39 2009-07-15 BHuntsman # alternate thread lib from /usr/lib/lwp
74 a4980b39 2009-07-15 BHuntsman # Likely, this only works with sun cc,
75 a4980b39 2009-07-15 BHuntsman # for other compiler/loader we would need other flags.
76 a4980b39 2009-07-15 BHuntsman ld="$ld -i"
77 a4980b39 2009-07-15 BHuntsman extralibs="$extralibs /usr/lib/lwp/libthread.so -R/usr/lib/lwp:/usr/lib"
78 a4980b39 2009-07-15 BHuntsman ;;
79 a4980b39 2009-07-15 BHuntsman esac
80 a4980b39 2009-07-15 BHuntsman ;;
81 a4980b39 2009-07-15 BHuntsman *AIX*)
82 0c6074b6 2010-02-23 rsc ld=${CC9:-gcc}
83 a4980b39 2009-07-15 BHuntsman nmflags="-B"
84 a4980b39 2009-07-15 BHuntsman ;;
85 a4980b39 2009-07-15 BHuntsman *)
86 a4980b39 2009-07-15 BHuntsman echo do not know how to link on "$tag" 1>&2
87 a4980b39 2009-07-15 BHuntsman exit 1
88 a4980b39 2009-07-15 BHuntsman esac
89 a4980b39 2009-07-15 BHuntsman
90 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
91 ead3e311 2005-01-04 devnull then
92 ead3e311 2005-01-04 devnull shift
93 3d637e16 2005-01-07 devnull doautolib=false
94 fc165dcb 2005-10-19 devnull doautoframework=false
95 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
96 ead3e311 2005-01-04 devnull then
97 ead3e311 2005-01-04 devnull shift
98 3d637e16 2005-01-07 devnull verbose=true
99 ead3e311 2005-01-04 devnull fi
100 ead3e311 2005-01-04 devnull
101 724b43e6 2005-01-07 devnull target=a.out
102 724b43e6 2005-01-07 devnull if [ "x$1" = "x-o" ]
103 724b43e6 2005-01-07 devnull then
104 724b43e6 2005-01-07 devnull target=$2
105 724b43e6 2005-01-07 devnull fi
106 724b43e6 2005-01-07 devnull
107 3d637e16 2005-01-07 devnull if $doautolib
108 ead3e311 2005-01-04 devnull then
109 ead3e311 2005-01-04 devnull ofiles=""
110 d210f09d 2008-12-03 jas lpaths="$PLAN9/lib"
111 ead3e311 2005-01-04 devnull for i
112 ead3e311 2005-01-04 devnull do
113 ead3e311 2005-01-04 devnull case "$i" in
114 359c1e01 2005-01-14 devnull *.[ao])
115 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
116 ead3e311 2005-01-04 devnull ;;
117 d210f09d 2008-12-03 jas -L*)
118 d210f09d 2008-12-03 jas l=`echo $i | sed 's/-L//'`
119 d210f09d 2008-12-03 jas lpaths="$lpaths $l"
120 ead3e311 2005-01-04 devnull esac
121 ead3e311 2005-01-04 devnull done
122 ead3e311 2005-01-04 devnull
123 d210f09d 2008-12-03 jas if $verbose
124 d210f09d 2008-12-03 jas then
125 d210f09d 2008-12-03 jas echo "ofiles $ofiles"
126 d210f09d 2008-12-03 jas echo "lpaths $lpaths"
127 d210f09d 2008-12-03 jas fi
128 d210f09d 2008-12-03 jas
129 ead3e311 2005-01-04 devnull autolibs=""
130 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
131 ead3e311 2005-01-04 devnull then
132 3d637e16 2005-01-07 devnull a=`
133 a4980b39 2009-07-15 BHuntsman nm $nmflags $ofiles |
134 ead3e311 2005-01-04 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
135 190857f9 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
136 ead3e311 2005-01-04 devnull sort -u
137 ead3e311 2005-01-04 devnull `
138 3d637e16 2005-01-07 devnull for i in $a
139 3d637e16 2005-01-07 devnull do
140 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
141 3d637e16 2005-01-07 devnull eval "need$i=true"
142 3d637e16 2005-01-07 devnull done
143 ead3e311 2005-01-04 devnull fi
144 f6bb3013 2006-06-25 devnull if $verbose
145 f6bb3013 2006-06-25 devnull then
146 f6bb3013 2006-06-25 devnull echo "autolibs1 $autolibs"
147 f6bb3013 2006-06-25 devnull fi
148 3d637e16 2005-01-07 devnull
149 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
150 3d637e16 2005-01-07 devnull workq="$autolibs"
151 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
152 ead3e311 2005-01-04 devnull do
153 3d637e16 2005-01-07 devnull w="$workq"
154 3d637e16 2005-01-07 devnull workq=""
155 3d637e16 2005-01-07 devnull for i in $w
156 3d637e16 2005-01-07 devnull do
157 359c1e01 2005-01-14 devnull # can't trust the libraries about using
158 866a7d1f 2006-02-14 devnull # libthread or libdraw - we might not be linking with
159 359c1e01 2005-01-14 devnull # those object files.
160 d210f09d 2008-12-03 jas a=""
161 d210f09d 2008-12-03 jas for lpath in $lpaths
162 d210f09d 2008-12-03 jas do
163 d210f09d 2008-12-03 jas b=`
164 d210f09d 2008-12-03 jas nm $lpath/lib$i.a 2>/dev/null |
165 d210f09d 2008-12-03 jas grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
166 d210f09d 2008-12-03 jas sed 's/.*__p9l_autolib_//' |
167 d210f09d 2008-12-03 jas sort -u |
168 d210f09d 2008-12-03 jas egrep -v '^(thread|draw)$'
169 d210f09d 2008-12-03 jas `
170 d210f09d 2008-12-03 jas a="$a $b"
171 d210f09d 2008-12-03 jas done
172 f6bb3013 2006-06-25 devnull # fix up libraries that really need draw
173 f6bb3013 2006-06-25 devnull if [ "x$i" = "xmemdraw" -o "x$i" = "xmemlayer" -o "x$i" = "xframe" ]
174 f6bb3013 2006-06-25 devnull then
175 f6bb3013 2006-06-25 devnull a="$a draw"
176 f6bb3013 2006-06-25 devnull fi
177 3d637e16 2005-01-07 devnull okayfn="true"
178 3d637e16 2005-01-07 devnull for j in $a
179 3d637e16 2005-01-07 devnull do
180 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
181 3d637e16 2005-01-07 devnull then
182 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
183 3d637e16 2005-01-07 devnull workq="$workq $j"
184 3d637e16 2005-01-07 devnull eval "need$j=true"
185 3d637e16 2005-01-07 devnull fi
186 3d637e16 2005-01-07 devnull if [ $j != $i ]
187 3d637e16 2005-01-07 devnull then
188 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
189 3d637e16 2005-01-07 devnull fi
190 3d637e16 2005-01-07 devnull done
191 f6bb3013 2006-06-25 devnull if $verbose
192 f6bb3013 2006-06-25 devnull then
193 f6bb3013 2006-06-25 devnull echo "can$i: $okayfn"
194 f6bb3013 2006-06-25 devnull fi
195 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
196 3d637e16 2005-01-07 devnull done
197 ead3e311 2005-01-04 devnull done
198 3d637e16 2005-01-07 devnull if $verbose
199 3d637e16 2005-01-07 devnull then
200 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
201 3d637e16 2005-01-07 devnull fi
202 3d637e16 2005-01-07 devnull
203 ead3e311 2005-01-04 devnull for i in $autolibs
204 ead3e311 2005-01-04 devnull do
205 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
206 ead3e311 2005-01-04 devnull done
207 c8b6342d 2005-01-13 devnull havethread() { false; }
208 0d85a1cf 2005-02-11 devnull havesec() { false; }
209 f6bb3013 2006-06-25 devnull canmemlayer() { havedraw; }
210 3d637e16 2005-01-07 devnull
211 3d637e16 2005-01-07 devnull # now find correct order
212 3d637e16 2005-01-07 devnull libsl=""
213 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
214 ead3e311 2005-01-04 devnull do
215 3d637e16 2005-01-07 devnull stillneed=""
216 3d637e16 2005-01-07 devnull didnothing=true
217 3d637e16 2005-01-07 devnull for i in $autolibs
218 3d637e16 2005-01-07 devnull do
219 3d637e16 2005-01-07 devnull if eval "can$i"
220 3d637e16 2005-01-07 devnull then
221 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
222 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
223 3d637e16 2005-01-07 devnull didnothing=false
224 3d637e16 2005-01-07 devnull else
225 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
226 3d637e16 2005-01-07 devnull fi
227 3d637e16 2005-01-07 devnull done
228 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
229 3d637e16 2005-01-07 devnull # to have no dependencies
230 3d637e16 2005-01-07 devnull if $didnothing
231 ead3e311 2005-01-04 devnull then
232 3d637e16 2005-01-07 devnull j="xxx"
233 3d637e16 2005-01-07 devnull for i in $autolibs
234 3d637e16 2005-01-07 devnull do
235 3d637e16 2005-01-07 devnull j=$i
236 3d637e16 2005-01-07 devnull done
237 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
238 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
239 ead3e311 2005-01-04 devnull fi
240 3d637e16 2005-01-07 devnull autolibs="$stillneed"
241 ead3e311 2005-01-04 devnull done
242 3d637e16 2005-01-07 devnull if $verbose
243 3d637e16 2005-01-07 devnull then
244 3d637e16 2005-01-07 devnull echo "liborder $libsl"
245 3d637e16 2005-01-07 devnull fi
246 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
247 3d637e16 2005-01-07 devnull
248 c8b6342d 2005-01-13 devnull # cycle: lib9 expects p9main, which is defined in libthread. oops.
249 359c1e01 2005-01-14 devnull if havethread
250 c8b6342d 2005-01-13 devnull then
251 359c1e01 2005-01-14 devnull libsl="$libsl -lthread -l9"
252 c8b6342d 2005-01-13 devnull fi
253 c8b6342d 2005-01-13 devnull
254 0d85a1cf 2005-02-11 devnull # cycle: lib9 netcrypt uses libsec
255 0d85a1cf 2005-02-11 devnull if havesec
256 0d85a1cf 2005-02-11 devnull then
257 0d85a1cf 2005-02-11 devnull libsl="$libsl -lsec -l9"
258 866a7d1f 2006-02-14 devnull fi
259 866a7d1f 2006-02-14 devnull
260 89eaced6 2006-04-04 devnull if [ "x$needndb" = xtrue -a '(' -f /usr/lib/libresolv.a -o -f /usr/lib/libresolv.dylib ')' ]
261 866a7d1f 2006-02-14 devnull then
262 866a7d1f 2006-02-14 devnull libsl="$libsl -lresolv"
263 0d85a1cf 2005-02-11 devnull fi
264 0d85a1cf 2005-02-11 devnull
265 a7415518 2007-02-22 devnull if [ "x$needX11" = xtrue -a "x$WSYSTYPE" != xnowsys ]
266 ead3e311 2005-01-04 devnull then
267 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
268 ead3e311 2005-01-04 devnull then
269 ead3e311 2005-01-04 devnull X11=/usr/X11R6
270 ead3e311 2005-01-04 devnull fi
271 5d03af65 2012-05-29 rsc # Don't say -L with a non-existent directory: Xcode complains.
272 c968e519 2005-01-18 devnull # x86_64 seems to put its 64-bit libraries in lib64.
273 5d03af65 2012-05-29 rsc if [ "${OBJTYPE:-`uname -m`}" = "x86_64" -a -d "$X11/lib64" ]
274 c968e519 2005-01-18 devnull then
275 c968e519 2005-01-18 devnull libsl="$libsl -L$X11/lib64"
276 c968e519 2005-01-18 devnull fi
277 5d03af65 2012-05-29 rsc if [ -d "$X11/lib" ]
278 5d03af65 2012-05-29 rsc then
279 5d03af65 2012-05-29 rsc libsl="$libsl -L$X11/lib"
280 5d03af65 2012-05-29 rsc fi
281 5d03af65 2012-05-29 rsc libsl="$libsl -lX11"
282 ead3e311 2005-01-04 devnull fi
283 ead3e311 2005-01-04 devnull fi
284 fc165dcb 2005-10-19 devnull if $doautoframework
285 fc165dcb 2005-10-19 devnull then
286 fc165dcb 2005-10-19 devnull ofiles=""
287 fc165dcb 2005-10-19 devnull for i
288 fc165dcb 2005-10-19 devnull do
289 fc165dcb 2005-10-19 devnull case "$i" in
290 fc165dcb 2005-10-19 devnull *.[ao])
291 fc165dcb 2005-10-19 devnull ofiles="$ofiles $i"
292 fc165dcb 2005-10-19 devnull ;;
293 fc165dcb 2005-10-19 devnull esac
294 fc165dcb 2005-10-19 devnull done
295 ead3e311 2005-01-04 devnull
296 fc165dcb 2005-10-19 devnull # echo "ofiles $ofiles"
297 fc165dcb 2005-10-19 devnull autoframeworks=""
298 fc165dcb 2005-10-19 devnull if [ "x$ofiles" != "x" ]
299 fc165dcb 2005-10-19 devnull then
300 fc165dcb 2005-10-19 devnull a=`
301 fc165dcb 2005-10-19 devnull nm $ofiles |
302 fc165dcb 2005-10-19 devnull grep '__p9l_autoframework_[a-zA-Z0-9+-]*$' |
303 fc165dcb 2005-10-19 devnull sed 's/.*__p9l_autoframework_//' |
304 fc165dcb 2005-10-19 devnull sort -u
305 fc165dcb 2005-10-19 devnull `
306 fc165dcb 2005-10-19 devnull for i in $a
307 fc165dcb 2005-10-19 devnull do
308 fc165dcb 2005-10-19 devnull autoframeworks="$autoframeworks $i"
309 fc165dcb 2005-10-19 devnull eval "need$i=true"
310 fc165dcb 2005-10-19 devnull done
311 fc165dcb 2005-10-19 devnull fi
312 fc165dcb 2005-10-19 devnull
313 fc165dcb 2005-10-19 devnull if $verbose
314 fc165dcb 2005-10-19 devnull then
315 fc165dcb 2005-10-19 devnull echo "autoframeworks $autoframeworks"
316 fc165dcb 2005-10-19 devnull fi
317 fc165dcb 2005-10-19 devnull
318 fc165dcb 2005-10-19 devnull for i in $autoframeworks
319 fc165dcb 2005-10-19 devnull do
320 fc165dcb 2005-10-19 devnull eval "have$i() { false; }"
321 fc165dcb 2005-10-19 devnull done
322 fc165dcb 2005-10-19 devnull
323 fc165dcb 2005-10-19 devnull frameworks=""
324 fc165dcb 2005-10-19 devnull for i in $autoframeworks
325 fc165dcb 2005-10-19 devnull do
326 fc165dcb 2005-10-19 devnull frameworks="-framework $i $frameworks"
327 fc165dcb 2005-10-19 devnull done
328 fc165dcb 2005-10-19 devnull fi
329 dbd7b9a9 2003-11-23 devnull
330 108559b2 2005-01-19 devnull case "$userpath" in
331 108559b2 2005-01-19 devnull true)
332 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
333 54bcb7e9 2005-01-16 devnull do
334 54bcb7e9 2005-01-16 devnull case "$i" in
335 54bcb7e9 2005-01-16 devnull -L*)
336 54bcb7e9 2005-01-16 devnull s=`echo $i | sed 's/-L/-Wl,-rpath,/'`
337 54bcb7e9 2005-01-16 devnull extralibs="$extralibs $s"
338 54bcb7e9 2005-01-16 devnull ;;
339 54bcb7e9 2005-01-16 devnull esac
340 54bcb7e9 2005-01-16 devnull done
341 54bcb7e9 2005-01-16 devnull ;;
342 54bcb7e9 2005-01-16 devnull esac
343 54bcb7e9 2005-01-16 devnull
344 3d637e16 2005-01-07 devnull if $verbose
345 ead3e311 2005-01-04 devnull then
346 fc165dcb 2005-10-19 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks
347 ead3e311 2005-01-04 devnull fi
348 237c3090 2005-03-18 devnull
349 237c3090 2005-03-18 devnull xtmp=/tmp/9l.$$.$USER.out
350 237c3090 2005-03-18 devnull xxout() {
351 866a7d1f 2006-02-14 devnull sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . |
352 96f54e3f 2007-03-26 devnull egrep -v 'is (often|almost always) misused|is dangerous, better use'
353 237c3090 2005-03-18 devnull rm -f $xtmp
354 237c3090 2005-03-18 devnull }
355 237c3090 2005-03-18 devnull
356 fc165dcb 2005-10-19 devnull if $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks >$xtmp 2>&1
357 8953da37 2005-01-07 devnull then
358 237c3090 2005-03-18 devnull xxout
359 c8b6342d 2005-01-13 devnull exit 0
360 c8b6342d 2005-01-13 devnull else
361 237c3090 2005-03-18 devnull xxout
362 724b43e6 2005-01-07 devnull rm -f $target
363 724b43e6 2005-01-07 devnull exit 1
364 8953da37 2005-01-07 devnull fi
365 c8b6342d 2005-01-13 devnull