]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/mk/bsd.lib.mk
Change the name of the 'bin' distribution to 'base'.
[FreeBSD/FreeBSD.git] / share / mk / bsd.lib.mk
1 #       from: @(#)bsd.lib.mk    5.26 (Berkeley) 5/2/91
2 # $FreeBSD$
3 #
4
5 .include <bsd.init.mk>
6
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
11 .endif
12 .endif
13
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.
18 .if defined(NOPIC)
19 .undef SHLIB_NAME
20 .undef INSTALL_PIC_ARCHIVE
21 .else
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
26 .endif
27 SONAME?=        ${SHLIB_NAME}
28 .else
29 .if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR)
30 SHLIB_NAME?=    lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
31 .endif
32 .endif
33 .endif
34
35 .if defined(DEBUG_FLAGS)
36 CFLAGS+= ${DEBUG_FLAGS}
37 .endif
38
39 .if !defined(DEBUG_FLAGS)
40 STRIP?= -s
41 .endif
42
43 .if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES)
44 .include <bsd.libnames.mk>
45 .endif
46
47 # prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
48 # .So used for PIC object files
49 .SUFFIXES:
50 .SUFFIXES: .out .o .po .So .S .s .asm .c .cc .cpp .cxx .m .C .f .y .l .ln
51
52 .c.ln:
53         ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
54             touch ${.TARGET}
55
56 .cc.ln .C.ln .cpp.ln .cxx.ln:
57         ${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
58             touch ${.TARGET}
59
60 .c.o:
61         ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
62         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
63         @mv ${.TARGET}.tmp ${.TARGET}
64
65 .c.po:
66         ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
67         @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
68         @mv ${.TARGET}.tmp ${.TARGET}
69
70 .c.So:
71         ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
72         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
73         @mv ${.TARGET}.tmp ${.TARGET}
74
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}
79
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}
84
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}
89
90 .f.o:
91         ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
92         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
93         @mv ${.TARGET}.tmp ${.TARGET}
94
95 .f.po:
96         ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
97         @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
98         @mv ${.TARGET}.tmp ${.TARGET}
99
100 .f.So:
101         ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
102         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
103         @mv ${.TARGET}.tmp ${.TARGET}
104
105 .m.o:
106         ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
107         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
108         @mv ${.TARGET}.tmp ${.TARGET}
109
110 .m.po:
111         ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
112         @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
113         @mv ${.TARGET}.tmp ${.TARGET}
114
115 .m.So:
116         ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
117         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
118         @mv ${.TARGET}.tmp ${.TARGET}
119
120 .s.o .asm.o:
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}
125
126 .s.po .asm.po:
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}
131
132 .s.So .asm.So:
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}
137
138 .S.o:
139         ${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
140         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
141         @mv ${.TARGET}.tmp ${.TARGET}
142
143 .S.po:
144         ${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
145         @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
146         @mv ${.TARGET}.tmp ${.TARGET}
147
148 .S.So:
149         ${CC} ${PICFLAG} -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} \
150             -o ${.TARGET}
151         @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
152         @mv ${.TARGET}.tmp ${.TARGET}
153
154 .if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB)
155 .if !defined(NOPROFILE) && !defined(INTERNALLIB)
156 _LIBS=lib${LIB}.a lib${LIB}_p.a
157 .else
158 _LIBS=lib${LIB}.a
159 .endif
160 .endif
161
162 .if defined(SHLIB_NAME)
163 _LIBS+=${SHLIB_NAME}
164 .endif
165 .if defined(INSTALL_PIC_ARCHIVE)
166 _LIBS+=lib${LIB}_pic.a
167 .endif
168
169 .if !defined(PICFLAG)
170 .if ${MACHINE_ARCH} == "sparc64"
171 PICFLAG=-fPIC
172 .else
173 PICFLAG=-fpic
174 .endif
175 .endif
176
177 LINTOBJS+= ${SRCS:M*.c:C/\..+$/.ln/}
178
179 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
180 LINTLIB=llib-l${LIB}.ln
181 _LIBS+=${LINTLIB}
182 .endif
183
184 all: objwarn ${_LIBS}
185
186 .if !defined(NOMAN)
187 all: all-man
188 .endif
189
190 OBJS+=  ${SRCS:N*.h:R:S/$/.o/g}
191
192 lib${LIB}.a:: ${OBJS} ${STATICOBJS}
193         @${ECHO} building static ${LIB} library
194         @rm -f lib${LIB}.a
195         @${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD}
196         ${RANLIB} lib${LIB}.a
197
198 POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po}
199 .if !defined(NOPROFILE)
200 lib${LIB}_p.a:: ${POBJS}
201         @${ECHO} building profiled ${LIB} library
202         @rm -f lib${LIB}_p.a
203         @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD}
204         ${RANLIB} lib${LIB}_p.a
205 .endif
206
207 SOBJS+= ${OBJS:.o=.So}
208
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}
215 .endif
216 .if ${OBJFORMAT} == aout
217         @${CC} -shared -Wl,-x,-assert,pure-text \
218             -o ${SHLIB_NAME} \
219             `lorder ${SOBJS} | tsort -q` ${LDADD}
220 .else
221         @${CC} -shared -Wl,-x \
222             -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \
223             `lorder ${SOBJS} | tsort -q` ${LDADD}
224 .endif
225 .endif
226
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
233 .endif
234
235 .if defined(WANT_LINT) && defined(LIB) && defined(LINTOBJS) && !empty(LINTOBJS)
236 ${LINTLIB}: ${LINTOBJS}
237         @${ECHO} building lint library ${LINTLIB}
238         @rm -f ${LINTLIB}
239         ${LINT} ${LINTLIBFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
240 .endif
241
242 .if !target(clean)
243 clean:
244         rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES}
245         rm -f lib${LIB}.a
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)
252         rm -rf ${CLEANDIRS}
253 .endif
254 .endif
255
256 _EXTRADEPEND:
257         @TMP=_depend$$$$; \
258         sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \
259             > $$TMP; \
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}` \
265             >> ${DEPENDFILE}
266 .else
267 .if defined(DPADD) && !empty(DPADD)
268         echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE}
269 .endif
270 .endif
271 .endif
272
273 .if !target(install)
274 .if !target(beforeinstall)
275 beforeinstall: _includeinstall
276 .endif
277
278 _includeinstall:
279 .if defined(INCS)
280 .for header in ${INCS}
281         cd ${.CURDIR} && \
282         ${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \
283             ${header} ${DESTDIR}${INCDIR}
284 .endfor
285 .endif
286
287 .if defined(PRECIOUSLIB) && !defined(NOFSCHG)
288 SHLINSTALLFLAGS+= -fschg
289 .endif
290
291 _INSTALLFLAGS:= ${INSTALLFLAGS}
292 .for ie in ${INSTALLFLAGS_EDIT}
293 _INSTALLFLAGS:= ${_INSTALLFLAGS${ie}}
294 .endfor
295 _SHLINSTALLFLAGS:=      ${SHLINSTALLFLAGS}
296 .for ie in ${INSTALLFLAGS_EDIT}
297 _SHLINSTALLFLAGS:=      ${_SHLINSTALLFLAGS${ie}}
298 .endfor
299
300 realinstall: beforeinstall
301 realinstall: _libinstall
302 _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}
309 .endif
310 .endif
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}
317 .endif
318 .endif
319 .if defined(INSTALL_PIC_ARCHIVE)
320         ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
321             ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
322 .endif
323 .if defined(LINKS) && !empty(LINKS)
324         @set ${LINKS}; \
325         while test $$# -ge 2; do \
326                 l=${DESTDIR}$$1; \
327                 shift; \
328                 t=${DESTDIR}$$1; \
329                 shift; \
330                 ${ECHO} $$t -\> $$l; \
331                 ln -f $$l $$t; \
332         done; true
333 .endif
334 .if defined(SYMLINKS) && !empty(SYMLINKS)
335         @set ${SYMLINKS}; \
336         while test $$# -ge 2; do \
337                 l=$$1; \
338                 shift; \
339                 t=${DESTDIR}$$1; \
340                 shift; \
341                 ${ECHO} $$t -\> $$l; \
342                 ln -fs $$l $$t; \
343         done; true
344 .endif
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}
348 .endif
349
350 install: afterinstall
351 afterinstall: realinstall
352 .if !defined(NOMAN)
353 afterinstall: maninstall
354 .endif
355 .endif
356
357 DISTRIBUTION?=  base
358 .if !target(distribute)
359 distribute:
360 .for dist in ${DISTRIBUTION}
361         cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies
362 .endfor
363 .endif
364
365 .if !target(lint)
366 lint: ${SRCS:M*.c}
367         ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.ALLSRC}
368 .endif
369
370 .if !defined(NOMAN)
371 .include <bsd.man.mk>
372 .endif
373
374 .include <bsd.dep.mk>
375
376 .if !exists(${.OBJDIR}/${DEPENDFILE})
377 ${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h}
378 .endif
379
380 .include <bsd.obj.mk>
381
382 .include <bsd.sys.mk>