]>
Commit | Line | Data |
---|---|---|
30afcc07 RL |
1 | # |
2 | # Helper makefile to link shared libraries in a portable way. | |
3 | # This is much simpler than libtool, and hopefully not too error-prone. | |
4 | # | |
5 | # The following variables need to be set on the command line to build | |
6 | # properly | |
7 | ||
8 | # CC contains the current compiler. This one MUST be defined | |
9 | CC=cc | |
10 | # LDFLAGS contains flags to be used when the temporary object file is | |
11 | # created. SHARED_LDFLAGS contains flags to be used when the shared | |
12 | # library is created. | |
13 | LDFLAGS= | |
14 | SHARED_LDFLAGS= | |
15 | ||
16 | # LIBNAME contains just the name of thhe library, without prefix ("lib" | |
17 | # on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so, | |
18 | # .dll, ...). This one MUST have a value when using this makefile. | |
19 | # For example, to build libfoo.so, you need to do the following: | |
20 | #LIBNAME=foo | |
21 | LIBNAME= | |
22 | ||
23 | # LIBEXTRAS contains extra modules to link together with the library. | |
24 | # For example, if a seond library, say libbar.a needs to be linked into | |
25 | # libfoo.so, you need to do the following: | |
26 | #LIBEXTRAS=libbar.a | |
27 | # Note that this MUST be used when using the link_o targets, to hold the | |
28 | # names of all object files that go into the target library. | |
29 | LIBEXTRAS= | |
30 | ||
31 | # LIBVERSION contains the current version of the library. | |
32 | # For example, to build libfoo.so.1.2, you need to do the following: | |
33 | #LIBVERSION=1.2 | |
34 | LIBVERSION= | |
35 | ||
36 | # LIBCOMPATVERSIONS contains the compatibility versions (a list) of | |
37 | # the library. They MUST be in decreasing order. | |
38 | # For example, if libfoo.so.1.2.1 is backward compatible with libfoo.so.1.2 | |
39 | # and libfoo.so.1, you need to do the following: | |
40 | #LIBCOMPATVERSIONS=1.2 1 | |
41 | # Note that on systems that use sonames, the last number will appear as | |
42 | # part of it. | |
43 | # It's also possible, for systems that support it (Tru64, for example), | |
44 | # to add extra compatibility info with more precision, by adding a second | |
45 | # list of versions, separated from the first with a semicolon, like this: | |
46 | #LIBCOMPATVERSIONS=1.2 1;1.2.0 1.1.2 1.1.1 1.1.0 1.0.0 | |
47 | LIBCOMPATVERSIONS= | |
48 | ||
49 | # LIBDEPS contains all the flags necessary to cover all necessary | |
50 | # dependencies to other libraries. | |
51 | LIBDEPS= | |
52 | ||
53 | #------------------------------------------------------------------------------ | |
54 | # The rest is private to this makefile. | |
55 | ||
56 | #DEBUG=: | |
57 | DEBUG=set -x | |
58 | ||
59 | top: | |
60 | echo "Trying to use this makefile interactively? Don't." | |
61 | ||
62 | CALC_VERSIONS= \ | |
63 | SHLIB_COMPAT=; SHLIB_SOVER=; \ | |
cf3b8b52 | 64 | if [ -n "$(LIBVERSION)$(LIBCOMPATVERSIONS)" ]; then \ |
30afcc07 RL |
65 | prev=""; \ |
66 | for v in `echo "$(LIBVERSION) $(LIBCOMPATVERSIONS)" | cut -d';' -f1`; do \ | |
c199837c | 67 | SHLIB_SOVER_NODOT=$$v \ |
30afcc07 RL |
68 | SHLIB_SOVER=.$$v; \ |
69 | if [ -n "$$prev" ]; then \ | |
70 | SHLIB_COMPAT=$$SHLIB_COMPAT .$$prev; \ | |
71 | fi; \ | |
72 | prev=$$v; \ | |
73 | done; \ | |
74 | fi | |
75 | ||
76 | LINK_SO= \ | |
77 | ( $(DEBUG); \ | |
78 | nm -Pg $$SHOBJECTS | grep ' [BDT] ' | cut -f1 -d' ' > lib$(LIBNAME).exp; \ | |
83699c47 | 79 | $$SHAREDCMD $(SHARED_LDFLAGS) $$SHAREDFLAGS -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \ |
30afcc07 RL |
80 | $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS ) && \ |
81 | $(SYMLINK_SO); ( $(DEBUG); rm -f lib$(LIBNAME).exp ) | |
82 | SYMLINK_SO= \ | |
cf3b8b52 | 83 | prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \ |
30afcc07 | 84 | if [ -n "$$SHLIB_COMPAT"]; then \ |
30afcc07 | 85 | for x in $$SHLIB_COMPAT; do \ |
83699c47 RL |
86 | ( $(DEBUG); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \ |
87 | ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \ | |
88 | prev=$$SHLIB$$x$$SHLIB_SUFFIX; \ | |
30afcc07 | 89 | done; \ |
cf3b8b52 RL |
90 | fi; \ |
91 | if [ -n "$$SHLIB_SOVER" ]; then \ | |
92 | ( $(DEBUG); rm -f $$SHLIB$$SHLIB_SUFFIX; \ | |
93 | ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \ | |
30afcc07 | 94 | fi |
cf3b8b52 | 95 | |
30afcc07 RL |
96 | LINK_SO_A= SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO) |
97 | LINK_SO_O= SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO) | |
98 | LINK_SO_A_VIA_O= \ | |
99 | SHOBJECTS=lib$(LIBNAME).o ALL=$$ALLSYMSFLAGS ALLSYMSFLAGS= NOALLSYMSFLAGS=; \ | |
100 | ( $(DEBUG); \ | |
101 | ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \ | |
102 | $(LINK_SO) && rm -f $(LIBNAME).o | |
103 | LINK_SO_A_UNPACKED= \ | |
104 | UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \ | |
105 | (cd $$UNPACKDIR; ar x ../lib$(LIBNAME).a) && cp $(LIBEXTRAS) $$UNPACKDIR && \ | |
106 | SHOBJECTS=$$UNPACKDIR/*.o; \ | |
107 | $(LINK_SO) && rm -rf $$UNPACKDIR | |
108 | ||
109 | DETECT_GNU_LD=${CC} -v 2>&1 | grep '^gcc' >/dev/null 2>&1 && \ | |
110 | my_ld=`gcc -print-prog-name=ld 2>&1` && \ | |
111 | [ -n "$$my_ld" ] && \ | |
112 | $$my_ld -v 2>&1 | grep 'GNU ld' >/dev/null 2>&1 | |
113 | ||
114 | link_o.gnu: | |
115 | @ $(CALC_VERSIONS); \ | |
116 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 117 | SHLIB_SUFFIX= \ |
30afcc07 RL |
118 | LIBDEPS="$(LIBDEPS)" \ |
119 | NOALLSYMSFLAGS='-Wl,--no-whole-archive' \ | |
83699c47 | 120 | SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX" \ |
30afcc07 RL |
121 | SHAREDCMD='$(CC)'; \ |
122 | $(LINK_SO_O) | |
123 | link_a.gnu: | |
124 | @ $(CALC_VERSIONS); \ | |
125 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 126 | SHLIB_SUFFIX= \ |
30afcc07 RL |
127 | LIBDEPS="$(LIBDEPS)" \ |
128 | ALLSYMSFLAGS='-Wl,--whole-archive' \ | |
129 | NOALLSYMSFLAGS='-Wl,--no-whole-archive' \ | |
83699c47 | 130 | SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX" \ |
30afcc07 RL |
131 | SHAREDCMD='$(CC)'; \ |
132 | $(LINK_SO_A) | |
133 | ||
134 | # For Darwin AKA Mac OS/X (dyld) | |
135 | link_o.darwin: | |
136 | @ $(CALC_VERSIONS); \ | |
83699c47 RL |
137 | SHLIB=lib$(LIBNAME) \ |
138 | SHLIB_SUFFIX=.dylib \ | |
30afcc07 RL |
139 | LIBDEPS="$(LIBDEPS)" \ |
140 | ALLSYMSFLAGS='-all_load' \ | |
141 | NOALLSYMSFLAGS='' \ | |
c199837c | 142 | SHAREDFLAGS="-dynamiclib -current_version $(LIBVERSION) -compatibility_version $$SHLIB_SOVER_NODOT" \ |
30afcc07 RL |
143 | SHAREDCMD='$(CC)'; \ |
144 | $(LINK_SO_O) | |
145 | link_a.darwin: | |
146 | @ $(CALC_VERSIONS); \ | |
c199837c | 147 | SHLIB=lib$(LIBNAME) \ |
83699c47 | 148 | SHLIB_SUFFIX=.dylib \ |
30afcc07 RL |
149 | LIBDEPS="$(LIBDEPS)" \ |
150 | ALLSYMSFLAGS='-all_load' \ | |
151 | NOALLSYMSFLAGS='' \ | |
c199837c | 152 | SHAREDFLAGS="-dynamiclib -current_version $(LIBVERSION) -compatibility_version $$SHLIB_SOVER_NODOT" \ |
30afcc07 RL |
153 | SHAREDCMD='$(CC)'; \ |
154 | $(LINK_SO_A) | |
155 | ||
156 | link_o.cygwin: | |
157 | @ SHLIB=cyg$(LIBNAME).dll \ | |
83699c47 | 158 | SHLIB_SUFFIX= \ |
30afcc07 RL |
159 | LIBDEPS="$(LIBDEPS)" \ |
160 | SHLIB_SOVER= \ | |
161 | ALLSYMSFLAGS='-Wl,--whole-archive' \ | |
162 | NOALLSYMSFLAGS='-Wl,--no-whole-archive' \ | |
163 | SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a" \ | |
164 | SHAREDCMD='${CC}'; \ | |
165 | $(LINK_SO_O) | |
166 | link_a.cygwin: | |
167 | @ SHLIB=cyg$(LIBNAME).dll \ | |
83699c47 | 168 | SHLIB_SUFFIX= \ |
30afcc07 RL |
169 | LIBDEPS="$(LIBDEPS)" \ |
170 | SHLIB_SOVER= \ | |
171 | ALLSYMSFLAGS='-Wl,--whole-archive' \ | |
172 | NOALLSYMSFLAGS='-Wl,--no-whole-archive' \ | |
173 | SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a" \ | |
174 | SHAREDCMD='${CC}'; \ | |
175 | $(LINK_SO_A) | |
176 | ||
177 | link_o.alpha-osf1: | |
178 | @ if ${DETECT_GNU_LD}; then \ | |
179 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
180 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
181 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
182 | LIBVERSION="$(LIBVERSION)" | |
183 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
184 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
185 | else \ | |
186 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 187 | SHLIB_SUFFIX= \ |
30afcc07 RL |
188 | LIBDEPS="$(LIBDEPS)" \ |
189 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ | |
190 | if [ -n "$$SHLIB_HIST" ]; then \ | |
191 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
192 | else \ | |
193 | SHLIB_HIST="$(LIBVERSION)"; \ | |
194 | fi | |
195 | SHLIB_SOVER= \ | |
196 | ALLSYMSFLAGS='-all' \ | |
197 | NOALLSYMSFLAGS='-none' \ | |
198 | SHAREDFLAGS="-shared -set_version \"$$SHLIB_HIST\"" \ | |
199 | SHAREDCMD='$(CC)'; \ | |
200 | $(LINK_SO_O); \ | |
201 | fi | |
202 | link_a.alpha-osf1: | |
203 | @ if ${DETECT_GNU_LD}; then \ | |
204 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
205 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
206 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
207 | LIBVERSION="$(LIBVERSION)" | |
208 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
209 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
210 | else \ | |
211 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 212 | SHLIB_SUFFIX= \ |
30afcc07 RL |
213 | LIBDEPS="$(LIBDEPS)" \ |
214 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ | |
215 | if [ -n "$$SHLIB_HIST" ]; then \ | |
216 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
217 | else \ | |
218 | SHLIB_HIST="$(LIBVERSION)"; \ | |
219 | fi | |
220 | SHLIB_SOVER= \ | |
221 | ALLSYMSFLAGS='-all' \ | |
222 | NOALLSYMSFLAGS='-none' \ | |
223 | SHAREDFLAGS="-shared -set_version \"$$SHLIB_HIST\"" \ | |
224 | SHAREDCMD='$(CC)'; \ | |
225 | $(LINK_SO_A); \ | |
226 | fi | |
227 | ||
228 | # The difference between alpha-osf1-shared and tru64-shared is the `-msym' | |
229 | # option passed to the linker. | |
230 | link_o.tru64: | |
231 | @ if ${DETECT_GNU_LD}; then \ | |
232 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
233 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
234 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
235 | LIBVERSION="$(LIBVERSION)" | |
236 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
237 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
238 | else \ | |
239 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 240 | SHLIB_SUFFIX= \ |
30afcc07 RL |
241 | LIBDEPS="$(LIBDEPS)" \ |
242 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ | |
243 | if [ -n "$$SHLIB_HIST" ]; then \ | |
244 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
245 | else \ | |
246 | SHLIB_HIST="$(LIBVERSION)"; \ | |
247 | fi | |
248 | SHLIB_SOVER= \ | |
249 | ALLSYMSFLAGS='-all' \ | |
250 | NOALLSYMSFLAGS='-none' \ | |
251 | SHAREDFLAGS="-shared -msym -set_version \"$$SHLIB_HIST\"" \ | |
252 | SHAREDCMD='$(CC)'; \ | |
253 | $(LINK_SO_O); \ | |
254 | fi | |
255 | link_a.tru64: | |
256 | @ if ${DETECT_GNU_LD}; then \ | |
257 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
258 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
259 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
260 | LIBVERSION="$(LIBVERSION)" | |
261 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
262 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
263 | else \ | |
264 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 265 | SHLIB_SUFFIX= \ |
30afcc07 RL |
266 | LIBDEPS="$(LIBDEPS)" \ |
267 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ | |
268 | if [ -n "$$SHLIB_HIST" ]; then \ | |
269 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
270 | else \ | |
271 | SHLIB_HIST="$(LIBVERSION)"; \ | |
272 | fi | |
273 | SHLIB_SOVER= \ | |
274 | ALLSYMSFLAGS='-all' \ | |
275 | NOALLSYMSFLAGS='-none' \ | |
276 | SHAREDFLAGS="-shared -msym -set_version \"$$SHLIB_HIST\"" \ | |
277 | SHAREDCMD='$(CC)'; \ | |
278 | $(LINK_SO_A); \ | |
279 | fi | |
280 | ||
281 | # The difference between tru64-shared and tru64-shared-rpath is the | |
282 | # -rpath ${LIBRPATH} passed to the linker. | |
283 | link_o.tru64-rpath: | |
284 | @ if ${DETECT_GNU_LD}; then \ | |
285 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
286 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
287 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
288 | LIBVERSION="$(LIBVERSION)" | |
289 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
290 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
291 | else \ | |
292 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 293 | SHLIB_SUFFIX= \ |
30afcc07 RL |
294 | LIBDEPS="$(LIBDEPS)" \ |
295 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ | |
296 | if [ -n "$$SHLIB_HIST" ]; then \ | |
297 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
298 | else \ | |
299 | SHLIB_HIST="$(LIBVERSION)"; \ | |
300 | fi | |
301 | SHLIB_SOVER= \ | |
302 | ALLSYMSFLAGS='-all' \ | |
303 | NOALLSYMSFLAGS='-none' \ | |
304 | SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH) -set_version \"$$SHLIB_HIST\"" \ | |
305 | SHAREDCMD='$(CC)'; \ | |
306 | $(LINK_SO_O); \ | |
307 | fi | |
308 | link_a.tru64-rpath: | |
309 | @ if ${DETECT_GNU_LD}; then \ | |
310 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
311 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
312 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
313 | LIBVERSION="$(LIBVERSION)" | |
314 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
315 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
316 | else \ | |
317 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 318 | SHLIB_SUFFIX= \ |
30afcc07 RL |
319 | LIBDEPS="$(LIBDEPS)" \ |
320 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ | |
321 | if [ -n "$$SHLIB_HIST" ]; then \ | |
322 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
323 | else \ | |
324 | SHLIB_HIST="$(LIBVERSION)"; \ | |
325 | fi | |
326 | SHLIB_SOVER= \ | |
327 | ALLSYMSFLAGS='-all' \ | |
328 | NOALLSYMSFLAGS='-none' \ | |
329 | SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH) -set_version \"$$SHLIB_HIST\"" \ | |
330 | SHAREDCMD='$(CC)'; \ | |
331 | $(LINK_SO_A); \ | |
332 | fi | |
333 | ||
334 | link_o.solaris: | |
335 | @ if ${DETECT_GNU_LD}; then \ | |
336 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
337 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
338 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
339 | LIBVERSION="$(LIBVERSION)" | |
340 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
341 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
342 | else \ | |
343 | $(CALC_VERSIONS); \ | |
344 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 345 | SHLIB_SUFFIX= \ |
30afcc07 RL |
346 | LIBDEPS="$(LIBDEPS)" \ |
347 | ALLSYMSFLAGS='-z allextract' \ | |
348 | NOALLSYMSFLAGS='' \ | |
83699c47 | 349 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 RL |
350 | SHAREDCMD='$(CC)'; \ |
351 | $(LINK_SO_O); \ | |
352 | fi | |
353 | link_a.solaris: | |
354 | @ if ${DETECT_GNU_LD}; then \ | |
355 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
356 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
357 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
358 | LIBVERSION="$(LIBVERSION)" | |
359 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
360 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
361 | else \ | |
362 | $(CALC_VERSIONS); \ | |
363 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 364 | SHLIB_SUFFIX= \ |
30afcc07 RL |
365 | LIBDEPS="$(LIBDEPS)" \ |
366 | ALLSYMSFLAGS='-z allextract' \ | |
367 | NOALLSYMSFLAGS='' \ | |
83699c47 | 368 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 RL |
369 | SHAREDCMD='$(CC)'; \ |
370 | $(LINK_SO_A); \ | |
371 | fi | |
372 | ||
373 | # OpenServer 5 native compilers used | |
374 | # UnixWare 7 and OpenUNIX 8 native compilers used | |
375 | link_o.svr3: | |
376 | @ if ${DETECT_GNU_LD}; then \ | |
377 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
378 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
379 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
380 | LIBVERSION="$(LIBVERSION)" | |
381 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
382 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
383 | else \ | |
384 | $(CALC_VERSIONS); \ | |
385 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 386 | SHLIB_SUFFIX= \ |
30afcc07 RL |
387 | LIBDEPS="$(LIBDEPS)" \ |
388 | ALLSYMSFLAGS='-z allextract' \ | |
389 | NOALLSYMSFLAGS='' \ | |
83699c47 | 390 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 RL |
391 | SHAREDCMD='$(CC)'; \ |
392 | $(LINK_SO_O); \ | |
393 | fi | |
394 | link_a.svr3: | |
395 | @ if ${DETECT_GNU_LD}; then \ | |
396 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
397 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
398 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
399 | LIBVERSION="$(LIBVERSION)" | |
400 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
401 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
402 | else \ | |
403 | $(CALC_VERSIONS); \ | |
404 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 405 | SHLIB_SUFFIX= \ |
30afcc07 RL |
406 | LIBDEPS="$(LIBDEPS)" \ |
407 | ALLSYMSFLAGS='-z allextract' \ | |
408 | NOALLSYMSFLAGS='' \ | |
83699c47 | 409 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 RL |
410 | SHAREDCMD='$(CC)'; \ |
411 | $(LINK_SO_A_UNPACKED); \ | |
412 | fi | |
413 | ||
414 | link_o.irix: | |
415 | @ if ${DETECT_GNU_LD}; then \ | |
416 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
417 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
418 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
419 | LIBVERSION="$(LIBVERSION)" | |
420 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
421 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
422 | else \ | |
423 | $(CALC_VERSIONS); \ | |
424 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 425 | SHLIB_SUFFIX= \ |
30afcc07 RL |
426 | LIBDEPS="$(LIBDEPS)" \ |
427 | ALLSYMSFLAGS='-all' \ | |
428 | NOALLSYMSFLAGS='' \ | |
83699c47 | 429 | SHAREDFLAGS='-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 RL |
430 | SHAREDCMD='$(CC)'; \ |
431 | $(LINK_SO_O); \ | |
432 | fi | |
433 | link_a.irix: | |
434 | @ if ${DETECT_GNU_LD}; then \ | |
435 | $(MAKE) -f $(SHARED_MAKEFILE) CC="$(CC)" LDFLAGS="$(LDFLAGS) \ | |
436 | SHARED_LDFLAGS="$(SHARED_LDFLAGS)" \ | |
437 | LIBNAME="$(LIBNAME)" LIBEXTRAS="$(LIBEXTRAS)" \ | |
438 | LIBVERSION="$(LIBVERSION)" | |
439 | LIBCOMPATVERSIONS="$(LIBCOMPATVERSIONS)" \ | |
440 | LIBDEPS="$(LIBDEPS)" link_o.gnu; \ | |
441 | else \ | |
442 | $(CALC_VERSIONS); \ | |
443 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 444 | SHLIB_SUFFIX= \ |
30afcc07 RL |
445 | LIBDEPS="$(LIBDEPS)" \ |
446 | ALLSYMSFLAGS='-all' \ | |
447 | NOALLSYMSFLAGS='' \ | |
83699c47 | 448 | SHAREDFLAGS='-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 RL |
449 | SHAREDCMD='$(CC)'; \ |
450 | $(LINK_SO_A); \ | |
451 | fi | |
452 | ||
453 | # HP-UX includes the full pathname of libs we depend on, so we would get | |
454 | # ./libcrypto (with ./ as path information) compiled into libssl, hence | |
455 | # we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto | |
456 | # anyway. | |
457 | # The object modules are loaded from lib$i.a using the undocumented -Fl | |
458 | # option. | |
459 | # | |
460 | # WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH | |
461 | # by temporarily specifying "+s"! | |
462 | # | |
463 | link_o.hpux32: | |
464 | @ $(CALC_VERSIONS); \ | |
465 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 466 | SHLIB_SUFFIX= \ |
30afcc07 RL |
467 | LIBDEPS="$(LIBDEPS) -lc" \ |
468 | ALLSYMSFLAGS='-Fl' \ | |
469 | NOALLSYMSFLAGS='' \ | |
83699c47 | 470 | SHAREDFLAGS='+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 471 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 472 | $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
473 | link_a.hpux32: |
474 | @ $(CALC_VERSIONS); \ | |
475 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 476 | SHLIB_SUFFIX= \ |
30afcc07 RL |
477 | LIBDEPS="$(LIBDEPS) -lc" \ |
478 | ALLSYMSFLAGS='-Fl' \ | |
479 | NOALLSYMSFLAGS='' \ | |
83699c47 | 480 | SHAREDFLAGS='+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 481 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 482 | $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
483 | |
484 | # HP-UX includes the full pathname of libs we depend on, so we would get | |
485 | # ./libcrypto (with ./ as path information) compiled into libssl, hence | |
486 | # we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto | |
487 | # anyway. | |
488 | # | |
489 | # HP-UX in 64bit mode has "+s" enabled by default; it will search for | |
490 | # shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH. | |
491 | # | |
492 | link_o.hpux64: | |
493 | @ $(CALC_VERSIONS); \ | |
494 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 495 | SHLIB_SUFFIX= \ |
30afcc07 RL |
496 | LIBDEPS="$(LIBDEPS) -lc" \ |
497 | ALLSYMSFLAGS='+forceload' \ | |
498 | NOALLSYMSFLAGS='' \ | |
83699c47 | 499 | SHAREDFLAGS='-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 500 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 501 | $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
502 | link_a.hpux64: |
503 | @ $(CALC_VERSIONS); \ | |
504 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 505 | SHLIB_SUFFIX= \ |
30afcc07 RL |
506 | LIBDEPS="$(LIBDEPS) -lc" \ |
507 | ALLSYMSFLAGS='+forceload' \ | |
508 | NOALLSYMSFLAGS='' \ | |
83699c47 | 509 | SHAREDFLAGS='-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 510 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 511 | $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
512 | |
513 | link_o.aix: | |
514 | @ $(CALC_VERSIONS); \ | |
515 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 516 | SHLIB_SUFFIX= \ |
30afcc07 RL |
517 | LIBDEPS="$(LIBDEPS)" \ |
518 | ALLSYMSFLAGS='-bnogc' \ | |
519 | NOALLSYMSFLAGS='' \ | |
520 | SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE' \ | |
521 | SHAREDCMD='$(CC)'; \ | |
522 | $(LINK_SO_O) | |
523 | link_a.aix: | |
524 | @ $(CALC_VERSIONS); \ | |
525 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 526 | SHLIB_SUFFIX= \ |
30afcc07 RL |
527 | LIBDEPS="$(LIBDEPS)" \ |
528 | ALLSYMSFLAGS='-bnogc' \ | |
529 | NOALLSYMSFLAGS='' \ | |
530 | SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE' \ | |
531 | SHAREDCMD='$(CC)'; \ | |
532 | $(LINK_SO_A_VIA_O) | |
533 | ||
534 | link_o.reliantunix: | |
535 | @ $(CALC_VERSIONS); \ | |
536 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 537 | SHLIB_SUFFIX= \ |
30afcc07 RL |
538 | LIBDEPS="$(LIBDEPS)" \ |
539 | ALLSYMSFLAGS= \ | |
540 | NOALLSYMSFLAGS='' \ | |
541 | SHAREDFLAGS='-G' \ | |
542 | SHAREDCMD='$(CC)'; \ | |
543 | $(LINK_SO_O) | |
544 | link_a.reliantunix: | |
545 | @ $(CALC_VERSIONS); \ | |
546 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 547 | SHLIB_SUFFIX= \ |
30afcc07 RL |
548 | LIBDEPS="$(LIBDEPS)" \ |
549 | ALLSYMSFLAGS= \ | |
550 | NOALLSYMSFLAGS='' \ | |
551 | SHAREDFLAGS='-G' \ | |
552 | SHAREDCMD='$(CC)'; \ | |
553 | $(LINK_SO_A_UNPACKED) | |
554 | ||
555 | # Targets to build symbolic links when needed | |
83699c47 | 556 | symlink.gnu symlink.solaris symlink.svr3 symlink.irix \ |
30afcc07 RL |
557 | symlink.aix symlink.reliantunix: |
558 | @ $(CALC_VERSIONS); \ | |
559 | SHLIB=lib$(LIBNAME).so \ | |
560 | $(SYMLINK_SO) | |
83699c47 RL |
561 | symlink.darwin: |
562 | @ $(CALC_VERSIONS); \ | |
563 | SHLIB=lib$(LIBNAME) \ | |
564 | SHLIB_SUFFIX=.dylib \ | |
565 | $(SYMLINK_SO) | |
30afcc07 RL |
566 | symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath: |
567 | symlink.hpux32 symlink.hpux64: | |
568 | @ $(CALC_VERSIONS); \ | |
569 | SHLIB=lib$(LIBNAME).sl \ | |
570 | $(SYMLINK_SO) | |
571 | ||
572 | # Compatibility targets | |
573 | link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu | |
574 | link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu | |
575 | symlink.bsd-gcc-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu | |
576 | link_o.darwin-shared: link_o.darwin | |
577 | link_a.darwin-shared: link_a.darwin | |
578 | symlink.darwin-shared: symlink.darwin | |
579 | link_o.cygwin-shared: link_o.cygwin | |
580 | link_a.cygwin-shared: link_a.cygwin | |
581 | symlink.cygwin-shared: symlink.cygwin | |
582 | link_o.alpha-osf1-shared: link_o.alpha-osf1 | |
583 | link_a.alpha-osf1-shared: link_a.alpha-osf1 | |
584 | symlink.alpha-osf1-shared: symlink.alpha-osf1 | |
585 | link_o.tru64-shared: link_o.tru64 | |
586 | link_a.tru64-shared: link_a.tru64 | |
587 | symlink.tru64-shared: symlink.tru64 | |
588 | link_o.tru64-shared-rpath: link_o.tru64-rpath | |
589 | link_a.tru64-shared-rpath: link_a.tru64-rpath | |
590 | symlink.tru64-shared-rpath: symlink.tru64-rpath | |
591 | link_o.solaris-shared: link_o.solaris | |
592 | link_a.solaris-shared: link_a.solaris | |
593 | symlink.solaris-shared: symlink.solaris | |
594 | link_o.svr3-shared: link_o.svr3 | |
595 | link_a.svr3-shared: link_a.svr3 | |
596 | symlink.svr3-shared: symlink.svr3 | |
597 | link_o.svr5-shared: link_o.svr3 | |
598 | link_a.svr5-shared: link_a.svr3 | |
599 | symlink.svr5-shared: symlink.svr3 | |
600 | link_o.irix-shared: link_o.irix | |
601 | link_a.irix-shared: link_a.irix | |
602 | symlink.irix-shared: symlink.irix | |
603 | link_o.hpux-shared: link_o.hpux32 | |
604 | link_a.hpux-shared: link_a.hpux32 | |
605 | symlink.hpux-shared: symlink.hpux32 | |
606 | link_o.hpux64-shared: link_o.hpux64 | |
607 | link_a.hpux64-shared: link_a.hpux64 | |
608 | symlink.hpux64-shared: symlink.hpux64 | |
609 | link_o.aix-shared: link_o.aix | |
610 | link_a.aix-shared: link_a.aix | |
611 | symlink.aix-shared: symlink.aix | |
612 | link_o.reliantunix-shared: link_o.reliantunix | |
613 | link_a.reliantunix-shared: link_a.reliantunix | |
614 | symlink.reliantunix-shared: symlink.reliantunix |