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 8 realinstall: proginstall scriptsinstall 9 clean: cleanprog 10 11 ##### Default values 12 CFLAGS+= ${COPTS} 13 14 # ELF platforms depend on crtbegin.o and crtend.o 15 .if ${OBJECT_FMT} == "ELF" 16 LIBCRTBEGIN?= ${DESTDIR}/usr/lib/crtbegin.o 17 LIBCRTEND?= ${DESTDIR}/usr/lib/crtend.o 18 .else 19 LIBCRTBEGIN?= 20 LIBCRTEND?= 21 .endif 22 23 LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o 24 25 LIBBZ2?= ${DESTDIR}/usr/lib/libbz2.a 26 LIBC?= ${DESTDIR}/usr/lib/libc.a 27 LIBC_PIC?= ${DESTDIR}/usr/lib/libc_pic.a 28 LIBCDK?= ${DESTDIR}/usr/lib/libcdk.a 29 LIBCOM_ERR?= ${DESTDIR}/usr/lib/libcom_err.a 30 LIBCOMPAT?= ${DESTDIR}/usr/lib/libcompat.a 31 LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a 32 LIBCRYPTO?= ${DESTDIR}/usr/lib/libcrypto.a 33 LIBCRYPTO_RC5?= ${DESTDIR}/usr/lib/libcrypto_rc5.a 34 LIBCRYPTO_IDEA?=${DESTDIR}/usr/lib/libcrypto_idea.a 35 LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a 36 LIBDBM?= ${DESTDIR}/usr/lib/libdbm.a 37 LIBDES?= ${DESTDIR}/usr/lib/libdes.a 38 LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a 39 LIBFORM?= ${DESTDIR}/usr/lib/libform.a 40 LIBGCC?= ${DESTDIR}/usr/lib/libgcc.a 41 LIBGNUMALLOC?= ${DESTDIR}/usr/lib/libgnumalloc.a 42 LIBGSSAPI?= ${DESTDIR}/usr/lib/libgssapi.a 43 LIBHDB?= ${DESTDIR}/usr/lib/libhdb.a 44 LIBINTL?= ${DESTDIR}/usr/lib/libintl.a 45 LIBIPSEC?= ${DESTDIR}/usr/lib/libipsec.a 46 LIBKADM?= ${DESTDIR}/usr/lib/libkadm.a 47 LIBKADM5CLNT?= ${DESTDIR}/usr/lib/libkadm5clnt.a 48 LIBKADM5SRV?= ${DESTDIR}/usr/lib/libkadm5srv.a 49 LIBKAFS?= ${DESTDIR}/usr/lib/libkafs.a 50 LIBKDB?= ${DESTDIR}/usr/lib/libkdb.a 51 LIBKRB?= ${DESTDIR}/usr/lib/libkrb.a 52 LIBKRB5?= ${DESTDIR}/usr/lib/libkrb5.a 53 LIBKSTREAM?= ${DESTDIR}/usr/lib/libkstream.a 54 LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a 55 LIBL?= ${DESTDIR}/usr/lib/libl.a 56 LIBM?= ${DESTDIR}/usr/lib/libm.a 57 LIBMENU?= ${DESTDIR}/usr/lib/libmenu.a 58 LIBOBJC?= ${DESTDIR}/usr/lib/libobjc.a 59 LIBOSSAUDIO?= ${DESTDIR}/usr/lib/libossaudio.a 60 LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a 61 LIBPCI?= ${DESTDIR}/usr/lib/libpci.a 62 LIBPOSIX?= ${DESTDIR}/usr/lib/libposix.a 63 LIBRESOLV?= ${DESTDIR}/usr/lib/libresolv.a 64 LIBRMT?= ${DESTDIR}/usr/lib/librmt.a 65 LIBROKEN?= ${DESTDIR}/usr/lib/libroken.a 66 LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a 67 LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 68 LIBSS?= ${DESTDIR}/usr/lib/libss.a 69 LIBSSL?= ${DESTDIR}/usr/lib/libssl.a 70 LIBSL?= ${DESTDIR}/usr/lib/libsl.a 71 LIBTERMCAP?= ${DESTDIR}/usr/lib/libtermcap.a 72 LIBTELNET?= ${DESTDIR}/usr/lib/libtelnet.a 73 LIBUSB?= ${DESTDIR}/usr/lib/libusb.a 74 LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a 75 LIBWRAP?= ${DESTDIR}/usr/lib/libwrap.a 76 LIBY?= ${DESTDIR}/usr/lib/liby.a 77 LIBZ?= ${DESTDIR}/usr/lib/libz.a 78 79 ##### Build and install rules 80 .if defined(SHAREDSTRINGS) 81 CLEANFILES+=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) 102 SRCS?= ${PROG}.c 103 104 DPSRCS+= ${SRCS:M*.[ly]:C/..$/.c/} 105 CLEANFILES+= ${DPSRCS} ${YHEADER:D${SRCS:M*.y:.y=.h}} 106 107 .if !empty(SRCS:N*.h:N*.sh:N*.fth) 108 OBJS+= ${SRCS:N*.h:N*.sh:N*.fth:R:S/$/.o/g} 109 LOBJS+= ${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) 133 MAN= ${PROG}.1 134 .endif # !defined(MAN) 135 .endif # defined(PROG) 136 137 realall: ${PROG} ${SCRIPTS} 138 139 cleanprog: cleanobjs cleanextra 140 rm -f a.out [Ee]rrs mklog core *.core ${PROG} 141 142 cleanobjs: 143 .if defined(OBJS) && !empty(OBJS) 144 rm -f ${OBJS} ${LOBJS} 145 .endif 146 147 cleanextra: 148 .if defined(CLEANFILES) && !empty(CLEANFILES) 149 rm -f ${CLEANFILES} 150 .endif 151 152 .if defined(SRCS) && !target(afterdepend) 153 afterdepend: .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) 161 PROGNAME?=${PROG} 162 163 proginstall:: ${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) 180 proginstall:: 181 .endif 182 183 .if defined(SCRIPTS) && !target(scriptsinstall) 184 SCRIPTSDIR?=${BINDIR} 185 SCRIPTSOWN?=${BINOWN} 186 SCRIPTSGRP?=${BINGRP} 187 SCRIPTSMODE?=${BINMODE} 188 189 scriptsinstall:: ${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) 211 scriptsinstall:: 212 .endif 213 214 lint: ${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