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) 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 176all: objwarn ${_LIBS} all-man _SUBDIR # llib-l${LIB}.ln 177 178OBJS+= ${SRCS:N*.h:R:S/$/.o/g} 179 180lib${LIB}.a:: ${OBJS} ${STATICOBJS} 181 @${ECHO} building standard ${LIB} library 182 @rm -f lib${LIB}.a 183 @${AR} cq lib${LIB}.a `lorder ${OBJS} ${STATICOBJS} | tsort -q` ${ARADD} 184 ${RANLIB} lib${LIB}.a 185 186POBJS+= ${OBJS:.o=.po} ${STATICOBJS:.o=.po} 187.if !defined(NOPROFILE) 188lib${LIB}_p.a:: ${POBJS} 189 @${ECHO} building profiled ${LIB} library 190 @rm -f lib${LIB}_p.a 191 @${AR} cq lib${LIB}_p.a `lorder ${POBJS} | tsort -q` ${ARADD} 192 ${RANLIB} lib${LIB}_p.a 193.endif 194 195.if defined(DESTDIR) 196LDDESTDIRENV?= LIBRARY_PATH=${DESTDIR}${SHLIBDIR}:${DESTDIR}${LIBDIR} 197.endif 198 199SOBJS+= ${OBJS:.o=.So} 200 201.if defined(SHLIB_NAME) 202${SHLIB_NAME}: ${SOBJS} 203 @${ECHO} building shared library ${SHLIB_NAME} 204 @rm -f ${SHLIB_NAME} ${SHLIB_LINK} 205.if defined(SHLIB_LINK) 206 @ln -sf ${SHLIB_NAME} ${SHLIB_LINK} 207.endif 208.if ${OBJFORMAT} == aout 209 @${LDDESTDIRENV} ${CC} -shared -Wl,-x,-assert,pure-text \ 210 -o ${SHLIB_NAME} \ 211 `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 212.else 213 @${LDDESTDIRENV} ${CC} -shared -Wl,-x \ 214 -o ${SHLIB_NAME} -Wl,-soname,${SONAME} \ 215 `lorder ${SOBJS} | tsort -q` ${LDDESTDIR} ${LDADD} 216.endif 217.endif 218 219.if defined(INSTALL_PIC_ARCHIVE) 220lib${LIB}_pic.a:: ${SOBJS} 221 @${ECHO} building special pic ${LIB} library 222 @rm -f lib${LIB}_pic.a 223 @${AR} cq lib${LIB}_pic.a ${SOBJS} ${ARADD} 224 ${RANLIB} lib${LIB}_pic.a 225.endif 226 227llib-l${LIB}.ln: ${SRCS} 228 ${LINT} -C${LIB} ${CFLAGS} ${.ALLSRC:M*.c} 229 230.if !target(clean) 231clean: _SUBDIR 232 rm -f a.out ${OBJS} ${STATICOBJS} ${OBJS:S/$/.tmp/} ${CLEANFILES} 233 rm -f lib${LIB}.a # llib-l${LIB}.ln 234 rm -f ${POBJS} ${POBJS:S/$/.tmp/} lib${LIB}_p.a 235 rm -f ${SOBJS} ${SOBJS:.So=.so} ${SOBJS:S/$/.tmp/} \ 236 ${SHLIB_NAME} ${SHLIB_LINK} \ 237 lib${LIB}.so.* lib${LIB}.so lib${LIB}_pic.a 238.if defined(CLEANDIRS) && !empty(CLEANDIRS) 239 rm -rf ${CLEANDIRS} 240.endif 241.endif 242 243_EXTRADEPEND: 244 @TMP=_depend$$$$; \ 245 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.po \1.So:/' < ${DEPENDFILE} \ 246 > $$TMP; \ 247 mv $$TMP ${DEPENDFILE} 248.if !defined(NOEXTRADEPEND) && defined(SHLIB_NAME) 249.if ${OBJFORMAT} == aout 250 echo ${SHLIB_NAME}: \ 251 `${LDDESTDIRENV} ${CC} -shared -Wl,-f ${LDDESTDIR} ${LDADD}` \ 252 >> ${DEPENDFILE} 253.else 254.if defined(DPADD) && !empty(DPADD) 255 echo ${SHLIB_NAME}: ${DPADD} >> ${DEPENDFILE} 256.endif 257.endif 258.endif 259 260.if !target(install) 261.if !target(beforeinstall) 262beforeinstall: 263.endif 264 265.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 266SHLINSTALLFLAGS+= -fschg 267.endif 268 269_INSTALLFLAGS:= ${INSTALLFLAGS} 270.for ie in ${INSTALLFLAGS_EDIT} 271_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 272.endfor 273_SHLINSTALLFLAGS:= ${INSTALLFLAGS} 274.for ie in ${INSTALLFLAGS_EDIT} 275_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 276.endfor 277 278realinstall: beforeinstall 279.if !defined(INTERNALLIB) 280 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 281 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 282.if !defined(NOPROFILE) 283 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 284 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 285.endif 286.endif 287.if defined(SHLIB_NAME) 288 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 289 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 290 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 291.if defined(SHLIB_LINK) 292 ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 293.endif 294.endif 295.if defined(INSTALL_PIC_ARCHIVE) 296 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 297 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 298.endif 299.if defined(LINKS) && !empty(LINKS) 300 @set ${LINKS}; \ 301 while test $$# -ge 2; do \ 302 l=${DESTDIR}$$1; \ 303 shift; \ 304 t=${DESTDIR}$$1; \ 305 shift; \ 306 ${ECHO} $$t -\> $$l; \ 307 ln -f $$l $$t; \ 308 done; true 309.endif 310.if defined(SYMLINKS) && !empty(SYMLINKS) 311 @set ${SYMLINKS}; \ 312 while test $$# -ge 2; do \ 313 l=$$1; \ 314 shift; \ 315 t=${DESTDIR}$$1; \ 316 shift; \ 317 ${ECHO} $$t -\> $$l; \ 318 ln -fs $$l $$t; \ 319 done; true 320.endif 321 322install: afterinstall _SUBDIR 323.if !defined(NOMAN) 324afterinstall: realinstall maninstall 325.else 326afterinstall: realinstall 327.endif 328.endif 329 330.if !target(regress) 331regress: 332.endif 333 334DISTRIBUTION?= bin 335.if !target(distribute) 336distribute: _SUBDIR 337.for dist in ${DISTRIBUTION} 338 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 339.endfor 340.endif 341 342.if !target(lint) 343lint: 344.endif 345 346.if !defined(NOMAN) 347.include <bsd.man.mk> 348.elif !target(maninstall) 349maninstall: 350all-man: 351.endif 352 353.include <bsd.dep.mk> 354 355.if !exists(${DEPENDFILE}) 356${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h} 357.endif 358 359.include <bsd.obj.mk> 360