]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bmake/mk/lib.mk
Update to bmake-20200902
[FreeBSD/FreeBSD.git] / contrib / bmake / mk / lib.mk
1 # $Id: lib.mk,v 1.71 2020/08/19 17:51:53 sjg Exp $
2
3 .if !target(__${.PARSEFILE}__)
4 __${.PARSEFILE}__:
5
6 .include <init.mk>
7
8 .if ${OBJECT_FMT} == "ELF"
9 NEED_SOLINKS?= yes
10 .endif
11
12 SHLIB_VERSION_FILE?= ${.CURDIR}/shlib_version
13 .if !defined(SHLIB_MAJOR) && exists(${SHLIB_VERSION_FILE})
14 SHLIB_MAJOR != . ${SHLIB_VERSION_FILE} ; echo $$major
15 SHLIB_MINOR != . ${SHLIB_VERSION_FILE} ; echo $$minor
16 SHLIB_TEENY != . ${SHLIB_VERSION_FILE} ; echo $$teeny
17 .endif
18
19 .for x in major minor teeny
20 print-shlib-$x:
21 .if defined(SHLIB_${x:tu}) && ${MK_PIC} != "no"
22         @echo ${SHLIB_${x:tu}}
23 .else
24         @false
25 .endif
26 .endfor
27
28 SHLIB_FULLVERSION ?= ${${SHLIB_MAJOR} ${SHLIB_MINOR} ${SHLIB_TEENY}:L:ts.}
29 SHLIB_FULLVERSION := ${SHLIB_FULLVERSION}
30
31 # add additional suffixes not exported.
32 # .po is used for profiling object files.
33 # ${PICO} is used for PIC object files.
34 PICO?= .pico
35 .SUFFIXES: .out .a .ln ${PICO} .po .o .s .S .c .cc .C .m .F .f .r .y .l .cl .p .h
36 .SUFFIXES: .sh .m4 .m
37
38 CFLAGS+=        ${COPTS}
39
40 META_NOECHO?= echo
41
42 # Originally derrived from NetBSD-1.6
43
44 # Set PICFLAGS to cc flags for producing position-independent code,
45 # if not already set.  Includes -DPIC, if required.
46
47 # Data-driven table using make variables to control how shared libraries
48 # are built for different platforms and object formats.
49 # OBJECT_FMT:           currently either "ELF" or "a.out", from <bsd.own.mk>
50 # SHLIB_SOVERSION:      version number to be compiled into a shared library
51 #                       via -soname. Usually ${SHLIB_MAJOR} on ELF.
52 #                       NetBSD/pmax used to use ${SHLIB_MAJOR}[.${SHLIB_MINOR}
53 #                       [.${SHLIB_TEENY}]]
54 # SHLIB_SHFLAGS:        Flags to tell ${LD} to emit shared library.
55 #                       with ELF, also set shared-lib version for ld.so.
56 # SHLIB_LDSTARTFILE:    support .o file, call C++ file-level constructors
57 # SHLIB_LDENDFILE:      support .o file, call C++ file-level destructors
58 # FPICFLAGS:            flags for ${FC} to compile .[fF] files to ${PICO} objects.
59 # CPPICFLAGS:           flags for ${CPP} to preprocess .[sS] files for ${AS}
60 # CPICFLAGS:            flags for ${CC} to compile .[cC] files to ${PICO} objects.
61 # CAPICFLAGS            flags for {$CC} to compiling .[Ss] files
62 #                       (usually just ${CPPPICFLAGS} ${CPICFLAGS})
63 # APICFLAGS:            flags for ${AS} to assemble .[sS] to ${PICO} objects.
64
65 .if ${TARGET_OSNAME} == "NetBSD"
66 .if ${MACHINE_ARCH} == "alpha"
67                 # Alpha-specific shared library flags
68 FPICFLAGS ?= -fPIC
69 CPICFLAGS ?= -fPIC -DPIC
70 CPPPICFLAGS?= -DPIC
71 CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
72 APICFLAGS ?=
73 .elif ${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb"
74                 # mips-specific shared library flags
75
76 # On mips, all libs are compiled with ABIcalls, not just sharedlibs.
77 MKPICLIB= no
78
79 # so turn shlib PIC flags on for ${AS}.
80 AINC+=-DABICALLS
81 AFLAGS+= -fPIC
82 AS+=    -KPIC
83
84 .elif ${MACHINE_ARCH} == "vax" && ${OBJECT_FMT} == "ELF"
85 # On the VAX, all object are PIC by default, not just sharedlibs.
86 MKPICLIB= no
87
88 .elif (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64") && \
89        ${OBJECT_FMT} == "ELF"
90 # If you use -fPIC you need to define BIGPIC to turn on 32-bit
91 # relocations in asm code
92 FPICFLAGS ?= -fPIC
93 CPICFLAGS ?= -fPIC -DPIC
94 CPPPICFLAGS?= -DPIC -DBIGPIC
95 CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
96 APICFLAGS ?= -KPIC
97
98 .else
99
100 # Platform-independent flags for NetBSD a.out shared libraries
101 SHLIB_SOVERSION=${SHLIB_FULLVERSION}
102 SHLIB_SHFLAGS=
103 FPICFLAGS ?= -fPIC
104 CPICFLAGS?= -fPIC -DPIC
105 CPPPICFLAGS?= -DPIC
106 CAPICFLAGS?= ${CPPPICFLAGS} ${CPICFLAGS}
107 APICFLAGS?= -k
108
109 .endif
110
111 # Platform-independent linker flags for ELF shared libraries
112 .if ${OBJECT_FMT} == "ELF"
113 SHLIB_SOVERSION=        ${SHLIB_MAJOR}
114 SHLIB_SHFLAGS=          -soname lib${LIB}.so.${SHLIB_SOVERSION}
115 SHLIB_LDSTARTFILE?=     /usr/lib/crtbeginS.o
116 SHLIB_LDENDFILE?=       /usr/lib/crtendS.o
117 .endif
118
119 # for compatibility with the following
120 CC_PIC?= ${CPICFLAGS}
121 LD_shared=${SHLIB_SHFLAGS}
122
123 .endif # NetBSD
124
125 .if ${TARGET_OSNAME} == "FreeBSD"
126 .if ${OBJECT_FMT} == "ELF"
127 SHLIB_SOVERSION=        ${SHLIB_MAJOR}
128 SHLIB_SHFLAGS=          -soname lib${LIB}.so.${SHLIB_SOVERSION}
129 .else
130 SHLIB_SHFLAGS=          -assert pure-text
131 .endif
132 SHLIB_LDSTARTFILE=
133 SHLIB_LDENDFILE=
134 CC_PIC?= -fpic
135 LD_shared=${SHLIB_SHFLAGS}
136
137 .endif # FreeBSD
138
139 MKPICLIB?= yes
140
141 # sys.mk can override these
142 LD_X?=-X
143 LD_x?=-x
144 LD_r?=-r
145
146 # Non BSD machines will be using bmake.
147 .if ${TARGET_OSNAME} == "SunOS"
148 LD_shared=-assert pure-text
149 .if ${OBJECT_FMT} == "ELF" || ${MACHINE} == "solaris"
150 # Solaris
151 LD_shared=-h lib${LIB}.so.${SHLIB_MAJOR} -G
152 .endif
153 .elif ${TARGET_OSNAME} == "HP-UX"
154 LD_shared=-b
155 LD_so=sl
156 DLLIB=
157 # HPsUX lorder does not grok anything but .o
158 LD_sobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,${PICO},'`
159 LD_pobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,.po,'`
160 .elif ${TARGET_OSNAME} == "OSF1"
161 LD_shared= -msym -shared -expect_unresolved '*'
162 LD_solib= -all lib${LIB}_pic.a
163 DLLIB=
164 # lorder does not grok anything but .o
165 LD_sobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,${PICO},'`
166 LD_pobjs=`${LORDER} ${OBJS} | ${TSORT} | sed 's,\.o,.po,'`
167 AR_cq= -cqs
168 .elif ${TARGET_OSNAME} == "FreeBSD"
169 LD_solib= lib${LIB}_pic.a
170 .elif ${TARGET_OSNAME} == "Linux"
171 SHLIB_LD = ${CC}
172 # this is ambiguous of course
173 LD_shared=-shared -Wl,"-soname lib${LIB}.so.${SHLIB_MAJOR}"
174 LD_solib= -Wl,--whole-archive lib${LIB}_pic.a -Wl,--no-whole-archive
175 .if ${COMPILER_TYPE} == "gcc"
176 # Linux uses GNU ld, which is a multi-pass linker
177 # so we don't need to use lorder or tsort
178 LD_objs = ${OBJS}
179 LD_pobjs = ${POBJS}
180 LD_sobjs = ${SOBJS}
181 .endif
182 .elif ${TARGET_OSNAME} == "Darwin"
183 SHLIB_LD = ${CC}
184 SHLIB_INSTALL_VERSION ?= ${SHLIB_MAJOR}
185 SHLIB_COMPATABILITY_VERSION ?= ${SHLIB_MAJOR}.${SHLIB_MINOR:U0}
186 SHLIB_COMPATABILITY ?= \
187         -compatibility_version ${SHLIB_COMPATABILITY_VERSION} \
188         -current_version ${SHLIB_FULLVERSION}
189 LD_shared = -dynamiclib \
190         -flat_namespace -undefined suppress \
191         -install_name ${LIBDIR}/lib${LIB}.${SHLIB_INSTALL_VERSION}.${LD_solink} \
192         ${SHLIB_COMPATABILITY}
193 SHLIB_LINKS =
194 .for v in ${SHLIB_COMPATABILITY_VERSION} ${SHLIB_INSTALL_VERSION}
195 .if "$v" != "${SHLIB_FULLVERSION}"
196 SHLIB_LINKS += lib${LIB}.$v.${LD_solink}
197 .endif
198 .endfor
199 .if ${MK_LINKLIB} != "no"
200 SHLIB_LINKS += lib${LIB}.${LD_solink}
201 .endif
202
203 LD_so = ${SHLIB_FULLVERSION}.dylib
204 LD_sobjs = ${SOBJS:O:u}
205 LD_solib = ${LD_sobjs}
206 SOLIB = ${LD_sobjs}
207 LD_solink = dylib
208 .if ${MACHINE_ARCH} == "i386"
209 PICFLAG ?= -fPIC
210 .else
211 PICFLAG ?= -fPIC -fno-common
212 .endif
213 RANLIB = :
214 .endif
215
216 SHLIB_LD ?= ${LD}
217
218 .if !empty(SHLIB_MAJOR)
219 .if ${NEED_SOLINKS} && empty(SHLIB_LINKS)
220 .if ${MK_LINKLIB} != "no"
221 SHLIB_LINKS = lib${LIB}.${LD_solink}
222 .endif
223 .if "${SHLIB_FULLVERSION}" != "${SHLIB_MAJOR}"
224 SHLIB_LINKS += lib${LIB}.${LD_solink}.${SHLIB_MAJOR}
225 .endif
226 .endif
227 .endif
228
229 LIBTOOL?=libtool
230 LD_shared ?= -Bshareable -Bforcearchive
231 LD_so ?= so.${SHLIB_FULLVERSION}
232 LD_solink ?= so
233 .if empty(LORDER)
234 LD_objs ?= ${OBJS}
235 LD_pobjs ?= ${POBJS}
236 LD_sobjs ?= ${SOBJS}
237 .else
238 LD_objs ?= `${LORDER} ${OBJS} | ${TSORT}`
239 LD_sobjs ?= `${LORDER} ${SOBJS} | ${TSORT}`
240 LD_pobjs ?= `${LORDER} ${POBJS} | ${TSORT}`
241 .endif
242 LD_solib ?= ${LD_sobjs}
243 AR_cq ?= cq
244 .if exists(/netbsd) && exists(${DESTDIR}/usr/lib/libdl.so)
245 DLLIB ?= -ldl
246 .endif
247
248 # some libs have lots of objects, and scanning all .o, .po and ${PICO} meta files
249 # is a waste of time, this tells meta.autodep.mk to just pick one
250 # (typically ${PICO})
251 # yes, 42 is a random number.
252 .if ${MK_DIRDEPS_BUILD} == "yes" && ${SRCS:Uno:[\#]} > 42
253 OPTIMIZE_OBJECT_META_FILES ?= yes
254 .endif
255
256
257 .if ${MK_LIBTOOL} == "yes"
258 # because libtool is so fascist about naming the object files,
259 # we cannot (yet) build profiled libs
260 MK_PROFILE=no
261 _LIBS=lib${LIB}.a
262 .if exists(${.CURDIR}/shlib_version)
263 SHLIB_AGE != . ${.CURDIR}/shlib_version ; echo $$age
264 .endif
265 .else
266 # for the normal .a we do not want to strip symbols
267 .c.o:
268         ${COMPILE.c} ${.IMPSRC}
269
270 # for the normal .a we do not want to strip symbols
271 ${CXX_SUFFIXES:%=%.o}:
272         ${COMPILE.cc} ${.IMPSRC}
273
274 .S.o .s.o:
275         ${COMPILE.S} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC}
276
277 .if (${LD_X} == "")
278 .c.po:
279         ${COMPILE.c} ${CC_PG} ${PROFFLAGS} ${.IMPSRC} -o ${.TARGET}
280
281 ${CXX_SUFFIXES:%=%.po}:
282         ${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}
283
284 .S${PICO} .s${PICO}:
285         ${COMPILE.S} ${PICFLAG} ${CC_PIC} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
286 .else
287 .c.po:
288         ${COMPILE.c} ${CC_PG} ${PROFFLAGS} ${.IMPSRC} -o ${.TARGET}.o
289         @${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET}
290         @rm -f ${.TARGET}.o
291
292 ${CXX_SUFFIXES:%=%.po}:
293         ${COMPILE.cc} ${CXX_PG} ${.IMPSRC} -o ${.TARGET}.o
294         ${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET}
295         @rm -f ${.TARGET}.o
296
297 .S${PICO} .s${PICO}:
298         ${COMPILE.S} ${PICFLAG} ${CC_PIC} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
299         ${LD} ${LD_x} ${LD_r} ${.TARGET}.o -o ${.TARGET}
300         @rm -f ${.TARGET}.o
301 .endif
302
303 .if (${LD_x} == "")
304 .c${PICO}:
305         ${COMPILE.c} ${PICFLAG} ${CC_PIC} ${.IMPSRC} -o ${.TARGET}
306
307 ${CXX_SUFFIXES:%=%${PICO}}:
308         ${COMPILE.cc} ${PICFLAG} ${CC_PIC} ${.IMPSRC} -o ${.TARGET}
309
310 .S.po .s.po:
311         ${COMPILE.S} ${PROFFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
312 .else
313
314 .c${PICO}:
315         ${COMPILE.c} ${PICFLAG} ${CC_PIC} ${.IMPSRC} -o ${.TARGET}.o
316         ${LD} ${LD_x} ${LD_r} ${.TARGET}.o -o ${.TARGET}
317         @rm -f ${.TARGET}.o
318
319 ${CXX_SUFFIXES:%=%${PICO}}:
320         ${COMPILE.cc} ${PICFLAG} ${CC_PIC} ${.IMPSRC} -o ${.TARGET}.o
321         ${LD} ${LD_x} ${LD_r} ${.TARGET}.o -o ${.TARGET}
322         @rm -f ${.TARGET}.o
323
324 .S.po .s.po:
325         ${COMPILE.S} ${PROFFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
326         ${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET}
327         @rm -f ${.TARGET}.o
328
329 .endif
330 .endif
331
332 .c.ln:
333         ${LINT} ${LINTFLAGS} ${CFLAGS:M-[IDU]*} -i ${.IMPSRC}
334
335 .if ${MK_LIBTOOL} != "yes"
336
337 .if !defined(PICFLAG)
338 PICFLAG=-fpic
339 .endif
340
341 _LIBS=
342
343 .if ${MK_ARCHIVE} != "no"
344 _LIBS += lib${LIB}.a
345 .endif
346
347 .if ${MK_PROFILE} != "no"
348 _LIBS+=lib${LIB}_p.a
349 POBJS+=${OBJS:.o=.po}
350 .endif
351
352 .if ${MK_PIC} != "no"
353 .if ${MK_PICLIB} == "no"
354 SOLIB ?= lib${LIB}.a
355 .else
356 SOLIB=lib${LIB}_pic.a
357 _LIBS+=${SOLIB}
358 .endif
359 .if !empty(SHLIB_FULLVERSION)
360 _LIBS+=lib${LIB}.${LD_so}
361 .endif
362 .endif
363
364 .if ${MK_LINT} != "no"
365 _LIBS+=llib-l${LIB}.ln
366 .endif
367
368 # here is where you can define what LIB* are
369 .-include <libnames.mk>
370 .if ${MK_DPADD_MK} == "yes"
371 # lots of cool magic, but might not suit everyone.
372 .include <dpadd.mk>
373 .endif
374
375 .if empty(LIB)
376 _LIBS=
377 .elif ${MK_LDORDER_MK} != "no"
378 # Record any libs that we need to be linked with
379 _LIBS+= ${libLDORDER_INC}
380
381 .include <ldorder.mk>
382 .endif
383
384 .if !defined(_SKIP_BUILD)
385 realbuild: ${_LIBS}
386 .endif
387
388 all: _SUBDIRUSE
389
390 .for s in ${SRCS:N*.h:M*/*}
391 ${.o ${PICO} .po .lo:L:@o@${s:T:R}$o@}: $s
392 .endfor
393
394 OBJS+=  ${SRCS:T:N*.h:R:S/$/.o/g}
395 .NOPATH:        ${OBJS}
396
397 .if ${MK_LIBTOOL} == "yes"
398 .if ${MK_PIC} == "no"
399 LT_STATIC=-static
400 .else
401 LT_STATIC=
402 .endif
403 SHLIB_AGE?=0
404
405 # .lo's are created as a side effect
406 .s.o .S.o .c.o:
407         ${LIBTOOL} --mode=compile ${CC} ${LT_STATIC} ${CFLAGS} ${CPPFLAGS} ${IMPFLAGS} -c ${.IMPSRC}
408
409 # can't really do profiled libs with libtool - its too fascist about
410 # naming the output...
411 lib${LIB}.a: ${OBJS}
412         @rm -f ${.TARGET}
413         ${LIBTOOL} --mode=link ${CC} ${LT_STATIC} -o ${.TARGET:.a=.la} ${OBJS:.o=.lo} -rpath ${SHLIBDIR}:/usr/lib -version-info ${SHLIB_MAJOR}:${SHLIB_MINOR}:${SHLIB_AGE}
414         @ln .libs/${.TARGET} .
415
416 lib${LIB}.${LD_so}: lib${LIB}.a
417         @[ -s ${.TARGET}.${SHLIB_AGE} ] || { ln -s .libs/lib${LIB}.${LD_so}* . 2>/dev/null; : }
418         @[ -s ${.TARGET} ] || ln -s ${.TARGET}.${SHLIB_AGE} ${.TARGET}
419
420 .else  # MK_LIBTOOL=yes
421
422 lib${LIB}.a: ${OBJS}
423         @${META_NOECHO} building standard ${LIB} library
424         @rm -f ${.TARGET}
425         @${AR} ${AR_cq} ${.TARGET} ${LD_objs}
426         ${RANLIB} ${.TARGET}
427
428 POBJS+= ${OBJS:.o=.po}
429 .NOPATH:        ${POBJS}
430 lib${LIB}_p.a: ${POBJS}
431         @${META_NOECHO} building profiled ${LIB} library
432         @rm -f ${.TARGET}
433         @${AR} ${AR_cq} ${.TARGET} ${LD_pobjs}
434         ${RANLIB} ${.TARGET}
435
436 SOBJS+= ${OBJS:.o=${PICO}}
437 .NOPATH:        ${SOBJS}
438 lib${LIB}_pic.a: ${SOBJS}
439         @${META_NOECHO} building shared object ${LIB} library
440         @rm -f ${.TARGET}
441         @${AR} ${AR_cq} ${.TARGET} ${LD_sobjs}
442         ${RANLIB} ${.TARGET}
443
444 #SHLIB_LDADD?= ${LDADD}
445
446 # bound to be non-portable...
447 # this is known to work for NetBSD 1.6 and FreeBSD 4.2
448 lib${LIB}.${LD_so}: ${SOLIB} ${DPADD}
449         @${META_NOECHO} building shared ${LIB} library \(version ${SHLIB_FULLVERSION}\)
450         @rm -f ${.TARGET}
451 .if ${TARGET_OSNAME} == "NetBSD" || ${TARGET_OSNAME} == "FreeBSD"
452 .if ${OBJECT_FMT} == "ELF"
453         ${SHLIB_LD} -x -shared ${SHLIB_SHFLAGS} -o ${.TARGET} \
454             ${SHLIB_LDSTARTFILE} \
455             --whole-archive ${SOLIB} --no-whole-archive ${SHLIB_LDADD} \
456             ${SHLIB_LDENDFILE}
457 .else
458         ${SHLIB_LD} ${LD_x} ${LD_shared} \
459             -o ${.TARGET} ${SOLIB} ${SHLIB_LDADD}
460 .endif
461 .else
462         ${SHLIB_LD} -o ${.TARGET} ${LD_shared} ${LD_solib} ${DLLIB} ${SHLIB_LDADD}
463 .endif
464 .endif
465 .if !empty(SHLIB_LINKS)
466         rm -f ${SHLIB_LINKS}; ${SHLIB_LINKS:O:u:@x@ln -s ${.TARGET} $x;@}
467 .endif
468
469 LOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
470 .NOPATH:        ${LOBJS}
471 LLIBS?= -lc
472 llib-l${LIB}.ln: ${LOBJS}
473         @${META_NOECHO} building llib-l${LIB}.ln
474         @rm -f llib-l${LIB}.ln
475         @${LINT} -C${LIB} ${LOBJS} ${LLIBS}
476
477 .if !target(clean)
478 cleanlib: .PHONY
479         rm -f a.out [Ee]rrs mklog core *.core ${CLEANFILES}
480         rm -f lib${LIB}.a ${OBJS}
481         rm -f lib${LIB}_p.a ${POBJS}
482         rm -f lib${LIB}_pic.a lib${LIB}.so.*.* ${SOBJS}
483         rm -f llib-l${LIB}.ln ${LOBJS}
484 .if !empty(SHLIB_LINKS)
485         rm -f ${SHLIB_LINKS}
486 .endif
487
488 clean: _SUBDIRUSE cleanlib
489 cleandir: _SUBDIRUSE cleanlib
490 .else
491 cleandir: _SUBDIRUSE clean
492 .endif
493
494 .if defined(SRCS) && (!defined(MKDEP) || ${MKDEP} != autodep)
495 afterdepend: .depend
496         @(TMP=/tmp/_depend$$$$; \
497             sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1${PICO} \1.ln:/' \
498               < .depend > $$TMP; \
499             mv $$TMP .depend)
500 .endif
501
502 .if !target(install)
503 .if !target(beforeinstall)
504 beforeinstall:
505 .endif
506
507 .if !empty(LIBOWN)
508 LIB_INSTALL_OWN ?= -o ${LIBOWN} -g ${LIBGRP}
509 .endif
510
511 .include <links.mk>
512
513 .if !target(libinstall) && !empty(LIB)
514 realinstall: libinstall
515 libinstall:
516         [ -d ${DESTDIR}/${LIBDIR} ] || \
517         ${INSTALL} -d ${LIB_INSTALL_OWN} -m 775 ${DESTDIR}${LIBDIR}
518 .if ${MK_ARCHIVE} != "no"
519         ${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 lib${LIB}.a \
520             ${DESTDIR}${LIBDIR}
521         ${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}.a
522         chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}.a
523 .endif
524 .if ${MK_PROFILE} != "no"
525         ${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 \
526             lib${LIB}_p.a ${DESTDIR}${LIBDIR}
527         ${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
528         chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
529 .endif
530 .if ${MK_LDORDER_MK} != "no"
531         ${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 \
532                 lib${LIB}.ldorder.inc ${DESTDIR}${LIBDIR}
533 .endif
534 .if ${MK_PIC} != "no"
535 .if ${MK_PICLIB} != "no"
536         ${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 \
537             lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
538         ${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
539         chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
540 .endif
541 .if !empty(SHLIB_MAJOR)
542         ${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m ${LIBMODE} \
543             lib${LIB}.${LD_so} ${DESTDIR}${LIBDIR}
544 .if !empty(SHLIB_LINKS)
545         (cd ${DESTDIR}${LIBDIR} && { rm -f ${SHLIB_LINKS}; ${SHLIB_LINKS:O:u:@x@ln -s lib${LIB}.${LD_so} $x;@} })
546 .endif
547 .endif
548 .endif
549 .if ${MK_LINT} != "no" && ${MK_LINKLIB} != "no" && !empty(LOBJS)
550         ${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m ${LIBMODE} \
551             llib-l${LIB}.ln ${DESTDIR}${LINTLIBDIR}
552 .endif
553 .if defined(LINKS) && !empty(LINKS)
554         @set ${LINKS}; ${_LINKS_SCRIPT}
555 .endif
556 .endif
557
558 .if ${MK_MAN} != "no"
559 install: maninstall _SUBDIRUSE
560 maninstall: afterinstall
561 .endif
562 afterinstall: realinstall
563 libinstall: beforeinstall
564 realinstall: beforeinstall
565 .endif
566
567 .if defined(FILES) || defined(FILESGROUPS)
568 .include <files.mk>
569 .endif
570
571 .if ${MK_MAN} != "no"
572 .include <man.mk>
573 .endif
574
575 .if ${MK_NLS} != "no"
576 .include <nls.mk>
577 .endif
578
579 .include <obj.mk>
580 .include <inc.mk>
581 .include <dep.mk>
582 .include <subdir.mk>
583 .endif
584
585 # during building we usually need/want to install libs somewhere central
586 # note that we do NOT ch{own,grp} as that would likely fail at this point.
587 # otherwise it is the same as realinstall
588 # Note that we don't need this when using dpadd.mk
589 .libinstall:    ${_LIBS}
590         test -d ${DESTDIR}${LIBDIR} || ${INSTALL} -d -m775 ${DESTDIR}${LIBDIR}
591 .for _lib in ${_LIBS:M*.a}
592         ${INSTALL} ${COPY} -m 644 ${_lib} ${DESTDIR}${LIBDIR}
593         ${RANLIB} ${DESTDIR}${LIBDIR}/${_lib}
594 .endfor
595 .for _lib in ${_LIBS:M*.${LD_solink}*:O:u}
596         ${INSTALL} ${COPY} -m ${LIBMODE} ${_lib} ${DESTDIR}${LIBDIR}
597 .if !empty(SHLIB_LINKS)
598         (cd ${DESTDIR}${LIBDIR} && { ${SHLIB_LINKS:O:u:@x@ln -sf ${_lib} $x;@}; })
599 .endif
600 .endfor
601         @touch ${.TARGET}
602
603 .if !empty(LIB)
604 STAGE_LIBDIR?= ${STAGE_OBJTOP}${LIBDIR}
605 stage_libs: ${_LIBS}
606 .endif
607
608 .include <final.mk>
609 .endif