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