xref: /minix3/share/mk/bsd.prog.mk (revision 3ea34559da8fa266962c2de5431eb8c3911c9d81)
10a6a1f1dSLionel Sambuc#	$NetBSD: bsd.prog.mk,v 1.292 2015/06/07 15:04:28 matt Exp $
2e1091647SArun Thomas#	@(#)bsd.prog.mk	8.2 (Berkeley) 4/2/94
3e1091647SArun Thomas
4e1091647SArun Thomas.ifndef HOSTPROG
5e1091647SArun Thomas
6e1091647SArun Thomas.include <bsd.init.mk>
79152e1c5SLionel Sambuc.include <bsd.shlib.mk>
89152e1c5SLionel Sambuc.include <bsd.gcc.mk>
9b8a678efSLionel Sambuc.include <minix.gcov.mk>
109152e1c5SLionel Sambuc
11e1091647SArun Thomas#
12e1091647SArun Thomas# Definitions and targets shared among all programs built by a single
13e1091647SArun Thomas# Makefile.
14e1091647SArun Thomas#
15e1091647SArun Thomas
16e1091647SArun Thomas##### Basic targets
17e1091647SArun Thomasrealinstall:	proginstall scriptsinstall
18e1091647SArun Thomas
199152e1c5SLionel Sambuc.gdbinit:
209152e1c5SLionel Sambuc	rm -f .gdbinit
219152e1c5SLionel Sambuc.if defined(DESTDIR) && !empty(DESTDIR)
229152e1c5SLionel Sambuc	echo "set solib-absolute-prefix ${DESTDIR}" > .gdbinit
239152e1c5SLionel Sambuc.else
249152e1c5SLionel Sambuc	touch .gdbinit
25e1091647SArun Thomas.endif
269152e1c5SLionel Sambuc.for __gdbinit in ${GDBINIT}
279152e1c5SLionel Sambuc	echo "source ${__gdbinit}" >> .gdbinit
289152e1c5SLionel Sambuc.endfor
299152e1c5SLionel Sambuc
309152e1c5SLionel SambucCLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit
319152e1c5SLionel Sambuc
329152e1c5SLionel Sambuc.if defined(SHAREDSTRINGS)
339152e1c5SLionel SambucCLEANFILES+=strings
349152e1c5SLionel Sambuc.c.o:
359152e1c5SLionel Sambuc	${CC} -E ${CPPFLAGS} ${CFLAGS} ${.IMPSRC} | xstr -c -
369152e1c5SLionel Sambuc	@${CC} ${CPPFLAGS} ${CFLAGS} -c x.c -o ${.TARGET}
3784d9c625SLionel Sambuc.if defined(CTFCONVERT)
3884d9c625SLionel Sambuc	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
3984d9c625SLionel Sambuc.endif
409152e1c5SLionel Sambuc	@rm -f x.c
419152e1c5SLionel Sambuc
429152e1c5SLionel Sambuc.cc.o .cpp.o .cxx.o .C.o:
439152e1c5SLionel Sambuc	${CXX} -E ${CPPFLAGS} ${CXXFLAGS} ${.IMPSRC} | xstr -c -
449152e1c5SLionel Sambuc	@mv -f x.c x.cc
459152e1c5SLionel Sambuc	@${CXX} ${CPPFLAGS} ${CXXFLAGS} -c x.cc -o ${.TARGET}
4684d9c625SLionel Sambuc.if defined(CTFCONVERT)
4784d9c625SLionel Sambuc	${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
4884d9c625SLionel Sambuc.endif
499152e1c5SLionel Sambuc	@rm -f x.cc
50e1091647SArun Thomas.endif
519152e1c5SLionel Sambuc
529152e1c5SLionel Sambuc.if defined(MKPIE) && (${MKPIE} != "no")
539152e1c5SLionel SambucCFLAGS+=	${PIE_CFLAGS}
549152e1c5SLionel SambucAFLAGS+=	${PIE_AFLAGS}
559152e1c5SLionel SambucLDFLAGS+=	${PIE_LDFLAGS}
569152e1c5SLionel Sambuc.endif
579152e1c5SLionel Sambuc
58e1091647SArun ThomasCFLAGS+=	${COPTS}
5984d9c625SLionel Sambuc.if defined(MKDEBUG) && (${MKDEBUG} != "no")
6084d9c625SLionel SambucCFLAGS+=	-g
6184d9c625SLionel Sambuc.endif
62e1091647SArun ThomasOBJCFLAGS+=	${OBJCOPTS}
630a6a1f1dSLionel SambucMKDEP_SUFFIXES?=	.o .ln .d
64e1091647SArun Thomas
659152e1c5SLionel Sambuc# CTF preserve debug symbols
660a6a1f1dSLionel Sambuc.if (${MKCTF:Uno} != "no") && (${CFLAGS:M-g} != "")
679152e1c5SLionel SambucCTFFLAGS+= -g
689152e1c5SLionel SambucCTFMFLAGS+= -g
690a6a1f1dSLionel Sambuc.if defined(HAVE_GCC) && ${HAVE_GCC} >= 48
700a6a1f1dSLionel Sambuc#CFLAGS+=-gdwarf-2
710a6a1f1dSLionel Sambuc.endif
729152e1c5SLionel Sambuc.endif
739152e1c5SLionel Sambuc
749152e1c5SLionel Sambuc# ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o
759152e1c5SLionel Sambuc.ifndef LIBCRTBEGIN
760a6a1f1dSLionel SambucLIBCRTBEGIN=	${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o ${_GCC_CRTBEGIN}
779152e1c5SLionel Sambuc.MADE: ${LIBCRTBEGIN}
789152e1c5SLionel Sambuc.endif
799152e1c5SLionel Sambuc.ifndef LIBCRTEND
800a6a1f1dSLionel SambucLIBCRTEND=	${_GCC_CRTEND} ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crtn.o
819152e1c5SLionel Sambuc.MADE: ${LIBCRTEND}
829152e1c5SLionel Sambuc.endif
839152e1c5SLionel Sambuc_SHLINKER=	${SHLINKDIR}/ld.elf_so
849152e1c5SLionel Sambuc
859152e1c5SLionel Sambuc.ifndef LIBCRT0
860a6a1f1dSLionel SambucLIBCRT0=	${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crt0.o
879152e1c5SLionel Sambuc.MADE: ${LIBCRT0}
889152e1c5SLionel Sambuc.endif
899152e1c5SLionel Sambuc
9084d9c625SLionel Sambuc.ifndef LIBCRTI
910a6a1f1dSLionel SambucLIBCRTI=	${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o
9284d9c625SLionel Sambuc.MADE: ${LIBCRTI}
9384d9c625SLionel Sambuc.endif
9484d9c625SLionel Sambuc
95e1091647SArun Thomas##### Installed system library definitions
96e1091647SArun Thomas#
97e1091647SArun Thomas#	E.g.
98e1091647SArun Thomas#		LIBC?=${DESTDIR}/usr/lib/libc.a
99e1091647SArun Thomas#		LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a
100e1091647SArun Thomas#	etc..
1019152e1c5SLionel Sambuc#	NB:	If you are a library here, add it in bsd.README
102e1091647SArun Thomas
103e1091647SArun Thomas.for _lib in \
10411be35a1SLionel Sambuc	archive \
10584d9c625SLionel Sambuc	asn1 \
1060cdf705cSLionel Sambuc	atf_c \
1070cdf705cSLionel Sambuc	atf_cxx \
10884d9c625SLionel Sambuc	bind9 \
10984d9c625SLionel Sambuc	bluetooth \
11084d9c625SLionel Sambuc	bsdmalloc \
1110cdf705cSLionel Sambuc	bz2 \
1129152e1c5SLionel Sambuc	c \
1130cdf705cSLionel Sambuc	c_pic \
11484d9c625SLionel Sambuc	com_err \
11584d9c625SLionel Sambuc	compat \
1160cdf705cSLionel Sambuc	crypt \
11784d9c625SLionel Sambuc	crypto \
11884d9c625SLionel Sambuc	crypto_idea \
11984d9c625SLionel Sambuc	crypto_mdc2 \
12084d9c625SLionel Sambuc	crypto_rc5 \
1219152e1c5SLionel Sambuc	curses \
12284d9c625SLionel Sambuc	dbm \
12384d9c625SLionel Sambuc	des \
12484d9c625SLionel Sambuc	dns \
1259152e1c5SLionel Sambuc	edit \
12684d9c625SLionel Sambuc	event \
1279152e1c5SLionel Sambuc	expat \
12884d9c625SLionel Sambuc	fetch \
12984d9c625SLionel Sambuc	fl \
13084d9c625SLionel Sambuc	form \
13184d9c625SLionel Sambuc	g2c \
13284d9c625SLionel Sambuc	gcc \
13384d9c625SLionel Sambuc	gnumalloc \
13484d9c625SLionel Sambuc	gssapi \
13584d9c625SLionel Sambuc	hdb \
13684d9c625SLionel Sambuc	heimbase \
13784d9c625SLionel Sambuc	heimntlm \
13884d9c625SLionel Sambuc	hx509 \
13984d9c625SLionel Sambuc	intl \
14084d9c625SLionel Sambuc	ipsec \
14184d9c625SLionel Sambuc	isc \
14284d9c625SLionel Sambuc	isccc \
14384d9c625SLionel Sambuc	isccfg \
14484d9c625SLionel Sambuc	kadm5clnt \
14584d9c625SLionel Sambuc	kadm5srv \
14684d9c625SLionel Sambuc	kafs \
14784d9c625SLionel Sambuc	krb5 \
14884d9c625SLionel Sambuc	kvm \
1499152e1c5SLionel Sambuc	l \
15084d9c625SLionel Sambuc	lber \
15184d9c625SLionel Sambuc	ldap \
15284d9c625SLionel Sambuc	ldap_r \
15311be35a1SLionel Sambuc	lua \
15484d9c625SLionel Sambuc	lwres \
1559152e1c5SLionel Sambuc	m \
1560cdf705cSLionel Sambuc	magic \
15784d9c625SLionel Sambuc	menu \
15811be35a1SLionel Sambuc	objc \
15984d9c625SLionel Sambuc	ossaudio \
16084d9c625SLionel Sambuc	pam \
16184d9c625SLionel Sambuc	pcap \
16284d9c625SLionel Sambuc	pci \
16384d9c625SLionel Sambuc	pmc \
16484d9c625SLionel Sambuc	posix \
16584d9c625SLionel Sambuc	pthread \
16684d9c625SLionel Sambuc	pthread_dbg \
16784d9c625SLionel Sambuc	puffs \
16884d9c625SLionel Sambuc	quota \
16984d9c625SLionel Sambuc	radius \
17084d9c625SLionel Sambuc	resolv \
1710cdf705cSLionel Sambuc	rmt \
17284d9c625SLionel Sambuc	roken \
17384d9c625SLionel Sambuc	rpcsvc \
17484d9c625SLionel Sambuc	rt \
17584d9c625SLionel Sambuc	rump \
17684d9c625SLionel Sambuc	rumpfs_cd9660fs \
17784d9c625SLionel Sambuc	rumpfs_efs \
17884d9c625SLionel Sambuc	rumpfs_ext2fs \
17984d9c625SLionel Sambuc	rumpfs_ffs \
18084d9c625SLionel Sambuc	rumpfs_hfs \
18184d9c625SLionel Sambuc	rumpfs_lfs \
18284d9c625SLionel Sambuc	rumpfs_msdosfs \
18384d9c625SLionel Sambuc	rumpfs_nfs \
18484d9c625SLionel Sambuc	rumpfs_ntfs \
18584d9c625SLionel Sambuc	rumpfs_syspuffs \
18684d9c625SLionel Sambuc	rumpfs_tmpfs \
18784d9c625SLionel Sambuc	rumpfs_udf \
18884d9c625SLionel Sambuc	rumpfs_ufs \
18984d9c625SLionel Sambuc	rumpuser \
19084d9c625SLionel Sambuc	saslc \
19184d9c625SLionel Sambuc	skey \
19284d9c625SLionel Sambuc	sl \
19311be35a1SLionel Sambuc	sqlite3 \
19484d9c625SLionel Sambuc	ss \
19584d9c625SLionel Sambuc	ssh \
19684d9c625SLionel Sambuc	ssl \
19784d9c625SLionel Sambuc	ssp \
19811be35a1SLionel Sambuc	stdcxx \
19984d9c625SLionel Sambuc	supcxx \
2000cdf705cSLionel Sambuc	terminfo \
20184d9c625SLionel Sambuc	tre \
20284d9c625SLionel Sambuc	usbhid \
2030cdf705cSLionel Sambuc	util \
20484d9c625SLionel Sambuc	wind \
20584d9c625SLionel Sambuc	wrap \
20684d9c625SLionel Sambuc	y \
2070cdf705cSLionel Sambuc	z
2080cdf705cSLionel Sambuc
2090cdf705cSLionel Sambuc.ifndef LIB${_lib:tu}
2100cdf705cSLionel SambucLIB${_lib:tu}=	${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a
2110cdf705cSLionel Sambuc.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
2120cdf705cSLionel Sambuc.endif
2130cdf705cSLionel Sambuc.endfor
2140cdf705cSLionel Sambuc
2150cdf705cSLionel Sambuc# Minix libraries
2160cdf705cSLionel Sambuc.for _lib in \
2170cdf705cSLionel Sambuc	audiodriver \
2180cdf705cSLionel Sambuc	bdev \
2190cdf705cSLionel Sambuc	blockdriver \
2200cdf705cSLionel Sambuc	chardriver \
22187d31b06SDavid van Moolenbroek	clkconf \
22287d31b06SDavid van Moolenbroek	ddekit \
22387d31b06SDavid van Moolenbroek	ddekit_usb_client \
22487d31b06SDavid van Moolenbroek	ddekit_usb_server \
22587d31b06SDavid van Moolenbroek	devman \
2260cdf705cSLionel Sambuc	elf \
2279152e1c5SLionel Sambuc	exec \
22889c9de7dSDavid van Moolenbroek	fsdriver \
22987d31b06SDavid van Moolenbroek	gpio \
23087d31b06SDavid van Moolenbroek	hgfs \
23187d31b06SDavid van Moolenbroek	i2cdriver \
23287d31b06SDavid van Moolenbroek	inputdriver \
23387d31b06SDavid van Moolenbroek	lwip \
2349152e1c5SLionel Sambuc	minc \
23587d31b06SDavid van Moolenbroek	minixfs \
236d3d33afeSLionel Sambuc	mthread \
2370cdf705cSLionel Sambuc	netdriver \
2380cdf705cSLionel Sambuc	sffs \
23985723df0SDavid van Moolenbroek	sockdriver \
240*4c27a833SDavid van Moolenbroek	sockevent \
2410cdf705cSLionel Sambuc	sys \
2420cdf705cSLionel Sambuc	timers \
24387d31b06SDavid van Moolenbroek	usb \
24487d31b06SDavid van Moolenbroek	vboxfs \
24587d31b06SDavid van Moolenbroek	virtio \
24687d31b06SDavid van Moolenbroek	vtreefs
247e1091647SArun Thomas.ifndef LIB${_lib:tu}
2489152e1c5SLionel SambucLIB${_lib:tu}=	${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a
249e1091647SArun Thomas.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
250e1091647SArun Thomas.endif
251e1091647SArun Thomas.endfor
252e1091647SArun Thomas
2539152e1c5SLionel Sambuc# PAM applications, if linked statically, need more libraries
2549152e1c5SLionel Sambuc.if (${MKPIC} == "no")
2559152e1c5SLionel Sambuc.if (${MKCRYPTO} != "no")
2569152e1c5SLionel SambucPAM_STATIC_LDADD+= -lssh
2579152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBSSH}
2589152e1c5SLionel Sambuc.endif
2599152e1c5SLionel Sambuc.if (${MKKERBEROS} != "no")
2609152e1c5SLionel SambucPAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \
2619152e1c5SLionel Sambuc	-lroken -lcom_err -lheimbase -lcrypto
2629152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \
2639152e1c5SLionel Sambuc	${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO}
2649152e1c5SLionel Sambuc.endif
2659152e1c5SLionel Sambuc.if (${MKSKEY} != "no")
2669152e1c5SLionel SambucPAM_STATIC_LDADD+= -lskey
2679152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBSKEY}
2689152e1c5SLionel Sambuc.endif
2699152e1c5SLionel SambucPAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil
2709152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL}
2719152e1c5SLionel Sambuc.else
2729152e1c5SLionel SambucPAM_STATIC_LDADD=
2739152e1c5SLionel SambucPAM_STATIC_DPADD=
274e1091647SArun Thomas.endif
275e1091647SArun Thomas
27684d9c625SLionel Sambuc.if defined(__MINIX) && ${MACHINE_ARCH} == "earm"
27784d9c625SLionel Sambuc# LSC: On ARM, when compiling statically, with gcc, lgcc_eh is required
27884d9c625SLionel SambucLDFLAGS+= ${${ACTIVE_CC} == "gcc":? -lgcc_eh:}
27984d9c625SLionel Sambuc.endif # defined(__MINIX) && ${MACHINE_ARCH} == "earm"
28084d9c625SLionel Sambuc
2819152e1c5SLionel Sambuc#	NB:	If you are a library here, add it in bsd.README
282e1091647SArun Thomas.for _lib in \
2839152e1c5SLionel Sambuc	FS \
2849152e1c5SLionel Sambuc	GL \
2859152e1c5SLionel Sambuc	GLU \
2869152e1c5SLionel Sambuc	ICE \
2879152e1c5SLionel Sambuc	SM \
2889152e1c5SLionel Sambuc	X11 \
2899152e1c5SLionel Sambuc	XTrap \
2909152e1c5SLionel Sambuc	Xau \
2919152e1c5SLionel Sambuc	Xaw \
2929152e1c5SLionel Sambuc	Xdmcp \
2939152e1c5SLionel Sambuc	Xext \
2949152e1c5SLionel Sambuc	Xfont \
2959152e1c5SLionel Sambuc	Xft \
2969152e1c5SLionel Sambuc	Xi \
2979152e1c5SLionel Sambuc	Xinerama \
2989152e1c5SLionel Sambuc	Xmu \
2999152e1c5SLionel Sambuc	Xmuu \
3009152e1c5SLionel Sambuc	Xpm \
3019152e1c5SLionel Sambuc	Xrandr \
3029152e1c5SLionel Sambuc	Xrender \
3039152e1c5SLionel Sambuc	Xss \
3049152e1c5SLionel Sambuc	Xt \
3059152e1c5SLionel Sambuc	Xtst \
3069152e1c5SLionel Sambuc	Xv \
3079152e1c5SLionel Sambuc	Xxf86dga \
3089152e1c5SLionel Sambuc	Xxf86misc \
3099152e1c5SLionel Sambuc	Xxf86vm \
3109152e1c5SLionel Sambuc	dps \
3119152e1c5SLionel Sambuc	fntstubs \
3129152e1c5SLionel Sambuc	fontcache \
3139152e1c5SLionel Sambuc	fontconfig \
3149152e1c5SLionel Sambuc	fontenc \
3159152e1c5SLionel Sambuc	freetype \
3169152e1c5SLionel Sambuc	lbxutil \
3179152e1c5SLionel Sambuc	xkbfile
318e1091647SArun Thomas.ifndef LIB${_lib:tu}
319e1091647SArun ThomasLIB${_lib:tu}=	${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a
320e1091647SArun Thomas.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
321e1091647SArun Thomas.endif
322e1091647SArun Thomas.endfor
323e1091647SArun Thomas
32484d9c625SLionel Sambuc# Ugly one-offs
32584d9c625SLionel SambucLIBX11_XCB=	${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a
32684d9c625SLionel SambucLIBXCB=	${DESTDIR}${X11USRLIBDIR}/libxcb.a
32784d9c625SLionel Sambuc
328e1091647SArun Thomas.if defined(RESCUEDIR)
329e1091647SArun ThomasCPPFLAGS+=	-DRESCUEDIR=\"${RESCUEDIR}\"
330e1091647SArun Thomas.endif
331e1091647SArun Thomas
3329152e1c5SLionel Sambuc_PROGLDOPTS=
3339152e1c5SLionel Sambuc.if ${SHLINKDIR} != "/usr/libexec"	# XXX: change or remove if ld.so moves
3349152e1c5SLionel Sambuc_PROGLDOPTS+=	-Wl,-dynamic-linker=${_SHLINKER}
3359152e1c5SLionel Sambuc.endif
3369152e1c5SLionel Sambuc.if ${SHLIBDIR} != "/usr/lib"
3379152e1c5SLionel Sambuc_PROGLDOPTS+=	-Wl,-rpath,${SHLIBDIR} \
3389152e1c5SLionel Sambuc		-L=${SHLIBDIR}
3399152e1c5SLionel Sambuc.elif ${SHLIBINSTALLDIR} != "/usr/lib"
3409152e1c5SLionel Sambuc_PROGLDOPTS+=	-Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \
3419152e1c5SLionel Sambuc		-L=${SHLIBINSTALLDIR}
3429152e1c5SLionel Sambuc.endif
3439152e1c5SLionel Sambuc
344e1091647SArun Thomas__proginstall: .USE
345e1091647SArun Thomas	${_MKTARGET_INSTALL}
346e1091647SArun Thomas	${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
347ff569068SArun Thomas		${STRIPFLAG} ${.ALLSRC} ${.TARGET}
348e1091647SArun Thomas
3499152e1c5SLionel Sambuc__progrumpinstall: .USE
3509152e1c5SLionel Sambuc	${_MKTARGET_INSTALL}
3519152e1c5SLionel Sambuc	${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \
3529152e1c5SLionel Sambuc		${STRIPFLAG} ${.ALLSRC} ${.TARGET}
3539152e1c5SLionel Sambuc
354e1091647SArun Thomas__progdebuginstall: .USE
355e1091647SArun Thomas	${_MKTARGET_INSTALL}
356e1091647SArun Thomas	${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \
357ff569068SArun Thomas		${.ALLSRC} ${.TARGET}
358e1091647SArun Thomas
359e1091647SArun Thomas
360e1091647SArun Thomas
361e1091647SArun Thomas#
362e1091647SArun Thomas# Backwards compatibility with Makefiles that assume that bsd.prog.mk
363e1091647SArun Thomas# can only build a single binary.
364e1091647SArun Thomas#
365e1091647SArun Thomas
366e1091647SArun Thomas_APPEND_MANS=yes
367e1091647SArun Thomas_APPEND_SRCS=yes
368e1091647SArun Thomas
369e1091647SArun Thomas_CCLINKFLAGS=
370e1091647SArun Thomas
371e1091647SArun Thomas.if defined(PROG_CXX)
372e1091647SArun ThomasPROG=		${PROG_CXX}
373e1091647SArun Thomas_CCLINK=	${CXX} ${_CCLINKFLAGS}
37418e90974SBen Gras
37518e90974SBen Gras.if defined(__MINIX)
37618e90974SBen Gras# BJG - stack unwinding (for C++ exceptions) doesn't work on static executables when built with llvm.
37718e90974SBen GrasLDSTATIC=	-dynamic
37818e90974SBen Gras.endif # defined(__MINIX)
379e1091647SArun Thomas.endif
380e1091647SArun Thomas
3819152e1c5SLionel Sambuc.if defined(RUMPPRG)
3829152e1c5SLionel SambucPROG=			${RUMPPRG}
3839152e1c5SLionel Sambuc. ifndef CRUNCHEDPROG
3849152e1c5SLionel Sambuc.  if (${MKRUMP} != "no")
3859152e1c5SLionel SambucPROGS=			${RUMPPRG} rump.${RUMPPRG}
3869152e1c5SLionel Sambuc.  else
3879152e1c5SLionel SambucPROGS=			${RUMPPRG}
3889152e1c5SLionel Sambuc.  endif
3899152e1c5SLionel Sambuc.  if defined(SRCS)
3909152e1c5SLionel Sambuc.   if (${MKRUMP} != "no")
3919152e1c5SLionel SambucSRCS.rump.${PROG}:=	${SRCS} ${PROG}_rumpops.c ${RUMPSRCS}
3929152e1c5SLionel Sambuc.   endif
3939152e1c5SLionel SambucSRCS+=			${PROG}_hostops.c
3949152e1c5SLionel Sambuc.  else
3959152e1c5SLionel SambucSRCS=			${PROG}.c ${PROG}_hostops.c
3969152e1c5SLionel Sambuc.   if (${MKRUMP} != "no")
3979152e1c5SLionel SambucSRCS.rump.${PROG}=	${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS}
3989152e1c5SLionel Sambuc.   endif
3999152e1c5SLionel Sambuc.  endif
4009152e1c5SLionel Sambuc.   if (${MKRUMP} != "no")
4019152e1c5SLionel SambucDPSRCS+=		${PROG}_rumpops.c ${RUMPSRCS}
4029152e1c5SLionel SambucLDADD.rump.${PROG}+=	-lrumpclient
4039152e1c5SLionel SambucDPADD.rump.${PROG}+=	${LIBRUMPCLIENT}
4049152e1c5SLionel SambucMAN.rump.${PROG}=	# defined but feeling empty
4059152e1c5SLionel Sambuc_RUMPINSTALL.rump.${PROG}=# defined
4069152e1c5SLionel Sambuc.   endif
4079152e1c5SLionel Sambuc. else # CRUNCHEDPROG
4089152e1c5SLionel SambucPROGS=			${PROG}
4099152e1c5SLionel SambucCPPFLAGS+=		-DCRUNCHOPS
4109152e1c5SLionel Sambuc. endif
4119152e1c5SLionel Sambuc.endif
4129152e1c5SLionel Sambuc
413e1091647SArun Thomas.if defined(PROG)
414e1091647SArun Thomas_CCLINK?=	${CC} ${_CCLINKFLAGS}
415e1091647SArun Thomas.  if defined(MAN)
416e1091647SArun ThomasMAN.${PROG}=	${MAN}
417e1091647SArun Thomas_APPEND_MANS=	no
418e1091647SArun Thomas.  endif
419e1091647SArun Thomas.  if !defined(OBJS)
420e1091647SArun ThomasOBJS=		${OBJS.${PROG}}
421e1091647SArun Thomas.  endif
422e1091647SArun Thomas.  if defined(PROGNAME)
423e1091647SArun ThomasPROGNAME.${PROG}=	${PROGNAME}
424e1091647SArun Thomas.  endif
425e1091647SArun Thomas.  if defined(SRCS)
426e1091647SArun ThomasSRCS.${PROG}=	${SRCS}
427e1091647SArun Thomas_APPEND_SRCS=	no
428e1091647SArun Thomas.  endif
429e1091647SArun Thomas.endif
430e1091647SArun Thomas
431e1091647SArun Thomas# Turn the single-program PROG and PROG_CXX variables into their multi-word
432e1091647SArun Thomas# counterparts, PROGS and PROGS_CXX.
4339152e1c5SLionel Sambuc.if !defined(RUMPPRG)
434e1091647SArun Thomas.  if defined(PROG_CXX) && !defined(PROGS_CXX)
435e1091647SArun ThomasPROGS_CXX=	${PROG_CXX}
436e1091647SArun Thomas.  elif defined(PROG) && !defined(PROGS)
437e1091647SArun ThomasPROGS=		${PROG}
438e1091647SArun Thomas.  endif
4399152e1c5SLionel Sambuc.endif
440e1091647SArun Thomas
44184d9c625SLionel Sambuc##### Libraries that this may depend upon.
44284d9c625SLionel Sambuc.if defined(PROGDPLIBS) 						# {
44384d9c625SLionel Sambuc.for _lib _dir in ${PROGDPLIBS}
44484d9c625SLionel Sambuc.if !defined(BINDO.${_lib})
44584d9c625SLionel SambucPROGDO.${_lib}!=	cd "${_dir}" && ${PRINTOBJDIR}
44684d9c625SLionel Sambuc.MAKEOVERRIDES+=PROGDO.${_lib}
44784d9c625SLionel Sambuc.endif
44884d9c625SLionel SambucLDADD+=		-L${PROGDO.${_lib}} -l${_lib}
44984d9c625SLionel Sambuc.if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a)
45084d9c625SLionel SambucDPADD+=		${PROGDO.${_lib}}/lib${_lib}_pic.a
45184d9c625SLionel Sambuc.elif exists(${PROGDO.${_lib}}/lib${_lib}.so)
45284d9c625SLionel SambucDPADD+=		${PROGDO.${_lib}}/lib${_lib}.so
45384d9c625SLionel Sambuc.else
45484d9c625SLionel SambucDPADD+=		${PROGDO.${_lib}}/lib${_lib}.a
45584d9c625SLionel Sambuc.endif
45684d9c625SLionel Sambuc.endfor
45784d9c625SLionel Sambuc.endif									# }
458e1091647SArun Thomas#
459e1091647SArun Thomas# Per-program definitions and targets.
460e1091647SArun Thomas#
461e1091647SArun Thomas
4629152e1c5SLionel Sambuc_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS}
463e1091647SArun Thomas# Definitions specific to C programs.
464e1091647SArun Thomas.for _P in ${PROGS}
465e1091647SArun ThomasSRCS.${_P}?=	${_P}.c
466e1091647SArun Thomas_CCLINK.${_P}=	${CC} ${_CCLINKFLAGS}
4679152e1c5SLionel Sambuc_CFLAGS.${_P}=	${CFLAGS} ${CPUFLAGS}
4689152e1c5SLionel Sambuc_CPPFLAGS.${_P}=	${CPPFLAGS}
4699152e1c5SLionel Sambuc_COPTS.${_P}=	${COPTS}
470e1091647SArun Thomas.endfor
471e1091647SArun Thomas
4729152e1c5SLionel Sambuc_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS}
473e1091647SArun Thomas# Definitions specific to C++ programs.
474e1091647SArun Thomas.for _P in ${PROGS_CXX}
475e1091647SArun ThomasSRCS.${_P}?=	${_P}.cc
476e1091647SArun Thomas_CCLINK.${_P}=	${CXX} ${_CCLINKFLAGS}
477e1091647SArun Thomas.endfor
478e1091647SArun Thomas
479e1091647SArun Thomas# Language-independent definitions.
4804684ddb6SLionel Sambuc.if defined(__MINIX)
4814684ddb6SLionel Sambuc.if ${USE_BITCODE:Uno} == "yes"
4822e304675SAnton KuijstenCFLAGS+= -flto
4834684ddb6SLionel Sambuc.endif # ${USE_BITCODE:Uno} == "yes"
4842e304675SAnton Kuijsten
4854684ddb6SLionel Sambuc.if ${USE_BITCODE:Uyes} == "no"
4864684ddb6SLionel Sambuc#LSC Gold linker seems to require the library directory to be set up if
4874684ddb6SLionel Sambuc#    a sysroot parameter has been given.
4884684ddb6SLionel SambucLDFLAGS+= -L ${DESTDIR}/usr/lib
4894684ddb6SLionel Sambuc.endif # ${USE_BITCODE:U} == "no"
4904684ddb6SLionel Sambuc.endif # defined(__MINIX)
49184d9c625SLionel Sambuc
49284d9c625SLionel Sambuc.for _P in ${PROGS} ${PROGS_CXX}					# {
49384d9c625SLionel Sambuc
494e1091647SArun ThomasBINDIR.${_P}?=		${BINDIR}
495e1091647SArun ThomasPROGNAME.${_P}?=	${_P}
496e1091647SArun Thomas
4979152e1c5SLionel Sambuc.if ${MKDEBUG} != "no" && !commands(${_P})
498e1091647SArun Thomas_PROGDEBUG.${_P}:=	${PROGNAME.${_P}}.debug
499e1091647SArun Thomas.endif
500e1091647SArun Thomas
5019152e1c5SLionel Sambuc.if defined(PAXCTL_FLAGS)
5029152e1c5SLionel SambucPAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS}
5039152e1c5SLionel Sambuc.endif
5049152e1c5SLionel Sambuc
505e1091647SArun Thomas##### PROG specific flags.
506e1091647SArun Thomas
5079152e1c5SLionel Sambuc_DPADD.${_P}=		${DPADD}    ${DPADD.${_P}}
508e1091647SArun Thomas_LDADD.${_P}=		${LDADD}    ${LDADD.${_P}}
509e1091647SArun Thomas_LDFLAGS.${_P}=		${LDFLAGS}  ${LDFLAGS.${_P}}
510e1091647SArun Thomas_LDSTATIC.${_P}=	${LDSTATIC} ${LDSTATIC.${_P}}
511e1091647SArun Thomas
512e1091647SArun Thomas##### Build and install rules
513e1091647SArun Thomas.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss])
514e1091647SArun ThomasSRCS+=		${SRCS.${_P}}	# For bsd.dep.mk
515e1091647SArun Thomas.endif
516e1091647SArun Thomas
517e1091647SArun Thomas_YPSRCS.${_P}=	${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}}
518e1091647SArun Thomas
519e1091647SArun ThomasDPSRCS+=		${_YPSRCS.${_P}}
520e1091647SArun ThomasCLEANFILES+=		${_YPSRCS.${_P}}
521e1091647SArun Thomas
522e1091647SArun Thomas.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth)
523e1091647SArun ThomasOBJS.${_P}+=	${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
524e1091647SArun ThomasLOBJS.${_P}+=	${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln}
525e1091647SArun Thomas.endif
526e1091647SArun Thomas
527e1091647SArun Thomas.if defined(OBJS.${_P}) && !empty(OBJS.${_P})			# {
528e1091647SArun Thomas.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}}
529e1091647SArun Thomas
5309152e1c5SLionel Sambuc.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \
5319152e1c5SLionel Sambuc   && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \
5329152e1c5SLionel Sambuc       || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \
5339152e1c5SLionel Sambuc   && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE))
5349152e1c5SLionel Sambuc.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g}
5359152e1c5SLionel Sambuc#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \
5369152e1c5SLionel Sambuc#     ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5}
5379152e1c5SLionel Sambuc.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \
5389152e1c5SLionel Sambuc     || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \
5399152e1c5SLionel Sambuc     || ${CXXFLAGS.$f:D5} == "5") \
5409152e1c5SLionel Sambuc    || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/}))
5419152e1c5SLionel SambucXOBJS.${_P}+=	${f:R:S/$/.o/}
5429152e1c5SLionel Sambuc.else
5439152e1c5SLionel SambucXSRCS.${_P}+=	${f}
5449152e1c5SLionel SambucNODPSRCS+=	${f}
5459152e1c5SLionel Sambuc.endif
5469152e1c5SLionel Sambuc.endfor
5479152e1c5SLionel Sambuc
54884d9c625SLionel Sambuc${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${XOBJS.${_P}} ${SRCS.${_P}} \
54984d9c625SLionel Sambuc    ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}}
5509152e1c5SLionel Sambuc	${_MKTARGET_LINK}
5519152e1c5SLionel Sambuc.if defined(DESTDIR)
5529152e1c5SLionel Sambuc	${_CCLINK.${_P}} -Wl,-nostdlib \
5539152e1c5SLionel Sambuc	    ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
5549152e1c5SLionel Sambuc	    -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \
5559152e1c5SLionel Sambuc	    -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \
5569152e1c5SLionel Sambuc	    ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
5579152e1c5SLionel Sambuc	    ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib
5589152e1c5SLionel Sambuc.else
5599152e1c5SLionel Sambuc	${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
5609152e1c5SLionel Sambuc	    -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}}
5619152e1c5SLionel Sambuc	    ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
5629152e1c5SLionel Sambuc	    ${_LDADD.${_P}}
5639152e1c5SLionel Sambuc.endif	# defined(DESTDIR)
5649152e1c5SLionel Sambuc.if defined(CTFMERGE)
5659152e1c5SLionel Sambuc	${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
5669152e1c5SLionel Sambuc.endif
5679152e1c5SLionel Sambuc.if defined(PAXCTL_FLAGS.${_P})
5689152e1c5SLionel Sambuc	${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
5699152e1c5SLionel Sambuc.endif
5709152e1c5SLionel Sambuc.if ${MKSTRIPIDENT} != "no"
5719152e1c5SLionel Sambuc	${OBJCOPY} -R .ident ${.TARGET}
5729152e1c5SLionel Sambuc.endif
5739152e1c5SLionel Sambuc
5749152e1c5SLionel SambucCLEANFILES+=	${_P}.d
5759152e1c5SLionel Sambuc.if exists(${_P}.d)
5769152e1c5SLionel Sambuc.include "${_P}.d"		# include -MD depend for program.
5779152e1c5SLionel Sambuc.endif
5789152e1c5SLionel Sambuc.else	# USE_COMBINE
5799152e1c5SLionel Sambuc
580e1091647SArun Thomas${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS}
581e1091647SArun Thomas
58284d9c625SLionel Sambuc.if defined(__MINIX) && ${USE_BITCODE:Uno} == "yes"
5832e304675SAnton KuijstenCLEANFILES+= ${_P}.opt.bcl ${_P}.bcl ${_P}.bcl.o
5842e304675SAnton Kuijsten
5855ba302fdSKoustubha BhatOPTFLAGS.${_P}?= ${OPTFLAGS}
5869f6977d2SCristiano GiuffridaBITCODE_LD_FLAGS_1ST.${_P}+= ${BITCODE_LD_FLAGS_1ST}
5879f6977d2SCristiano GiuffridaBITCODE_LD_FLAGS_2ND.${_P}+= ${BITCODE_LD_FLAGS_2ND}
5885ba302fdSKoustubha Bhat
58984d9c625SLionel Sambuc${_P}.bcl: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \
59084d9c625SLionel Sambuc    ${LIBCRTEND} ${_DPADD.${_P}}
5912e304675SAnton Kuijsten	${_MKTARGET_LINK}
5922e304675SAnton Kuijsten	${_CCLINK.${_P}} \
5932e304675SAnton Kuijsten		-o ${.TARGET} \
5942e304675SAnton Kuijsten		-nostartfiles \
5954684ddb6SLionel Sambuc		-L${DESTDIR}/usr/lib/bc \
5962e304675SAnton Kuijsten		${OBJS.${_P}} ${LLVM_LINK_ARGS} ${_LDADD.${_P}:N-shared} \
5974684ddb6SLionel Sambuc		${_LDSTATIC.${_P}} ${_PROGLDOPTS} \
5982e304675SAnton Kuijsten		-Wl,-r \
5999f6977d2SCristiano Giuffrida		${BITCODE_LD_FLAGS_1ST.${_P}} \
6004684ddb6SLionel Sambuc		-Wl,-plugin-opt=emit-llvm
6012e304675SAnton Kuijsten
6022e304675SAnton Kuijsten${_P}.opt.bcl: ${_P}.bcl ${LLVM_PASS}
6032e304675SAnton Kuijsten	${_MKTARGET_LINK}
6045ba302fdSKoustubha Bhat	${OPT} ${OPTFLAGS.${_P}} -o ${.TARGET} ${_P}.bcl
6052e304675SAnton Kuijsten
6064684ddb6SLionel Sambuc${_P}.bcl.o: ${_P}.opt.bcl
6072e304675SAnton Kuijsten	${_MKTARGET_LINK}
6084684ddb6SLionel Sambuc	${LLC} -O1 -march=x86 -mcpu=i586 -filetype=obj -o ${.TARGET} ${.ALLSRC}
6092e304675SAnton Kuijsten
6102e304675SAnton Kuijsten${_P}: ${_P}.bcl.o
6114684ddb6SLionel Sambuc.if !commands(${_P})
6122e304675SAnton Kuijsten	${_MKTARGET_LINK}
6132e304675SAnton Kuijsten	${_CCLINK.${_P}} \
6144684ddb6SLionel Sambuc		${_LDFLAGS.${_P}} \
6154684ddb6SLionel Sambuc		-L${DESTDIR}/usr/lib \
6164684ddb6SLionel Sambuc		${_LDSTATIC.${_P}} -o ${.TARGET} \
6174684ddb6SLionel Sambuc		${.TARGET}.bcl.o ${_PROGLDOPTS} ${_LDADD.${_P}} \
6189f6977d2SCristiano Giuffrida		${BITCODE_LD_FLAGS_2ND.${_P}} \
6194684ddb6SLionel Sambuc		-Wl,--allow-multiple-definition
6204684ddb6SLionel Sambuc.endif	# !commands(${_P})
6212e304675SAnton Kuijsten
6222e304675SAnton Kuijsten.else
62384d9c625SLionel Sambuc${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \
62484d9c625SLionel Sambuc    ${LIBCRTEND} ${_DPADD.${_P}}
62584d9c625SLionel Sambuc.if !commands(${_P})
626e1091647SArun Thomas	${_MKTARGET_LINK}
627e1091647SArun Thomas	${_CCLINK.${_P}} \
628e1091647SArun Thomas	    ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \
62984d9c625SLionel Sambuc	    ${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}}
6309152e1c5SLionel Sambuc.if defined(CTFMERGE)
6319152e1c5SLionel Sambuc	${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
6329152e1c5SLionel Sambuc.endif
633e1091647SArun Thomas.if defined(PAXCTL_FLAGS.${_P})
634e1091647SArun Thomas	${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
635e1091647SArun Thomas.endif
636e1091647SArun Thomas.if ${MKSTRIPIDENT} != "no"
637e1091647SArun Thomas	${OBJCOPY} -R .ident ${.TARGET}
638e1091647SArun Thomas.endif
639e1091647SArun Thomas.endif	# !commands(${_P})
64084d9c625SLionel Sambuc.endif  # defined(__MINIX) && ${USE_BITCODE:Uno} == "yes"
6419152e1c5SLionel Sambuc.endif	# USE_COMBINE
642e1091647SArun Thomas
6439152e1c5SLionel Sambuc${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}}
644e1091647SArun Thomas	${_MKTARGET_LINK}
6450a6a1f1dSLionel Sambuc	${CC} ${LDFLAGS:N-Wl,-pie} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}}
646e1091647SArun Thomas
647e1091647SArun Thomas.if defined(_PROGDEBUG.${_P})
648e1091647SArun Thomas${_PROGDEBUG.${_P}}: ${_P}
649e1091647SArun Thomas	${_MKTARGET_CREATE}
6509152e1c5SLionel Sambuc	(  ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \
6519152e1c5SLionel Sambuc	&& ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \
6529152e1c5SLionel Sambuc		--add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \
6539152e1c5SLionel Sambuc	) || (rm -f ${_PROGDEBUG.${_P}}; false)
654e1091647SArun Thomas.endif
655e1091647SArun Thomas
656e1091647SArun Thomas.endif	# defined(OBJS.${_P}) && !empty(OBJS.${_P})			# }
657e1091647SArun Thomas
658e1091647SArun Thomas.if !defined(MAN.${_P})
659e1091647SArun ThomasMAN.${_P}=	${_P}.1
660e1091647SArun Thomas.endif	# !defined(MAN.${_P})
661e1091647SArun Thomas.if !empty(_APPEND_MANS:M[Yy][Ee][Ss])
662e1091647SArun ThomasMAN+=		${MAN.${_P}}
663e1091647SArun Thomas.endif
664e1091647SArun Thomas
665e1091647SArun Thomasrealall: ${_P} ${_PROGDEBUG.${_P}}
666e1091647SArun Thomas
6679152e1c5SLionel SambucCLEANFILES+= ${_P} ${_PROGDEBUG.${_P}}
668e1091647SArun Thomas
669e1091647SArun Thomas.if defined(OBJS.${_P}) && !empty(OBJS.${_P})
6709152e1c5SLionel SambucCLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}}
671e1091647SArun Thomas.endif
672e1091647SArun Thomas
673e1091647SArun Thomas_PROG_INSTALL+=	proginstall-${_P}
674e1091647SArun Thomas
675e1091647SArun Thomas.if !target(proginstall-${_P})						# {
676e1091647SArun Thomasproginstall-${_P}::	${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
677e1091647SArun Thomas		${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
678e1091647SArun Thomas.PRECIOUS:	${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
679e1091647SArun Thomas		${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
680e1091647SArun Thomas
681e1091647SArun Thomas.if ${MKUPDATE} == "no"
6829152e1c5SLionel Sambuc.if defined(_RUMPINSTALL.${_P})
6839152e1c5SLionel Sambuc${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall
6849152e1c5SLionel Sambuc.else
685e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall
6869152e1c5SLionel Sambuc.endif
687e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
688e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE
689e1091647SArun Thomas.endif
690e1091647SArun Thomas.if defined(_PROGDEBUG.${_P})
691e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall
692e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
693e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE
694e1091647SArun Thomas.endif
695e1091647SArun Thomas.endif	#  define(_PROGDEBUG.${_P})
696e1091647SArun Thomas.else	# MKUPDATE != no
6979152e1c5SLionel Sambuc.if defined(_RUMPINSTALL.${_P})
6989152e1c5SLionel Sambuc${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall
6999152e1c5SLionel Sambuc.else
700e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall
7019152e1c5SLionel Sambuc.endif
702e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
703e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE
704e1091647SArun Thomas.endif
705e1091647SArun Thomas.if defined(_PROGDEBUG.${_P})
706e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall
707e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
708e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE
709e1091647SArun Thomas.endif
710e1091647SArun Thomas.endif	#  defined(_PROGDEBUG.${_P})
711e1091647SArun Thomas.endif	# MKUPDATE != no
712e1091647SArun Thomas
713e1091647SArun Thomas.endif	# !target(proginstall-${_P})					# }
714e1091647SArun Thomas
715e1091647SArun Thomaslint: lint-${_P}
716e1091647SArun Thomaslint-${_P}: ${LOBJS.${_P}}
717e1091647SArun Thomas.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P})
718e1091647SArun Thomas	${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[  ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}}
719e1091647SArun Thomas.endif
720e1091647SArun Thomas
721e1091647SArun Thomas.endfor # _P in ${PROGS} ${PROGS_CXX}					# }
722e1091647SArun Thomas
723e1091647SArun Thomas.if defined(OBJS) && !empty(OBJS) && \
724e1091647SArun Thomas    (empty(PROGS) && empty(PROGS_CXX))
7259152e1c5SLionel SambucCLEANFILES+= ${OBJS} ${LOBJS}
726e1091647SArun Thomas.endif
727e1091647SArun Thomas
728e1091647SArun Thomas.if !target(proginstall)
729e1091647SArun Thomasproginstall:: ${_PROG_INSTALL}
730e1091647SArun Thomas.endif
731e1091647SArun Thomas.PHONY:		proginstall
732e1091647SArun Thomas
733e1091647SArun Thomas
734e1091647SArun Thomas
735e1091647SArun Thomasrealall: ${SCRIPTS}
736e1091647SArun Thomas.if defined(SCRIPTS) && !target(scriptsinstall)				# {
737e1091647SArun ThomasSCRIPTSDIR?=${BINDIR}
738e1091647SArun ThomasSCRIPTSOWN?=${BINOWN}
739e1091647SArun ThomasSCRIPTSGRP?=${BINGRP}
740e1091647SArun ThomasSCRIPTSMODE?=${BINMODE}
741e1091647SArun Thomas
742e1091647SArun Thomasscriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
743e1091647SArun Thomas.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
744e1091647SArun Thomas
745e1091647SArun Thomas__scriptinstall: .USE
746e1091647SArun Thomas	${_MKTARGET_INSTALL}
747e1091647SArun Thomas	${INSTALL_FILE} \
748e1091647SArun Thomas	    -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
749e1091647SArun Thomas	    -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
750e1091647SArun Thomas	    -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
751e1091647SArun Thomas	    ${.ALLSRC} ${.TARGET}
752e1091647SArun Thomas
753e1091647SArun Thomas.for S in ${SCRIPTS:O:u}
754e1091647SArun Thomas.if ${MKUPDATE} == "no"
755e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
756e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${S})
757e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
758e1091647SArun Thomas.endif
759e1091647SArun Thomas.else
760e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
761e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${S})
762e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
763e1091647SArun Thomas.endif
764e1091647SArun Thomas.endif
765e1091647SArun Thomas.endfor
766e1091647SArun Thomas.endif									# }
767e1091647SArun Thomas
768e1091647SArun Thomas.if !target(scriptsinstall)
769e1091647SArun Thomasscriptsinstall::
770e1091647SArun Thomas.endif
771e1091647SArun Thomas.PHONY:		scriptsinstall
772e1091647SArun Thomas
773e1091647SArun Thomas##### Pull in related .mk logic
774e1091647SArun ThomasLINKSOWN?= ${BINOWN}
775e1091647SArun ThomasLINKSGRP?= ${BINGRP}
776e1091647SArun ThomasLINKSMODE?= ${BINMODE}
777e1091647SArun Thomas.include <bsd.man.mk>
7789152e1c5SLionel Sambuc.include <bsd.nls.mk>
779e1091647SArun Thomas.include <bsd.files.mk>
780e1091647SArun Thomas.include <bsd.inc.mk>
781e1091647SArun Thomas.include <bsd.links.mk>
782e1091647SArun Thomas.include <bsd.sys.mk>
783e1091647SArun Thomas.include <bsd.dep.mk>
7849152e1c5SLionel Sambuc.include <bsd.clang-analyze.mk>
7859152e1c5SLionel Sambuc.include <bsd.clean.mk>
786e1091647SArun Thomas
787e1091647SArun Thomas${TARGETS}:	# ensure existence
788e1091647SArun Thomas
789e1091647SArun Thomas.endif	# HOSTPROG
790