1# from: @(#)bsd.lib.mk 5.26 (Berkeley) 5/2/91 2# $FreeBSD$ 3# 4 5.if !target(__initialized__) 6__initialized__: 7.if exists(${.CURDIR}/../Makefile.inc) 8.include "${.CURDIR}/../Makefile.inc" 9.endif 10.endif 11 12.if exists(${.CURDIR}/shlib_version) 13SHLIB_MAJOR != . ${.CURDIR}/shlib_version ; echo $$major 14.if ${OBJFORMAT} == aout 15SHLIB_MINOR != . ${.CURDIR}/shlib_version ; echo $$minor 16.endif 17.endif 18 19# Set up the variables controlling shared libraries. After this section, 20# SHLIB_NAME will be defined only if we are to create a shared library. 21# SHLIB_LINK will be defined only if we are to create a link to it. 22# INSTALL_PIC_ARCHIVE will be defined only if we are to create a PIC archive. 23.if defined(NOPIC) 24.undef SHLIB_NAME 25.undef INSTALL_PIC_ARCHIVE 26.else 27.if ${OBJFORMAT} == elf 28.if !defined(SHLIB_NAME) && defined(SHLIB_MAJOR) 29SHLIB_NAME= lib${LIB}.so.${SHLIB_MAJOR} 30SHLIB_LINK?= lib${LIB}.so 31.endif 32SONAME?= ${SHLIB_NAME} 33.else 34.if defined(SHLIB_MAJOR) && defined(SHLIB_MINOR) 35SHLIB_NAME?= lib${LIB}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} 36.endif 37.endif 38.endif 39 40.if defined(DESTDIR) && !defined(BOOTSTRAPPING) 41CFLAGS+= -I${DESTDIR}/usr/include 42CXXINCLUDES+= -I${DESTDIR}/usr/include/g++ 43.endif 44 45.if defined(DEBUG_FLAGS) 46CFLAGS+= ${DEBUG_FLAGS} 47.endif 48 49.if !defined(DEBUG_FLAGS) 50STRIP?= -s 51.endif 52 53.if ${OBJFORMAT} != aout || make(checkdpadd) || defined(NEED_LIBNAMES) 54.include <bsd.libnames.mk> 55.endif 56 57.MAIN: all 58 59# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries 60# .So used for PIC object files 61.SUFFIXES: 62.SUFFIXES: .out .o .po .So .S .s .c .cc .cpp .cxx .m .C .f .y .l 63 64.c.o: 65 ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 66 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 67 @mv ${.TARGET}.tmp ${.TARGET} 68 69.c.po: 70 ${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 71 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 72 @mv ${.TARGET}.tmp ${.TARGET} 73 74.c.So: 75 ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} 76 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 77 @mv ${.TARGET}.tmp ${.TARGET} 78 79.cc.o .C.o .cpp.o .cxx.o: 80 ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 81 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 82 @mv ${.TARGET}.tmp ${.TARGET} 83 84.cc.po .C.po .cpp.po .cxx.po: 85 ${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 86 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 87 @mv ${.TARGET}.tmp ${.TARGET} 88 89.cc.So .C.So .cpp.So .cxx.So: 90 ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} 91 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 92 @mv ${.TARGET}.tmp ${.TARGET} 93 94.f.o: 95 ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 96 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 97 @mv ${.TARGET}.tmp ${.TARGET} 98 99.f.po: 100 ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 101 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 102 @mv ${.TARGET}.tmp ${.TARGET} 103 104.f.So: 105 ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 106 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 107 @mv ${.TARGET}.tmp ${.TARGET} 108 109.m.o: 110 ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 111 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 112 @mv ${.TARGET}.tmp ${.TARGET} 113 114.m.po: 115 ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} 116 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 117 @mv ${.TARGET}.tmp ${.TARGET} 118 119.m.So: 120 ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} 121 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 122 @mv ${.TARGET}.tmp ${.TARGET} 123 124.s.o: 125 ${CC} -x assembler-with-cpp ${CFLAGS:M-[BID]*} ${AINC} -c \ 126 ${.IMPSRC} -o ${.TARGET} 127 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 128 @mv ${.TARGET}.tmp ${.TARGET} 129 130.s.po: 131 ${CC} -x assembler-with-cpp -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c \ 132 ${.IMPSRC} -o ${.TARGET} 133 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 134 @mv ${.TARGET}.tmp ${.TARGET} 135 136.s.So: 137 ${CC} -x assembler-with-cpp -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c \ 138 ${.IMPSRC} -o ${.TARGET} 139 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 140 @mv ${.TARGET}.tmp ${.TARGET} 141 142.S.o: 143 ${CC} ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 144 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 145 @mv ${.TARGET}.tmp ${.TARGET} 146 147.S.po: 148 ${CC} -DPROF ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 149 @${LD} -o ${.TARGET}.tmp -X -r ${.TARGET} 150 @mv ${.TARGET}.tmp ${.TARGET} 151 152.S.So: 153 ${CC} -fpic -DPIC ${CFLAGS:M-[BID]*} ${AINC} -c ${.IMPSRC} -o ${.TARGET} 154 @${LD} -o ${.TARGET}.tmp -x -r ${.TARGET} 155 @mv ${.TARGET}.tmp ${.TARGET} 156 157.if !defined(INTERNALLIB) || defined(INTERNALSTATICLIB) 158.if !defined(NOPROFILE) && !defined(INTERNALLIB) 159_LIBS=lib${LIB}.a lib${LIB}_p.a 160.else 161_LIBS=lib${LIB}.a 162.endif 163.endif 164 165.if defined(SHLIB_NAME) 166_LIBS+=${SHLIB_NAME} 167.endif 168.if defined(INSTALL_PIC_ARCHIVE) 169_LIBS+=lib${LIB}_pic.a 170.endif 171 172.if !defined(PICFLAG) 173PICFLAG=-fpic 174.endif 175 176.if !defined(NOMAN) 177all: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln 178.else 179all: objwarn ${_LIBS} _SUBDIR # llib-l${LIB}.ln 180.endif 181 182OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 183 184lib${LIB}.a:: ${OBJS} ${STATICOBJS} 185 @${ECHO} building static ${LIB} library 186 @rm -f lib${LIB}.a 187 @${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 188 ${RANLIB} lib${LIB}.a 189 190POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 191.if !defined(NOPROFILE) 192lib${LIB}_p.a:: ${POBJS} 193 @${ECHO} building profiled ${LIB} library 194 @rm -f lib${LIB}_p.a 195 @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD} 196 ${RANLIB} lib${LIB}_p.a 197.endif 198 199.if defined(DESTDIR) && !defined(BOOTSTRAPPING) 200LDDESTDIRENV?= LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR} 201.endif 202 203SOBJS+= ${OBJS:.o=.So} 204 205.if defined(SHLIB_NAME) 206${SHLIB_NAME}: ${SOBJS} 207 @${ECHO} building shared library ${SHLIB_NAME} 208 @rm -f ${SHLIB_NAME} ${SHLIB_LINK} 209.if defined(SHLIB_LINK) 210 @ln -sf ${SHLIB_NAME} ${SHLIB_LINK} 211.endif 212.if ${OBJFORMAT} == aout 213 @${LDDESTDIRENV} ${CC} -shared -Wl,-x,-assert,pure-text \ 214 -o ${SHLIB_NAME} \ 215 `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 216.else 217 @${LDDESTDIRENV} ${CC} -shared -Wl,-x \ 218 -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \ 219 `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 220.endif 221.endif 222 223.if defined(INSTALL_PIC_ARCHIVE) 224lib${LIB}_pic.a:: ${SOBJS} 225 @${ECHO} building special pic ${LIB} library 226 @rm -f lib${LIB}_pic.a 227 @${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD} 228 ${RANLIB} lib${LIB}_pic.a 229.endif 230 231llib-l${LIB}.ln: ${SRCS} 232 ${LINT} -C${LIB} ${CFLAGS:M-[DIU]*} ${.ALLSRC:M*.c} 233 234.if !target(clean) 235clean: _SUBDIR 236 rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES} 237 rm -f lib${LIB}.a # llib-l${LIB}.ln 238 rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a 239 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \ 240 ${SHLIB_NAME} ${SHLIB_LINK} \ 241 lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a 242.if defined(CLEANDIRS) && !empty(CLEANDIRS) 243 rm -rf ${CLEANDIRS} 244.endif 245.endif 246 247_EXTRADEPEND: 248 @TMP=_depend$$$$; \ 249 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 250 > $$TMP; \ 251 mv $$TMP ${DEPENDFILE} 252.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 253.if ${OBJFORMAT} == aout 254 echo ${SHLIB_NAME}: \ 255 `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \ 256 >> ${DEPENDFILE} 257.else 258.if defined(DPADD) && !empty(DPADD) 259 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 260.endif 261.endif 262.endif 263 264.if !target(install) 265.if !target(beforeinstall) 266beforeinstall: _includeinstall 267.endif 268 269_includeinstall: 270.if defined(INCS) 271.for header in ${INCS} 272 cd ${.CURDIR} && \ 273 ${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \ 274 ${header} ${DESTDIR}${INCDIR} 275 276.endfor 277.endif 278 279.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 280SHLINSTALLFLAGS+= -fschg 281.endif 282 283_INSTALLFLAGS:= ${INSTALLFLAGS} 284.for ie in ${INSTALLFLAGS_EDIT} 285_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 286.endfor 287_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 288.for ie in ${INSTALLFLAGS_EDIT} 289_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 290.endfor 291 292realinstall: beforeinstall 293.if !defined(INTERNALLIB) 294 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 295 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 296.if !defined(NOPROFILE) 297 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 298 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 299.endif 300.endif 301.if defined(SHLIB_NAME) 302 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 303 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 304 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 305.if defined(SHLIB_LINK) 306 ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 307.endif 308.endif 309.if defined(INSTALL_PIC_ARCHIVE) 310 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 311 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 312.endif 313.if defined(LINKS) && !empty(LINKS) 314 @set ${LINKS}; \ 315 while test $$# -ge 2; do \ 316 l=${DESTDIR}$$1; \ 317 shift; \ 318 t=${DESTDIR}$$1; \ 319 shift; \ 320 ${ECHO} $$t -\> $$l; \ 321 ln -f $$l $$t; \ 322 done; true 323.endif 324.if defined(SYMLINKS) && !empty(SYMLINKS) 325 @set ${SYMLINKS}; \ 326 while test $$# -ge 2; do \ 327 l=$$1; \ 328 shift; \ 329 t=${DESTDIR}$$1; \ 330 shift; \ 331 ${ECHO} $$t -\> $$l; \ 332 ln -fs $$l $$t; \ 333 done; true 334.endif 335 336install: afterinstall _SUBDIR 337.if !defined(NOMAN) 338afterinstall: realinstall maninstall 339.else 340afterinstall: realinstall 341.endif 342.endif 343 344.if !target(regress) 345regress: 346.endif 347 348DISTRIBUTION?= bin 349.if !target(distribute) 350distribute: _SUBDIR 351.for dist in ${DISTRIBUTION} 352 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 353.endfor 354.endif 355 356.if !target(lint) 357lint: 358.endif 359 360.if !defined(NOMAN) 361.include <bsd.man.mk> 362.else 363.if !target(all-man) 364all-man: 365.endif 366.if !target(maninstall) 367maninstall: 368.endif 369.endif 370 371.include <bsd.dep.mk> 372 373.if !exists(${DEPENDFILE}) 374${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h} 375.endif 376 377.include <bsd.obj.mk> 378 379.include <bsd.sys.mk> 380