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 ead3e311 2005-01-04 devnull
6 3d637e16 2005-01-07 devnull doautolib=true
7 3d637e16 2005-01-07 devnull verbose=false
8 ead3e311 2005-01-04 devnull
9 ead3e311 2005-01-04 devnull if [ "x$1" = "x-l" ]
10 ead3e311 2005-01-04 devnull then
11 ead3e311 2005-01-04 devnull shift
12 3d637e16 2005-01-07 devnull doautolib=false
13 ead3e311 2005-01-04 devnull elif [ "x$1" = "x-v" ]
14 ead3e311 2005-01-04 devnull then
15 ead3e311 2005-01-04 devnull shift
16 3d637e16 2005-01-07 devnull verbose=true
17 ead3e311 2005-01-04 devnull fi
18 ead3e311 2005-01-04 devnull
19 724b43e6 2005-01-07 devnull target=a.out
20 724b43e6 2005-01-07 devnull if [ "x$1" = "x-o" ]
21 724b43e6 2005-01-07 devnull then
22 724b43e6 2005-01-07 devnull target=$2
23 724b43e6 2005-01-07 devnull fi
24 724b43e6 2005-01-07 devnull
25 3d637e16 2005-01-07 devnull if $doautolib
26 ead3e311 2005-01-04 devnull then
27 ead3e311 2005-01-04 devnull ofiles=""
28 ead3e311 2005-01-04 devnull for i
29 ead3e311 2005-01-04 devnull do
30 ead3e311 2005-01-04 devnull case "$i" in
31 359c1e01 2005-01-14 devnull *.[ao])
32 ead3e311 2005-01-04 devnull ofiles="$ofiles $i"
33 ead3e311 2005-01-04 devnull ;;
34 ead3e311 2005-01-04 devnull esac
35 ead3e311 2005-01-04 devnull done
36 ead3e311 2005-01-04 devnull
37 ead3e311 2005-01-04 devnull # echo "ofiles $ofiles"
38 ead3e311 2005-01-04 devnull autolibs=""
39 ead3e311 2005-01-04 devnull if [ "x$ofiles" != "x" ]
40 ead3e311 2005-01-04 devnull then
41 3d637e16 2005-01-07 devnull a=`
42 ead3e311 2005-01-04 devnull nm $ofiles |
43 ead3e311 2005-01-04 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
44 190857f9 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
45 ead3e311 2005-01-04 devnull sort -u
46 ead3e311 2005-01-04 devnull `
47 3d637e16 2005-01-07 devnull for i in $a
48 3d637e16 2005-01-07 devnull do
49 3d637e16 2005-01-07 devnull autolibs="$autolibs $i"
50 3d637e16 2005-01-07 devnull eval "need$i=true"
51 3d637e16 2005-01-07 devnull done
52 ead3e311 2005-01-04 devnull fi
53 3d637e16 2005-01-07 devnull
54 3d637e16 2005-01-07 devnull # fetch dependencies out of libraries
55 3d637e16 2005-01-07 devnull workq="$autolibs"
56 3d637e16 2005-01-07 devnull while [ "x$workq" != "x" ]
57 ead3e311 2005-01-04 devnull do
58 3d637e16 2005-01-07 devnull w="$workq"
59 3d637e16 2005-01-07 devnull workq=""
60 3d637e16 2005-01-07 devnull for i in $w
61 3d637e16 2005-01-07 devnull do
62 359c1e01 2005-01-14 devnull # can't trust the libraries about using
63 359c1e01 2005-01-14 devnull # libthread - we might not be linking with
64 359c1e01 2005-01-14 devnull # those object files.
65 3d637e16 2005-01-07 devnull a=`
66 3d637e16 2005-01-07 devnull nm $PLAN9/lib/lib$i.a |
67 3d637e16 2005-01-07 devnull grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
68 3d637e16 2005-01-07 devnull sed 's/.*__p9l_autolib_//' |
69 359c1e01 2005-01-14 devnull sort -u |
70 359c1e01 2005-01-14 devnull grep -v thread
71 3d637e16 2005-01-07 devnull `
72 3d637e16 2005-01-07 devnull okayfn="true"
73 3d637e16 2005-01-07 devnull for j in $a
74 3d637e16 2005-01-07 devnull do
75 3d637e16 2005-01-07 devnull if eval "[ x\$need$j = x ]"
76 3d637e16 2005-01-07 devnull then
77 3d637e16 2005-01-07 devnull autolibs="$autolibs $j"
78 3d637e16 2005-01-07 devnull workq="$workq $j"
79 3d637e16 2005-01-07 devnull eval "need$j=true"
80 3d637e16 2005-01-07 devnull fi
81 3d637e16 2005-01-07 devnull if [ $j != $i ]
82 3d637e16 2005-01-07 devnull then
83 3d637e16 2005-01-07 devnull okayfn="$okayfn && have$j"
84 3d637e16 2005-01-07 devnull fi
85 3d637e16 2005-01-07 devnull done
86 3d637e16 2005-01-07 devnull # echo "can$i: $okayfn"
87 3d637e16 2005-01-07 devnull eval "can$i() { $okayfn; }"
88 3d637e16 2005-01-07 devnull done
89 ead3e311 2005-01-04 devnull done
90 3d637e16 2005-01-07 devnull if $verbose
91 3d637e16 2005-01-07 devnull then
92 3d637e16 2005-01-07 devnull echo "autolibs $autolibs"
93 3d637e16 2005-01-07 devnull fi
94 3d637e16 2005-01-07 devnull
95 ead3e311 2005-01-04 devnull for i in $autolibs
96 ead3e311 2005-01-04 devnull do
97 3d637e16 2005-01-07 devnull eval "have$i() { false; }"
98 ead3e311 2005-01-04 devnull done
99 c8b6342d 2005-01-13 devnull havethread() { false; }
100 0d85a1cf 2005-02-11 devnull havesec() { false; }
101 3d637e16 2005-01-07 devnull
102 3d637e16 2005-01-07 devnull # now find correct order
103 3d637e16 2005-01-07 devnull libsl=""
104 3d637e16 2005-01-07 devnull while [ "x$autolibs" != x ]
105 ead3e311 2005-01-04 devnull do
106 3d637e16 2005-01-07 devnull stillneed=""
107 3d637e16 2005-01-07 devnull didnothing=true
108 3d637e16 2005-01-07 devnull for i in $autolibs
109 3d637e16 2005-01-07 devnull do
110 3d637e16 2005-01-07 devnull if eval "can$i"
111 3d637e16 2005-01-07 devnull then
112 3d637e16 2005-01-07 devnull libsl="-l$i $libsl"
113 3d637e16 2005-01-07 devnull eval "have$i() { true; }"
114 3d637e16 2005-01-07 devnull didnothing=false
115 3d637e16 2005-01-07 devnull else
116 3d637e16 2005-01-07 devnull stillneed="$stillneed $i"
117 3d637e16 2005-01-07 devnull fi
118 3d637e16 2005-01-07 devnull done
119 3d637e16 2005-01-07 devnull # break cycle by setting the last library on the list
120 3d637e16 2005-01-07 devnull # to have no dependencies
121 3d637e16 2005-01-07 devnull if $didnothing
122 ead3e311 2005-01-04 devnull then
123 3d637e16 2005-01-07 devnull j="xxx"
124 3d637e16 2005-01-07 devnull for i in $autolibs
125 3d637e16 2005-01-07 devnull do
126 3d637e16 2005-01-07 devnull j=$i
127 3d637e16 2005-01-07 devnull done
128 3d637e16 2005-01-07 devnull echo "dependency cycle: $autolibs; breaking with $j"
129 3d637e16 2005-01-07 devnull eval "can$j() { true; }"
130 ead3e311 2005-01-04 devnull fi
131 3d637e16 2005-01-07 devnull autolibs="$stillneed"
132 ead3e311 2005-01-04 devnull done
133 3d637e16 2005-01-07 devnull if $verbose
134 3d637e16 2005-01-07 devnull then
135 3d637e16 2005-01-07 devnull echo "liborder $libsl"
136 3d637e16 2005-01-07 devnull fi
137 ead3e311 2005-01-04 devnull libsl="$libsl -l9"
138 3d637e16 2005-01-07 devnull
139 c8b6342d 2005-01-13 devnull # cycle: lib9 expects p9main, which is defined in libthread. oops.
140 359c1e01 2005-01-14 devnull if havethread
141 c8b6342d 2005-01-13 devnull then
142 359c1e01 2005-01-14 devnull libsl="$libsl -lthread -l9"
143 c8b6342d 2005-01-13 devnull fi
144 c8b6342d 2005-01-13 devnull
145 0d85a1cf 2005-02-11 devnull # cycle: lib9 netcrypt uses libsec
146 0d85a1cf 2005-02-11 devnull if havesec
147 0d85a1cf 2005-02-11 devnull then
148 0d85a1cf 2005-02-11 devnull libsl="$libsl -lsec -l9"
149 0d85a1cf 2005-02-11 devnull fi
150 0d85a1cf 2005-02-11 devnull
151 3d637e16 2005-01-07 devnull if [ "x$needdraw" = xtrue ]
152 ead3e311 2005-01-04 devnull then
153 ead3e311 2005-01-04 devnull if [ "x$X11" = "x" ]
154 ead3e311 2005-01-04 devnull then
155 ead3e311 2005-01-04 devnull X11=/usr/X11R6
156 ead3e311 2005-01-04 devnull fi
157 c968e519 2005-01-18 devnull # x86_64 seems to put its 64-bit libraries in lib64.
158 c968e519 2005-01-18 devnull if [ "${OBJTYPE:-`uname -m`}" = "x86_64" ]
159 c968e519 2005-01-18 devnull then
160 c968e519 2005-01-18 devnull libsl="$libsl -L$X11/lib64"
161 c968e519 2005-01-18 devnull fi
162 ead3e311 2005-01-04 devnull libsl="$libsl -L$X11/lib -lX11"
163 ead3e311 2005-01-04 devnull fi
164 ead3e311 2005-01-04 devnull fi
165 ead3e311 2005-01-04 devnull
166 2d8fd46b 2004-03-26 devnull extralibs="-lm"
167 8f314994 2004-03-02 devnull tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
168 dbd7b9a9 2003-11-23 devnull case "$tag" in
169 7d0dbb31 2005-01-07 devnull *OpenBSD*)
170 7d0dbb31 2005-01-07 devnull ld=gcc
171 108559b2 2005-01-19 devnull userpath=true
172 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil -lpthread"
173 7d0dbb31 2005-01-07 devnull ;;
174 7d0dbb31 2005-01-07 devnull *FreeBSD*)
175 7d0dbb31 2005-01-07 devnull ld=gcc
176 108559b2 2005-01-19 devnull userpath=true
177 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
178 7d0dbb31 2005-01-07 devnull case "`uname -r`" in
179 8a26417b 2005-02-08 devnull 5.2.*)
180 8a26417b 2005-02-08 devnull extralibs="$extralibs -lkse"
181 8a26417b 2005-02-08 devnull ;;
182 7d0dbb31 2005-01-07 devnull [5-9].*)
183 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
184 cb27443a 2004-03-25 devnull ;;
185 7d0dbb31 2005-01-07 devnull esac
186 7d0dbb31 2005-01-07 devnull ;;
187 7d0dbb31 2005-01-07 devnull *BSD*)
188 7d0dbb31 2005-01-07 devnull ld=gcc
189 108559b2 2005-01-19 devnull userpath=true
190 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
191 7d0dbb31 2005-01-07 devnull ;;
192 7d0dbb31 2005-01-07 devnull *Linux*)
193 7d0dbb31 2005-01-07 devnull ld=gcc
194 108559b2 2005-01-19 devnull userpath=true
195 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lutil"
196 eea5f6ad 2005-01-17 devnull case "${SYSVERSION:-`uname -r`}" in
197 7d0dbb31 2005-01-07 devnull 2.6.*)
198 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lpthread"
199 2d8fd46b 2004-03-26 devnull ;;
200 7d0dbb31 2005-01-07 devnull esac
201 7d0dbb31 2005-01-07 devnull ;;
202 7d0dbb31 2005-01-07 devnull *Darwin*)
203 7d0dbb31 2005-01-07 devnull ld=gcc
204 7d0dbb31 2005-01-07 devnull ;;
205 7d0dbb31 2005-01-07 devnull *SunOS*)
206 7d0dbb31 2005-01-07 devnull ld="${CC9:-cc} -g"
207 7d0dbb31 2005-01-07 devnull extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
208 7d0dbb31 2005-01-07 devnull # Record paths to shared libraries to avoid needing LD_LIBRARY_PATH
209 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
210 7d0dbb31 2005-01-07 devnull do
211 7d0dbb31 2005-01-07 devnull case "$i" in
212 7d0dbb31 2005-01-07 devnull -L*)
213 7d0dbb31 2005-01-07 devnull s=`echo $i | sed 's/-L/-R/'`
214 7d0dbb31 2005-01-07 devnull extralibs="$extralibs $s"
215 282c88f9 2004-09-17 devnull ;;
216 282c88f9 2004-09-17 devnull esac
217 7d0dbb31 2005-01-07 devnull done
218 dc305d03 2005-02-08 devnull case "${SYSVERSION:-`uname -r`}" in
219 dc305d03 2005-02-08 devnull 5.[67])
220 dc305d03 2005-02-08 devnull echo do not know how to link right thread library on "$tag" 1>&2
221 dc305d03 2005-02-08 devnull ;;
222 dc305d03 2005-02-08 devnull 5.8)
223 dc305d03 2005-02-08 devnull # Some trickery is needed to force use of
224 dc305d03 2005-02-08 devnull # alternate thread lib from /usr/lib/lwp
225 dc305d03 2005-02-08 devnull # Likely, this only works with sun cc,
226 dc305d03 2005-02-08 devnull # for other compiler/loader we would need other flags.
227 dc305d03 2005-02-08 devnull ld="$ld -i"
228 dc305d03 2005-02-08 devnull extralibs="$extralibs /usr/lib/lwp/libthread.so -R/usr/lib/lwp:/usr/lib"
229 dc305d03 2005-02-08 devnull ;;
230 dc305d03 2005-02-08 devnull esac
231 7d0dbb31 2005-01-07 devnull ;;
232 dbd7b9a9 2003-11-23 devnull *)
233 dbd7b9a9 2003-11-23 devnull echo do not know how to link on "$tag" 1>&2
234 dbd7b9a9 2003-11-23 devnull exit 1
235 dbd7b9a9 2003-11-23 devnull esac
236 dbd7b9a9 2003-11-23 devnull
237 108559b2 2005-01-19 devnull case "$userpath" in
238 108559b2 2005-01-19 devnull true)
239 54bcb7e9 2005-01-16 devnull for i in "$libsl $@"
240 54bcb7e9 2005-01-16 devnull do
241 54bcb7e9 2005-01-16 devnull case "$i" in
242 54bcb7e9 2005-01-16 devnull -L*)
243 54bcb7e9 2005-01-16 devnull s=`echo $i | sed 's/-L/-Wl,-rpath,/'`
244 54bcb7e9 2005-01-16 devnull extralibs="$extralibs $s"
245 54bcb7e9 2005-01-16 devnull ;;
246 54bcb7e9 2005-01-16 devnull esac
247 54bcb7e9 2005-01-16 devnull done
248 54bcb7e9 2005-01-16 devnull ;;
249 54bcb7e9 2005-01-16 devnull esac
250 54bcb7e9 2005-01-16 devnull
251 3d637e16 2005-01-07 devnull if $verbose
252 ead3e311 2005-01-04 devnull then
253 ead3e311 2005-01-04 devnull echo $ld -L$PLAN9/lib "$@" $libsl $extralibs
254 ead3e311 2005-01-04 devnull fi
255 237c3090 2005-03-18 devnull
256 237c3090 2005-03-18 devnull xtmp=/tmp/9l.$$.$USER.out
257 237c3090 2005-03-18 devnull xxout() {
258 237c3090 2005-03-18 devnull egrep -v ': In function `' $xtmp
259 237c3090 2005-03-18 devnull rm -f $xtmp
260 237c3090 2005-03-18 devnull }
261 237c3090 2005-03-18 devnull
262 237c3090 2005-03-18 devnull if $ld -L$PLAN9/lib "$@" $libsl $extralibs >$xtmp 2>&1
263 8953da37 2005-01-07 devnull then
264 237c3090 2005-03-18 devnull xxout
265 c8b6342d 2005-01-13 devnull exit 0
266 c8b6342d 2005-01-13 devnull else
267 237c3090 2005-03-18 devnull xxout
268 724b43e6 2005-01-07 devnull rm -f $target
269 724b43e6 2005-01-07 devnull exit 1
270 8953da37 2005-01-07 devnull fi
271 c8b6342d 2005-01-13 devnull