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: _includeinstall 263.endif 264 265_includeinstall: 266.if defined(INCS) 267.for header in ${INCS} 268 cd ${.CURDIR} && \ 269 ${INSTALL} -C -o ${INCOWN} -g ${INCGRP} -m ${INCMODE} \ 270 ${header} ${DESTDIR}${INCDIR} 271 272.endfor 273.endif 274 275.if defined(PRECIOUSLIB) && !defined(NOFSCHG) 276SHLINSTALLFLAGS+= -fschg 277.endif 278 279_INSTALLFLAGS:= ${INSTALLFLAGS} 280.for ie in ${INSTALLFLAGS_EDIT} 281_INSTALLFLAGS:= ${_INSTALLFLAGS${ie}} 282.endfor 283_SHLINSTALLFLAGS:= ${SHLINSTALLFLAGS} 284.for ie in ${INSTALLFLAGS_EDIT} 285_SHLINSTALLFLAGS:= ${_SHLINSTALLFLAGS${ie}} 286.endfor 287 288realinstall: beforeinstall 289.if !defined(INTERNALLIB) 290 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 291 ${_INSTALLFLAGS} lib${LIB}.a ${DESTDIR}${LIBDIR} 292.if !defined(NOPROFILE) 293 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 294 ${_INSTALLFLAGS} lib${LIB}_p.a ${DESTDIR}${LIBDIR} 295.endif 296.endif 297.if defined(SHLIB_NAME) 298 ${INSTALL} ${COPY} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 299 ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ 300 ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} 301.if defined(SHLIB_LINK) 302 ln -sf ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK} 303.endif 304.endif 305.if defined(INSTALL_PIC_ARCHIVE) 306 ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 307 ${_INSTALLFLAGS} lib${LIB}_pic.a ${DESTDIR}${LIBDIR} 308.endif 309.if defined(LINKS) && !empty(LINKS) 310 @set ${LINKS}; \ 311 while test $$# -ge 2; do \ 312 l=${DESTDIR}$$1; \ 313 shift; \ 314 t=${DESTDIR}$$1; \ 315 shift; \ 316 ${ECHO} $$t -\> $$l; \ 317 ln -f $$l $$t; \ 318 done; true 319.endif 320.if defined(SYMLINKS) && !empty(SYMLINKS) 321 @set ${SYMLINKS}; \ 322 while test $$# -ge 2; do \ 323 l=$$1; \ 324 shift; \ 325 t=${DESTDIR}$$1; \ 326 shift; \ 327 ${ECHO} $$t -\> $$l; \ 328 ln -fs $$l $$t; \ 329 done; true 330.endif 331 332install: afterinstall _SUBDIR 333.if !defined(NOMAN) 334afterinstall: realinstall maninstall 335.else 336afterinstall: realinstall 337.endif 338.endif 339 340.if !target(regress) 341regress: 342.endif 343 344DISTRIBUTION?= bin 345.if !target(distribute) 346distribute: _SUBDIR 347.for dist in ${DISTRIBUTION} 348 cd ${.CURDIR} ; $(MAKE) install DESTDIR=${DISTDIR}/${dist} SHARED=copies 349.endfor 350.endif 351 352.if !target(lint) 353lint: 354.endif 355 356.if !defined(NOMAN) 357.include <bsd.man.mk> 358.elif !target(maninstall) 359maninstall: 360all-man: 361.endif 362 363.include <bsd.dep.mk> 364 365.if !exists(${DEPENDFILE}) 366${OBJS} ${STATICOBJS} ${POBJS} ${SOBJS}: ${SRCS:M*.h} 367.endif 368 369.include <bsd.obj.mk> 370