1 # from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91
7 .if exists(${.CURDIR}/shlib_version)
8 SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
9 .if ${OBJFORMAT} == aout
10 SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
14 # Set up the variables controlling shared libraries. After this section,
15 # SHLIB_NAME will be defined only if we are to create a shared library.
16 # SHLIB_LINK will be defined only if we are to create a link to it.
17 # INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
20 .undef INSTALL_PIC_ARCHIVE
22 .if ${OBJFORMAT} == elf
23 .if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR)
24 SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR}
25 SHLIB_LINK?= lib${LIB}.so
27 SONAME?= ${SHLIB_NAME}
29 .if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
30 SHLIB_NAME?= lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
35 .if defined(DEBUG_FLAGS)
36 CFLAGS+= ${DEBUG_FLAGS}
39 .if !defined(DEBUG_FLAGS)
43 .if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
44 .include <bsd.libnames.mk>
47 # prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
48 # .So used for PIC object files
50 .SUFFIXES: .out .o .po .So .S .s .asm .c .cc .cpp .cxx .m .C .f .y .l .ln
53 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
56 .cc.ln .C.ln .cpp.ln .cxx.ln:
57 ${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
61 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
62 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
63 @mv ${.TARGET}.tmp ${.TARGET}
66 ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
67 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
68 @mv ${.TARGET}.tmp ${.TARGET}
71 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
72 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
73 @mv ${.TARGET}.tmp ${.TARGET}
75 .cc.o .C.o .cpp.o .cxx.o:
76 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
77 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
78 @mv ${.TARGET}.tmp ${.TARGET}
80 .cc.po .C.po .cpp.po .cxx.po:
81 ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
82 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
83 @mv ${.TARGET}.tmp ${.TARGET}
85 .cc.So .C.So .cpp.So .cxx.So:
86 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
87 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
88 @mv ${.TARGET}.tmp ${.TARGET}
91 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
92 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
93 @mv ${.TARGET}.tmp ${.TARGET}
96 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
97 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
98 @mv ${.TARGET}.tmp ${.TARGET}
101 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
102 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
103 @mv ${.TARGET}.tmp ${.TARGET}
106 ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
107 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
108 @mv ${.TARGET}.tmp ${.TARGET}
111 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
112 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
113 @mv ${.TARGET}.tmp ${.TARGET}
116 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
117 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
118 @mv ${.TARGET}.tmp ${.TARGET}
121 ${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
122 ${.IMPSRC} -o ${.TARGET}
123 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
124 @mv ${.TARGET}.tmp ${.TARGET}
127 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
128 ${.IMPSRC} -o ${.TARGET}
129 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
130 @mv ${.TARGET}.tmp ${.TARGET}
133 ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} \
134 ${AINC} -c ${.IMPSRC} -o ${.TARGET}
135 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
136 @mv ${.TARGET}.tmp ${.TARGET}
139 ${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
140 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
141 @mv ${.TARGET}.tmp ${.TARGET}
144 ${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
145 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
146 @mv ${.TARGET}.tmp ${.TARGET}
149 ${CC} ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} \
151 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
152 @mv ${.TARGET}.tmp ${.TARGET}
154 .if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
155 .if !defined(NOPROFILE) && !defined(INTERNALLIB)
156 _LIBS=lib${LIB}.a lib${LIB}_p.a
162 .if defined(SHLIB_NAME)
165 .if defined(INSTALL_PIC_ARCHIVE)
166 _LIBS+=lib${LIB}_pic.a
169 .if !defined(PICFLAG)
170 .if ${MACHINE_ARCH} == "sparc64"
177 LINTOBJS+= ${SRCS:M*.c:C/\..+$/.ln/}
179 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
180 LINTLIB=llib-l${LIB}.ln
184 all: objwarn ${_LIBS}
190 OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
192 lib${LIB}.a:: ${OBJS} ${STATICOBJS}
193 @${ECHO} building static ${LIB} library
195 @${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
196 ${RANLIB} lib${LIB}.a
198 POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po}
199 .if !defined(NOPROFILE)
200 lib${LIB}_p.a:: ${POBJS}
201 @${ECHO} building profiled ${LIB} library
203 @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
204 ${RANLIB} lib${LIB}_p.a
207 SOBJS+= ${OBJS:.o=.So}
209 .if defined(SHLIB_NAME)
210 ${SHLIB_NAME}: ${SOBJS}
211 @${ECHO} building shared library ${SHLIB_NAME}
212 @rm -f ${SHLIB_NAME} ${SHLIB_LINK}
213 .if defined(SHLIB_LINK)
214 @ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
216 .if ${OBJFORMAT} == aout
217 @${CC} -shared -Wl,-x,-assert,pure-text \
219 `lorder ${SOBJS} | tsort -q` ${LDADD}
221 @${CC} -shared -Wl,-x \
222 -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
223 `lorder ${SOBJS} | tsort -q` ${LDADD}
227 .if defined(INSTALL_PIC_ARCHIVE)
228 lib${LIB}_pic.a:: ${SOBJS}
229 @${ECHO} building special pic ${LIB} library
230 @rm -f lib${LIB}_pic.a
231 @${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
232 ${RANLIB} lib${LIB}_pic.a
235 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
236 ${LINTLIB}: ${LINTOBJS}
237 @${ECHO} building lint library ${LINTLIB}
239 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
244 rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
246 rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
247 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
248 ${SHLIB_NAME} ${SHLIB_LINK} \
249 lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
250 rm -f ${LINTOBJS} ${LINTLIB}
251 .if defined(CLEANDIRS) && !empty(CLEANDIRS)
258 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
260 mv $$TMP ${DEPENDFILE}
261 .if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
262 .if ${OBJFORMAT} == aout
263 echo ${SHLIB_NAME}: \
264 `${CC} -shared -Wl,-f ${LDADD}` \
267 .if defined(DPADD) && !empty(DPADD)
268 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
274 .if !target(beforeinstall)
275 beforeinstall: _includeinstall
280 .for header in ${INCS}
282 ${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
283 ${header} ${DESTDIR}${INCDIR}
287 .if defined(PRECIOUSLIB) && !defined(NOFSCHG)
288 SHLINSTALLFLAGS+= -fschg
291 _INSTALLFLAGS:= ${INSTALLFLAGS}
292 .for ie in ${INSTALLFLAGS_EDIT}
293 _INSTALLFLAGS:= ${_INSTALLFLAGS${ie}}
295 _SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS}
296 .for ie in ${INSTALLFLAGS_EDIT}
297 _SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}}
300 realinstall: beforeinstall
301 realinstall: _libinstall
303 .if !defined(INTERNALLIB)
304 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
305 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
306 .if !defined(NOPROFILE)
307 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
308 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
311 .if defined(SHLIB_NAME)
312 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
313 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
314 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
315 .if defined(SHLIB_LINK)
316 ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
319 .if defined(INSTALL_PIC_ARCHIVE)
320 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
321 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
323 .if defined(LINKS) && !empty(LINKS)
325 while test $$# -ge 2; do \
330 ${ECHO} $$t -\> $$l; \
334 .if defined(SYMLINKS) && !empty(SYMLINKS)
336 while test $$# -ge 2; do \
341 ${ECHO} $$t -\> $$l; \
345 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
346 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
347 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
350 install: afterinstall
351 afterinstall: realinstall
353 afterinstall: maninstall
358 .if !target(distribute)
360 .for dist in ${DISTRIBUTION}
361 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
367 ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
371 .include <bsd.man.mk>
374 .include <bsd.dep.mk>
376 .if !exists(${.OBJDIR}/${DEPENDFILE})
377 ${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
380 .include <bsd.obj.mk>
382 .include <bsd.sys.mk>