1# $NetBSD: bsd.prog.mk,v 1.139 2001/11/02 18:10:00 tv Exp $ 2# @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94 3 4.include <bsd.init.mk> 5 6##### Basic targets 7.PHONY: cleanprog proginstall scriptsinstall 8realinstall: proginstall scriptsinstall 9clean: cleanprog 10 11##### Default values 12CFLAGS+= ${COPTS} 13 14# ELF platforms depend on crtbegin.o and crtend.o 15.if ${OBJECT_FMT} == "ELF" 16LIBCRTBEGIN?= ${DESTDIR}/usr/lib/crtbegin.o 17LIBCRTEND?= ${DESTDIR}/usr/lib/crtend.o 18.else 19LIBCRTBEGIN?= 20LIBCRTEND?= 21.endif 22 23LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o 24 25LIBBZ2?= ${DESTDIR}/usr/lib/libbz2.a 26LIBC?= ${DESTDIR}/usr/lib/libc.a 27LIBC_PIC?= ${DESTDIR}/usr/lib/libc_pic.a 28LIBCDK?= ${DESTDIR}/usr/lib/libcdk.a 29LIBCOM_ERR?= ${DESTDIR}/usr/lib/libcom_err.a 30LIBCOMPAT?= ${DESTDIR}/usr/lib/libcompat.a 31LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a 32LIBCRYPTO?= ${DESTDIR}/usr/lib/libcrypto.a 33LIBCRYPTO_RC5?= ${DESTDIR}/usr/lib/libcrypto_rc5.a 34LIBCRYPTO_IDEA?=${DESTDIR}/usr/lib/libcrypto_idea.a 35LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a 36LIBDBM?= ${DESTDIR}/usr/lib/libdbm.a 37LIBDES?= ${DESTDIR}/usr/lib/libdes.a 38LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a 39LIBFORM?= ${DESTDIR}/usr/lib/libform.a 40LIBGCC?= ${DESTDIR}/usr/lib/libgcc.a 41LIBGNUMALLOC?= ${DESTDIR}/usr/lib/libgnumalloc.a 42LIBGSSAPI?= ${DESTDIR}/usr/lib/libgssapi.a 43LIBHDB?= ${DESTDIR}/usr/lib/libhdb.a 44LIBINTL?= ${DESTDIR}/usr/lib/libintl.a 45LIBIPSEC?= ${DESTDIR}/usr/lib/libipsec.a 46LIBKADM?= ${DESTDIR}/usr/lib/libkadm.a 47LIBKADM5CLNT?= ${DESTDIR}/usr/lib/libkadm5clnt.a 48LIBKADM5SRV?= ${DESTDIR}/usr/lib/libkadm5srv.a 49LIBKAFS?= ${DESTDIR}/usr/lib/libkafs.a 50LIBKDB?= ${DESTDIR}/usr/lib/libkdb.a 51LIBKRB?= ${DESTDIR}/usr/lib/libkrb.a 52LIBKRB5?= ${DESTDIR}/usr/lib/libkrb5.a 53LIBKSTREAM?= ${DESTDIR}/usr/lib/libkstream.a 54LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a 55LIBL?= ${DESTDIR}/usr/lib/libl.a 56LIBM?= ${DESTDIR}/usr/lib/libm.a 57LIBMENU?= ${DESTDIR}/usr/lib/libmenu.a 58LIBOBJC?= ${DESTDIR}/usr/lib/libobjc.a 59LIBOSSAUDIO?= ${DESTDIR}/usr/lib/libossaudio.a 60LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a 61LIBPCI?= ${DESTDIR}/usr/lib/libpci.a 62LIBPOSIX?= ${DESTDIR}/usr/lib/libposix.a 63LIBRESOLV?= ${DESTDIR}/usr/lib/libresolv.a 64LIBRMT?= ${DESTDIR}/usr/lib/librmt.a 65LIBROKEN?= ${DESTDIR}/usr/lib/libroken.a 66LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a 67LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 68LIBSS?= ${DESTDIR}/usr/lib/libss.a 69LIBSSL?= ${DESTDIR}/usr/lib/libssl.a 70LIBSL?= ${DESTDIR}/usr/lib/libsl.a 71LIBTERMCAP?= ${DESTDIR}/usr/lib/libtermcap.a 72LIBTELNET?= ${DESTDIR}/usr/lib/libtelnet.a 73LIBUSB?= ${DESTDIR}/usr/lib/libusb.a 74LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a 75LIBWRAP?= ${DESTDIR}/usr/lib/libwrap.a 76LIBY?= ${DESTDIR}/usr/lib/liby.a 77LIBZ?= ${DESTDIR}/usr/lib/libz.a 78 79##### Build and install rules 80.if defined(SHAREDSTRINGS) 81CLEANFILES+=strings 82.c.o: 83 ${CC} -E ${CFLAGS} ${.IMPSRC} | xstr -c - 84 @${CC} ${CFLAGS} -c x.c -o ${.TARGET} 85 @rm -f x.c 86 87.cc.o: 88 ${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c - 89 @mv -f x.c x.cc 90 @${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET} 91 @rm -f x.cc 92 93.C.o: 94 ${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c - 95 @mv -f x.c x.C 96 @${CXX} ${CXXFLAGS} -c x.C -o ${.TARGET} 97 @rm -f x.C 98.endif 99 100 101.if defined(PROG) 102SRCS?= ${PROG}.c 103 104DPSRCS+= ${SRCS:M*.[ly]:C/..$/.c/} 105CLEANFILES+= ${DPSRCS} ${YHEADER:D${SRCS:M*.y:.y=.h}} 106 107.if !empty(SRCS:N*.h:N*.sh:N*.fth) 108OBJS+= ${SRCS:N*.h:N*.sh:N*.fth:R:S/$/.o/g} 109LOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln} 110.endif 111 112.if defined(OBJS) && !empty(OBJS) 113.NOPATH: ${OBJS} ${PROG} ${SRCS:M*.[ly]:C/..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}} 114 115.if defined(DESTDIR) 116 117${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD} 118.if !commands(${PROG}) 119 ${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} -nostdlib -Wl,-rpath-link,${DESTDIR}/usr/lib ${LIBCRT0} ${LIBCRTBEGIN} ${OBJS} ${LDADD} -L${DESTDIR}/usr/lib -lgcc -lc -lgcc ${LIBCRTEND} 120.endif 121 122.else 123 124${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD} 125.if !commands(${PROG}) 126 ${CC} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${OBJS} ${LDADD} 127.endif 128 129.endif # defined(DESTDIR) 130.endif # defined(OBJS) && !empty(OBJS) 131 132.if !defined(MAN) 133MAN= ${PROG}.1 134.endif # !defined(MAN) 135.endif # defined(PROG) 136 137realall: ${PROG} ${SCRIPTS} 138 139cleanprog: cleanobjs cleanextra 140 rm -f a.out [Ee]rrs mklog core *.core ${PROG} 141 142cleanobjs: 143.if defined(OBJS) && !empty(OBJS) 144 rm -f ${OBJS} ${LOBJS} 145.endif 146 147cleanextra: 148.if defined(CLEANFILES) && !empty(CLEANFILES) 149 rm -f ${CLEANFILES} 150.endif 151 152.if defined(SRCS) && !target(afterdepend) 153afterdepend: .depend 154 @(TMP=/tmp/_depend$$$$; \ 155 sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.ln:/' \ 156 < .depend > $$TMP; \ 157 mv $$TMP .depend) 158.endif 159 160.if defined(PROG) && !target(proginstall) 161PROGNAME?=${PROG} 162 163proginstall:: ${DESTDIR}${BINDIR}/${PROGNAME} 164.PRECIOUS: ${DESTDIR}${BINDIR}/${PROGNAME} 165.if !defined(UPDATE) 166.PHONY: ${DESTDIR}${BINDIR}/${PROGNAME} 167.endif 168 169__proginstall: .USE 170 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 171 ${STRIPFLAG} ${.ALLSRC} ${.TARGET} 172 173.if !defined(BUILD) && !make(all) && !make(${PROG}) 174${DESTDIR}${BINDIR}/${PROGNAME}: .MADE 175.endif 176${DESTDIR}${BINDIR}/${PROGNAME}: ${PROG} __proginstall 177.endif 178 179.if !target(proginstall) 180proginstall:: 181.endif 182 183.if defined(SCRIPTS) && !target(scriptsinstall) 184SCRIPTSDIR?=${BINDIR} 185SCRIPTSOWN?=${BINOWN} 186SCRIPTSGRP?=${BINGRP} 187SCRIPTSMODE?=${BINMODE} 188 189scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 190.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 191.if !defined(UPDATE) 192.PHONY: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@} 193.endif 194 195__scriptinstall: .USE 196 ${INSTALL_FILE} \ 197 -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \ 198 -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \ 199 -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \ 200 ${.ALLSRC} ${.TARGET} 201 202.for S in ${SCRIPTS:O:u} 203.if !defined(BUILD) && !make(all) && !make(${S}) 204${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE 205.endif 206${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall 207.endfor 208.endif 209 210.if !target(scriptsinstall) 211scriptsinstall:: 212.endif 213 214lint: ${LOBJS} 215.if defined(LOBJS) && !empty(LOBJS) 216 ${LINT} ${LINTFLAGS} ${LDFLAGS:M-L*} ${LOBJS} ${LDADD} 217.endif 218 219##### Pull in related .mk logic 220.include <bsd.man.mk> 221.include <bsd.nls.mk> 222.include <bsd.files.mk> 223.include <bsd.inc.mk> 224.include <bsd.links.mk> 225.include <bsd.dep.mk> 226.include <bsd.sys.mk> 227 228${TARGETS}: # ensure existence 229