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