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} ${LDFLAGS} -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} ${LDFLAGS} -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} ${LDFLAGS} -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} ${LDFLAGS} -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} ${LDFLAGS} -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} ${LDFLAGS} -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} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
141 @mv ${.TARGET}.tmp ${.TARGET}
144 ${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
145 @${LD} ${LDFLAGS} -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(NOLIB)
162 .if defined(NOPROFILE)
165 _LIBS=lib${LIB}.a lib${LIB}_p.a
169 .if defined(SHLIB_NAME)
172 .if defined(INSTALL_PIC_ARCHIVE)
173 _LIBS+=lib${LIB}_pic.a
176 .if !defined(PICFLAG)
177 .if ${MACHINE_ARCH} == "sparc64"
184 LINTOBJS+= ${SRCS:M*.c:C/\..+$/.ln/}
186 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
187 LINTLIB=llib-l${LIB}.ln
191 all: objwarn ${_LIBS}
197 OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
199 lib${LIB}.a:: ${OBJS} ${STATICOBJS}
200 @${ECHO} building static ${LIB} library
202 @${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
203 ${RANLIB} lib${LIB}.a
205 POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po}
206 .if !defined(NOPROFILE)
207 lib${LIB}_p.a:: ${POBJS}
208 @${ECHO} building profiled ${LIB} library
210 @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
211 ${RANLIB} lib${LIB}_p.a
214 SOBJS+= ${OBJS:.o=.So}
216 .if defined(SHLIB_NAME)
217 ${SHLIB_NAME}: ${SOBJS}
218 @${ECHO} building shared library ${SHLIB_NAME}
219 @rm -f ${SHLIB_NAME} ${SHLIB_LINK}
220 .if defined(SHLIB_LINK)
221 @ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
223 .if ${OBJFORMAT} == aout
224 @${CC} -shared -Wl,-x,-assert,pure-text \
226 `lorder ${SOBJS} | tsort -q` ${LDADD}
228 @${CC} ${CFLAGS} -shared -Wl,-x \
229 -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
230 `lorder ${SOBJS} | tsort -q` ${LDADD}
234 .if defined(INSTALL_PIC_ARCHIVE)
235 lib${LIB}_pic.a:: ${SOBJS}
236 @${ECHO} building special pic ${LIB} library
237 @rm -f lib${LIB}_pic.a
238 @${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
239 ${RANLIB} lib${LIB}_pic.a
242 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
243 ${LINTLIB}: ${LINTOBJS}
244 @${ECHO} building lint library ${LINTLIB}
246 ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
251 rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
253 rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
254 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
255 ${SHLIB_NAME} ${SHLIB_LINK} \
256 lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
257 rm -f ${LINTOBJS} ${LINTLIB}
258 .if defined(CLEANDIRS) && !empty(CLEANDIRS)
265 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
267 mv $$TMP ${DEPENDFILE}
268 .if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
269 .if ${OBJFORMAT} == aout
270 echo ${SHLIB_NAME}: \
271 `${CC} -shared -Wl,-f ${LDADD}` \
274 .if defined(DPADD) && !empty(DPADD)
275 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
281 .if !target(beforeinstall)
282 beforeinstall: _includeinstall
287 .for header in ${INCS}
289 ${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
290 ${header} ${DESTDIR}${INCDIR}
294 .if defined(PRECIOUSLIB) && !defined(NOFSCHG)
295 SHLINSTALLFLAGS+= -fschg
298 _INSTALLFLAGS:= ${INSTALLFLAGS}
299 .for ie in ${INSTALLFLAGS_EDIT}
300 _INSTALLFLAGS:= ${_INSTALLFLAGS${ie}}
302 _SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS}
303 .for ie in ${INSTALLFLAGS_EDIT}
304 _SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}}
307 realinstall: beforeinstall
308 realinstall: _libinstall
310 .if !defined(INTERNALLIB) && !defined(NOLIB)
311 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
312 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
313 .if !defined(NOPROFILE)
314 ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
315 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
318 .if defined(SHLIB_NAME)
319 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
320 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
321 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
322 .if defined(SHLIB_LINK)
323 ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
326 .if defined(INSTALL_PIC_ARCHIVE)
327 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
328 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
330 .if defined(LINKS) && !empty(LINKS)
332 while test $$# -ge 2; do \
337 ${ECHO} $$t -\> $$l; \
341 .if defined(SYMLINKS) && !empty(SYMLINKS)
343 while test $$# -ge 2; do \
348 ${ECHO} $$t -\> $$l; \
352 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
353 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
354 ${_INSTALLFLAGS} ${LINTLIB} ${DESTDIR}${LINTLIBDIR}
358 realinstall: _maninstall
361 install: afterinstall
362 afterinstall: realinstall
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>