]> git.ipfire.org Git - thirdparty/openssl.git/blame - Makefile.shared
It seems like OpenUnix's ld uses LD_LIBRARY_PATH to search for
[thirdparty/openssl.git] / Makefile.shared
CommitLineData
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
9CC=cc
2d3de726
RL
10# LDFLAGS contains flags to be used when temporary object files (when building
11# shared libraries) are created, or when an application is linked.
12# SHARED_LDFLAGS contains flags to be used when the shared library is created.
30afcc07
RL
13LDFLAGS=
14SHARED_LDFLAGS=
15
2d3de726 16# LIBNAME contains just the name of the library, without prefix ("lib"
30afcc07 17# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so,
2d3de726
RL
18# .dll, ...). This one MUST have a value when using this makefile to
19# build shared libraries.
30afcc07
RL
20# For example, to build libfoo.so, you need to do the following:
21#LIBNAME=foo
22LIBNAME=
23
2d3de726
RL
24# APPNAME contains just the name of the application, without suffix (""
25# on Unix, ".exe" on Windows, ...). This one MUST have a value when using
26# this makefile to build applications.
27# For example, to build foo, you need to do the following:
28#APPNAME=foo
29APPNAME=
30
31# OBJECTS contains all the object files to link together into the application.
32# This must contain at least one object file.
33#OBJECTS=foo.o
34OBJECTS=
35
30afcc07 36# LIBEXTRAS contains extra modules to link together with the library.
8d6fc30b 37# For example, if a second library, say libbar.a needs to be linked into
30afcc07
RL
38# libfoo.so, you need to do the following:
39#LIBEXTRAS=libbar.a
40# Note that this MUST be used when using the link_o targets, to hold the
41# names of all object files that go into the target library.
42LIBEXTRAS=
43
44# LIBVERSION contains the current version of the library.
45# For example, to build libfoo.so.1.2, you need to do the following:
46#LIBVERSION=1.2
47LIBVERSION=
48
49# LIBCOMPATVERSIONS contains the compatibility versions (a list) of
50# the library. They MUST be in decreasing order.
51# For example, if libfoo.so.1.2.1 is backward compatible with libfoo.so.1.2
52# and libfoo.so.1, you need to do the following:
53#LIBCOMPATVERSIONS=1.2 1
54# Note that on systems that use sonames, the last number will appear as
55# part of it.
56# It's also possible, for systems that support it (Tru64, for example),
57# to add extra compatibility info with more precision, by adding a second
58# list of versions, separated from the first with a semicolon, like this:
59#LIBCOMPATVERSIONS=1.2 1;1.2.0 1.1.2 1.1.1 1.1.0 1.0.0
60LIBCOMPATVERSIONS=
61
62# LIBDEPS contains all the flags necessary to cover all necessary
63# dependencies to other libraries.
64LIBDEPS=
65
66#------------------------------------------------------------------------------
67# The rest is private to this makefile.
68
69#DEBUG=:
70DEBUG=set -x
71
72top:
73 echo "Trying to use this makefile interactively? Don't."
74
75CALC_VERSIONS= \
76 SHLIB_COMPAT=; SHLIB_SOVER=; \
cf3b8b52 77 if [ -n "$(LIBVERSION)$(LIBCOMPATVERSIONS)" ]; then \
30afcc07
RL
78 prev=""; \
79 for v in `echo "$(LIBVERSION) $(LIBCOMPATVERSIONS)" | cut -d';' -f1`; do \
f968059c 80 SHLIB_SOVER_NODOT=$$v; \
30afcc07
RL
81 SHLIB_SOVER=.$$v; \
82 if [ -n "$$prev" ]; then \
a0bf8f20 83 SHLIB_COMPAT="$$SHLIB_COMPAT .$$prev"; \
30afcc07
RL
84 fi; \
85 prev=$$v; \
86 done; \
87 fi
88
2d3de726
RL
89LINK_APP= \
90 ( $(DEBUG); \
e96133e4
RL
91 LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq | while read d; do echo -n $${d}:; done'`; \
92 LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`
93 LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
2d3de726
RL
94 $$LDCMD $(LDFLAGS) $$LDFLAGS -o $$APPNAME $(OBJECTS) $$LIBDEPS )
95
30afcc07 96LINK_SO= \
2d3de726 97 ( $(DEBUG); \
30afcc07 98 nm -Pg $$SHOBJECTS | grep ' [BDT] ' | cut -f1 -d' ' > lib$(LIBNAME).exp; \
e96133e4
RL
99 LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq | while read d; do echo -n $${d}:; done'`; \
100 LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`
101 LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
83699c47 102 $$SHAREDCMD $(SHARED_LDFLAGS) $$SHAREDFLAGS -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
30afcc07
RL
103 $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS ) && \
104 $(SYMLINK_SO); ( $(DEBUG); rm -f lib$(LIBNAME).exp )
105SYMLINK_SO= \
bfa96bc2
RL
106 if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
107 prev=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
108 if [ -n "$$SHLIB_COMPAT" ]; then \
109 for x in $$SHLIB_COMPAT; do \
110 ( $(DEBUG); rm -f $$SHLIB$$x$$SHLIB_SUFFIX; \
111 ln -s $$prev $$SHLIB$$x$$SHLIB_SUFFIX ); \
112 prev=$$SHLIB$$x$$SHLIB_SUFFIX; \
113 done; \
114 fi; \
115 if [ -n "$$SHLIB_SOVER" ]; then \
116 ( $(DEBUG); rm -f $$SHLIB$$SHLIB_SUFFIX; \
117 ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
118 fi; \
30afcc07 119 fi
cf3b8b52 120
30afcc07
RL
121LINK_SO_A= SHOBJECTS="lib$(LIBNAME).a $(LIBEXTRAS)"; $(LINK_SO)
122LINK_SO_O= SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO)
123LINK_SO_A_VIA_O= \
f968059c
RL
124 SHOBJECTS=lib$(LIBNAME).o; \
125 ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \
30afcc07
RL
126 ( $(DEBUG); \
127 ld $(LDFLAGS) -r -o lib$(LIBNAME).o $$ALL lib$(LIBNAME).a $(LIBEXTRAS) ); \
128 $(LINK_SO) && rm -f $(LIBNAME).o
129LINK_SO_A_UNPACKED= \
130 UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \
e96133e4
RL
131 (cd $$UNPACKDIR; ar x ../lib$(LIBNAME).a) && \
132 ([ -z "$(LIBEXTRAS)" ] || cp $(LIBEXTRAS) $$UNPACKDIR) && \
30afcc07
RL
133 SHOBJECTS=$$UNPACKDIR/*.o; \
134 $(LINK_SO) && rm -rf $$UNPACKDIR
135
4d77d5b3
AP
136DETECT_GNU_LD=(${CC} -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null
137
2d3de726 138DO_GNU_SO=$(CALC_VERSIONS); \
f968059c
RL
139 SHLIB=lib$(LIBNAME).so; \
140 SHLIB_SUFFIX=; \
141 LIBDEPS="$(LIBDEPS) -lc"; \
142 ALLSYMSFLAGS='-Wl,--whole-archive'; \
143 NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
2d3de726 144 SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
12fd8be2 145 SHAREDCMD='$(CC)'
2d3de726
RL
146DO_GNU_APP=LDCMD=$(CC);\
147 LDFLAGS="-Wl,-rpath,$(LIBRPATH)"; \
148 LIBDEPS="$(LIBDEPS) -lc"; \
149 APPNAME=$(APPNAME)
12fd8be2 150
132eaa59
RL
151#This is rather special. It's a special target with which one can link
152#applications without bothering with any features that have anything to
153#do with shared libraries, for example when linking against static
154#libraries. It's mostly here to avoid a lot of conditionals everywhere
155#else...
156link_app.:
157 LDCMD=$(CC); \
158 LDFLAGS=""; \
159 LIBDEPS="$(LIBDEPS)"; \
160 APPNAME="$(APPNAME)"; \
161 $(LINK_APP)
162
12fd8be2 163link_o.gnu:
2d3de726 164 @ $(DO_GNU_SO); $(LINK_SO_O)
30afcc07 165link_a.gnu:
2d3de726
RL
166 @ $(DO_GNU_SO); $(LINK_SO_A)
167link_app.gnu:
168 @ $(DO_GNU_APP); $(LINK_APP)
30afcc07
RL
169
170# For Darwin AKA Mac OS/X (dyld)
171link_o.darwin:
172 @ $(CALC_VERSIONS); \
f968059c
RL
173 SHLIB=lib$(LIBNAME); \
174 SHLIB_SUFFIX=.dylib; \
175 LIBDEPS="$(LIBDEPS) -lc"; \
176 ALLSYMSFLAGS='-all_load'; \
177 NOALLSYMSFLAGS=''; \
178 SHAREDFLAGS="-dynamiclib"; \
30afcc07 179 SHAREDCMD='$(CC)'; \
36757b44 180 if [ -n "$(LIBVERSION)" ]; then \
62966f38 181 SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
36757b44
RL
182 fi; \
183 if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
62966f38 184 SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
36757b44 185 fi; \
30afcc07
RL
186 $(LINK_SO_O)
187link_a.darwin:
188 @ $(CALC_VERSIONS); \
f968059c
RL
189 SHLIB=lib$(LIBNAME); \
190 SHLIB_SUFFIX=.dylib; \
191 LIBDEPS="$(LIBDEPS) -lc"; \
192 ALLSYMSFLAGS='-all_load'; \
193 NOALLSYMSFLAGS=''; \
194 SHAREDFLAGS="-dynamiclib"; \
30afcc07 195 SHAREDCMD='$(CC)'; \
36757b44 196 if [ -n "$(LIBVERSION)" ]; then \
62966f38 197 SHAREDFLAGS="$$SHAREDFLAGS -current_version $(LIBVERSION)"; \
36757b44
RL
198 fi; \
199 if [ -n "$$SHLIB_SOVER_NODOT" ]; then \
62966f38 200 SHAREDFLAGS="$$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \
36757b44 201 fi; \
30afcc07 202 $(LINK_SO_A)
2d3de726
RL
203link_app.darwin:
204 LDCMD=$(CC);\
205 LDFLAGS=""; \
206 LIBDEPS="$(LIBDEPS) -lc"; \
207 APPNAME="$(APPNAME)"; \
208 $(LINK_APP)
30afcc07
RL
209
210link_o.cygwin:
bfa96bc2
RL
211 @ $(CALC_VERSIONS); \
212 INHIBIT_SYMLINKS=yes; \
f968059c
RL
213 SHLIB=cyg$(LIBNAME); \
214 SHLIB_SUFFIX=.dll; \
215 LIBDEPS="$(LIBDEPS) -lc"; \
216 SHLIB_SOVER=-$(LIBVERSION); \
217 ALLSYMSFLAGS='-Wl,--whole-archive'; \
218 NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
219 SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
30afcc07
RL
220 SHAREDCMD='${CC}'; \
221 $(LINK_SO_O)
222link_a.cygwin:
bfa96bc2
RL
223 @ $(CALC_VERSIONS); \
224 INHIBIT_SYMLINKS=yes; \
f968059c
RL
225 SHLIB=cyg$(LIBNAME); \
226 SHLIB_SUFFIX=.dll; \
227 LIBDEPS="$(LIBDEPS) -lc"; \
228 SHLIB_SOVER=; \
229 ALLSYMSFLAGS='-Wl,--whole-archive'; \
230 NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
231 SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
30afcc07
RL
232 SHAREDCMD='${CC}'; \
233 $(LINK_SO_A)
2d3de726
RL
234link_app.cygwin:
235 LDCMD=$(CC);\
236 LDFLAGS=""; \
237 LIBDEPS="$(LIBDEPS) -lc"; \
238 APPNAME="$(APPNAME).exe"
239 $(LINK_APP)
30afcc07
RL
240
241link_o.alpha-osf1:
242 @ if ${DETECT_GNU_LD}; then \
2d3de726 243 $(DO_GNU_SO); \
30afcc07 244 else \
f968059c
RL
245 SHLIB=lib$(LIBNAME).so; \
246 SHLIB_SUFFIX=; \
247 LIBDEPS="$(LIBDEPS) -lc"; \
30afcc07
RL
248 SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
249 if [ -n "$$SHLIB_HIST" ]; then \
250 SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
251 else \
252 SHLIB_HIST="$(LIBVERSION)"; \
62966f38 253 fi; \
f968059c
RL
254 SHLIB_SOVER=; \
255 ALLSYMSFLAGS='-all'; \
256 NOALLSYMSFLAGS='-none'; \
257 SHAREDFLAGS="-shared"; \
30afcc07 258 SHAREDCMD='$(CC)'; \
36757b44 259 if [ -n "$$SHLIB_HIST" ]; then \
62966f38 260 SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
36757b44 261 fi; \
12fd8be2
RL
262 fi; \
263 $(LINK_SO_O)
30afcc07
RL
264link_a.alpha-osf1:
265 @ if ${DETECT_GNU_LD}; then \
2d3de726 266 $(DO_GNU_SO); \
30afcc07 267 else \
f968059c
RL
268 SHLIB=lib$(LIBNAME).so; \
269 SHLIB_SUFFIX=; \
270 LIBDEPS="$(LIBDEPS) -lc"; \
30afcc07
RL
271 SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
272 if [ -n "$$SHLIB_HIST" ]; then \
273 SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
274 else \
275 SHLIB_HIST="$(LIBVERSION)"; \
62966f38 276 fi; \
f968059c
RL
277 SHLIB_SOVER=; \
278 ALLSYMSFLAGS='-all'; \
279 NOALLSYMSFLAGS='-none'; \
280 SHAREDFLAGS="-shared"; \
30afcc07 281 SHAREDCMD='$(CC)'; \
36757b44 282 if [ -n "$$SHLIB_HIST" ]; then \
62966f38 283 SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
36757b44 284 fi; \
12fd8be2
RL
285 fi; \
286 $(LINK_SO_A)
2d3de726
RL
287link_app.alpha-osf1:
288 @ if ${DETECT_GNU_LD}; then \
289 $(DO_GNU_APP); \
290 else \
291 LDCMD=$(CC);\
292 LDFLAGS=""; \
293 LIBDEPS="$(LIBDEPS) -lc"; \
294 APPNAME="$(APPNAME)"
295 fi; \
296 $(LINK_APP)
30afcc07
RL
297
298# The difference between alpha-osf1-shared and tru64-shared is the `-msym'
299# option passed to the linker.
300link_o.tru64:
301 @ if ${DETECT_GNU_LD}; then \
2d3de726 302 $(DO_GNU_SO); \
30afcc07 303 else \
f968059c
RL
304 SHLIB=lib$(LIBNAME).so; \
305 SHLIB_SUFFIX=; \
306 LIBDEPS="$(LIBDEPS) -lc"; \
30afcc07
RL
307 SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
308 if [ -n "$$SHLIB_HIST" ]; then \
309 SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
310 else \
311 SHLIB_HIST="$(LIBVERSION)"; \
62966f38 312 fi; \
f968059c
RL
313 SHLIB_SOVER=; \
314 ALLSYMSFLAGS='-all'; \
315 NOALLSYMSFLAGS='-none'; \
2d3de726 316 SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
30afcc07 317 SHAREDCMD='$(CC)'; \
36757b44 318 if [ -n "$$SHLIB_HIST" ]; then \
62966f38 319 SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
36757b44 320 fi; \
12fd8be2
RL
321 fi; \
322 $(LINK_SO_O)
30afcc07
RL
323link_a.tru64:
324 @ if ${DETECT_GNU_LD}; then \
2d3de726 325 $(DO_GNU_SO); \
30afcc07 326 else \
f968059c
RL
327 SHLIB=lib$(LIBNAME).so; \
328 SHLIB_SUFFIX=; \
329 LIBDEPS="$(LIBDEPS) -lc"; \
30afcc07
RL
330 SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
331 if [ -n "$$SHLIB_HIST" ]; then \
332 SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
333 else \
334 SHLIB_HIST="$(LIBVERSION)"; \
62966f38 335 fi; \
f968059c
RL
336 SHLIB_SOVER=; \
337 ALLSYMSFLAGS='-all'; \
338 NOALLSYMSFLAGS='-none'; \
2d3de726 339 SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
30afcc07 340 SHAREDCMD='$(CC)'; \
36757b44 341 if [ -n "$$SHLIB_HIST" ]; then \
62966f38 342 SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
36757b44 343 fi; \
12fd8be2
RL
344 fi; \
345 $(LINK_SO_A)
2d3de726
RL
346link_app.tru64:
347 @ if ${DETECT_GNU_LD}; then \
348 $(DO_GNU_APP); \
349 else \
350 LDCMD=$(CC);\
351 LDFLAGS="-rpath $(LIBRPATH)"; \
352 LIBDEPS="$(LIBDEPS) -lc"; \
353 APPNAME="$(APPNAME)"; \
354 fi; \
355 $(LINK_APP)
30afcc07
RL
356
357# The difference between tru64-shared and tru64-shared-rpath is the
358# -rpath ${LIBRPATH} passed to the linker.
359link_o.tru64-rpath:
360 @ if ${DETECT_GNU_LD}; then \
2d3de726 361 $(DO_GNU_SO); \
30afcc07 362 else \
f968059c
RL
363 SHLIB=lib$(LIBNAME).so; \
364 SHLIB_SUFFIX=; \
365 LIBDEPS="$(LIBDEPS) -lc"; \
30afcc07
RL
366 SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
367 if [ -n "$$SHLIB_HIST" ]; then \
368 SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
369 else \
370 SHLIB_HIST="$(LIBVERSION)"; \
62966f38 371 fi; \
f968059c
RL
372 SHLIB_SOVER=; \
373 ALLSYMSFLAGS='-all'; \
374 NOALLSYMSFLAGS='-none'; \
375 SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
30afcc07 376 SHAREDCMD='$(CC)'; \
36757b44 377 if [ -n "$$SHLIB_HIST" ]; then \
62966f38 378 SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
36757b44 379 fi; \
12fd8be2
RL
380 fi; \
381 $(LINK_SO_O)
30afcc07
RL
382link_a.tru64-rpath:
383 @ if ${DETECT_GNU_LD}; then \
2d3de726 384 $(DO_GNU_SO); \
30afcc07 385 else \
f968059c
RL
386 SHLIB=lib$(LIBNAME).so; \
387 SHLIB_SUFFIX=; \
388 LIBDEPS="$(LIBDEPS) -lc"; \
30afcc07
RL
389 SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \
390 if [ -n "$$SHLIB_HIST" ]; then \
391 SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \
392 else \
393 SHLIB_HIST="$(LIBVERSION)"; \
62966f38 394 fi; \
f968059c
RL
395 SHLIB_SOVER=; \
396 ALLSYMSFLAGS='-all'; \
397 NOALLSYMSFLAGS='-none'; \
398 SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)"; \
30afcc07 399 SHAREDCMD='$(CC)'; \
36757b44 400 if [ -n "$$SHLIB_HIST" ]; then \
62966f38 401 SHAREDFLAGS="$$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \
36757b44 402 fi; \
12fd8be2
RL
403 fi; \
404 $(LINK_SO_A)
2d3de726
RL
405link_app.tru64-rpath:
406 @ if ${DETECT_GNU_LD}; then \
407 $(DO_GNU_APP); \
408 else \
409 LDCMD=$(CC);\
410 LDFLAGS="-rpath $(LIBRPATH)"; \
411 LIBDEPS="$(LIBDEPS) -lc"; \
412 APPNAME="$(APPNAME)"; \
413 fi; \
414 $(LINK_APP)
30afcc07
RL
415
416link_o.solaris:
a0bf8f20 417 @ if ${DETECT_GNU_LD}; then \
2d3de726 418 $(DO_GNU_SO); \
30afcc07
RL
419 else \
420 $(CALC_VERSIONS); \
c4451425
RL
421 MINUSZ='-z '; \
422 (${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
f968059c
RL
423 SHLIB=lib$(LIBNAME).so; \
424 SHLIB_SUFFIX=; \
425 LIBDEPS="$(LIBDEPS) -lc"; \
426 ALLSYMSFLAGS="$${MINUSZ}allextract"; \
427 NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
2d3de726 428 SHAREDFLAGS="-G -dy -z text -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -R $(LIBRPATH)"; \
30afcc07 429 SHAREDCMD='$(CC)'; \
12fd8be2
RL
430 fi; \
431 $(LINK_SO_O)
30afcc07 432link_a.solaris:
a0bf8f20 433 @ if ${DETECT_GNU_LD}; then \
2d3de726 434 $(DO_GNU_SO); \
30afcc07
RL
435 else \
436 $(CALC_VERSIONS); \
c4451425
RL
437 MINUSZ='-z '; \
438 (${CC} -v 2>&1 | grep gcc) > /dev/null && MINUSZ='-Wl,-z,'; \
f968059c
RL
439 SHLIB=lib$(LIBNAME).so; \
440 SHLIB_SUFFIX=;\
441 LIBDEPS="$(LIBDEPS) -lc"; \
442 ALLSYMSFLAGS="$${MINUSZ}allextract"; \
443 NOALLSYMSFLAGS="$${MINUSZ}defaultextract"; \
2d3de726 444 SHAREDFLAGS="-G -dy -z text -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -R $(LIBRPATH)"; \
30afcc07 445 SHAREDCMD='$(CC)'; \
12fd8be2
RL
446 fi; \
447 $(LINK_SO_A)
2d3de726
RL
448link_app.solaris:
449 @ if ${DETECT_GNU_LD}; then \
450 $(DO_GNU_APP); \
451 else \
452 LDCMD=$(CC);\
453 LDFLAGS="-R $(LIBRPATH)"; \
454 LIBDEPS="$(LIBDEPS) -lc"; \
455 APPNAME="$(APPNAME)"; \
456 fi; \
457 $(LINK_APP)
30afcc07
RL
458
459# OpenServer 5 native compilers used
460# UnixWare 7 and OpenUNIX 8 native compilers used
461link_o.svr3:
462 @ if ${DETECT_GNU_LD}; then \
2d3de726 463 $(DO_GNU_SO); \
30afcc07
RL
464 else \
465 $(CALC_VERSIONS); \
24692fc5 466 SHARE_FLAG='-G'; \
e96133e4 467 (${CC} -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
f968059c
RL
468 SHLIB=lib$(LIBNAME).so; \
469 SHLIB_SUFFIX=; \
470 LIBDEPS="$(LIBDEPS) -lc"; \
e96133e4 471 ALLSYMSFLAGS=''; \
f968059c 472 NOALLSYMSFLAGS=''; \
24692fc5 473 SHAREDFLAGS="$${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
30afcc07 474 SHAREDCMD='$(CC)'; \
12fd8be2
RL
475 fi; \
476 $(LINK_SO_O)
30afcc07
RL
477link_a.svr3:
478 @ if ${DETECT_GNU_LD}; then \
2d3de726 479 $(DO_GNU_SO); \
30afcc07
RL
480 else \
481 $(CALC_VERSIONS); \
24692fc5 482 SHARE_FLAG='-G'; \
e96133e4 483 (${CC} -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \
f968059c
RL
484 SHLIB=lib$(LIBNAME).so; \
485 SHLIB_SUFFIX=; \
486 LIBDEPS="$(LIBDEPS) -lc"; \
e96133e4 487 ALLSYMSFLAGS=''; \
f968059c 488 NOALLSYMSFLAGS=''; \
24692fc5 489 SHAREDFLAGS="$${SHARE_FLAG} -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
30afcc07 490 SHAREDCMD='$(CC)'; \
12fd8be2
RL
491 fi; \
492 $(LINK_SO_A_UNPACKED)
2d3de726
RL
493link_app.svr3:
494 @ if ${DETECT_GNU_LD}; then \
495 $(DO_GNU_APP); \
496 else \
497 LDCMD=$(CC);\
498 LDFLAGS=""; \
499 LIBDEPS="$(LIBDEPS) -lc"; \
500 APPNAME="$(APPNAME)"; \
501 fi; \
502 $(LINK_APP)
30afcc07
RL
503
504link_o.irix:
505 @ if ${DETECT_GNU_LD}; then \
2d3de726 506 $(DO_GNU_SO); \
30afcc07
RL
507 else \
508 $(CALC_VERSIONS); \
f968059c
RL
509 SHLIB=lib$(LIBNAME).so; \
510 SHLIB_SUFFIX=; \
511 LIBDEPS="$(LIBDEPS) -lc"; \
512 ALLSYMSFLAGS='-all'; \
513 NOALLSYMSFLAGS=''; \
2d3de726 514 SHAREDFLAGS="-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
30afcc07 515 SHAREDCMD='$(CC)'; \
12fd8be2
RL
516 fi; \
517 $(LINK_SO_O)
30afcc07
RL
518link_a.irix:
519 @ if ${DETECT_GNU_LD}; then \
2d3de726 520 $(DO_GNU_SO); \
30afcc07
RL
521 else \
522 $(CALC_VERSIONS); \
f968059c
RL
523 SHLIB=lib$(LIBNAME).so; \
524 SHLIB_SUFFIX=; \
525 LIBDEPS="$(LIBDEPS) -lc"; \
526 ALLSYMSFLAGS='-all'; \
527 NOALLSYMSFLAGS=''; \
2d3de726 528 SHAREDFLAGS="-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
30afcc07 529 SHAREDCMD='$(CC)'; \
12fd8be2
RL
530 fi; \
531 $(LINK_SO_A)
2d3de726
RL
532link_app.irix:
533 @ if ${DETECT_GNU_LD}; then \
534 $(DO_GNU_APP); \
535 else \
536 LDCMD=$(CC);\
537 LDFLAGS="-Wl,-rpath,$(LIBRPATH)"; \
538 LIBDEPS="$(LIBDEPS) -lc"; \
539 APPNAME="$(APPNAME)"; \
540 fi; \
541 $(LINK_APP)
30afcc07
RL
542
543# HP-UX includes the full pathname of libs we depend on, so we would get
544# ./libcrypto (with ./ as path information) compiled into libssl, hence
545# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
546# anyway.
547# The object modules are loaded from lib$i.a using the undocumented -Fl
548# option.
549#
550# WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH
551# by temporarily specifying "+s"!
552#
553link_o.hpux32:
554 @ $(CALC_VERSIONS); \
f968059c
RL
555 SHLIB=lib$(LIBNAME).sl; \
556 SHLIB_SUFFIX=; \
557 LIBDEPS="$(LIBDEPS) -lc"; \
558 ALLSYMSFLAGS='-Fl'; \
559 NOALLSYMSFLAGS=''; \
2d3de726 560 SHAREDFLAGS="+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
30afcc07 561 SHAREDCMD='/usr/ccs/bin/ld'; \
83699c47 562 $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
30afcc07
RL
563link_a.hpux32:
564 @ $(CALC_VERSIONS); \
f968059c
RL
565 SHLIB=lib$(LIBNAME).sl; \
566 SHLIB_SUFFIX=; \
567 LIBDEPS="$(LIBDEPS) -lc"; \
568 ALLSYMSFLAGS='-Fl'; \
569 NOALLSYMSFLAGS=''; \
2d3de726 570 SHAREDFLAGS="+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
30afcc07 571 SHAREDCMD='/usr/ccs/bin/ld'; \
83699c47 572 $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
2d3de726
RL
573link_app.hpux32:
574 LDCMD=$(CC);\
575 LDFLAGS="-Wl,+b,$(LIBRPATH)"; \
576 LIBDEPS="$(LIBDEPS) -lc"; \
577 APPNAME="$(APPNAME)"
578 $(LINK_APP)
30afcc07
RL
579
580# HP-UX includes the full pathname of libs we depend on, so we would get
581# ./libcrypto (with ./ as path information) compiled into libssl, hence
582# we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto
583# anyway.
584#
585# HP-UX in 64bit mode has "+s" enabled by default; it will search for
586# shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH.
587#
588link_o.hpux64:
589 @ $(CALC_VERSIONS); \
f968059c
RL
590 SHLIB=lib$(LIBNAME).sl; \
591 SHLIB_SUFFIX=; \
592 LIBDEPS="$(LIBDEPS) -lc"; \
593 ALLSYMSFLAGS='+forceload'; \
594 NOALLSYMSFLAGS=''; \
2d3de726 595 SHAREDFLAGS="-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
30afcc07 596 SHAREDCMD='/usr/ccs/bin/ld'; \
83699c47 597 $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
30afcc07
RL
598link_a.hpux64:
599 @ $(CALC_VERSIONS); \
f968059c
RL
600 SHLIB=lib$(LIBNAME).sl; \
601 SHLIB_SUFFIX=; \
602 LIBDEPS="$(LIBDEPS) -lc"; \
603 ALLSYMSFLAGS='+forceload'; \
604 NOALLSYMSFLAGS=''; \
2d3de726 605 SHAREDFLAGS="-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX +b $(LIBRPATH)"; \
30afcc07 606 SHAREDCMD='/usr/ccs/bin/ld'; \
83699c47 607 $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
2d3de726
RL
608link_app.hpux64:
609 LDCMD=$(CC);\
610 LDFLAGS="-Wl,+b,$(LIBRPATH)"; \
611 LIBDEPS="$(LIBDEPS) -lc"; \
612 APPNAME="$(APPNAME)"
613 $(LINK_APP)
30afcc07
RL
614
615link_o.aix:
616 @ $(CALC_VERSIONS); \
f968059c
RL
617 SHLIB=lib$(LIBNAME).so; \
618 SHLIB_SUFFIX=; \
619 LIBDEPS="$(LIBDEPS) -lc"; \
620 ALLSYMSFLAGS='-bnogc'; \
621 NOALLSYMSFLAGS=''; \
2d3de726 622 SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE -blibpath:$(LIBRPATH)'; \
30afcc07
RL
623 SHAREDCMD='$(CC)'; \
624 $(LINK_SO_O)
625link_a.aix:
626 @ $(CALC_VERSIONS); \
f968059c
RL
627 SHLIB=lib$(LIBNAME).so; \
628 SHLIB_SUFFIX=; \
629 LIBDEPS="$(LIBDEPS) -lc"; \
630 ALLSYMSFLAGS='-bnogc'; \
631 NOALLSYMSFLAGS=''; \
2d3de726 632 SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE -blibpath:$(LIBRPATH)'; \
30afcc07
RL
633 SHAREDCMD='$(CC)'; \
634 $(LINK_SO_A_VIA_O)
2d3de726
RL
635link_app.aix:
636 LDCMD=$(CC);\
637 LDFLAGS="-blibpath:$(LIBRPATH)"; \
638 LIBDEPS="$(LIBDEPS) -lc"; \
639 APPNAME="$(APPNAME)"
640 $(LINK_APP)
30afcc07
RL
641
642link_o.reliantunix:
643 @ $(CALC_VERSIONS); \
f968059c
RL
644 SHLIB=lib$(LIBNAME).so; \
645 SHLIB_SUFFIX=; \
646 LIBDEPS="$(LIBDEPS) -lc"; \
647 ALLSYMSFLAGS=; \
648 NOALLSYMSFLAGS=''; \
649 SHAREDFLAGS='-G'; \
30afcc07
RL
650 SHAREDCMD='$(CC)'; \
651 $(LINK_SO_O)
652link_a.reliantunix:
653 @ $(CALC_VERSIONS); \
f968059c
RL
654 SHLIB=lib$(LIBNAME).so; \
655 SHLIB_SUFFIX=; \
656 LIBDEPS="$(LIBDEPS) -lc"; \
657 ALLSYMSFLAGS=; \
658 NOALLSYMSFLAGS=''; \
659 SHAREDFLAGS='-G'; \
30afcc07
RL
660 SHAREDCMD='$(CC)'; \
661 $(LINK_SO_A_UNPACKED)
2d3de726
RL
662link_app.reliantunix:
663 LDCMD=$(CC);\
664 LDFLAGS=""; \
665 LIBDEPS="$(LIBDEPS) -lc"; \
666 APPNAME="$(APPNAME)"
667 $(LINK_APP)
30afcc07
RL
668
669# Targets to build symbolic links when needed
83699c47 670symlink.gnu symlink.solaris symlink.svr3 symlink.irix \
30afcc07
RL
671symlink.aix symlink.reliantunix:
672 @ $(CALC_VERSIONS); \
bfa96bc2 673 SHLIB=lib$(LIBNAME).so; \
30afcc07 674 $(SYMLINK_SO)
83699c47
RL
675symlink.darwin:
676 @ $(CALC_VERSIONS); \
f968059c 677 SHLIB=lib$(LIBNAME); \
bfa96bc2 678 SHLIB_SUFFIX=.dylib; \
83699c47 679 $(SYMLINK_SO)
30afcc07
RL
680symlink.hpux32 symlink.hpux64:
681 @ $(CALC_VERSIONS); \
bfa96bc2 682 SHLIB=lib$(LIBNAME).sl; \
30afcc07 683 $(SYMLINK_SO)
bfa96bc2
RL
684# The following lines means those specific architectures do no symlinks
685symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath:
30afcc07
RL
686
687# Compatibility targets
688link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu
689link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu
2d3de726 690link_app.bsd-gcc-shared link_app.linux-shared link_app.gnu-shared: link_app.gnu
30afcc07
RL
691symlink.bsd-gcc-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu
692link_o.darwin-shared: link_o.darwin
693link_a.darwin-shared: link_a.darwin
2d3de726 694link_app.darwin-shared: link_app.darwin
30afcc07
RL
695symlink.darwin-shared: symlink.darwin
696link_o.cygwin-shared: link_o.cygwin
697link_a.cygwin-shared: link_a.cygwin
2d3de726 698link_app.cygwin-shared: link_app.cygwin
30afcc07
RL
699symlink.cygwin-shared: symlink.cygwin
700link_o.alpha-osf1-shared: link_o.alpha-osf1
701link_a.alpha-osf1-shared: link_a.alpha-osf1
2d3de726 702link_app.alpha-osf1-shared: link_app.alpha-osf1
30afcc07
RL
703symlink.alpha-osf1-shared: symlink.alpha-osf1
704link_o.tru64-shared: link_o.tru64
705link_a.tru64-shared: link_a.tru64
2d3de726 706link_app.tru64-shared: link_app.tru64
30afcc07
RL
707symlink.tru64-shared: symlink.tru64
708link_o.tru64-shared-rpath: link_o.tru64-rpath
709link_a.tru64-shared-rpath: link_a.tru64-rpath
2d3de726 710link_app.tru64-shared-rpath: link_app.tru64-rpath
30afcc07
RL
711symlink.tru64-shared-rpath: symlink.tru64-rpath
712link_o.solaris-shared: link_o.solaris
713link_a.solaris-shared: link_a.solaris
2d3de726 714link_app.solaris-shared: link_app.solaris
30afcc07
RL
715symlink.solaris-shared: symlink.solaris
716link_o.svr3-shared: link_o.svr3
717link_a.svr3-shared: link_a.svr3
2d3de726 718link_app.svr3-shared: link_app.svr3
30afcc07
RL
719symlink.svr3-shared: symlink.svr3
720link_o.svr5-shared: link_o.svr3
721link_a.svr5-shared: link_a.svr3
2d3de726 722link_app.svr5-shared: link_app.svr3
30afcc07
RL
723symlink.svr5-shared: symlink.svr3
724link_o.irix-shared: link_o.irix
725link_a.irix-shared: link_a.irix
2d3de726 726link_app.irix-shared: link_app.irix
30afcc07
RL
727symlink.irix-shared: symlink.irix
728link_o.hpux-shared: link_o.hpux32
729link_a.hpux-shared: link_a.hpux32
2d3de726 730link_app.hpux-shared: link_app.hpux32
30afcc07
RL
731symlink.hpux-shared: symlink.hpux32
732link_o.hpux64-shared: link_o.hpux64
733link_a.hpux64-shared: link_a.hpux64
2d3de726 734link_app.hpux64-shared: link_app.hpux64
30afcc07
RL
735symlink.hpux64-shared: symlink.hpux64
736link_o.aix-shared: link_o.aix
737link_a.aix-shared: link_a.aix
2d3de726 738link_app.aix-shared: link_app.aix
30afcc07
RL
739symlink.aix-shared: symlink.aix
740link_o.reliantunix-shared: link_o.reliantunix
741link_a.reliantunix-shared: link_a.reliantunix
2d3de726 742link_app.reliantunix-shared: link_app.reliantunix
30afcc07 743symlink.reliantunix-shared: symlink.reliantunix