Commit | Line | Data |
---|---|---|
984263bc MD |
1 | # from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 |
2 | # $FreeBSD: src/share/mk/bsd.lib.mk,v 1.91.2.15 2002/08/07 16:31:50 ru Exp $ | |
3 | # | |
4 | ||
5 | .include <bsd.init.mk> | |
6 | ||
7 | # Set up the variables controlling shared libraries. After this section, | |
8 | # SHLIB_NAME will be defined only if we are to create a shared library. | |
9 | # SHLIB_LINK will be defined only if we are to create a link to it. | |
10 | # INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. | |
11 | .if defined(NOPIC) | |
12 | .undef SHLIB_NAME | |
13 | .undef INSTALL_PIC_ARCHIVE | |
14 | .else | |
984263bc MD |
15 | .if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR) |
16 | SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} | |
17 | .endif | |
18 | .if defined(SHLIB_NAME) && ${SHLIB_NAME:M*.so.*} | |
19 | SHLIB_LINK?= ${SHLIB_NAME:R} | |
20 | .endif | |
21 | SONAME?= ${SHLIB_NAME} | |
984263bc MD |
22 | .endif |
23 | ||
24 | .if defined(DEBUG_FLAGS) | |
25 | CFLAGS+= ${DEBUG_FLAGS} | |
22ca5d38 | 26 | .else |
984263bc MD |
27 | STRIP?= -s |
28 | .endif | |
29 | ||
984263bc | 30 | .include <bsd.libnames.mk> |
3805d358 | 31 | |
6d1a01fe | 32 | .if !defined(PRIVATELIB) |
3805d358 | 33 | TARGET_LIBDIR?= ${LIBDIR} |
c4c23d90 JS |
34 | TARGET_DEBUGLIBDIR?= ${DEBUGLIBDIR} |
35 | TARGET_PROFLIBDIR?= ${PROFLIBDIR} | |
3805d358 | 36 | TARGET_SHLIBDIR?= ${SHLIBDIR} |
6d1a01fe | 37 | .else |
38 | TARGET_LIBDIR?= ${LIBDIR}/priv | |
39 | TARGET_DEBUGLIBDIR?= ${DEBUGLIBDIR:S!/debug$!/priv/debug!} | |
40 | TARGET_PROFLIBDIR?= ${PROFLIBDIR:S!/profile$!/priv/profile!} | |
7eb1db91 | 41 | .if !empty(PRIVATELIB) && ${PRIVATELIB} == "shpub" |
d607d715 | 42 | TARGET_SHLIBDIR?= ${SHLIBDIR} |
43 | . else | |
6d1a01fe | 44 | TARGET_SHLIBDIR?= ${SHLIBDIR}/priv |
d607d715 | 45 | . endif |
6d1a01fe | 46 | .endif |
984263bc | 47 | |
fac807ae | 48 | PRIVATELIB_CFLAGS?= -I${_SHLIBDIRPREFIX}/usr/include/priv |
38b720cd | 49 | PRIVATELIB_LDFLAGS?= -rpath /lib/priv -L ${_SHLIBDIRPREFIX}/usr/lib/priv |
50 | ||
984263bc MD |
51 | # prefer .s to a .c, add .po, remove stuff not used in the BSD libraries |
52 | # .So used for PIC object files | |
53 | .SUFFIXES: | |
54 | .SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l | |
55 | ||
56 | .if !defined(PICFLAG) | |
57 | PICFLAG=-fpic | |
58 | .endif | |
59 | ||
4806ab2e | 60 | PO_FLAG=-pg |
2ec8bbd1 JM |
61 | PO_CFLAGS=${CFLAGS:N-ffunction-sections} |
62 | PO_CXXFLAGS=${CXXFLAGS:N-ffunction-sections} | |
4806ab2e | 63 | |
984263bc | 64 | .c.o: |
571fb77d | 65 | ${CC} ${_${.IMPSRC:T}_FLAGS} ${STATIC_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
66 | |
67 | .c.po: | |
571fb77d | 68 | ${CC} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${STATIC_CFLAGS} ${PO_CFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
69 | |
70 | .c.So: | |
571fb77d | 71 | ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${SHARED_CFLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
72 | |
73 | .cc.o .C.o .cpp.o .cxx.o: | |
571fb77d | 74 | ${CXX} ${_${.IMPSRC:T}_FLAGS} ${STATIC_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
75 | |
76 | .cc.po .C.po .cpp.po .cxx.po: | |
571fb77d | 77 | ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${STATIC_CXXFLAGS} ${PO_CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
78 | |
79 | .cc.So .C.So .cpp.So .cxx.So: | |
571fb77d | 80 | ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${SHARED_CXXFLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
81 | |
82 | .f.o: | |
6d68f83f | 83 | ${FC} ${_${.IMPSRC:T}_FLAGS} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} |
984263bc MD |
84 | |
85 | .f.po: | |
2ec8bbd1 | 86 | ${FC} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} |
984263bc MD |
87 | |
88 | .f.So: | |
6d68f83f | 89 | ${FC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} |
984263bc MD |
90 | |
91 | .m.o: | |
6d68f83f | 92 | ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
93 | |
94 | .m.po: | |
2ec8bbd1 | 95 | ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} ${PO_FLAG} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
96 | |
97 | .m.So: | |
6d68f83f | 98 | ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
99 | |
100 | .s.o: | |
572b65cc | 101 | ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${CFLAGS} -c \ |
984263bc | 102 | ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
103 | |
104 | .s.po: | |
572b65cc | 105 | ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp -DPROF ${CFLAGS} -c \ |
984263bc | 106 | ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
107 | |
108 | .s.So: | |
6d68f83f | 109 | ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ |
572b65cc | 110 | -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
111 | |
112 | .S.o: | |
572b65cc | 113 | ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
114 | |
115 | .S.po: | |
572b65cc | 116 | ${CC} ${_${.IMPSRC:T}_FLAGS} -DPROF ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} |
984263bc MD |
117 | |
118 | .S.So: | |
572b65cc | 119 | ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} \ |
984263bc | 120 | -o ${.TARGET} |
984263bc MD |
121 | |
122 | all: objwarn | |
123 | ||
a8a6a916 JM |
124 | .include <bsd.symver.mk> |
125 | ||
126 | # Allow libraries to specify their own version map or have it | |
127 | # automatically generated (see bsd.symver.mk above). | |
128 | .if !defined(NO_SYMVER) && !empty(VERSION_MAP) | |
129 | ${SHLIB_NAME}: ${VERSION_MAP} | |
130 | LDFLAGS+= -Wl,--version-script=${VERSION_MAP} | |
131 | .endif | |
132 | ||
984263bc | 133 | .if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME) |
bed2cf93 | 134 | . if !empty(SRCS) |
1bc877a0 | 135 | OBJS+= ${SRCS:N*.h:R:S/$/.o/g} |
bed2cf93 | 136 | . endif |
984263bc MD |
137 | .endif |
138 | ||
139 | .if defined(LIB) && !empty(LIB) | |
140 | _LIBS= lib${LIB}.a | |
141 | ||
e9fd39a0 | 142 | . if ! target(lib${LIB}.a) |
984263bc MD |
143 | lib${LIB}.a: ${OBJS} ${STATICOBJS} |
144 | @${ECHO} building static ${LIB} library | |
abeb5df0 | 145 | rm -f ${.TARGET} |
49feb856 | 146 | ${AR} ${ARFLAGS} ${.TARGET} `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} |
147 | ${RANLIB} ${.TARGET} | |
90c10992 | 148 | . endif |
984263bc MD |
149 | .endif |
150 | ||
e9fd39a0 | 151 | .if !defined(INTERNALLIB) || defined(INTERNALLIBPROF) |
152 | . if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) | |
984263bc MD |
153 | _LIBS+= lib${LIB}_p.a |
154 | POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} | |
155 | ||
e9fd39a0 | 156 | . if ! target(lib${LIB}_p.a) |
984263bc MD |
157 | lib${LIB}_p.a: ${POBJS} |
158 | @${ECHO} building profiled ${LIB} library | |
abeb5df0 | 159 | rm -f ${.TARGET} |
49feb856 | 160 | ${AR} ${ARFLAGS} ${.TARGET} `lorder ${POBJS} | tsort -q` ${ARADD} |
161 | ${RANLIB} ${.TARGET} | |
e9fd39a0 | 162 | . endif |
163 | . endif | |
984263bc MD |
164 | .endif |
165 | ||
526c84b3 | 166 | .if !defined(INTERNALLIB) && defined(SHLIB_NAME) || \ |
984263bc MD |
167 | defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) |
168 | SOBJS+= ${OBJS:.o=.So} | |
169 | .endif | |
170 | ||
526c84b3 | 171 | .if !defined(INTERNALLIB) && defined(SHLIB_NAME) |
984263bc MD |
172 | _LIBS+= ${SHLIB_NAME} |
173 | ||
174 | ${SHLIB_NAME}: ${SOBJS} | |
175 | @${ECHO} building shared library ${SHLIB_NAME} | |
abeb5df0 | 176 | rm -f ${.TARGET} ${SHLIB_LINK} |
984263bc | 177 | .if defined(SHLIB_LINK) |
062db326 | 178 | ${LN} -fs ${.TARGET} ${SHLIB_LINK} |
984263bc | 179 | .endif |
3c4543af | 180 | ${CC_LINK} ${LDFLAGS} -shared -Wl,-x \ |
984263bc MD |
181 | -o ${.TARGET} -Wl,-soname,${SONAME} \ |
182 | `lorder ${SOBJS} | tsort -q` ${LDADD} | |
183 | .endif | |
984263bc MD |
184 | |
185 | .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) | |
186 | _LIBS+= lib${LIB}_pic.a | |
187 | ||
188 | lib${LIB}_pic.a: ${SOBJS} | |
189 | @${ECHO} building special pic ${LIB} library | |
abeb5df0 | 190 | rm -f ${.TARGET} |
39b2222a | 191 | ${AR} ${ARFLAGS} ${.TARGET} ${SOBJS} ${ARADD} |
49feb856 | 192 | ${RANLIB} ${.TARGET} |
984263bc MD |
193 | .endif |
194 | ||
984263bc MD |
195 | all: ${_LIBS} |
196 | ||
197 | .if !defined(NOMAN) | |
198 | all: _manpages | |
199 | .endif | |
200 | ||
201 | _EXTRADEPEND: | |
f87f24e2 | 202 | .if !defined(NOIMPLICITDEPEND) |
984263bc MD |
203 | @TMP=_depend$$$$; \ |
204 | sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ | |
205 | > $$TMP; \ | |
206 | mv $$TMP ${DEPENDFILE} | |
f87f24e2 | 207 | .endif |
984263bc | 208 | .if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) |
984263bc MD |
209 | .if defined(DPADD) && !empty(DPADD) |
210 | echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} | |
211 | .endif | |
212 | .endif | |
984263bc MD |
213 | |
214 | .if !target(install) | |
215 | ||
216 | .if defined(PRECIOUSLIB) && !defined(NOFSCHG) | |
217 | SHLINSTALLFLAGS+= -fschg | |
218 | .endif | |
219 | ||
220 | _INSTALLFLAGS:= ${INSTALLFLAGS} | |
221 | .for ie in ${INSTALLFLAGS_EDIT} | |
222 | _INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} | |
223 | .endfor | |
224 | _SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} | |
225 | .for ie in ${INSTALLFLAGS_EDIT} | |
226 | _SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} | |
227 | .endfor | |
228 | ||
229 | .if !defined(INTERNALLIB) | |
230 | realinstall: _libinstall | |
231 | .ORDER: beforeinstall _libinstall | |
232 | _libinstall: | |
233 | .if defined(LIB) && !empty(LIB) && !defined(NOINSTALLLIB) | |
234 | ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ | |
3805d358 | 235 | ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${TARGET_LIBDIR} |
984263bc MD |
236 | .endif |
237 | .if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) | |
238 | ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ | |
c4c23d90 | 239 | ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${TARGET_PROFLIBDIR}/lib${LIB}.a |
984263bc MD |
240 | .endif |
241 | .if defined(SHLIB_NAME) | |
242 | ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ | |
243 | ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ | |
3805d358 | 244 | ${SHLIB_NAME} ${DESTDIR}${TARGET_SHLIBDIR} |
984263bc | 245 | .if defined(SHLIB_LINK) |
f831791a | 246 | .if ${TARGET_SHLIBDIR} == ${TARGET_LIBDIR} |
247 | ${LN} -fs ${SHLIB_NAME} ${DESTDIR}${TARGET_LIBDIR}/${SHLIB_LINK} | |
4d802908 | 248 | .else |
aa8dd846 | 249 | ${LN} -fs ${_SHLIBDIRPREFIX}${TARGET_SHLIBDIR}/${SHLIB_NAME} \ |
4d802908 FT |
250 | ${DESTDIR}${TARGET_LIBDIR}/${SHLIB_LINK} |
251 | .endif | |
984263bc MD |
252 | .endif |
253 | .endif | |
254 | .if defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) | |
255 | ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ | |
3805d358 | 256 | ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${TARGET_LIBDIR} |
984263bc | 257 | .endif |
584b7c3b | 258 | .endif # !defined(INTERNALLIB) |
984263bc | 259 | |
63b52312 | 260 | .include <bsd.nls.mk> |
984263bc MD |
261 | .include <bsd.files.mk> |
262 | .include <bsd.incs.mk> | |
263 | .include <bsd.links.mk> | |
264 | ||
265 | .if !defined(NOMAN) | |
266 | realinstall: _maninstall | |
267 | .ORDER: beforeinstall _maninstall | |
268 | .endif | |
269 | ||
270 | .endif | |
271 | ||
272 | .if !defined(NOMAN) | |
273 | .include <bsd.man.mk> | |
274 | .endif | |
275 | ||
276 | .include <bsd.dep.mk> | |
277 | ||
278 | .if !exists(${.OBJDIR}/${DEPENDFILE}) | |
279 | .if defined(LIB) && !empty(LIB) | |
280 | ${OBJS} ${STATICOBJS} ${POBJS}: ${SRCS:M*.h} | |
281 | .endif | |
282 | .if defined(SHLIB_NAME) || \ | |
283 | defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) | |
284 | ${SOBJS}: ${SRCS:M*.h} | |
285 | .endif | |
286 | .endif | |
287 | ||
288 | .if !target(clean) | |
289 | clean: | |
290 | .if defined(CLEANFILES) && !empty(CLEANFILES) | |
291 | rm -f ${CLEANFILES} | |
292 | .endif | |
293 | .if defined(LIB) && !empty(LIB) | |
294 | rm -f a.out ${OBJS} ${OBJS:S/$/.tmp/} ${STATICOBJS} | |
295 | .endif | |
984263bc MD |
296 | .if defined(SHLIB_NAME) || \ |
297 | defined(INSTALL_PIC_ARCHIVE) && defined(LIB) && !empty(LIB) | |
298 | rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} | |
299 | .endif | |
e9fd39a0 | 300 | .if !defined(INTERNALLIB) || defined(INTERNALLIBPROF) |
6f4dc6e5 SS |
301 | .if !defined(NOPROFILE) && defined(LIB) && !empty(LIB) |
302 | rm -f ${POBJS} ${POBJS:S/$/.tmp/} | |
303 | .endif | |
e9fd39a0 | 304 | .endif # !defined(INTERNALLIB) || defined(INTERNALLIBPROF) |
305 | .if !defined(INTERNALLIB) | |
984263bc MD |
306 | .if defined(SHLIB_NAME) |
307 | .if defined(SHLIB_LINK) | |
308 | rm -f ${SHLIB_LINK} | |
309 | .endif | |
310 | .if defined(LIB) && !empty(LIB) | |
311 | rm -f lib${LIB}.so.* lib${LIB}.so | |
312 | .endif | |
313 | .endif | |
584b7c3b | 314 | .endif # !defined(INTERNALLIB) |
984263bc MD |
315 | .if defined(_LIBS) && !empty(_LIBS) |
316 | rm -f ${_LIBS} | |
317 | .endif | |
318 | .if defined(CLEANDIRS) && !empty(CLEANDIRS) | |
319 | rm -rf ${CLEANDIRS} | |
320 | .endif | |
321 | .endif | |
322 | ||
323 | .include <bsd.obj.mk> | |
324 | ||
325 | .include <bsd.sys.mk> | |
1397f94a | 326 |