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 |
CFLAGS=$(CFLAG) |
11 |
# LDFLAGS contains flags to be used when temporary object files (when building |
12 |
# shared libraries) are created, or when an application is linked. |
13 |
# SHARED_LDFLAGS contains flags to be used when the shared library is created. |
14 |
LDFLAGS= |
15 |
SHARED_LDFLAGS= |
16 |
|
17 |
NM=nm |
18 |
|
19 |
# LIBNAME contains just the name of the library, without prefix ("lib" |
20 |
# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so, |
21 |
# .dll, ...). This one MUST have a value when using this makefile to |
22 |
# build shared libraries. |
23 |
# For example, to build libfoo.so, you need to do the following: |
24 |
#LIBNAME=foo |
25 |
LIBNAME= |
26 |
|
27 |
# APPNAME contains just the name of the application, without suffix ("" |
28 |
# on Unix, ".exe" on Windows, ...). This one MUST have a value when using |
29 |
# this makefile to build applications. |
30 |
# For example, to build foo, you need to do the following: |
31 |
#APPNAME=foo |
32 |
APPNAME= |
33 |
|
34 |
# OBJECTS contains all the object files to link together into the application. |
35 |
# This must contain at least one object file. |
36 |
#OBJECTS=foo.o |
37 |
OBJECTS= |
38 |
|
39 |
# LIBEXTRAS contains extra modules to link together with the library. |
40 |
# For example, if a second library, say libbar.a needs to be linked into |
41 |
# libfoo.so, you need to do the following: |
42 |
#LIBEXTRAS=libbar.a |
43 |
# Note that this MUST be used when using the link_o targets, to hold the |
44 |
# names of all object files that go into the target library. |
45 |
LIBEXTRAS= |
46 |
|
47 |
# LIBVERSION contains the current version of the library. |
48 |
# For example, to build libfoo.so.1.2, you need to do the following: |
49 |
#LIBVERSION=1.2 |
50 |
LIBVERSION= |
51 |
|
52 |
# LIBCOMPATVERSIONS contains the compatibility versions (a list) of |
53 |
# the library. They MUST be in decreasing order. |
54 |
# For example, if libfoo.so.1.2.1 is backward compatible with libfoo.so.1.2 |
55 |
# and libfoo.so.1, you need to do the following: |
56 |
#LIBCOMPATVERSIONS=1.2 1 |
57 |
# Note that on systems that use sonames, the last number will appear as |
58 |
# part of it. |
59 |
# It's also possible, for systems that support it (Tru64, for example), |
60 |
# to add extra compatibility info with more precision, by adding a second |
61 |
# list of versions, separated from the first with a semicolon, like this: |
62 |
#LIBCOMPATVERSIONS=1.2 1;1.2.0 1.1.2 1.1.1 1.1.0 1.0.0 |
63 |
LIBCOMPATVERSIONS= |
64 |
|
65 |
# LIBDEPS contains all the flags necessary to cover all necessary |
66 |
# dependencies to other libraries. |
67 |
LIBDEPS= |
68 |
|
69 |
#------------------------------------------------------------------------------ |
70 |
# The rest is private to this makefile. |
71 |
|
72 |
SET_X=: |
73 |
#SET_X=set -x |
74 |
|
75 |
top: |
76 |
echo "Trying to use this makefile interactively? Don't." |
77 |
|
78 |
CALC_VERSIONS= \ |
79 |
SHLIB_COMPAT=; SHLIB_SOVER=; \ |
80 |
if [ -n "$(LIBVERSION)$(LIBCOMPATVERSIONS)" ]; then \ |
81 |
prev=""; \ |
82 |
for v in `echo "$(LIBVERSION) $(LIBCOMPATVERSIONS)" | cut -d';' -f1`; do \ |
83 |
SHLIB_SOVER_NODOT=$$v; \ |
84 |
SHLIB_SOVER=.$$v; \ |
85 |
if [ -n "$$prev" ]; then \ |
86 |
SHLIB_COMPAT="$$SHLIB_COMPAT .$$prev"; \ |
87 |
fi; \ |
88 |
prev=$$v; \ |
89 |
done; \ |
90 |
fi |
91 |
|
92 |
LINK_APP= \ |
93 |
( $(SET_X); \ |
94 |
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \ |
95 |
LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \ |
96 |
LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ |
97 |
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ |
98 |
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ |
99 |
$${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} ) |
100 |
|
101 |
LINK_SO= \ |
102 |
( $(SET_X); \ |
103 |
LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \ |
104 |
SHAREDCMD="$${SHAREDCMD:-$(CC)}"; \ |
105 |
SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \ |
106 |
LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ |
107 |
LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ |
108 |
LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ |
109 |
$${SHAREDCMD} $${SHAREDFLAGS} \ |
110 |
-o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \ |
111 |
$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \ |
112 |
) && $(SYMLINK_SO) |
113 |
|
114 |
SYMLINK_SO= \ |
115 |
if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \ |
116 |
prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \ |
117 |
if [ -n "$$SHLIB_COMPAT" ]; then \ |
118 |
for x in $$SHLIB_COMPAT; do \ |
119 |
( $(SET_X); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \ |
120 |
ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \ |
121 |
prev=$$SHLIB$$x$$SHLIB_SUFFIX; \ |
122 |
done; \ |
123 |
fi; \ |
124 |
if [ -n "$$SHLIB_SOVER" ]; then \ |
125 |
( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \ |
126 |
ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \ |
127 |
fi; \ |
128 |
fi |
129 |
|
130 |
LINK_SO_A= SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO) |
131 |
LINK_SO_O= SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO) |
132 |
|
133 |
LINK_SO_A_VIA_O= \ |
134 |
SHOBJECTS=lib$(LIBNAME).o; \ |
135 |
ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \ |
136 |
( $(SET_X); \ |
137 |
ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \ |
138 |
$(LINK_SO) && rm -f lib$(LIBNAME).o |
139 |
|
140 |
LINK_SO_A_UNPACKED= \ |
141 |
UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \ |
142 |
(cd $$UNPACKDIR; ar x ../lib$(LIBNAME).a) && \ |
143 |
([ -z "$(LIBEXTRAS)" ] || cp $(LIBEXTRAS) $$UNPACKDIR) && \ |
144 |
SHOBJECTS=$$UNPACKDIR/*.o; \ |
145 |
$(LINK_SO) && rm -rf $$UNPACKDIR |
146 |
|
147 |
DETECT_GNU_LD=($(CC) -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null |
148 |
|
149 |
DO_GNU_SO=$(CALC_VERSIONS); \ |
150 |
SHLIB=lib$(LIBNAME).so; \ |
151 |
SHLIB_SUFFIX=; \ |
152 |
ALLSYMSFLAGS='-Wl,--whole-archive'; \ |
153 |
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ |
154 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX" |
155 |
|
156 |
DO_GNU_APP=LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)" |
157 |
|
158 |
#This is rather special. It's a special target with which one can link |
159 |
#applications without bothering with any features that have anything to |
160 |
#do with shared libraries, for example when linking against static |
161 |
#libraries. It's mostly here to avoid a lot of conditionals everywhere |
162 |
#else... |
163 |
link_app.: |
164 |
$(LINK_APP) |
165 |
|
166 |
link_o.gnu: |
167 |
@ $(DO_GNU_SO); $(LINK_SO_O) |
168 |
link_a.gnu: |
169 |
@ $(DO_GNU_SO); $(LINK_SO_A) |
170 |
link_app.gnu: |
171 |
@ $(DO_GNU_APP); $(LINK_APP) |
172 |
|
173 |
DO_BEOS_SO= SHLIB=lib$(LIBNAME).so; \ |
174 |
SHLIB_SUFFIX=; \ |
175 |
ALLSYMSFLAGS='-Wl,--whole-archive'; \ |
176 |
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ |
177 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SUFFIX" |
178 |
|
179 |
link_o.beos: |
180 |
@ $(DO_BEOS_SO); $(LINK_SO_O) |
181 |
link_a.beos: |
182 |
@ $(DO_BEOS_SO); $(LINK_SO_A) |
183 |
|
184 |
link_o.bsd: |
185 |
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ |
186 |
$(CALC_VERSIONS); \ |
187 |
SHLIB=lib$(LIBNAME).so; \ |
188 |
SHLIB_SUFFIX=; \ |
189 |
LIBDEPS=" "; \ |
190 |
ALLSYMSFLAGS="-Wl,-Bforcearchive"; \ |
191 |
NOALLSYMSFLAGS=; \ |
192 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \ |
193 |
fi; $(LINK_SO_O) |
194 |
link_a.bsd: |
195 |
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ |
196 |
$(CALC_VERSIONS); \ |
197 |
SHLIB=lib$(LIBNAME).so; \ |
198 |
SHLIB_SUFFIX=; \ |
199 |
LIBDEPS=" "; \ |
200 |
ALLSYMSFLAGS="-Wl,-Bforcearchive"; \ |
201 |
NOALLSYMSFLAGS=; \ |
202 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \ |
203 |
fi; $(LINK_SO_A) |
204 |
link_app.bsd: |
205 |
@if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \ |
206 |
LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBPATH)"; \ |
207 |
fi; $(LINK_APP) |
208 |
|
209 |
# For Darwin AKA Mac OS/X (dyld) |
210 |
# Originally link_o.darwin produced .so, because it was hard-coded |
211 |
# in dso_dlfcn module. At later point dso_dlfcn switched to .dylib |
212 |
# extension in order to allow for run-time linking with vendor- |
213 |
# supplied shared libraries such as libz, so that link_o.darwin had |
214 |
# to be harmonized with it. This caused minor controversy, because |
215 |
# it was believed that dlopen can't be used to dynamically load |
216 |
# .dylib-s, only so called bundle modules (ones linked with -bundle |
217 |
# flag). The belief seems to be originating from pre-10.4 release, |
218 |
# where dlfcn functionality was emulated by dlcompat add-on. In |
219 |
# 10.4 dlopen was rewritten as native part of dyld and is documented |
220 |
# to be capable of loading both dynamic libraries and bundles. In |
221 |
# order to provide compatibility with pre-10.4 dlopen, modules are |
222 |
# linked with -bundle flag, which makes .dylib extension misleading. |
223 |
# It works, because dlopen is [and always was] extension-agnostic. |
224 |
# Alternative to this heuristic approach is to develop specific |
225 |
# MacOS X dso module relying on whichever "native" dyld interface. |
226 |
link_o.darwin: |
227 |
@ $(CALC_VERSIONS); \ |
228 |
SHLIB=lib$(LIBNAME); \ |
229 |
SHLIB_SUFFIX=.dylib; \ |
230 |
ALLSYMSFLAGS='-all_load'; \ |
231 |
NOALLSYMSFLAGS=''; \ |
232 |
SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \ |
233 |
if [ -n "$(LIBVERSION)" ]; then \ |
234 |
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \ |
235 |
fi; \ |
236 |
if [ -n "$$SHLIB_SOVER_NODOT" ]; then \ |
237 |
SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \ |
238 |
fi; \ |
239 |
$(LINK_SO_O) |
240 |
link_a.darwin: |
241 |
@ $(CALC_VERSIONS); \ |
242 |
SHLIB=lib$(LIBNAME); \ |
243 |
SHLIB_SUFFIX=.dylib; \ |
244 |
ALLSYMSFLAGS='-all_load'; \ |
245 |
NOALLSYMSFLAGS=''; \ |
246 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \ |
247 |
if [ -n "$(LIBVERSION)" ]; then \ |
248 |
SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \ |
249 |
fi; \ |
250 |
if [ -n "$$SHLIB_SOVER_NODOT" ]; then \ |
251 |
SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \ |
252 |
fi; \ |
253 |
SHAREDFLAGS="$$SHAREDFLAGS -install_name $(INSTALLTOP)/$(LIBDIR)/$$SHLIB$(SHLIB_EXT)"; \ |
254 |
$(LINK_SO_A) |
255 |
link_app.darwin: # is there run-path on darwin? |
256 |
$(LINK_APP) |
257 |
|
258 |
link_o.cygwin: |
259 |
@ $(CALC_VERSIONS); \ |
260 |
INHIBIT_SYMLINKS=yes; \ |
261 |
SHLIB=cyg$(LIBNAME); \ |
262 |
base=-Wl,--enable-auto-image-base; \ |
263 |
deffile=; \ |
264 |
if expr $(PLATFORM) : 'mingw' > /dev/null; then \ |
265 |
SHLIB=$(LIBNAME)eay32; base=; \ |
266 |
if test -f $(LIBNAME)eay32.def; then \ |
267 |
deffile=$(LIBNAME)eay32.def; \ |
268 |
fi; \ |
269 |
fi; \ |
270 |
SHLIB_SUFFIX=.dll; \ |
271 |
LIBVERSION="$(LIBVERSION)"; \ |
272 |
SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \ |
273 |
ALLSYMSFLAGS='-Wl,--whole-archive'; \ |
274 |
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ |
275 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base $$deffile -Wl,-Bsymbolic"; \ |
276 |
$(LINK_SO_O) |
277 |
#for mingw target if def-file is in use dll-name should match library-name |
278 |
link_a.cygwin: |
279 |
@ $(CALC_VERSIONS); \ |
280 |
INHIBIT_SYMLINKS=yes; \ |
281 |
SHLIB=cyg$(LIBNAME); SHLIB_SOVER=-$(LIBVERSION); SHLIB_SUFFIX=.dll; \ |
282 |
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; extras=; \ |
283 |
base=-Wl,--enable-auto-image-base; \ |
284 |
if expr $(PLATFORM) : 'mingw' > /dev/null; then \ |
285 |
case $(LIBNAME) in \ |
286 |
crypto) SHLIB=libeay;; \ |
287 |
ssl) SHLIB=ssleay;; \ |
288 |
esac; \ |
289 |
SHLIB_SOVER=32; \ |
290 |
extras="$(LIBNAME).def"; \ |
291 |
$(PERL) util/mkdef.pl 32 $$SHLIB > $$extras; \ |
292 |
base=; [ $(LIBNAME) = "crypto" -a -n "$(FIPSCANLIB)" ] && base=-Wl,--image-base,0x63000000; \ |
293 |
fi; \ |
294 |
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \ |
295 |
$(PERL) util/mkrc.pl $$dll_name | \ |
296 |
$(RC) -o rc.o; \ |
297 |
extras="$$extras rc.o"; \ |
298 |
ALLSYMSFLAGS='-Wl,--whole-archive'; \ |
299 |
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ |
300 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \ |
301 |
[ -f apps/$$dll_name ] && rm apps/$$dll_name; \ |
302 |
[ -f test/$$dll_name ] && rm test/$$dll_name; \ |
303 |
$(LINK_SO_A) || exit 1; \ |
304 |
rm $$extras; \ |
305 |
cp -p $$dll_name apps/; \ |
306 |
cp -p $$dll_name test/ |
307 |
link_app.cygwin: |
308 |
@if expr "$(CFLAGS)" : '.*OPENSSL_USE_APPLINK' > /dev/null; then \ |
309 |
LIBDEPS="$(TOP)/crypto/applink.o $${LIBDEPS:-$(LIBDEPS)}"; \ |
310 |
export LIBDEPS; \ |
311 |
fi; \ |
312 |
$(LINK_APP) |
313 |
|
314 |
link_o.alpha-osf1: |
315 |
@ if $(DETECT_GNU_LD); then \ |
316 |
$(DO_GNU_SO); \ |
317 |
else \ |
318 |
SHLIB=lib$(LIBNAME).so; \ |
319 |
SHLIB_SUFFIX=; \ |
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="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \ |
330 |
if [ -n "$$SHLIB_HIST" ]; then \ |
331 |
SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \ |
332 |
fi; \ |
333 |
fi; \ |
334 |
$(LINK_SO_O) |
335 |
link_a.alpha-osf1: |
336 |
@ if $(DETECT_GNU_LD); then \ |
337 |
$(DO_GNU_SO); \ |
338 |
else \ |
339 |
SHLIB=lib$(LIBNAME).so; \ |
340 |
SHLIB_SUFFIX=; \ |
341 |
SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ |
342 |
if [ -n "$$SHLIB_HIST" ]; then \ |
343 |
SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ |
344 |
else \ |
345 |
SHLIB_HIST="$(LIBVERSION)"; \ |
346 |
fi; \ |
347 |
SHLIB_SOVER=; \ |
348 |
ALLSYMSFLAGS='-all'; \ |
349 |
NOALLSYMSFLAGS='-none'; \ |
350 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \ |
351 |
if [ -n "$$SHLIB_HIST" ]; then \ |
352 |
SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \ |
353 |
fi; \ |
354 |
fi; \ |
355 |
$(LINK_SO_A) |
356 |
link_app.alpha-osf1: |
357 |
@if $(DETECT_GNU_LD); then \ |
358 |
$(DO_GNU_APP); \ |
359 |
else \ |
360 |
LDFLAGS="$(CFLAGS) -rpath $(LIBRPATH)"; \ |
361 |
fi; \ |
362 |
$(LINK_APP) |
363 |
|
364 |
link_o.solaris: |
365 |
@ if $(DETECT_GNU_LD); then \ |
366 |
$(DO_GNU_SO); \ |
367 |
else \ |
368 |
$(CALC_VERSIONS); \ |
369 |
MINUSZ='-z '; \ |
370 |
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \ |
371 |
SHLIB=lib$(LIBNAME).so; \ |
372 |
SHLIB_SUFFIX=; \ |
373 |
ALLSYMSFLAGS="$${MINUSZ}allextract"; \ |
374 |
NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \ |
375 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-Bsymbolic"; \ |
376 |
fi; \ |
377 |
$(LINK_SO_O) |
378 |
link_a.solaris: |
379 |
@ if $(DETECT_GNU_LD); then \ |
380 |
$(DO_GNU_SO); \ |
381 |
else \ |
382 |
$(CALC_VERSIONS); \ |
383 |
MINUSZ='-z '; \ |
384 |
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \ |
385 |
SHLIB=lib$(LIBNAME).so; \ |
386 |
SHLIB_SUFFIX=;\ |
387 |
ALLSYMSFLAGS="$${MINUSZ}allextract"; \ |
388 |
NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \ |
389 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-Bsymbolic"; \ |
390 |
fi; \ |
391 |
$(LINK_SO_A) |
392 |
link_app.solaris: |
393 |
@ if $(DETECT_GNU_LD); then \ |
394 |
$(DO_GNU_APP); \ |
395 |
else \ |
396 |
LDFLAGS="$(CFLAGS) -R $(LIBRPATH)"; \ |
397 |
fi; \ |
398 |
$(LINK_APP) |
399 |
|
400 |
# OpenServer 5 native compilers used |
401 |
link_o.svr3: |
402 |
@ if $(DETECT_GNU_LD); then \ |
403 |
$(DO_GNU_SO); \ |
404 |
else \ |
405 |
$(CALC_VERSIONS); \ |
406 |
SHLIB=lib$(LIBNAME).so; \ |
407 |
SHLIB_SUFFIX=; \ |
408 |
ALLSYMSFLAGS=''; \ |
409 |
NOALLSYMSFLAGS=''; \ |
410 |
SHAREDFLAGS="$(CFLAGS) -G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \ |
411 |
fi; \ |
412 |
$(LINK_SO_O) |
413 |
link_a.svr3: |
414 |
@ if $(DETECT_GNU_LD); then \ |
415 |
$(DO_GNU_SO); \ |
416 |
else \ |
417 |
$(CALC_VERSIONS); \ |
418 |
SHLIB=lib$(LIBNAME).so; \ |
419 |
SHLIB_SUFFIX=; \ |
420 |
ALLSYMSFLAGS=''; \ |
421 |
NOALLSYMSFLAGS=''; \ |
422 |
SHAREDFLAGS="$(CFLAGS) -G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \ |
423 |
fi; \ |
424 |
$(LINK_SO_A_UNPACKED) |
425 |
link_app.svr3: |
426 |
@$(DETECT_GNU_LD) && $(DO_GNU_APP); \ |
427 |
$(LINK_APP) |
428 |
|
429 |
# UnixWare 7 and OpenUNIX 8 native compilers used |
430 |
link_o.svr5: |
431 |
@ if $(DETECT_GNU_LD); then \ |
432 |
$(DO_GNU_SO); \ |
433 |
else \ |
434 |
$(CALC_VERSIONS); \ |
435 |
SHARE_FLAG='-G'; \ |
436 |
($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \ |
437 |
SHLIB=lib$(LIBNAME).so; \ |
438 |
SHLIB_SUFFIX=; \ |
439 |
ALLSYMSFLAGS=''; \ |
440 |
NOALLSYMSFLAGS=''; \ |
441 |
SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \ |
442 |
fi; \ |
443 |
$(LINK_SO_O) |
444 |
link_a.svr5: |
445 |
@ if $(DETECT_GNU_LD); then \ |
446 |
$(DO_GNU_SO); \ |
447 |
else \ |
448 |
$(CALC_VERSIONS); \ |
449 |
SHARE_FLAG='-G'; \ |
450 |
($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \ |
451 |
SHLIB=lib$(LIBNAME).so; \ |
452 |
SHLIB_SUFFIX=; \ |
453 |
ALLSYMSFLAGS=''; \ |
454 |
NOALLSYMSFLAGS=''; \ |
455 |
SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \ |
456 |
fi; \ |
457 |
$(LINK_SO_A_UNPACKED) |
458 |
link_app.svr5: |
459 |
@$(DETECT_GNU_LD) && $(DO_GNU_APP); \ |
460 |
$(LINK_APP) |
461 |
|
462 |
link_o.irix: |
463 |
@ if $(DETECT_GNU_LD); then \ |
464 |
$(DO_GNU_SO); \ |
465 |
else \ |
466 |
$(CALC_VERSIONS); \ |
467 |
SHLIB=lib$(LIBNAME).so; \ |
468 |
SHLIB_SUFFIX=; \ |
469 |
MINUSWL=""; \ |
470 |
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \ |
471 |
ALLSYMSFLAGS="$${MINUSWL}-all"; \ |
472 |
NOALLSYMSFLAGS="$${MINUSWL}-none"; \ |
473 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \ |
474 |
fi; \ |
475 |
$(LINK_SO_O) |
476 |
link_a.irix: |
477 |
@ if $(DETECT_GNU_LD); then \ |
478 |
$(DO_GNU_SO); \ |
479 |
else \ |
480 |
$(CALC_VERSIONS); \ |
481 |
SHLIB=lib$(LIBNAME).so; \ |
482 |
SHLIB_SUFFIX=; \ |
483 |
MINUSWL=""; \ |
484 |
($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \ |
485 |
ALLSYMSFLAGS="$${MINUSWL}-all"; \ |
486 |
NOALLSYMSFLAGS="$${MINUSWL}-none"; \ |
487 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \ |
488 |
fi; \ |
489 |
$(LINK_SO_A) |
490 |
link_app.irix: |
491 |
@LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)"; \ |
492 |
$(LINK_APP) |
493 |
|
494 |
# 32-bit PA-RISC HP-UX embeds the -L pathname of libs we link with, so |
495 |
# we compensate for it with +cdp ../: and +cdp ./:. Yes, these rewrite |
496 |
# rules imply that we can only link one level down in catalog structure, |
497 |
# but that's what takes place for the moment of this writing. +cdp option |
498 |
# was introduced in HP-UX 11.x and applies in 32-bit PA-RISC link |
499 |
# editor context only [it's simply ignored in other cases, which are all |
500 |
# ELFs by the way]. |
501 |
# |
502 |
link_o.hpux: |
503 |
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ |
504 |
$(CALC_VERSIONS); \ |
505 |
SHLIB=lib$(LIBNAME).sl; \ |
506 |
expr "$(CFLAGS)" : '.*DSO_DLFCN' > /dev/null && SHLIB=lib$(LIBNAME).so; \ |
507 |
SHLIB_SUFFIX=; \ |
508 |
ALLSYMSFLAGS='-Wl,-Fl'; \ |
509 |
NOALLSYMSFLAGS=''; \ |
510 |
expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \ |
511 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \ |
512 |
fi; \ |
513 |
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \ |
514 |
$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
515 |
link_a.hpux: |
516 |
@if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ |
517 |
$(CALC_VERSIONS); \ |
518 |
SHLIB=lib$(LIBNAME).sl; \ |
519 |
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \ |
520 |
SHLIB_SUFFIX=; \ |
521 |
ALLSYMSFLAGS='-Wl,-Fl'; \ |
522 |
NOALLSYMSFLAGS=''; \ |
523 |
expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \ |
524 |
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \ |
525 |
fi; \ |
526 |
rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \ |
527 |
$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
528 |
link_app.hpux: |
529 |
@if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \ |
530 |
LDFLAGS="$(CFLAGS) -Wl,+s,+cdp,../:,+cdp,./:,+b,$(LIBRPATH)"; \ |
531 |
fi; \ |
532 |
$(LINK_APP) |
533 |
|
534 |
link_o.aix: |
535 |
@ $(CALC_VERSIONS); \ |
536 |
OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || :; \ |
537 |
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \ |
538 |
SHLIB=lib$(LIBNAME).so; \ |
539 |
SHLIB_SUFFIX=; \ |
540 |
ALLSYMSFLAGS=''; \ |
541 |
NOALLSYMSFLAGS=''; \ |
542 |
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \ |
543 |
$(LINK_SO_O); |
544 |
link_a.aix: |
545 |
@ $(CALC_VERSIONS); \ |
546 |
OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || : ; \ |
547 |
OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \ |
548 |
SHLIB=lib$(LIBNAME).so; \ |
549 |
SHLIB_SUFFIX=; \ |
550 |
ALLSYMSFLAGS='-bnogc'; \ |
551 |
NOALLSYMSFLAGS=''; \ |
552 |
SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \ |
553 |
$(LINK_SO_A_VIA_O) |
554 |
link_app.aix: |
555 |
LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \ |
556 |
$(LINK_APP) |
557 |
|
558 |
link_o.reliantunix: |
559 |
@ $(CALC_VERSIONS); \ |
560 |
SHLIB=lib$(LIBNAME).so; \ |
561 |
SHLIB_SUFFIX=; \ |
562 |
ALLSYMSFLAGS=; \ |
563 |
NOALLSYMSFLAGS=''; \ |
564 |
SHAREDFLAGS='$(CFLAGS) -G'; \ |
565 |
$(LINK_SO_O) |
566 |
link_a.reliantunix: |
567 |
@ $(CALC_VERSIONS); \ |
568 |
SHLIB=lib$(LIBNAME).so; \ |
569 |
SHLIB_SUFFIX=; \ |
570 |
ALLSYMSFLAGS=; \ |
571 |
NOALLSYMSFLAGS=''; \ |
572 |
SHAREDFLAGS='$(CFLAGS) -G'; \ |
573 |
$(LINK_SO_A_UNPACKED) |
574 |
link_app.reliantunix: |
575 |
$(LINK_APP) |
576 |
|
577 |
# Targets to build symbolic links when needed |
578 |
symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \ |
579 |
symlink.aix symlink.reliantunix: |
580 |
@ $(CALC_VERSIONS); \ |
581 |
SHLIB=lib$(LIBNAME).so; \ |
582 |
$(SYMLINK_SO) |
583 |
symlink.darwin: |
584 |
@ $(CALC_VERSIONS); \ |
585 |
SHLIB=lib$(LIBNAME); \ |
586 |
SHLIB_SUFFIX=.dylib; \ |
587 |
$(SYMLINK_SO) |
588 |
symlink.hpux: |
589 |
@ $(CALC_VERSIONS); \ |
590 |
SHLIB=lib$(LIBNAME).sl; \ |
591 |
expr $(PLATFORM) : '.*ia64' > /dev/null && SHLIB=lib$(LIBNAME).so; \ |
592 |
$(SYMLINK_SO) |
593 |
# The following lines means those specific architectures do no symlinks |
594 |
symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath symlink.beos: |
595 |
|
596 |
# Compatibility targets |
597 |
link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu |
598 |
link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu |
599 |
link_app.bsd-gcc-shared link_app.linux-shared link_app.gnu-shared: link_app.gnu |
600 |
symlink.bsd-gcc-shared symlink.bsd-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu |
601 |
link_o.bsd-shared: link_o.bsd |
602 |
link_a.bsd-shared: link_a.bsd |
603 |
link_app.bsd-shared: link_app.bsd |
604 |
link_o.darwin-shared: link_o.darwin |
605 |
link_a.darwin-shared: link_a.darwin |
606 |
link_app.darwin-shared: link_app.darwin |
607 |
symlink.darwin-shared: symlink.darwin |
608 |
link_o.cygwin-shared: link_o.cygwin |
609 |
link_a.cygwin-shared: link_a.cygwin |
610 |
link_app.cygwin-shared: link_app.cygwin |
611 |
symlink.cygwin-shared: symlink.cygwin |
612 |
link_o.alpha-osf1-shared: link_o.alpha-osf1 |
613 |
link_a.alpha-osf1-shared: link_a.alpha-osf1 |
614 |
link_app.alpha-osf1-shared: link_app.alpha-osf1 |
615 |
symlink.alpha-osf1-shared: symlink.alpha-osf1 |
616 |
link_o.tru64-shared: link_o.tru64 |
617 |
link_a.tru64-shared: link_a.tru64 |
618 |
link_app.tru64-shared: link_app.tru64 |
619 |
symlink.tru64-shared: symlink.tru64 |
620 |
link_o.tru64-shared-rpath: link_o.tru64-rpath |
621 |
link_a.tru64-shared-rpath: link_a.tru64-rpath |
622 |
link_app.tru64-shared-rpath: link_app.tru64-rpath |
623 |
symlink.tru64-shared-rpath: symlink.tru64-rpath |
624 |
link_o.solaris-shared: link_o.solaris |
625 |
link_a.solaris-shared: link_a.solaris |
626 |
link_app.solaris-shared: link_app.solaris |
627 |
symlink.solaris-shared: symlink.solaris |
628 |
link_o.svr3-shared: link_o.svr3 |
629 |
link_a.svr3-shared: link_a.svr3 |
630 |
link_app.svr3-shared: link_app.svr3 |
631 |
symlink.svr3-shared: symlink.svr3 |
632 |
link_o.svr5-shared: link_o.svr5 |
633 |
link_a.svr5-shared: link_a.svr5 |
634 |
link_app.svr5-shared: link_app.svr5 |
635 |
symlink.svr5-shared: symlink.svr5 |
636 |
link_o.irix-shared: link_o.irix |
637 |
link_a.irix-shared: link_a.irix |
638 |
link_app.irix-shared: link_app.irix |
639 |
symlink.irix-shared: symlink.irix |
640 |
link_o.hpux-shared: link_o.hpux |
641 |
link_a.hpux-shared: link_a.hpux |
642 |
link_app.hpux-shared: link_app.hpux |
643 |
symlink.hpux-shared: symlink.hpux |
644 |
link_o.aix-shared: link_o.aix |
645 |
link_a.aix-shared: link_a.aix |
646 |
link_app.aix-shared: link_app.aix |
647 |
symlink.aix-shared: symlink.aix |
648 |
link_o.reliantunix-shared: link_o.reliantunix |
649 |
link_a.reliantunix-shared: link_a.reliantunix |
650 |
link_app.reliantunix-shared: link_app.reliantunix |
651 |
symlink.reliantunix-shared: symlink.reliantunix |
652 |
link_o.beos-shared: link_o.beos |
653 |
link_a.beos-shared: link_a.beos |
654 |
link_app.beos-shared: link_app.gnu |
655 |
symlink.beos-shared: symlink.beos |