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