bsd.lib.mk revision 76861
143105Sdfr#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
243105Sdfr# $FreeBSD: head/share/mk/bsd.lib.mk 76861 2001-05-19 23:18:21Z kris $
343105Sdfr#
443105Sdfr
543105Sdfr.if !target(__initialized__)
643105Sdfr__initialized__:
743105Sdfr.if exists(${.CURDIR}/../Makefile.inc)
843105Sdfr.include "${.CURDIR}/../Makefile.inc"
943105Sdfr.endif
1043105Sdfr.endif
1143105Sdfr
1243105Sdfr.if exists(${.CURDIR}/shlib_version)
1343105SdfrSHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
1443105Sdfr.if ${OBJFORMAT} == aout
1543105SdfrSHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
1643105Sdfr.endif
1743105Sdfr.endif
1843105Sdfr
1943105Sdfr# Set up the variables controlling shared libraries.  After this section,
2043105Sdfr# SHLIB_NAME will be defined only if we are to create a shared library.
2143105Sdfr# SHLIB_LINK will be defined only if we are to create a link to it.
2243105Sdfr# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive.
2343105Sdfr.if defined(NOPIC)
2443105Sdfr.undef SHLIB_NAME
2543105Sdfr.undef INSTALL_PIC_ARCHIVE
2643105Sdfr.else
27116181Sobrien.if ${OBJFORMAT} == elf
28116181Sobrien.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR)
29116181SobrienSHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
3043105SdfrSHLIB_LINK?=	lib${LIB}.so
3143105Sdfr.endif
3243105SdfrSONAME?=	${SHLIB_NAME}
3343105Sdfr.else
3443105Sdfr.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
3543105SdfrSHLIB_NAME?=	lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
3643105Sdfr.endif
37142833Siedowse.endif
38129880Sphk.endif
3948104Syokota
4043105Sdfr.if defined(DESTDIR)
4148104SyokotaCFLAGS+= -I${DESTDIR}/usr/include
4243105SdfrCXXINCLUDES+= -I${DESTDIR}/usr/include/g++
4348104Syokota.endif
4448104Syokota
4548104Syokota.if defined(DEBUG_FLAGS)
4648104SyokotaCFLAGS+= ${DEBUG_FLAGS}
4748104Syokota.endif
4843105Sdfr
4943105Sdfr.if !defined(DEBUG_FLAGS)
5043105SdfrSTRIP?=	-s
5143105Sdfr.endif
52114384Speter
5343105Sdfr.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
54114384Speter.include <bsd.libnames.mk>
5543105Sdfr.endif
5643105Sdfr
5743105Sdfr.MAIN: all
5843105Sdfr
5943105Sdfr# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
6043105Sdfr# .So used for PIC object files
6143105Sdfr.SUFFIXES:
62199229Sjkim.SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l
63199229Sjkim
64199229Sjkim.c.o:
65199229Sjkim	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
66199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
67199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
68199229Sjkim
69199229Sjkim.c.po:
70199229Sjkim	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
71199229Sjkim	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
72199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
73199229Sjkim
74199229Sjkim.c.So:
75199229Sjkim	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
76199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
77199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
78199229Sjkim
79199229Sjkim.cc.o .C.o .cpp.o .cxx.o:
80199229Sjkim	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
81199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
82199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
83199229Sjkim
84199229Sjkim.cc.po .C.po .cpp.po .cxx.po:
85199229Sjkim	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
86199229Sjkim	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
87199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
88199229Sjkim
89199229Sjkim.cc.So .C.So .cpp.So .cxx.So:
90199229Sjkim	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
91199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
92199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
93199229Sjkim
94199229Sjkim.f.o:
95199229Sjkim	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
96199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
97199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
98199229Sjkim
99199229Sjkim.f.po:
100199229Sjkim	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
101199229Sjkim	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
102199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
103199229Sjkim
104199229Sjkim.f.So:
105199229Sjkim	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
106199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
107199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
108199229Sjkim
109199229Sjkim.m.o:
110199229Sjkim	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
111199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
112199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
113199229Sjkim
114199229Sjkim.m.po:
115199229Sjkim	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
116199229Sjkim	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
117199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
118199229Sjkim
119199229Sjkim.m.So:
120199229Sjkim	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
121199229Sjkim	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
122199229Sjkim	@mv ${.TARGET}.tmp ${.TARGET}
123199229Sjkim
124199229Sjkim.s.o:
12548104Syokota	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
12648104Syokota	    ${.IMPSRC} -o ${.TARGET}
12743105Sdfr	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
12848104Syokota	@mv ${.TARGET}.tmp ${.TARGET}
12943105Sdfr
13043105Sdfr.s.po:
13143105Sdfr	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
13248104Syokota	    ${.IMPSRC} -o ${.TARGET}
13348104Syokota	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
13448104Syokota	@mv ${.TARGET}.tmp ${.TARGET}
13548104Syokota
13648104Syokota.s.So:
13748104Syokota	${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
13843105Sdfr	    ${.IMPSRC} -o ${.TARGET}
13948104Syokota	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
140126080Sphk	@mv ${.TARGET}.tmp ${.TARGET}
141126080Sphk
142111815Sphk.S.o:
143111815Sphk	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
144111815Sphk	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
145111815Sphk	@mv ${.TARGET}.tmp ${.TARGET}
146111815Sphk
147111815Sphk.S.po:
148111815Sphk	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
14943105Sdfr	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
15043105Sdfr	@mv ${.TARGET}.tmp ${.TARGET}
15143105Sdfr
15243105Sdfr.S.So:
15362225Speter	${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
15462225Speter	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
15562225Speter	@mv ${.TARGET}.tmp ${.TARGET}
15662225Speter
15762225Speter.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
15862225Speter.if !defined(NOPROFILE) && !defined(INTERNALLIB)
15943105Sdfr_LIBS=lib${LIB}.a lib${LIB}_p.a
16043105Sdfr.else
16143105Sdfr_LIBS=lib${LIB}.a
16248104Syokota.endif
16348104Syokota.endif
16443105Sdfr
16547618Sdfr.if defined(SHLIB_NAME)
16647618Sdfr_LIBS+=${SHLIB_NAME}
16747618Sdfr.endif
16847618Sdfr.if defined(INSTALL_PIC_ARCHIVE)
16951052Sdfr_LIBS+=lib${LIB}_pic.a
17048104Syokota.endif
171199229Sjkim
17252174Sdfr.if !defined(PICFLAG)
17348104SyokotaPICFLAG=-fpic
17452174Sdfr.endif
17548104Syokota
17648104Syokota.if !defined(NOMAN)
17748104Syokotaall: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
17848104Syokota.else
17948104Syokotaall: objwarn ${_LIBS} _SUBDIR # llib-l${LIB}.ln
18048104Syokota.endif
18148104Syokota
18248104SyokotaOBJS+=	${SRCS:N*.h:R:S/$/.o/g}
183199002Sjkim
18443105Sdfrlib${LIB}.a:: ${OBJS} ${STATICOBJS}
18543105Sdfr	@${ECHO} building static ${LIB} library
18643105Sdfr	@rm -f lib${LIB}.a
18743105Sdfr	@${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
18843105Sdfr	${RANLIB} lib${LIB}.a
18948104Syokota
19048104SyokotaPOBJS+=	${OBJS:.o=.po} ${STATICOBJS:.o=.po}
19148104Syokota.if !defined(NOPROFILE)
19248104Syokotalib${LIB}_p.a:: ${POBJS}
19343105Sdfr	@${ECHO} building profiled ${LIB} library
19448104Syokota	@rm -f lib${LIB}_p.a
19543105Sdfr	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
19643105Sdfr	${RANLIB} lib${LIB}_p.a
19748104Syokota.endif
198115549Sphk
19948104Syokota.if defined(DESTDIR)
20048104SyokotaLDDESTDIRENV?=	LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR}
201115549Sphk.endif
20248104Syokota
20343105SdfrSOBJS+= ${OBJS:.o=.So}
20451052Sdfr
20543105Sdfr.if defined(SHLIB_NAME)
206199002Sjkim${SHLIB_NAME}: ${SOBJS}
20743105Sdfr	@${ECHO} building shared library ${SHLIB_NAME}
20843105Sdfr	@rm -f ${SHLIB_NAME} ${SHLIB_LINK}
20943105Sdfr.if defined(SHLIB_LINK)
210120465Sphk	@ln -sf ${SHLIB_NAME} ${SHLIB_LINK}
21143105Sdfr.endif
212199002Sjkim.if ${OBJFORMAT} == aout
21343105Sdfr	@${LDDESTDIRENV} ${CC} -shared -Wl,-x,-assert,pure-text \
21443105Sdfr	    -o ${SHLIB_NAME} \
215137148Sphk	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
216174985Swkoszek.else
21743105Sdfr	@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
218153072Sru	    -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
21954073Smdodd	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
22048104Syokota.endif
22143105Sdfr.endif
22243105Sdfr
223199002Sjkim.if defined(INSTALL_PIC_ARCHIVE)
22443105Sdfrlib${LIB}_pic.a:: ${SOBJS}
22543105Sdfr	@${ECHO} building special pic ${LIB} library
226142833Siedowse	@rm -f lib${LIB}_pic.a
227142833Siedowse	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
228142833Siedowse	${RANLIB} lib${LIB}_pic.a
229199229Sjkim.endif
230142833Siedowse
231199229Sjkimllib-l${LIB}.ln: ${SRCS}
232199229Sjkim	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
233199229Sjkim
234199229Sjkim.if !target(clean)
235142833Siedowseclean:	_SUBDIR
236199229Sjkim	rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
237142833Siedowse	rm -f lib${LIB}.a # llib-l${LIB}.ln
238142833Siedowse	rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a
239142833Siedowse	rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \
240142833Siedowse	    ${SHLIB_NAME} ${SHLIB_LINK} \
241142833Siedowse	    lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a
242142833Siedowse.if defined(CLEANDIRS) && !empty(CLEANDIRS)
243199229Sjkim	rm -rf ${CLEANDIRS}
244198964Sjkim.endif
245199229Sjkim.endif
246142833Siedowse
247142833Siedowse_EXTRADEPEND:
24848104Syokota	@TMP=_depend$$$$; \
24943105Sdfr	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
25043105Sdfr	    > $$TMP; \
251130585Sphk	mv $$TMP ${DEPENDFILE}
25243105Sdfr.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME)
253199002Sjkim.if ${OBJFORMAT} == aout
25443105Sdfr	echo ${SHLIB_NAME}: \
25543105Sdfr	    `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \
25643105Sdfr	    >> ${DEPENDFILE}
257130585Sphk.else
25843105Sdfr.if defined(DPADD) && !empty(DPADD)
259199002Sjkim	echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
26043105Sdfr.endif
26143105Sdfr.endif
26243105Sdfr.endif
263130585Sphk
26443105Sdfr.if !target(install)
265199002Sjkim.if !target(beforeinstall)
26643105Sdfrbeforeinstall: _includeinstall
26743105Sdfr.endif
26843105Sdfr
269130585Sphk_includeinstall:
27043105Sdfr.if defined(INCS)
271199002Sjkim.for header in ${INCS}
27243105Sdfr	cd ${.CURDIR} && \
27343105Sdfr	${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
27443105Sdfr		${header} ${DESTDIR}${INCDIR}
275130585Sphk
27643105Sdfr.endfor
277199002Sjkim.endif
27843105Sdfr
27943105Sdfr.if defined(PRECIOUSLIB) && !defined(NOFSCHG)
28043105SdfrSHLINSTALLFLAGS+= -fschg
281130585Sphk.endif
28243105Sdfr
283199002Sjkim_INSTALLFLAGS:=	${INSTALLFLAGS}
28443105Sdfr.for ie in ${INSTALLFLAGS_EDIT}
28543105Sdfr_INSTALLFLAGS:=	${_INSTALLFLAGS${ie}}
28648104Syokota.endfor
28762225Speter_SHLINSTALLFLAGS:=	${SHLINSTALLFLAGS}
28862225Speter.for ie in ${INSTALLFLAGS_EDIT}
28962225Speter_SHLINSTALLFLAGS:=	${_SHLINSTALLFLAGS${ie}}
29062225Speter.endfor
29162225Speter
292142833Siedowserealinstall: beforeinstall
293142833Siedowse.if !defined(INTERNALLIB)
29462225Speter	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
29562225Speter	    ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
29662225Speter.if !defined(NOPROFILE)
29762225Speter	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
29862225Speter	    ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
29962225Speter.endif
30062225Speter.endif
30162225Speter.if defined(SHLIB_NAME)
30262225Speter	${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
30362225Speter	    ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
30462225Speter	    ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
30562225Speter.if defined(SHLIB_LINK)
306199229Sjkim	ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
307199229Sjkim.endif
308199229Sjkim.endif
309199229Sjkim.if defined(INSTALL_PIC_ARCHIVE)
310199229Sjkim	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
311199229Sjkim	    ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
312199229Sjkim.endif
313199229Sjkim.if defined(LINKS) && !empty(LINKS)
314199229Sjkim	@set ${LINKS}; \
315199229Sjkim	while test $$# -ge 2; do \
316199229Sjkim		l=${DESTDIR}$$1; \
317199229Sjkim		shift; \
318199229Sjkim		t=${DESTDIR}$$1; \
319199229Sjkim		shift; \
320199229Sjkim		${ECHO} $$t -\> $$l; \
321199229Sjkim		ln -f $$l $$t; \
322199229Sjkim	done; true
323199229Sjkim.endif
324199229Sjkim.if defined(SYMLINKS) && !empty(SYMLINKS)
325199229Sjkim	@set ${SYMLINKS}; \
326199229Sjkim	while test $$# -ge 2; do \
327199229Sjkim		l=$$1; \
328199229Sjkim		shift; \
329199229Sjkim		t=${DESTDIR}$$1; \
330199229Sjkim		shift; \
331199229Sjkim		${ECHO} $$t -\> $$l; \
332199229Sjkim		ln -fs $$l $$t; \
333199229Sjkim	done; true
334199229Sjkim.endif
335199229Sjkim
336199229Sjkiminstall: afterinstall _SUBDIR
337199229Sjkim.if !defined(NOMAN)
338199229Sjkimafterinstall: realinstall maninstall
339199229Sjkim.else
340199229Sjkimafterinstall: realinstall
341199229Sjkim.endif
342199229Sjkim.endif
343199229Sjkim
344199229Sjkim.if !target(regress)
345199229Sjkimregress:
346199229Sjkim.endif
347199229Sjkim
348199229SjkimDISTRIBUTION?=	bin
349199229Sjkim.if !target(distribute)
350199229Sjkimdistribute:	_SUBDIR
351199229Sjkim.for dist in ${DISTRIBUTION}
352199229Sjkim	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
353199229Sjkim.endfor
354199229Sjkim.endif
355199229Sjkim
356199229Sjkim.if !target(lint)
357199229Sjkimlint:
358199229Sjkim.endif
359199229Sjkim
360199229Sjkim.if !defined(NOMAN)
361199229Sjkim.include <bsd.man.mk>
362199229Sjkim.else
363199229Sjkim.if !target(all-man)
364199229Sjkimall-man:
365199229Sjkim.endif
366199229Sjkim.if !target(maninstall)
367199229Sjkimmaninstall:
368199229Sjkim.endif
369199229Sjkim.endif
370199229Sjkim
371199229Sjkim.include <bsd.dep.mk>
372199229Sjkim
373199229Sjkim.if !exists(${DEPENDFILE})
374199229Sjkim${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
375199229Sjkim.endif
376199229Sjkim
377199229Sjkim.include <bsd.obj.mk>
378199229Sjkim
379.include <bsd.sys.mk>
380