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