Home | History | Annotate | Line # | Download | only in mk
bsd.prog.mk revision 1.154
      1 #	$NetBSD: bsd.prog.mk,v 1.154 2002/02/11 21:15:01 mycroft 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 .ifndef LIBCRTBEGIN
     19 LIBCRTBEGIN=	${DESTDIR}/usr/lib/crtbegin.o
     20 .MADE: ${LIBCRTBEGIN}
     21 .endif
     22 .ifndef LIBCRTEND
     23 LIBCRTEND=	${DESTDIR}/usr/lib/crtend.o
     24 .MADE: ${LIBCRTEND}
     25 .endif
     26 _SHLINKER=	${SHLINKDIR}/ld.elf_so
     27 .else
     28 LIBCRTBEGIN?=
     29 LIBCRTEND?=
     30 _SHLINKER=	${SHLINKDIR}/ld.so
     31 .endif
     32 
     33 .ifndef LIBCRT0
     34 LIBCRT0=	${DESTDIR}/usr/lib/crt0.o
     35 .MADE: ${LIBCRT0}
     36 .endif
     37 
     38 ##### Installed system library definitions
     39 #     E.g. LIBC?=${DESTDIR}/usr/lib/libc.a
     40 #     etc..
     41 #
     42 __bsd_prog_mk_system_libs?= \
     43 	BZ2 C C_PIC CDK COM_ERR COMPAT CRYPT CRYPTO CRYPTO_RC5 CRYPTO_IDEA \
     44 	CURSES DBM DES EDIT FORM GCC GNUMALLOC GSSAPI HDB INTL IPSEC \
     45 	KADM KADM5CLNT KADM5SRV KAFS KDB KRB KRB5 KSTREAM KVM L M MENU \
     46 	OBJC OSSAUDIO PCAP PCI POSIX RESOLV RMT ROKEN RPCSVC SKEY SS SSL SL \
     47 	TERMCAP TELNET USBHID UTIL WRAP Y Z
     48 
     49 .for _n in ${__bsd_prog_mk_system_libs}
     50 .ifndef LIB${_n}
     51 LIB${_n}= ${DESTDIR}/usr/lib/lib${_n:tl}.a
     52 # XXX - note that ${DESTDIR} will expanded in the following rule
     53 .MADE: ${LIB${_n}}
     54 .endif
     55 .endfor
     56 .undef __bsd_prog_mk_system_libs
     57 
     58 ##### Build and install rules
     59 .if defined(SHAREDSTRINGS)
     60 CLEANFILES+=strings
     61 .c.o:
     62 	${CC} -E ${CFLAGS} ${.IMPSRC} | xstr -c -
     63 	@${CC} ${CFLAGS} -c x.c -o ${.TARGET}
     64 	@rm -f x.c
     65 
     66 .cc.o:
     67 	${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
     68 	@mv -f x.c x.cc
     69 	@${CXX} ${CXXFLAGS} -c x.cc -o ${.TARGET}
     70 	@rm -f x.cc
     71 
     72 .C.o:
     73 	${CXX} -E ${CXXFLAGS} ${.IMPSRC} | xstr -c -
     74 	@mv -f x.c x.C
     75 	@${CXX} ${CXXFLAGS} -c x.C -o ${.TARGET}
     76 	@rm -f x.C
     77 .endif
     78 
     79 .if defined(PROG_CXX)
     80 PROG=	${PROG_CXX}
     81 .endif
     82 
     83 .if defined(PROG)
     84 .if defined(PROG_CXX)
     85 SRCS?=		${PROG}.cc
     86 .else
     87 SRCS?=		${PROG}.c
     88 .endif
     89 
     90 DPSRCS+=	${SRCS:M*.[ly]:C/\..$/.c/}
     91 CLEANFILES+=	${DPSRCS} ${YHEADER:D${SRCS:M*.y:.y=.h}}
     92 
     93 .if !empty(SRCS:N*.h:N*.sh:N*.fth)
     94 OBJS+=		${SRCS:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
     95 LOBJS+=		${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
     96 .endif
     97 
     98 .if defined(OBJS) && !empty(OBJS)
     99 .NOPATH: ${OBJS} ${PROG} ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}}
    100 
    101 _PROGLDOPTS=
    102 .if ${SHLINKDIR} != "/usr/libexec"	# XXX: change or remove if ld.so moves
    103 _PROGLDOPTS+=	-Wl,-dynamic-linker=${_SHLINKER}
    104 .endif
    105 .if ${SHLIBDIR} != ${LIBDIR}
    106 _PROGLDOPTS+=	-Wl,-rpath-link,${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib \
    107 		-Wl,-rpath,${SHLIBDIR}:/usr/lib \
    108 		-L${DESTDIR}${SHLIBDIR}
    109 .endif
    110 
    111 .if defined(PROG_CXX)
    112 _CCLINK=	${CXX}
    113 _SUPCXX=	-lstdc++ -lm
    114 .else
    115 _CCLINK=	${CC}
    116 .endif
    117 
    118 .if defined(DESTDIR)
    119 
    120 ${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
    121 .if !commands(${PROG})
    122 	${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} -nostdlib ${_PROGLDOPTS} ${LIBCRT0} ${LIBCRTBEGIN} ${OBJS} ${LDADD} -L${DESTDIR}/usr/lib ${_SUPCXX} -lgcc -lc -lgcc ${LIBCRTEND}
    123 .endif
    124 
    125 .else
    126 
    127 ${PROG}: ${LIBCRT0} ${DPSRCS} ${OBJS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
    128 .if !commands(${PROG})
    129 	${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${_PROGLDOPTS} ${OBJS} ${LDADD}
    130 .endif
    131 
    132 .endif	# defined(DESTDIR)
    133 .endif	# defined(OBJS) && !empty(OBJS)
    134 
    135 .if !defined(MAN)
    136 MAN=	${PROG}.1
    137 .endif	# !defined(MAN)
    138 .endif	# defined(PROG)
    139 
    140 realall: ${PROG} ${SCRIPTS}
    141 
    142 cleanprog: cleanobjs cleanextra
    143 	rm -f a.out [Ee]rrs mklog core *.core ${PROG}
    144 
    145 cleanobjs:
    146 .if defined(OBJS) && !empty(OBJS)
    147 	rm -f ${OBJS} ${LOBJS}
    148 .endif
    149 
    150 cleanextra:
    151 .if defined(CLEANFILES) && !empty(CLEANFILES)
    152 	rm -f ${CLEANFILES}
    153 .endif
    154 
    155 .if defined(SRCS) && !target(afterdepend)
    156 afterdepend: .depend
    157 	@(TMP=/tmp/_depend$$$$; \
    158 	    sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.ln:/' \
    159 	      < .depend > $$TMP; \
    160 	    mv $$TMP .depend)
    161 .endif
    162 
    163 .if defined(PROG) && !target(proginstall)
    164 PROGNAME?=${PROG}
    165 
    166 proginstall:: ${DESTDIR}${BINDIR}/${PROGNAME}
    167 .PRECIOUS: ${DESTDIR}${BINDIR}/${PROGNAME}
    168 
    169 __proginstall: .USE
    170 	${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
    171 		${STRIPFLAG} ${.ALLSRC} ${.TARGET}
    172 
    173 .if !defined(UPDATE)
    174 ${DESTDIR}${BINDIR}/${PROGNAME}! ${PROG} __proginstall
    175 .if !defined(BUILD) && !make(all) && !make(${PROG})
    176 ${DESTDIR}${BINDIR}/${PROGNAME}! .MADE
    177 .endif
    178 .else
    179 ${DESTDIR}${BINDIR}/${PROGNAME}: ${PROG} __proginstall
    180 .if !defined(BUILD) && !make(all) && !make(${PROG})
    181 ${DESTDIR}${BINDIR}/${PROGNAME}: .MADE
    182 .endif
    183 .endif
    184 .endif
    185 
    186 .if !target(proginstall)
    187 proginstall::
    188 .endif
    189 
    190 .if defined(SCRIPTS) && !target(scriptsinstall)
    191 SCRIPTSDIR?=${BINDIR}
    192 SCRIPTSOWN?=${BINOWN}
    193 SCRIPTSGRP?=${BINGRP}
    194 SCRIPTSMODE?=${BINMODE}
    195 
    196 scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
    197 .PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
    198 
    199 __scriptinstall: .USE
    200 	${INSTALL_FILE} \
    201 	    -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
    202 	    -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
    203 	    -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
    204 	    ${.ALLSRC} ${.TARGET}
    205 
    206 .for S in ${SCRIPTS:O:u}
    207 .if !defined(UPDATE)
    208 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
    209 .if !defined(BUILD) && !make(all) && !make(${S})
    210 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
    211 .endif
    212 .else
    213 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
    214 .if !defined(BUILD) && !make(all) && !make(${S})
    215 ${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
    216 .endif
    217 .endif
    218 .endfor
    219 .endif
    220 
    221 .if !target(scriptsinstall)
    222 scriptsinstall::
    223 .endif
    224 
    225 lint: ${LOBJS}
    226 .if defined(LOBJS) && !empty(LOBJS)
    227 	${LINT} ${LINTFLAGS} ${LDFLAGS:M-L*} ${LOBJS} ${LDADD}
    228 .endif
    229 
    230 ##### Pull in related .mk logic
    231 .include <bsd.man.mk>
    232 .include <bsd.nls.mk>
    233 .include <bsd.files.mk>
    234 .include <bsd.inc.mk>
    235 .include <bsd.links.mk>
    236 .include <bsd.dep.mk>
    237 .include <bsd.sys.mk>
    238 
    239 ${TARGETS}:	# ensure existence
    240