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