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