bsd.lib.mk revision 29141
1#	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
2#	$Id: bsd.lib.mk,v 1.62 1997/09/05 09:09:55 peter Exp $
3#
4
5.if exists(${.CURDIR}/../Makefile.inc)
6.include "${.CURDIR}/../Makefile.inc"
7.endif
8
9# Default executable format
10BINFORMAT?=	aout
11
12.if exists(${.CURDIR}/shlib_version)
13SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major
14.if ${BINFORMAT} == aout
15SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor
16.endif
17.endif
18
19.if !defined(NOPIC) && ${BINFORMAT} == elf
20SONAME?=	lib${LIB}.so.${SHLIB_MAJOR}
21.endif
22
23.if defined(DESTDIR)
24CFLAGS+= -I${DESTDIR}/usr/include
25CXXINCLUDES+= -I${DESTDIR}/usr/include/g++
26.endif
27
28.if defined(DEBUG_FLAGS)
29CFLAGS+= ${DEBUG_FLAGS}
30.endif
31
32.if !defined(DEBUG_FLAGS)
33STRIP?=	-s
34.endif
35
36.include <bsd.libnames.mk>
37
38.MAIN: all
39
40# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
41# .so used for PIC object files
42.SUFFIXES:
43.SUFFIXES: .out .o .po .so .s .S .c .cc .cxx .m .C .f .y .l
44
45.c.o:
46	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
47	@${LD} -O ${.TARGET} -x -r ${.TARGET}
48
49.c.po:
50	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
51	@${LD} -O ${.TARGET} -X -r ${.TARGET}
52
53.c.so:
54	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
55	@${LD} -O ${.TARGET} -x -r ${.TARGET}
56
57.cc.o .C.o .cxx.o:
58	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
59	@${LD} -O ${.TARGET} -x -r ${.TARGET}
60
61.cc.po .C.po .cxx.po:
62	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
63	@${LD} -O ${.TARGET} -X -r ${.TARGET}
64
65.cc.so .C.so .cxx.so:
66	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
67	@${LD} -O ${.TARGET} -x -r ${.TARGET}
68
69.f.o:
70	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
71	@${LD} -O ${.TARGET} -x -r ${.TARGET}
72
73.f.po:
74	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
75	@${LD} -O ${.TARGET} -X -r ${.TARGET}
76
77.f.so:
78	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
79	@${LD} -O ${.TARGET} -x -r ${.TARGET}
80
81.s.o:
82	${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \
83	    ${.IMPSRC} -o ${.TARGET}
84	@${LD} -O ${.TARGET} -x -r ${.TARGET}
85
86.s.po:
87	${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \
88	    ${.IMPSRC} -o ${.TARGET}
89	@${LD} -O ${.TARGET} -X -r ${.TARGET}
90
91.s.so:
92	${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \
93	    ${.IMPSRC} -o ${.TARGET}
94	@${LD} -O ${.TARGET} -x -r ${.TARGET}
95
96.S.o:
97	${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
98	@${LD} -O ${.TARGET} -x -r ${.TARGET}
99
100.S.po:
101	${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
102	@${LD} -O ${.TARGET} -X -r ${.TARGET}
103
104.S.so:
105	${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
106	@${LD} -O ${.TARGET} -x -r ${.TARGET}
107
108.m.o:
109	${CC} ${CFLAGS} -fgnu-runtime -c ${.IMPSRC} -o ${.TARGET}
110	@${LD} -O ${.TARGET} -x -r ${.TARGET}
111
112.m.po:
113	${CC} ${CFLAGS} -fgnu-runtime -pg -c ${.IMPSRC} -o ${.TARGET}
114	@${LD} -O ${.TARGET} -X -r ${.TARGET}
115
116.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
117.if !defined(NOPROFILE) && !defined(INTERNALLIB)
118_LIBS=lib${LIB}.a lib${LIB}_p.a
119.else
120_LIBS=lib${LIB}.a
121.endif
122.endif
123
124.if !defined(NOPIC)
125.if ${BINFORMAT} == aout
126.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
127_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
128.endif
129.else
130.if defined(SHLIB_MAJOR)
131_LIBS+=lib${LIB}.so.${SHLIB_MAJOR}
132.endif
133.endif
134.if defined(INSTALL_PIC_ARCHIVE)
135_LIBS+=lib${LIB}_pic.a
136.endif
137.endif
138
139.if !defined(PICFLAG)
140PICFLAG=-fpic
141.endif
142
143all: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln
144
145OBJS+=	${SRCS:N*.h:R:S/$/.o/g}
146
147lib${LIB}.a:: ${OBJS}
148	@${ECHO} building standard ${LIB} library
149	@rm -f lib${LIB}.a
150	@${AR} cq lib${LIB}.a `lorder ${OBJS} | tsort -q` ${ARADD}
151	${RANLIB} lib${LIB}.a
152
153.if !defined(NOPROFILE)
154POBJS+=	${OBJS:.o=.po}
155lib${LIB}_p.a:: ${POBJS}
156	@${ECHO} building profiled ${LIB} library
157	@rm -f lib${LIB}_p.a
158	@${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
159	${RANLIB} lib${LIB}_p.a
160.endif
161
162.if defined(DESTDIR)
163LDDESTDIRENV?=	LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib
164.endif
165
166.if !defined(NOPIC)
167SOBJS+= ${OBJS:.o=.so}
168
169.if ${BINFORMAT} == aout
170lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: ${SOBJS}
171	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\)
172	@rm -f lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
173	@${LDDESTDIRENV} ${CC} -shared -Wl,-x -Wl,-assert -Wl,pure-text \
174	    -o lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
175	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
176.else
177lib${LIB}.so.${SHLIB_MAJOR}: ${SOBJS}
178	@${ECHO} building shared ${LIB} library \(version ${SHLIB_MAJOR}\)
179	@rm -f lib${LIB}.so.${SHLIB_MAJOR}
180	@${LDDESTDIRENV} ${CC} -shared -Wl,-x \
181	    -o lib${LIB}.so.${SHLIB_MAJOR} -Wl,-soname,${SONAME} \
182	    `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD}
183.endif
184
185lib${LIB}_pic.a:: ${SOBJS}
186	@${ECHO} building special pic ${LIB} library
187	@rm -f lib${LIB}_pic.a
188	@${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD}
189	${RANLIB} lib${LIB}_pic.a
190.endif
191
192llib-l${LIB}.ln: ${SRCS}
193	${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c}
194
195.if !target(clean)
196clean:	_SUBDIR
197	rm -f a.out Errs errs mklog ${CLEANFILES} ${OBJS}
198	rm -f lib${LIB}.a llib-l${LIB}.ln
199	rm -f ${POBJS} profiled/*.o lib${LIB}_p.a
200	rm -f ${SOBJS} shared/*.o
201	rm -f lib${LIB}.so.*.* lib${LIB}_pic.a
202.if defined(CLEANDIRS) && !empty(CLEANDIRS)
203	rm -rf ${CLEANDIRS}
204.endif
205.endif
206
207.if defined(SRCS)
208_EXTRADEPEND::
209	@TMP=_depend$$$$; \
210	sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.so:/' < ${DEPENDFILE} \
211	    > $$TMP; \
212	mv $$TMP ${DEPENDFILE}
213.endif
214.if !defined(NOEXTRADEPEND)
215_EXTRADEPEND::
216.if ${BINFORMAT} == aout
217	echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \
218	    `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \
219	    >> ${DEPENDFILE}
220.else
221.if defined(DPADD) && ${DPADD} != ""
222	echo lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}: \
223	    ${DPADD} >> ${DEPENDFILE}
224.endif
225.endif
226.endif
227
228.if !target(install)
229.if !target(beforeinstall)
230beforeinstall:
231.endif
232
233.if defined(PRECIOUSLIB)
234SHLINSTALLFLAGS+= -fschg
235.endif
236
237realinstall: beforeinstall
238.if !defined(INTERNALLIB)
239	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
240	    ${INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR}
241.if !defined(NOPROFILE)
242	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
243	    ${INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR}
244.endif
245.endif
246.if !defined(NOPIC)
247.if ${BINFORMAT} == aout
248.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
249	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
250	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
251	    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
252	    ${DESTDIR}${SHLIBDIR}
253.endif
254.else
255.if defined(SHLIB_MAJOR)
256	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
257	    ${INSTALLFLAGS} ${SHLINSTALLFLAGS} \
258	    lib${LIB}.so.${SHLIB_MAJOR} \
259	    ${DESTDIR}${SHLIBDIR}
260	ln ${LN_FLAGS} -sf lib${LIB}.so.${SHLIB_MAJOR} \
261	    ${DESTDIR}${SHLIBDIR}/lib${LIB}.so
262.endif
263.endif
264.if defined(INSTALL_PIC_ARCHIVE)
265	${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
266	    ${INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
267.endif
268.endif
269.if defined(LINKS) && !empty(LINKS)
270	@set ${LINKS}; \
271	while test $$# -ge 2; do \
272		l=${DESTDIR}$$1; \
273		shift; \
274		t=${DESTDIR}$$1; \
275		shift; \
276		${ECHO} $$t -\> $$l; \
277		rm -f $$t; \
278		ln ${LN_FLAGS} $$l $$t; \
279	done; true
280.endif
281
282install: afterinstall _SUBDIR
283.if !defined(NOMAN)
284afterinstall: realinstall maninstall
285.else
286afterinstall: realinstall
287.endif
288.endif
289
290DISTRIBUTION?=	bin
291.if !target(distribute)
292distribute:	_SUBDIR
293.for dist in ${DISTRIBUTION}
294	cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
295.endfor
296.endif
297
298.if !target(lint)
299lint:
300.endif
301
302.if defined(NOTAGS)
303tags:
304.endif
305
306.if !target(tags)
307tags: ${SRCS} _SUBDIR
308	@cd ${.CURDIR} && gtags ${GTAGSFLAGS}
309.if defined(HTML)
310	@cd ${.CURDIR} && htags ${HTAGSFLAGS}
311.endif
312.endif
313
314.if !defined(NOMAN)
315.include <bsd.man.mk>
316.elif !target(maninstall)
317maninstall:
318all-man:
319.endif
320
321.include <bsd.dep.mk>
322.include <bsd.obj.mk>
323