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