]>
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 \ | |
a0bf8f20 | 70 | SHLIB_COMPAT="$$SHLIB_COMPAT .$$prev"; \ |
30afcc07 RL |
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; \ |
a0bf8f20 | 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 | |
12fd8be2 | 113 | DO_GNU=$(CALC_VERSIONS); \ |
30afcc07 | 114 | SHLIB=lib$(LIBNAME).so \ |
83699c47 | 115 | SHLIB_SUFFIX= \ |
a0bf8f20 | 116 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 | 117 | NOALLSYMSFLAGS='-Wl,--no-whole-archive' \ |
83699c47 | 118 | SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX" \ |
12fd8be2 RL |
119 | SHAREDCMD='$(CC)' |
120 | ||
121 | link_o.gnu: | |
122 | @ $(DO_GNU); $(LINK_SO_O) | |
30afcc07 | 123 | link_a.gnu: |
12fd8be2 | 124 | @ $(DO_GNU); $(LINK_SO_A) |
30afcc07 RL |
125 | |
126 | # For Darwin AKA Mac OS/X (dyld) | |
127 | link_o.darwin: | |
128 | @ $(CALC_VERSIONS); \ | |
83699c47 RL |
129 | SHLIB=lib$(LIBNAME) \ |
130 | SHLIB_SUFFIX=.dylib \ | |
a0bf8f20 | 131 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
132 | ALLSYMSFLAGS='-all_load' \ |
133 | NOALLSYMSFLAGS='' \ | |
36757b44 | 134 | SHAREDFLAGS="-dynamiclib" \ |
30afcc07 | 135 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
136 | if [ -n "$(LIBVERSION)" ]; then \ |
137 | SHAREDFLAGS="$SHAREDFLAGS -current_version $(LIBVERSION)"; \ | |
138 | fi; \ | |
139 | if [ -n "$$SHLIB_SOVER_NODOT" ]; then \ | |
140 | SHAREDFLAGS="$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \ | |
141 | fi; \ | |
30afcc07 RL |
142 | $(LINK_SO_O) |
143 | link_a.darwin: | |
144 | @ $(CALC_VERSIONS); \ | |
c199837c | 145 | SHLIB=lib$(LIBNAME) \ |
83699c47 | 146 | SHLIB_SUFFIX=.dylib \ |
a0bf8f20 | 147 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
148 | ALLSYMSFLAGS='-all_load' \ |
149 | NOALLSYMSFLAGS='' \ | |
36757b44 | 150 | SHAREDFLAGS="-dynamiclib" \ |
30afcc07 | 151 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
152 | if [ -n "$(LIBVERSION)" ]; then \ |
153 | SHAREDFLAGS="$SHAREDFLAGS -current_version $(LIBVERSION)"; \ | |
154 | fi; \ | |
155 | if [ -n "$$SHLIB_SOVER_NODOT" ]; then \ | |
156 | SHAREDFLAGS="$SHAREDFLAGS -compatibility_version $$SHLIB_SOVER_NODOT"; \ | |
157 | fi; \ | |
30afcc07 RL |
158 | $(LINK_SO_A) |
159 | ||
160 | link_o.cygwin: | |
161 | @ SHLIB=cyg$(LIBNAME).dll \ | |
83699c47 | 162 | SHLIB_SUFFIX= \ |
a0bf8f20 | 163 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
164 | SHLIB_SOVER= \ |
165 | ALLSYMSFLAGS='-Wl,--whole-archive' \ | |
166 | NOALLSYMSFLAGS='-Wl,--no-whole-archive' \ | |
167 | SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a" \ | |
168 | SHAREDCMD='${CC}'; \ | |
169 | $(LINK_SO_O) | |
170 | link_a.cygwin: | |
171 | @ SHLIB=cyg$(LIBNAME).dll \ | |
83699c47 | 172 | SHLIB_SUFFIX= \ |
a0bf8f20 | 173 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
174 | SHLIB_SOVER= \ |
175 | ALLSYMSFLAGS='-Wl,--whole-archive' \ | |
176 | NOALLSYMSFLAGS='-Wl,--no-whole-archive' \ | |
177 | SHAREDFLAGS="-shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a" \ | |
178 | SHAREDCMD='${CC}'; \ | |
179 | $(LINK_SO_A) | |
180 | ||
181 | link_o.alpha-osf1: | |
182 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 183 | $(DO_GNU); \ |
30afcc07 RL |
184 | else \ |
185 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 186 | SHLIB_SUFFIX= \ |
a0bf8f20 | 187 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
188 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ |
189 | if [ -n "$$SHLIB_HIST" ]; then \ | |
190 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
191 | else \ | |
192 | SHLIB_HIST="$(LIBVERSION)"; \ | |
193 | fi | |
194 | SHLIB_SOVER= \ | |
195 | ALLSYMSFLAGS='-all' \ | |
196 | NOALLSYMSFLAGS='-none' \ | |
36757b44 | 197 | SHAREDFLAGS="-shared" \ |
30afcc07 | 198 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
199 | if [ -n "$$SHLIB_HIST" ]; then \ |
200 | SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \ | |
201 | fi; \ | |
12fd8be2 RL |
202 | fi; \ |
203 | $(LINK_SO_O) | |
30afcc07 RL |
204 | link_a.alpha-osf1: |
205 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 206 | $(DO_GNU); \ |
30afcc07 RL |
207 | else \ |
208 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 209 | SHLIB_SUFFIX= \ |
a0bf8f20 | 210 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
211 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ |
212 | if [ -n "$$SHLIB_HIST" ]; then \ | |
213 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
214 | else \ | |
215 | SHLIB_HIST="$(LIBVERSION)"; \ | |
216 | fi | |
217 | SHLIB_SOVER= \ | |
218 | ALLSYMSFLAGS='-all' \ | |
219 | NOALLSYMSFLAGS='-none' \ | |
36757b44 | 220 | SHAREDFLAGS="-shared" \ |
30afcc07 | 221 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
222 | if [ -n "$$SHLIB_HIST" ]; then \ |
223 | SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \ | |
224 | fi; \ | |
12fd8be2 RL |
225 | fi; \ |
226 | $(LINK_SO_A) | |
30afcc07 RL |
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 \ | |
12fd8be2 | 232 | $(DO_GNU); \ |
30afcc07 RL |
233 | else \ |
234 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 235 | SHLIB_SUFFIX= \ |
a0bf8f20 | 236 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
237 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ |
238 | if [ -n "$$SHLIB_HIST" ]; then \ | |
239 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
240 | else \ | |
241 | SHLIB_HIST="$(LIBVERSION)"; \ | |
242 | fi | |
243 | SHLIB_SOVER= \ | |
244 | ALLSYMSFLAGS='-all' \ | |
245 | NOALLSYMSFLAGS='-none' \ | |
36757b44 | 246 | SHAREDFLAGS="-shared -msym" \ |
30afcc07 | 247 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
248 | if [ -n "$$SHLIB_HIST" ]; then \ |
249 | SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \ | |
250 | fi; \ | |
12fd8be2 RL |
251 | fi; \ |
252 | $(LINK_SO_O) | |
30afcc07 RL |
253 | link_a.tru64: |
254 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 255 | $(DO_GNU); \ |
30afcc07 RL |
256 | else \ |
257 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 258 | SHLIB_SUFFIX= \ |
a0bf8f20 | 259 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
260 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ |
261 | if [ -n "$$SHLIB_HIST" ]; then \ | |
262 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
263 | else \ | |
264 | SHLIB_HIST="$(LIBVERSION)"; \ | |
265 | fi | |
266 | SHLIB_SOVER= \ | |
267 | ALLSYMSFLAGS='-all' \ | |
268 | NOALLSYMSFLAGS='-none' \ | |
36757b44 | 269 | SHAREDFLAGS="-shared -msym" \ |
30afcc07 | 270 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
271 | if [ -n "$$SHLIB_HIST" ]; then \ |
272 | SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \ | |
273 | fi; \ | |
12fd8be2 RL |
274 | fi; \ |
275 | $(LINK_SO_A) | |
30afcc07 RL |
276 | |
277 | # The difference between tru64-shared and tru64-shared-rpath is the | |
278 | # -rpath ${LIBRPATH} passed to the linker. | |
279 | link_o.tru64-rpath: | |
280 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 281 | $(DO_GNU); \ |
30afcc07 RL |
282 | else \ |
283 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 284 | SHLIB_SUFFIX= \ |
a0bf8f20 | 285 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
286 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ |
287 | if [ -n "$$SHLIB_HIST" ]; then \ | |
288 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
289 | else \ | |
290 | SHLIB_HIST="$(LIBVERSION)"; \ | |
291 | fi | |
292 | SHLIB_SOVER= \ | |
293 | ALLSYMSFLAGS='-all' \ | |
294 | NOALLSYMSFLAGS='-none' \ | |
36757b44 | 295 | SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)" \ |
30afcc07 | 296 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
297 | if [ -n "$$SHLIB_HIST" ]; then \ |
298 | SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \ | |
299 | fi; \ | |
12fd8be2 RL |
300 | fi; \ |
301 | $(LINK_SO_O) | |
30afcc07 RL |
302 | link_a.tru64-rpath: |
303 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 304 | $(DO_GNU); \ |
30afcc07 RL |
305 | else \ |
306 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 307 | SHLIB_SUFFIX= \ |
a0bf8f20 | 308 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
309 | SHLIB_HIST=`echo "$(LIBCOMPATVERSIONS)" | cut -d';' -f2 | sed -e 's/ */:/'`; \ |
310 | if [ -n "$$SHLIB_HIST" ]; then \ | |
311 | SHLIB_HIST="$${SHLIB_HIST}:$(LIBVERSION)"; \ | |
312 | else \ | |
313 | SHLIB_HIST="$(LIBVERSION)"; \ | |
314 | fi | |
315 | SHLIB_SOVER= \ | |
316 | ALLSYMSFLAGS='-all' \ | |
317 | NOALLSYMSFLAGS='-none' \ | |
36757b44 | 318 | SHAREDFLAGS="-shared -msym -rpath $(LIBRPATH)" \ |
30afcc07 | 319 | SHAREDCMD='$(CC)'; \ |
36757b44 RL |
320 | if [ -n "$$SHLIB_HIST" ]; then \ |
321 | SHAREDFLAGS="$SHAREDFLAGS -set_version \"$$SHLIB_HIST\""; \ | |
322 | fi; \ | |
12fd8be2 RL |
323 | fi; \ |
324 | $(LINK_SO_A) | |
30afcc07 RL |
325 | |
326 | link_o.solaris: | |
a0bf8f20 | 327 | @ if ${DETECT_GNU_LD}; then \ |
12fd8be2 | 328 | $(DO_GNU); \ |
30afcc07 RL |
329 | else \ |
330 | $(CALC_VERSIONS); \ | |
331 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 332 | SHLIB_SUFFIX= \ |
a0bf8f20 | 333 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
334 | ALLSYMSFLAGS='-z allextract' \ |
335 | NOALLSYMSFLAGS='' \ | |
83699c47 | 336 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 337 | SHAREDCMD='$(CC)'; \ |
12fd8be2 RL |
338 | fi; \ |
339 | $(LINK_SO_O) | |
30afcc07 | 340 | link_a.solaris: |
a0bf8f20 | 341 | @ if ${DETECT_GNU_LD}; then \ |
12fd8be2 | 342 | $(DO_GNU); \ |
30afcc07 RL |
343 | else \ |
344 | $(CALC_VERSIONS); \ | |
345 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 346 | SHLIB_SUFFIX= \ |
a0bf8f20 | 347 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
348 | ALLSYMSFLAGS='-z allextract' \ |
349 | NOALLSYMSFLAGS='' \ | |
83699c47 | 350 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 351 | SHAREDCMD='$(CC)'; \ |
12fd8be2 RL |
352 | fi; \ |
353 | $(LINK_SO_A) | |
30afcc07 RL |
354 | |
355 | # OpenServer 5 native compilers used | |
356 | # UnixWare 7 and OpenUNIX 8 native compilers used | |
357 | link_o.svr3: | |
358 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 359 | $(DO_GNU); \ |
30afcc07 RL |
360 | else \ |
361 | $(CALC_VERSIONS); \ | |
362 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 363 | SHLIB_SUFFIX= \ |
a0bf8f20 | 364 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
365 | ALLSYMSFLAGS='-z allextract' \ |
366 | NOALLSYMSFLAGS='' \ | |
83699c47 | 367 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 368 | SHAREDCMD='$(CC)'; \ |
12fd8be2 RL |
369 | fi; \ |
370 | $(LINK_SO_O) | |
30afcc07 RL |
371 | link_a.svr3: |
372 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 373 | $(DO_GNU); \ |
30afcc07 RL |
374 | else \ |
375 | $(CALC_VERSIONS); \ | |
376 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 377 | SHLIB_SUFFIX= \ |
a0bf8f20 | 378 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
379 | ALLSYMSFLAGS='-z allextract' \ |
380 | NOALLSYMSFLAGS='' \ | |
83699c47 | 381 | SHAREDFLAGS='-G -h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 382 | SHAREDCMD='$(CC)'; \ |
12fd8be2 RL |
383 | fi; \ |
384 | $(LINK_SO_A_UNPACKED) | |
30afcc07 RL |
385 | |
386 | link_o.irix: | |
387 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 388 | $(DO_GNU); \ |
30afcc07 RL |
389 | else \ |
390 | $(CALC_VERSIONS); \ | |
391 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 392 | SHLIB_SUFFIX= \ |
a0bf8f20 | 393 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
394 | ALLSYMSFLAGS='-all' \ |
395 | NOALLSYMSFLAGS='' \ | |
83699c47 | 396 | SHAREDFLAGS='-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 397 | SHAREDCMD='$(CC)'; \ |
12fd8be2 RL |
398 | fi; \ |
399 | $(LINK_SO_O) | |
30afcc07 RL |
400 | link_a.irix: |
401 | @ if ${DETECT_GNU_LD}; then \ | |
12fd8be2 | 402 | $(DO_GNU); \ |
30afcc07 RL |
403 | else \ |
404 | $(CALC_VERSIONS); \ | |
405 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 406 | SHLIB_SUFFIX= \ |
a0bf8f20 | 407 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
408 | ALLSYMSFLAGS='-all' \ |
409 | NOALLSYMSFLAGS='' \ | |
83699c47 | 410 | SHAREDFLAGS='-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 411 | SHAREDCMD='$(CC)'; \ |
12fd8be2 RL |
412 | fi; \ |
413 | $(LINK_SO_A) | |
30afcc07 RL |
414 | |
415 | # HP-UX includes the full pathname of libs we depend on, so we would get | |
416 | # ./libcrypto (with ./ as path information) compiled into libssl, hence | |
417 | # we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto | |
418 | # anyway. | |
419 | # The object modules are loaded from lib$i.a using the undocumented -Fl | |
420 | # option. | |
421 | # | |
422 | # WARNING: Until DSO is fixed to support a search path, we support SHLIB_PATH | |
423 | # by temporarily specifying "+s"! | |
424 | # | |
425 | link_o.hpux32: | |
426 | @ $(CALC_VERSIONS); \ | |
427 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 428 | SHLIB_SUFFIX= \ |
30afcc07 RL |
429 | LIBDEPS="$(LIBDEPS) -lc" \ |
430 | ALLSYMSFLAGS='-Fl' \ | |
431 | NOALLSYMSFLAGS='' \ | |
83699c47 | 432 | SHAREDFLAGS='+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 433 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 434 | $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
435 | link_a.hpux32: |
436 | @ $(CALC_VERSIONS); \ | |
437 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 438 | SHLIB_SUFFIX= \ |
30afcc07 RL |
439 | LIBDEPS="$(LIBDEPS) -lc" \ |
440 | ALLSYMSFLAGS='-Fl' \ | |
441 | NOALLSYMSFLAGS='' \ | |
83699c47 | 442 | SHAREDFLAGS='+vnocompatwarnings -b -z +s +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 443 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 444 | $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
445 | |
446 | # HP-UX includes the full pathname of libs we depend on, so we would get | |
447 | # ./libcrypto (with ./ as path information) compiled into libssl, hence | |
448 | # we omit the SHLIBDEPS. Applications must be linked with -lssl -lcrypto | |
449 | # anyway. | |
450 | # | |
451 | # HP-UX in 64bit mode has "+s" enabled by default; it will search for | |
452 | # shared libraries along LD_LIBRARY_PATH _and_ SHLIB_PATH. | |
453 | # | |
454 | link_o.hpux64: | |
455 | @ $(CALC_VERSIONS); \ | |
456 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 457 | SHLIB_SUFFIX= \ |
30afcc07 RL |
458 | LIBDEPS="$(LIBDEPS) -lc" \ |
459 | ALLSYMSFLAGS='+forceload' \ | |
460 | NOALLSYMSFLAGS='' \ | |
83699c47 | 461 | SHAREDFLAGS='-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 462 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 463 | $(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
464 | link_a.hpux64: |
465 | @ $(CALC_VERSIONS); \ | |
466 | SHLIB=lib$(LIBNAME).sl \ | |
83699c47 | 467 | SHLIB_SUFFIX= \ |
30afcc07 RL |
468 | LIBDEPS="$(LIBDEPS) -lc" \ |
469 | ALLSYMSFLAGS='+forceload' \ | |
470 | NOALLSYMSFLAGS='' \ | |
83699c47 | 471 | SHAREDFLAGS='-b -z +h $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX' \ |
30afcc07 | 472 | SHAREDCMD='/usr/ccs/bin/ld'; \ |
83699c47 | 473 | $(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX |
30afcc07 RL |
474 | |
475 | link_o.aix: | |
476 | @ $(CALC_VERSIONS); \ | |
477 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 478 | SHLIB_SUFFIX= \ |
a0bf8f20 | 479 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
480 | ALLSYMSFLAGS='-bnogc' \ |
481 | NOALLSYMSFLAGS='' \ | |
482 | SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE' \ | |
483 | SHAREDCMD='$(CC)'; \ | |
484 | $(LINK_SO_O) | |
485 | link_a.aix: | |
486 | @ $(CALC_VERSIONS); \ | |
487 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 488 | SHLIB_SUFFIX= \ |
a0bf8f20 | 489 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
490 | ALLSYMSFLAGS='-bnogc' \ |
491 | NOALLSYMSFLAGS='' \ | |
492 | SHAREDFLAGS='-G -bE:lib$(LIBNAME).exp -bM:SRE' \ | |
493 | SHAREDCMD='$(CC)'; \ | |
494 | $(LINK_SO_A_VIA_O) | |
495 | ||
496 | link_o.reliantunix: | |
497 | @ $(CALC_VERSIONS); \ | |
498 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 499 | SHLIB_SUFFIX= \ |
a0bf8f20 | 500 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
501 | ALLSYMSFLAGS= \ |
502 | NOALLSYMSFLAGS='' \ | |
503 | SHAREDFLAGS='-G' \ | |
504 | SHAREDCMD='$(CC)'; \ | |
505 | $(LINK_SO_O) | |
506 | link_a.reliantunix: | |
507 | @ $(CALC_VERSIONS); \ | |
508 | SHLIB=lib$(LIBNAME).so \ | |
83699c47 | 509 | SHLIB_SUFFIX= \ |
a0bf8f20 | 510 | LIBDEPS="$(LIBDEPS) -lc" \ |
30afcc07 RL |
511 | ALLSYMSFLAGS= \ |
512 | NOALLSYMSFLAGS='' \ | |
513 | SHAREDFLAGS='-G' \ | |
514 | SHAREDCMD='$(CC)'; \ | |
515 | $(LINK_SO_A_UNPACKED) | |
516 | ||
517 | # Targets to build symbolic links when needed | |
83699c47 | 518 | symlink.gnu symlink.solaris symlink.svr3 symlink.irix \ |
30afcc07 RL |
519 | symlink.aix symlink.reliantunix: |
520 | @ $(CALC_VERSIONS); \ | |
521 | SHLIB=lib$(LIBNAME).so \ | |
522 | $(SYMLINK_SO) | |
83699c47 RL |
523 | symlink.darwin: |
524 | @ $(CALC_VERSIONS); \ | |
525 | SHLIB=lib$(LIBNAME) \ | |
526 | SHLIB_SUFFIX=.dylib \ | |
527 | $(SYMLINK_SO) | |
30afcc07 RL |
528 | symlink.cygwin symlib.alpha-osf1 symlink.tru64 symlink.tru64-rpath: |
529 | symlink.hpux32 symlink.hpux64: | |
530 | @ $(CALC_VERSIONS); \ | |
531 | SHLIB=lib$(LIBNAME).sl \ | |
532 | $(SYMLINK_SO) | |
533 | ||
534 | # Compatibility targets | |
535 | link_o.bsd-gcc-shared link_o.linux-shared link_o.gnu-shared: link_o.gnu | |
536 | link_a.bsd-gcc-shared link_a.linux-shared link_a.gnu-shared: link_a.gnu | |
537 | symlink.bsd-gcc-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu | |
538 | link_o.darwin-shared: link_o.darwin | |
539 | link_a.darwin-shared: link_a.darwin | |
540 | symlink.darwin-shared: symlink.darwin | |
541 | link_o.cygwin-shared: link_o.cygwin | |
542 | link_a.cygwin-shared: link_a.cygwin | |
543 | symlink.cygwin-shared: symlink.cygwin | |
544 | link_o.alpha-osf1-shared: link_o.alpha-osf1 | |
545 | link_a.alpha-osf1-shared: link_a.alpha-osf1 | |
546 | symlink.alpha-osf1-shared: symlink.alpha-osf1 | |
547 | link_o.tru64-shared: link_o.tru64 | |
548 | link_a.tru64-shared: link_a.tru64 | |
549 | symlink.tru64-shared: symlink.tru64 | |
550 | link_o.tru64-shared-rpath: link_o.tru64-rpath | |
551 | link_a.tru64-shared-rpath: link_a.tru64-rpath | |
552 | symlink.tru64-shared-rpath: symlink.tru64-rpath | |
553 | link_o.solaris-shared: link_o.solaris | |
554 | link_a.solaris-shared: link_a.solaris | |
555 | symlink.solaris-shared: symlink.solaris | |
556 | link_o.svr3-shared: link_o.svr3 | |
557 | link_a.svr3-shared: link_a.svr3 | |
558 | symlink.svr3-shared: symlink.svr3 | |
559 | link_o.svr5-shared: link_o.svr3 | |
560 | link_a.svr5-shared: link_a.svr3 | |
561 | symlink.svr5-shared: symlink.svr3 | |
562 | link_o.irix-shared: link_o.irix | |
563 | link_a.irix-shared: link_a.irix | |
564 | symlink.irix-shared: symlink.irix | |
565 | link_o.hpux-shared: link_o.hpux32 | |
566 | link_a.hpux-shared: link_a.hpux32 | |
567 | symlink.hpux-shared: symlink.hpux32 | |
568 | link_o.hpux64-shared: link_o.hpux64 | |
569 | link_a.hpux64-shared: link_a.hpux64 | |
570 | symlink.hpux64-shared: symlink.hpux64 | |
571 | link_o.aix-shared: link_o.aix | |
572 | link_a.aix-shared: link_a.aix | |
573 | symlink.aix-shared: symlink.aix | |
574 | link_o.reliantunix-shared: link_o.reliantunix | |
575 | link_a.reliantunix-shared: link_a.reliantunix | |
576 | symlink.reliantunix-shared: symlink.reliantunix |