xref: /minix3/share/mk/bsd.prog.mk (revision 9f6977d22da4b1367f6990a980d834db33daba7c)
184d9c625SLionel Sambuc#	$NetBSD: bsd.prog.mk,v 1.286 2013/11/11 10:24:53 joerg 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}
63e1091647SArun ThomasMKDEP_SUFFIXES?=	.o .ln
64e1091647SArun Thomas
659152e1c5SLionel Sambuc# CTF preserve debug symbols
669152e1c5SLionel Sambuc.if defined(MKDTRACE) && (${MKDTRACE} != "no") && (${CFLAGS:M-g} != "")
679152e1c5SLionel SambucCTFFLAGS+= -g
689152e1c5SLionel SambucCTFMFLAGS+= -g
699152e1c5SLionel Sambuc.endif
709152e1c5SLionel Sambuc
719152e1c5SLionel Sambuc# ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o
729152e1c5SLionel Sambuc.ifndef LIBCRTBEGIN
739152e1c5SLionel SambucLIBCRTBEGIN=	${DESTDIR}/usr/lib/crti.o ${_GCC_CRTBEGIN}
749152e1c5SLionel Sambuc.MADE: ${LIBCRTBEGIN}
759152e1c5SLionel Sambuc.endif
769152e1c5SLionel Sambuc.ifndef LIBCRTEND
779152e1c5SLionel SambucLIBCRTEND=	${_GCC_CRTEND} ${DESTDIR}/usr/lib/crtn.o
789152e1c5SLionel Sambuc.MADE: ${LIBCRTEND}
799152e1c5SLionel Sambuc.endif
809152e1c5SLionel Sambuc_SHLINKER=	${SHLINKDIR}/ld.elf_so
819152e1c5SLionel Sambuc
829152e1c5SLionel Sambuc.ifndef LIBCRT0
839152e1c5SLionel SambucLIBCRT0=	${DESTDIR}/usr/lib/crt0.o
849152e1c5SLionel Sambuc.MADE: ${LIBCRT0}
859152e1c5SLionel Sambuc.endif
869152e1c5SLionel Sambuc
8784d9c625SLionel Sambuc.ifndef LIBCRTI
8884d9c625SLionel SambucLIBCRTI=	${DESTDIR}/usr/lib/crti.o
8984d9c625SLionel Sambuc.MADE: ${LIBCRTI}
9084d9c625SLionel Sambuc.endif
9184d9c625SLionel Sambuc
92e1091647SArun Thomas##### Installed system library definitions
93e1091647SArun Thomas#
94e1091647SArun Thomas#	E.g.
95e1091647SArun Thomas#		LIBC?=${DESTDIR}/usr/lib/libc.a
96e1091647SArun Thomas#		LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a
97e1091647SArun Thomas#	etc..
989152e1c5SLionel Sambuc#	NB:	If you are a library here, add it in bsd.README
99e1091647SArun Thomas
100e1091647SArun Thomas.for _lib in \
10111be35a1SLionel Sambuc	archive \
10284d9c625SLionel Sambuc	asn1 \
1030cdf705cSLionel Sambuc	atf_c \
1040cdf705cSLionel Sambuc	atf_cxx \
10584d9c625SLionel Sambuc	bind9 \
10684d9c625SLionel Sambuc	bluetooth \
10784d9c625SLionel Sambuc	bsdmalloc \
1080cdf705cSLionel Sambuc	bz2 \
1099152e1c5SLionel Sambuc	c \
1100cdf705cSLionel Sambuc	c_pic \
11184d9c625SLionel Sambuc	com_err \
11284d9c625SLionel Sambuc	compat \
1130cdf705cSLionel Sambuc	crypt \
11484d9c625SLionel Sambuc	crypto \
11584d9c625SLionel Sambuc	crypto_idea \
11684d9c625SLionel Sambuc	crypto_mdc2 \
11784d9c625SLionel Sambuc	crypto_rc5 \
1189152e1c5SLionel Sambuc	curses \
11984d9c625SLionel Sambuc	dbm \
12084d9c625SLionel Sambuc	des \
12184d9c625SLionel Sambuc	dns \
1229152e1c5SLionel Sambuc	edit \
12384d9c625SLionel Sambuc	event \
1249152e1c5SLionel Sambuc	expat \
12584d9c625SLionel Sambuc	fetch \
12684d9c625SLionel Sambuc	fl \
12784d9c625SLionel Sambuc	form \
12884d9c625SLionel Sambuc	g2c \
12984d9c625SLionel Sambuc	gcc \
13084d9c625SLionel Sambuc	gnumalloc \
13184d9c625SLionel Sambuc	gssapi \
13284d9c625SLionel Sambuc	hdb \
13384d9c625SLionel Sambuc	heimbase \
13484d9c625SLionel Sambuc	heimntlm \
13584d9c625SLionel Sambuc	hx509 \
13684d9c625SLionel Sambuc	intl \
13784d9c625SLionel Sambuc	ipsec \
13884d9c625SLionel Sambuc	isc \
13984d9c625SLionel Sambuc	isccc \
14084d9c625SLionel Sambuc	isccfg \
14184d9c625SLionel Sambuc	kadm5clnt \
14284d9c625SLionel Sambuc	kadm5srv \
14384d9c625SLionel Sambuc	kafs \
14484d9c625SLionel Sambuc	krb5 \
14584d9c625SLionel Sambuc	kvm \
1469152e1c5SLionel Sambuc	l \
14784d9c625SLionel Sambuc	lber \
14884d9c625SLionel Sambuc	ldap \
14984d9c625SLionel Sambuc	ldap_r \
15011be35a1SLionel Sambuc	lua \
15184d9c625SLionel Sambuc	lwres \
1529152e1c5SLionel Sambuc	m \
1530cdf705cSLionel Sambuc	magic \
15484d9c625SLionel Sambuc	menu \
15511be35a1SLionel Sambuc	objc \
15684d9c625SLionel Sambuc	ossaudio \
15784d9c625SLionel Sambuc	pam \
15884d9c625SLionel Sambuc	pcap \
15984d9c625SLionel Sambuc	pci \
16084d9c625SLionel Sambuc	pmc \
16184d9c625SLionel Sambuc	posix \
16284d9c625SLionel Sambuc	pthread \
16384d9c625SLionel Sambuc	pthread_dbg \
16484d9c625SLionel Sambuc	puffs \
16584d9c625SLionel Sambuc	quota \
16684d9c625SLionel Sambuc	radius \
16784d9c625SLionel Sambuc	resolv \
1680cdf705cSLionel Sambuc	rmt \
16984d9c625SLionel Sambuc	roken \
17084d9c625SLionel Sambuc	rpcsvc \
17184d9c625SLionel Sambuc	rt \
17284d9c625SLionel Sambuc	rump \
17384d9c625SLionel Sambuc	rumpfs_cd9660fs \
17484d9c625SLionel Sambuc	rumpfs_efs \
17584d9c625SLionel Sambuc	rumpfs_ext2fs \
17684d9c625SLionel Sambuc	rumpfs_ffs \
17784d9c625SLionel Sambuc	rumpfs_hfs \
17884d9c625SLionel Sambuc	rumpfs_lfs \
17984d9c625SLionel Sambuc	rumpfs_msdosfs \
18084d9c625SLionel Sambuc	rumpfs_nfs \
18184d9c625SLionel Sambuc	rumpfs_ntfs \
18284d9c625SLionel Sambuc	rumpfs_syspuffs \
18384d9c625SLionel Sambuc	rumpfs_tmpfs \
18484d9c625SLionel Sambuc	rumpfs_udf \
18584d9c625SLionel Sambuc	rumpfs_ufs \
18684d9c625SLionel Sambuc	rumpuser \
18784d9c625SLionel Sambuc	saslc \
18884d9c625SLionel Sambuc	skey \
18984d9c625SLionel Sambuc	sl \
19011be35a1SLionel Sambuc	sqlite3 \
19184d9c625SLionel Sambuc	ss \
19284d9c625SLionel Sambuc	ssh \
19384d9c625SLionel Sambuc	ssl \
19484d9c625SLionel Sambuc	ssp \
19511be35a1SLionel Sambuc	stdcxx \
19684d9c625SLionel Sambuc	supcxx \
1970cdf705cSLionel Sambuc	terminfo \
19884d9c625SLionel Sambuc	tre \
19984d9c625SLionel Sambuc	usbhid \
2000cdf705cSLionel Sambuc	util \
20184d9c625SLionel Sambuc	wind \
20284d9c625SLionel Sambuc	wrap \
20384d9c625SLionel Sambuc	y \
2040cdf705cSLionel Sambuc	z
2050cdf705cSLionel Sambuc
2060cdf705cSLionel Sambuc.ifndef LIB${_lib:tu}
2070cdf705cSLionel SambucLIB${_lib:tu}=	${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a
2080cdf705cSLionel Sambuc.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
2090cdf705cSLionel Sambuc.endif
2100cdf705cSLionel Sambuc.endfor
2110cdf705cSLionel Sambuc
2120cdf705cSLionel Sambuc# Minix libraries
2130cdf705cSLionel Sambuc.for _lib in \
2140cdf705cSLionel Sambuc	audiodriver \
2150cdf705cSLionel Sambuc	bdev \
2160cdf705cSLionel Sambuc	blockdriver \
2170cdf705cSLionel Sambuc	chardriver \
21887d31b06SDavid van Moolenbroek	clkconf \
21987d31b06SDavid van Moolenbroek	compat_minix \
22087d31b06SDavid van Moolenbroek	ddekit \
22187d31b06SDavid van Moolenbroek	ddekit_usb_client \
22287d31b06SDavid van Moolenbroek	ddekit_usb_server \
22387d31b06SDavid van Moolenbroek	devman \
2240cdf705cSLionel Sambuc	elf \
2259152e1c5SLionel Sambuc	exec \
22687d31b06SDavid van Moolenbroek	gpio \
22787d31b06SDavid van Moolenbroek	hgfs \
22887d31b06SDavid van Moolenbroek	i2cdriver \
22987d31b06SDavid van Moolenbroek	inputdriver \
23087d31b06SDavid van Moolenbroek	lwip \
2319152e1c5SLionel Sambuc	minc \
23287d31b06SDavid van Moolenbroek	minixfs \
2339152e1c5SLionel Sambuc	minlib \
234d3d33afeSLionel Sambuc	mthread \
2350cdf705cSLionel Sambuc	netdriver \
23687d31b06SDavid van Moolenbroek	netsock \
2370cdf705cSLionel Sambuc	sffs \
2380cdf705cSLionel Sambuc	sys \
2390cdf705cSLionel Sambuc	timers \
24087d31b06SDavid van Moolenbroek	usb \
24187d31b06SDavid van Moolenbroek	vboxfs \
24287d31b06SDavid van Moolenbroek	virtio \
24387d31b06SDavid van Moolenbroek	vtreefs
244e1091647SArun Thomas.ifndef LIB${_lib:tu}
2459152e1c5SLionel SambucLIB${_lib:tu}=	${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a
246e1091647SArun Thomas.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
247e1091647SArun Thomas.endif
248e1091647SArun Thomas.endfor
249e1091647SArun Thomas
2509152e1c5SLionel Sambuc# PAM applications, if linked statically, need more libraries
2519152e1c5SLionel Sambuc.if (${MKPIC} == "no")
2529152e1c5SLionel Sambuc.if (${MKCRYPTO} != "no")
2539152e1c5SLionel SambucPAM_STATIC_LDADD+= -lssh
2549152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBSSH}
2559152e1c5SLionel Sambuc.endif
2569152e1c5SLionel Sambuc.if (${MKKERBEROS} != "no")
2579152e1c5SLionel SambucPAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \
2589152e1c5SLionel Sambuc	-lroken -lcom_err -lheimbase -lcrypto
2599152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \
2609152e1c5SLionel Sambuc	${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO}
2619152e1c5SLionel Sambuc.endif
2629152e1c5SLionel Sambuc.if (${MKSKEY} != "no")
2639152e1c5SLionel SambucPAM_STATIC_LDADD+= -lskey
2649152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBSKEY}
2659152e1c5SLionel Sambuc.endif
2669152e1c5SLionel SambucPAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil
2679152e1c5SLionel SambucPAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL}
2689152e1c5SLionel Sambuc.else
2699152e1c5SLionel SambucPAM_STATIC_LDADD=
2709152e1c5SLionel SambucPAM_STATIC_DPADD=
271e1091647SArun Thomas.endif
272e1091647SArun Thomas
27384d9c625SLionel Sambuc.if defined(__MINIX) && ${MACHINE_ARCH} == "earm"
27484d9c625SLionel Sambuc# LSC: On ARM, when compiling statically, with gcc, lgcc_eh is required
27584d9c625SLionel SambucLDFLAGS+= ${${ACTIVE_CC} == "gcc":? -lgcc_eh:}
27684d9c625SLionel Sambuc.endif # defined(__MINIX) && ${MACHINE_ARCH} == "earm"
27784d9c625SLionel Sambuc
2789152e1c5SLionel Sambuc#	NB:	If you are a library here, add it in bsd.README
279e1091647SArun Thomas.for _lib in \
2809152e1c5SLionel Sambuc	FS \
2819152e1c5SLionel Sambuc	GL \
2829152e1c5SLionel Sambuc	GLU \
2839152e1c5SLionel Sambuc	ICE \
2849152e1c5SLionel Sambuc	SM \
2859152e1c5SLionel Sambuc	X11 \
2869152e1c5SLionel Sambuc	XTrap \
2879152e1c5SLionel Sambuc	Xau \
2889152e1c5SLionel Sambuc	Xaw \
2899152e1c5SLionel Sambuc	Xdmcp \
2909152e1c5SLionel Sambuc	Xext \
2919152e1c5SLionel Sambuc	Xfont \
2929152e1c5SLionel Sambuc	Xft \
2939152e1c5SLionel Sambuc	Xi \
2949152e1c5SLionel Sambuc	Xinerama \
2959152e1c5SLionel Sambuc	Xmu \
2969152e1c5SLionel Sambuc	Xmuu \
2979152e1c5SLionel Sambuc	Xpm \
2989152e1c5SLionel Sambuc	Xrandr \
2999152e1c5SLionel Sambuc	Xrender \
3009152e1c5SLionel Sambuc	Xss \
3019152e1c5SLionel Sambuc	Xt \
3029152e1c5SLionel Sambuc	Xtst \
3039152e1c5SLionel Sambuc	Xv \
3049152e1c5SLionel Sambuc	Xxf86dga \
3059152e1c5SLionel Sambuc	Xxf86misc \
3069152e1c5SLionel Sambuc	Xxf86vm \
3079152e1c5SLionel Sambuc	dps \
3089152e1c5SLionel Sambuc	fntstubs \
3099152e1c5SLionel Sambuc	fontcache \
3109152e1c5SLionel Sambuc	fontconfig \
3119152e1c5SLionel Sambuc	fontenc \
3129152e1c5SLionel Sambuc	freetype \
3139152e1c5SLionel Sambuc	lbxutil \
3149152e1c5SLionel Sambuc	xkbfile
315e1091647SArun Thomas.ifndef LIB${_lib:tu}
316e1091647SArun ThomasLIB${_lib:tu}=	${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a
317e1091647SArun Thomas.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
318e1091647SArun Thomas.endif
319e1091647SArun Thomas.endfor
320e1091647SArun Thomas
32184d9c625SLionel Sambuc# Ugly one-offs
32284d9c625SLionel SambucLIBX11_XCB=	${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a
32384d9c625SLionel SambucLIBXCB=	${DESTDIR}${X11USRLIBDIR}/libxcb.a
32484d9c625SLionel Sambuc
325e1091647SArun Thomas.if defined(RESCUEDIR)
326e1091647SArun ThomasCPPFLAGS+=	-DRESCUEDIR=\"${RESCUEDIR}\"
327e1091647SArun Thomas.endif
328e1091647SArun Thomas
3299152e1c5SLionel Sambuc_PROGLDOPTS=
3309152e1c5SLionel Sambuc.if ${SHLINKDIR} != "/usr/libexec"	# XXX: change or remove if ld.so moves
3319152e1c5SLionel Sambuc_PROGLDOPTS+=	-Wl,-dynamic-linker=${_SHLINKER}
3329152e1c5SLionel Sambuc.endif
3339152e1c5SLionel Sambuc.if ${SHLIBDIR} != "/usr/lib"
3349152e1c5SLionel Sambuc_PROGLDOPTS+=	-Wl,-rpath,${SHLIBDIR} \
3359152e1c5SLionel Sambuc		-L=${SHLIBDIR}
3369152e1c5SLionel Sambuc.elif ${SHLIBINSTALLDIR} != "/usr/lib"
3379152e1c5SLionel Sambuc_PROGLDOPTS+=	-Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \
3389152e1c5SLionel Sambuc		-L=${SHLIBINSTALLDIR}
3399152e1c5SLionel Sambuc.endif
3409152e1c5SLionel Sambuc
341e1091647SArun Thomas__proginstall: .USE
342e1091647SArun Thomas	${_MKTARGET_INSTALL}
343e1091647SArun Thomas	${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
344ff569068SArun Thomas		${STRIPFLAG} ${.ALLSRC} ${.TARGET}
345e1091647SArun Thomas
3469152e1c5SLionel Sambuc__progrumpinstall: .USE
3479152e1c5SLionel Sambuc	${_MKTARGET_INSTALL}
3489152e1c5SLionel Sambuc	${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \
3499152e1c5SLionel Sambuc		${STRIPFLAG} ${.ALLSRC} ${.TARGET}
3509152e1c5SLionel Sambuc
351e1091647SArun Thomas__progdebuginstall: .USE
352e1091647SArun Thomas	${_MKTARGET_INSTALL}
353e1091647SArun Thomas	${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \
354ff569068SArun Thomas		${.ALLSRC} ${.TARGET}
355e1091647SArun Thomas
356e1091647SArun Thomas
357e1091647SArun Thomas
358e1091647SArun Thomas#
359e1091647SArun Thomas# Backwards compatibility with Makefiles that assume that bsd.prog.mk
360e1091647SArun Thomas# can only build a single binary.
361e1091647SArun Thomas#
362e1091647SArun Thomas
363e1091647SArun Thomas_APPEND_MANS=yes
364e1091647SArun Thomas_APPEND_SRCS=yes
365e1091647SArun Thomas
366e1091647SArun Thomas_CCLINKFLAGS=
367e1091647SArun Thomas
368e1091647SArun Thomas.if defined(PROG_CXX)
369e1091647SArun ThomasPROG=		${PROG_CXX}
370e1091647SArun Thomas_CCLINK=	${CXX} ${_CCLINKFLAGS}
37118e90974SBen Gras
37218e90974SBen Gras.if defined(__MINIX)
37318e90974SBen Gras# BJG - stack unwinding (for C++ exceptions) doesn't work on static executables when built with llvm.
37418e90974SBen GrasLDSTATIC=	-dynamic
37518e90974SBen Gras.endif # defined(__MINIX)
376e1091647SArun Thomas.endif
377e1091647SArun Thomas
3789152e1c5SLionel Sambuc.if defined(RUMPPRG)
3799152e1c5SLionel SambucPROG=			${RUMPPRG}
3809152e1c5SLionel Sambuc. ifndef CRUNCHEDPROG
3819152e1c5SLionel Sambuc.  if (${MKRUMP} != "no")
3829152e1c5SLionel SambucPROGS=			${RUMPPRG} rump.${RUMPPRG}
3839152e1c5SLionel Sambuc.  else
3849152e1c5SLionel SambucPROGS=			${RUMPPRG}
3859152e1c5SLionel Sambuc.  endif
3869152e1c5SLionel Sambuc.  if defined(SRCS)
3879152e1c5SLionel Sambuc.   if (${MKRUMP} != "no")
3889152e1c5SLionel SambucSRCS.rump.${PROG}:=	${SRCS} ${PROG}_rumpops.c ${RUMPSRCS}
3899152e1c5SLionel Sambuc.   endif
3909152e1c5SLionel SambucSRCS+=			${PROG}_hostops.c
3919152e1c5SLionel Sambuc.  else
3929152e1c5SLionel SambucSRCS=			${PROG}.c ${PROG}_hostops.c
3939152e1c5SLionel Sambuc.   if (${MKRUMP} != "no")
3949152e1c5SLionel SambucSRCS.rump.${PROG}=	${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS}
3959152e1c5SLionel Sambuc.   endif
3969152e1c5SLionel Sambuc.  endif
3979152e1c5SLionel Sambuc.   if (${MKRUMP} != "no")
3989152e1c5SLionel SambucDPSRCS+=		${PROG}_rumpops.c ${RUMPSRCS}
3999152e1c5SLionel SambucLDADD.rump.${PROG}+=	-lrumpclient
4009152e1c5SLionel SambucDPADD.rump.${PROG}+=	${LIBRUMPCLIENT}
4019152e1c5SLionel SambucMAN.rump.${PROG}=	# defined but feeling empty
4029152e1c5SLionel Sambuc_RUMPINSTALL.rump.${PROG}=# defined
4039152e1c5SLionel Sambuc.   endif
4049152e1c5SLionel Sambuc. else # CRUNCHEDPROG
4059152e1c5SLionel SambucPROGS=			${PROG}
4069152e1c5SLionel SambucCPPFLAGS+=		-DCRUNCHOPS
4079152e1c5SLionel Sambuc. endif
4089152e1c5SLionel Sambuc.endif
4099152e1c5SLionel Sambuc
410e1091647SArun Thomas.if defined(PROG)
411e1091647SArun Thomas_CCLINK?=	${CC} ${_CCLINKFLAGS}
412e1091647SArun Thomas.  if defined(MAN)
413e1091647SArun ThomasMAN.${PROG}=	${MAN}
414e1091647SArun Thomas_APPEND_MANS=	no
415e1091647SArun Thomas.  endif
416e1091647SArun Thomas.  if !defined(OBJS)
417e1091647SArun ThomasOBJS=		${OBJS.${PROG}}
418e1091647SArun Thomas.  endif
419e1091647SArun Thomas.  if defined(PROGNAME)
420e1091647SArun ThomasPROGNAME.${PROG}=	${PROGNAME}
421e1091647SArun Thomas.  endif
422e1091647SArun Thomas.  if defined(SRCS)
423e1091647SArun ThomasSRCS.${PROG}=	${SRCS}
424e1091647SArun Thomas_APPEND_SRCS=	no
425e1091647SArun Thomas.  endif
426e1091647SArun Thomas.endif
427e1091647SArun Thomas
428e1091647SArun Thomas# Turn the single-program PROG and PROG_CXX variables into their multi-word
429e1091647SArun Thomas# counterparts, PROGS and PROGS_CXX.
4309152e1c5SLionel Sambuc.if !defined(RUMPPRG)
431e1091647SArun Thomas.  if defined(PROG_CXX) && !defined(PROGS_CXX)
432e1091647SArun ThomasPROGS_CXX=	${PROG_CXX}
433e1091647SArun Thomas.  elif defined(PROG) && !defined(PROGS)
434e1091647SArun ThomasPROGS=		${PROG}
435e1091647SArun Thomas.  endif
4369152e1c5SLionel Sambuc.endif
437e1091647SArun Thomas
43884d9c625SLionel Sambuc##### Libraries that this may depend upon.
43984d9c625SLionel Sambuc.if defined(PROGDPLIBS) 						# {
44084d9c625SLionel Sambuc.for _lib _dir in ${PROGDPLIBS}
44184d9c625SLionel Sambuc.if !defined(BINDO.${_lib})
44284d9c625SLionel SambucPROGDO.${_lib}!=	cd "${_dir}" && ${PRINTOBJDIR}
44384d9c625SLionel Sambuc.MAKEOVERRIDES+=PROGDO.${_lib}
44484d9c625SLionel Sambuc.endif
44584d9c625SLionel SambucLDADD+=		-L${PROGDO.${_lib}} -l${_lib}
44684d9c625SLionel Sambuc.if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a)
44784d9c625SLionel SambucDPADD+=		${PROGDO.${_lib}}/lib${_lib}_pic.a
44884d9c625SLionel Sambuc.elif exists(${PROGDO.${_lib}}/lib${_lib}.so)
44984d9c625SLionel SambucDPADD+=		${PROGDO.${_lib}}/lib${_lib}.so
45084d9c625SLionel Sambuc.else
45184d9c625SLionel SambucDPADD+=		${PROGDO.${_lib}}/lib${_lib}.a
45284d9c625SLionel Sambuc.endif
45384d9c625SLionel Sambuc.endfor
45484d9c625SLionel Sambuc.endif									# }
455e1091647SArun Thomas#
456e1091647SArun Thomas# Per-program definitions and targets.
457e1091647SArun Thomas#
458e1091647SArun Thomas
4599152e1c5SLionel Sambuc_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS}
460e1091647SArun Thomas# Definitions specific to C programs.
461e1091647SArun Thomas.for _P in ${PROGS}
462e1091647SArun ThomasSRCS.${_P}?=	${_P}.c
463e1091647SArun Thomas_CCLINK.${_P}=	${CC} ${_CCLINKFLAGS}
4649152e1c5SLionel Sambuc_CFLAGS.${_P}=	${CFLAGS} ${CPUFLAGS}
4659152e1c5SLionel Sambuc_CPPFLAGS.${_P}=	${CPPFLAGS}
4669152e1c5SLionel Sambuc_COPTS.${_P}=	${COPTS}
467e1091647SArun Thomas.endfor
468e1091647SArun Thomas
4699152e1c5SLionel Sambuc_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS}
470e1091647SArun Thomas# Definitions specific to C++ programs.
471e1091647SArun Thomas.for _P in ${PROGS_CXX}
472e1091647SArun ThomasSRCS.${_P}?=	${_P}.cc
473e1091647SArun Thomas_CCLINK.${_P}=	${CXX} ${_CCLINKFLAGS}
474e1091647SArun Thomas.endfor
475e1091647SArun Thomas
476e1091647SArun Thomas# Language-independent definitions.
4774684ddb6SLionel Sambuc.if defined(__MINIX)
4784684ddb6SLionel Sambuc.if ${USE_BITCODE:Uno} == "yes"
4792e304675SAnton KuijstenCFLAGS+= -flto
4804684ddb6SLionel Sambuc.endif # ${USE_BITCODE:Uno} == "yes"
4812e304675SAnton Kuijsten
4824684ddb6SLionel Sambuc.if ${USE_BITCODE:Uyes} == "no"
4834684ddb6SLionel Sambuc#LSC Gold linker seems to require the library directory to be set up if
4844684ddb6SLionel Sambuc#    a sysroot parameter has been given.
4854684ddb6SLionel SambucLDFLAGS+= -L ${DESTDIR}/usr/lib
4864684ddb6SLionel Sambuc.endif # ${USE_BITCODE:U} == "no"
4874684ddb6SLionel Sambuc.endif # defined(__MINIX)
48884d9c625SLionel Sambuc
48984d9c625SLionel Sambuc.for _P in ${PROGS} ${PROGS_CXX}					# {
49084d9c625SLionel Sambuc
491e1091647SArun ThomasBINDIR.${_P}?=		${BINDIR}
492e1091647SArun ThomasPROGNAME.${_P}?=	${_P}
493e1091647SArun Thomas
4949152e1c5SLionel Sambuc.if ${MKDEBUG} != "no" && !commands(${_P})
495e1091647SArun Thomas_PROGDEBUG.${_P}:=	${PROGNAME.${_P}}.debug
496e1091647SArun Thomas.endif
497e1091647SArun Thomas
4989152e1c5SLionel Sambuc.if defined(PAXCTL_FLAGS)
4999152e1c5SLionel SambucPAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS}
5009152e1c5SLionel Sambuc.endif
5019152e1c5SLionel Sambuc
502e1091647SArun Thomas##### PROG specific flags.
503e1091647SArun Thomas
5049152e1c5SLionel Sambuc_DPADD.${_P}=		${DPADD}    ${DPADD.${_P}}
505e1091647SArun Thomas_LDADD.${_P}=		${LDADD}    ${LDADD.${_P}}
506e1091647SArun Thomas_LDFLAGS.${_P}=		${LDFLAGS}  ${LDFLAGS.${_P}}
507e1091647SArun Thomas_LDSTATIC.${_P}=	${LDSTATIC} ${LDSTATIC.${_P}}
508e1091647SArun Thomas
509e1091647SArun Thomas##### Build and install rules
510e1091647SArun Thomas.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss])
511e1091647SArun ThomasSRCS+=		${SRCS.${_P}}	# For bsd.dep.mk
512e1091647SArun Thomas.endif
513e1091647SArun Thomas
514e1091647SArun Thomas_YPSRCS.${_P}=	${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}}
515e1091647SArun Thomas
516e1091647SArun ThomasDPSRCS+=		${_YPSRCS.${_P}}
517e1091647SArun ThomasCLEANFILES+=		${_YPSRCS.${_P}}
518e1091647SArun Thomas
519e1091647SArun Thomas.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth)
520e1091647SArun ThomasOBJS.${_P}+=	${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
521e1091647SArun ThomasLOBJS.${_P}+=	${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln}
522e1091647SArun Thomas.endif
523e1091647SArun Thomas
524e1091647SArun Thomas.if defined(OBJS.${_P}) && !empty(OBJS.${_P})			# {
525e1091647SArun Thomas.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}}
526e1091647SArun Thomas
5279152e1c5SLionel Sambuc.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \
5289152e1c5SLionel Sambuc   && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \
5299152e1c5SLionel Sambuc       || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \
5309152e1c5SLionel Sambuc   && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE))
5319152e1c5SLionel Sambuc.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g}
5329152e1c5SLionel Sambuc#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \
5339152e1c5SLionel Sambuc#     ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5}
5349152e1c5SLionel Sambuc.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \
5359152e1c5SLionel Sambuc     || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \
5369152e1c5SLionel Sambuc     || ${CXXFLAGS.$f:D5} == "5") \
5379152e1c5SLionel Sambuc    || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/}))
5389152e1c5SLionel SambucXOBJS.${_P}+=	${f:R:S/$/.o/}
5399152e1c5SLionel Sambuc.else
5409152e1c5SLionel SambucXSRCS.${_P}+=	${f}
5419152e1c5SLionel SambucNODPSRCS+=	${f}
5429152e1c5SLionel Sambuc.endif
5439152e1c5SLionel Sambuc.endfor
5449152e1c5SLionel Sambuc
54584d9c625SLionel Sambuc${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${XOBJS.${_P}} ${SRCS.${_P}} \
54684d9c625SLionel Sambuc    ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}}
5479152e1c5SLionel Sambuc	${_MKTARGET_LINK}
5489152e1c5SLionel Sambuc.if defined(DESTDIR)
5499152e1c5SLionel Sambuc	${_CCLINK.${_P}} -Wl,-nostdlib \
5509152e1c5SLionel Sambuc	    ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
5519152e1c5SLionel Sambuc	    -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \
5529152e1c5SLionel Sambuc	    -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \
5539152e1c5SLionel Sambuc	    ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
5549152e1c5SLionel Sambuc	    ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib
5559152e1c5SLionel Sambuc.else
5569152e1c5SLionel Sambuc	${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
5579152e1c5SLionel Sambuc	    -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}}
5589152e1c5SLionel Sambuc	    ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
5599152e1c5SLionel Sambuc	    ${_LDADD.${_P}}
5609152e1c5SLionel Sambuc.endif	# defined(DESTDIR)
5619152e1c5SLionel Sambuc.if defined(CTFMERGE)
5629152e1c5SLionel Sambuc	${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
5639152e1c5SLionel Sambuc.endif
5649152e1c5SLionel Sambuc.if defined(PAXCTL_FLAGS.${_P})
5659152e1c5SLionel Sambuc	${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
5669152e1c5SLionel Sambuc.endif
5679152e1c5SLionel Sambuc.if ${MKSTRIPIDENT} != "no"
5689152e1c5SLionel Sambuc	${OBJCOPY} -R .ident ${.TARGET}
5699152e1c5SLionel Sambuc.endif
5709152e1c5SLionel Sambuc
5719152e1c5SLionel SambucCLEANFILES+=	${_P}.d
5729152e1c5SLionel Sambuc.if exists(${_P}.d)
5739152e1c5SLionel Sambuc.include "${_P}.d"		# include -MD depend for program.
5749152e1c5SLionel Sambuc.endif
5759152e1c5SLionel Sambuc.else	# USE_COMBINE
5769152e1c5SLionel Sambuc
577e1091647SArun Thomas${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS}
578e1091647SArun Thomas
57984d9c625SLionel Sambuc.if defined(__MINIX) && ${USE_BITCODE:Uno} == "yes"
5802e304675SAnton KuijstenCLEANFILES+= ${_P}.opt.bcl ${_P}.bcl ${_P}.bcl.o
5812e304675SAnton Kuijsten
5825ba302fdSKoustubha BhatOPTFLAGS.${_P}?= ${OPTFLAGS}
583*9f6977d2SCristiano GiuffridaBITCODE_LD_FLAGS_1ST.${_P}+= ${BITCODE_LD_FLAGS_1ST}
584*9f6977d2SCristiano GiuffridaBITCODE_LD_FLAGS_2ND.${_P}+= ${BITCODE_LD_FLAGS_2ND}
5855ba302fdSKoustubha Bhat
58684d9c625SLionel Sambuc${_P}.bcl: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \
58784d9c625SLionel Sambuc    ${LIBCRTEND} ${_DPADD.${_P}}
5882e304675SAnton Kuijsten	${_MKTARGET_LINK}
5892e304675SAnton Kuijsten	${_CCLINK.${_P}} \
5902e304675SAnton Kuijsten		-o ${.TARGET} \
5912e304675SAnton Kuijsten		-nostartfiles \
5924684ddb6SLionel Sambuc		-L${DESTDIR}/usr/lib/bc \
5932e304675SAnton Kuijsten		${OBJS.${_P}} ${LLVM_LINK_ARGS} ${_LDADD.${_P}:N-shared} \
5944684ddb6SLionel Sambuc		${_LDSTATIC.${_P}} ${_PROGLDOPTS} \
5952e304675SAnton Kuijsten		-Wl,-r \
596*9f6977d2SCristiano Giuffrida		${BITCODE_LD_FLAGS_1ST.${_P}} \
5974684ddb6SLionel Sambuc		-Wl,-plugin-opt=emit-llvm
5982e304675SAnton Kuijsten
5992e304675SAnton Kuijsten${_P}.opt.bcl: ${_P}.bcl ${LLVM_PASS}
6002e304675SAnton Kuijsten	${_MKTARGET_LINK}
6015ba302fdSKoustubha Bhat	${OPT} ${OPTFLAGS.${_P}} -o ${.TARGET} ${_P}.bcl
6022e304675SAnton Kuijsten
6034684ddb6SLionel Sambuc${_P}.bcl.o: ${_P}.opt.bcl
6042e304675SAnton Kuijsten	${_MKTARGET_LINK}
6054684ddb6SLionel Sambuc	${LLC} -O1 -march=x86 -mcpu=i586 -filetype=obj -o ${.TARGET} ${.ALLSRC}
6062e304675SAnton Kuijsten
6072e304675SAnton Kuijsten${_P}: ${_P}.bcl.o
6084684ddb6SLionel Sambuc.if !commands(${_P})
6092e304675SAnton Kuijsten	${_MKTARGET_LINK}
6102e304675SAnton Kuijsten	${_CCLINK.${_P}} \
6114684ddb6SLionel Sambuc		${_LDFLAGS.${_P}} \
6124684ddb6SLionel Sambuc		-L${DESTDIR}/usr/lib \
6134684ddb6SLionel Sambuc		${_LDSTATIC.${_P}} -o ${.TARGET} \
6144684ddb6SLionel Sambuc		${.TARGET}.bcl.o ${_PROGLDOPTS} ${_LDADD.${_P}} \
615*9f6977d2SCristiano Giuffrida		${BITCODE_LD_FLAGS_2ND.${_P}} \
6164684ddb6SLionel Sambuc		-Wl,--allow-multiple-definition
6174684ddb6SLionel Sambuc.endif	# !commands(${_P})
6182e304675SAnton Kuijsten
6192e304675SAnton Kuijsten.else
62084d9c625SLionel Sambuc${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \
62184d9c625SLionel Sambuc    ${LIBCRTEND} ${_DPADD.${_P}}
62284d9c625SLionel Sambuc.if !commands(${_P})
623e1091647SArun Thomas	${_MKTARGET_LINK}
624e1091647SArun Thomas	${_CCLINK.${_P}} \
625e1091647SArun Thomas	    ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \
62684d9c625SLionel Sambuc	    ${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}}
6279152e1c5SLionel Sambuc.if defined(CTFMERGE)
6289152e1c5SLionel Sambuc	${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
6299152e1c5SLionel Sambuc.endif
630e1091647SArun Thomas.if defined(PAXCTL_FLAGS.${_P})
631e1091647SArun Thomas	${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
632e1091647SArun Thomas.endif
633e1091647SArun Thomas.if ${MKSTRIPIDENT} != "no"
634e1091647SArun Thomas	${OBJCOPY} -R .ident ${.TARGET}
635e1091647SArun Thomas.endif
636e1091647SArun Thomas.endif	# !commands(${_P})
63784d9c625SLionel Sambuc.endif  # defined(__MINIX) && ${USE_BITCODE:Uno} == "yes"
6389152e1c5SLionel Sambuc.endif	# USE_COMBINE
639e1091647SArun Thomas
6409152e1c5SLionel Sambuc${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}}
641e1091647SArun Thomas	${_MKTARGET_LINK}
6429152e1c5SLionel Sambuc	${CC} ${LDFLAGS} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}}
643e1091647SArun Thomas
644e1091647SArun Thomas.if defined(_PROGDEBUG.${_P})
645e1091647SArun Thomas${_PROGDEBUG.${_P}}: ${_P}
646e1091647SArun Thomas	${_MKTARGET_CREATE}
6479152e1c5SLionel Sambuc	(  ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \
6489152e1c5SLionel Sambuc	&& ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \
6499152e1c5SLionel Sambuc		--add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \
6509152e1c5SLionel Sambuc	) || (rm -f ${_PROGDEBUG.${_P}}; false)
651e1091647SArun Thomas.endif
652e1091647SArun Thomas
653e1091647SArun Thomas.endif	# defined(OBJS.${_P}) && !empty(OBJS.${_P})			# }
654e1091647SArun Thomas
655e1091647SArun Thomas.if !defined(MAN.${_P})
656e1091647SArun ThomasMAN.${_P}=	${_P}.1
657e1091647SArun Thomas.endif	# !defined(MAN.${_P})
658e1091647SArun Thomas.if !empty(_APPEND_MANS:M[Yy][Ee][Ss])
659e1091647SArun ThomasMAN+=		${MAN.${_P}}
660e1091647SArun Thomas.endif
661e1091647SArun Thomas
662e1091647SArun Thomasrealall: ${_P} ${_PROGDEBUG.${_P}}
663e1091647SArun Thomas
6649152e1c5SLionel SambucCLEANFILES+= ${_P} ${_PROGDEBUG.${_P}}
665e1091647SArun Thomas
666e1091647SArun Thomas.if defined(OBJS.${_P}) && !empty(OBJS.${_P})
6679152e1c5SLionel SambucCLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}}
668e1091647SArun Thomas.endif
669e1091647SArun Thomas
670e1091647SArun Thomas_PROG_INSTALL+=	proginstall-${_P}
671e1091647SArun Thomas
672e1091647SArun Thomas.if !target(proginstall-${_P})						# {
673e1091647SArun Thomasproginstall-${_P}::	${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
674e1091647SArun Thomas		${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
675e1091647SArun Thomas.PRECIOUS:	${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
676e1091647SArun Thomas		${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
677e1091647SArun Thomas
678e1091647SArun Thomas.if ${MKUPDATE} == "no"
6799152e1c5SLionel Sambuc.if defined(_RUMPINSTALL.${_P})
6809152e1c5SLionel Sambuc${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall
6819152e1c5SLionel Sambuc.else
682e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall
6839152e1c5SLionel Sambuc.endif
684e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
685e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE
686e1091647SArun Thomas.endif
687e1091647SArun Thomas.if defined(_PROGDEBUG.${_P})
688e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall
689e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
690e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE
691e1091647SArun Thomas.endif
692e1091647SArun Thomas.endif	#  define(_PROGDEBUG.${_P})
693e1091647SArun Thomas.else	# MKUPDATE != no
6949152e1c5SLionel Sambuc.if defined(_RUMPINSTALL.${_P})
6959152e1c5SLionel Sambuc${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall
6969152e1c5SLionel Sambuc.else
697e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall
6989152e1c5SLionel Sambuc.endif
699e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
700e1091647SArun Thomas${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE
701e1091647SArun Thomas.endif
702e1091647SArun Thomas.if defined(_PROGDEBUG.${_P})
703e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall
704e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${_P})
705e1091647SArun Thomas${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE
706e1091647SArun Thomas.endif
707e1091647SArun Thomas.endif	#  defined(_PROGDEBUG.${_P})
708e1091647SArun Thomas.endif	# MKUPDATE != no
709e1091647SArun Thomas
710e1091647SArun Thomas.endif	# !target(proginstall-${_P})					# }
711e1091647SArun Thomas
712e1091647SArun Thomaslint: lint-${_P}
713e1091647SArun Thomaslint-${_P}: ${LOBJS.${_P}}
714e1091647SArun Thomas.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P})
715e1091647SArun Thomas	${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[  ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}}
716e1091647SArun Thomas.endif
717e1091647SArun Thomas
718e1091647SArun Thomas.endfor # _P in ${PROGS} ${PROGS_CXX}					# }
719e1091647SArun Thomas
720e1091647SArun Thomas.if defined(OBJS) && !empty(OBJS) && \
721e1091647SArun Thomas    (empty(PROGS) && empty(PROGS_CXX))
7229152e1c5SLionel SambucCLEANFILES+= ${OBJS} ${LOBJS}
723e1091647SArun Thomas.endif
724e1091647SArun Thomas
725e1091647SArun Thomas.if !target(proginstall)
726e1091647SArun Thomasproginstall:: ${_PROG_INSTALL}
727e1091647SArun Thomas.endif
728e1091647SArun Thomas.PHONY:		proginstall
729e1091647SArun Thomas
730e1091647SArun Thomas
731e1091647SArun Thomas
732e1091647SArun Thomasrealall: ${SCRIPTS}
733e1091647SArun Thomas.if defined(SCRIPTS) && !target(scriptsinstall)				# {
734e1091647SArun ThomasSCRIPTSDIR?=${BINDIR}
735e1091647SArun ThomasSCRIPTSOWN?=${BINOWN}
736e1091647SArun ThomasSCRIPTSGRP?=${BINGRP}
737e1091647SArun ThomasSCRIPTSMODE?=${BINMODE}
738e1091647SArun Thomas
739e1091647SArun Thomasscriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
740e1091647SArun Thomas.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
741e1091647SArun Thomas
742e1091647SArun Thomas__scriptinstall: .USE
743e1091647SArun Thomas	${_MKTARGET_INSTALL}
744e1091647SArun Thomas	${INSTALL_FILE} \
745e1091647SArun Thomas	    -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
746e1091647SArun Thomas	    -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
747e1091647SArun Thomas	    -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
748e1091647SArun Thomas	    ${.ALLSRC} ${.TARGET}
749e1091647SArun Thomas
750e1091647SArun Thomas.for S in ${SCRIPTS:O:u}
751e1091647SArun Thomas.if ${MKUPDATE} == "no"
752e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
753e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${S})
754e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
755e1091647SArun Thomas.endif
756e1091647SArun Thomas.else
757e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
758e1091647SArun Thomas.if !defined(BUILD) && !make(all) && !make(${S})
759e1091647SArun Thomas${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
760e1091647SArun Thomas.endif
761e1091647SArun Thomas.endif
762e1091647SArun Thomas.endfor
763e1091647SArun Thomas.endif									# }
764e1091647SArun Thomas
765e1091647SArun Thomas.if !target(scriptsinstall)
766e1091647SArun Thomasscriptsinstall::
767e1091647SArun Thomas.endif
768e1091647SArun Thomas.PHONY:		scriptsinstall
769e1091647SArun Thomas
770e1091647SArun Thomas##### Pull in related .mk logic
771e1091647SArun ThomasLINKSOWN?= ${BINOWN}
772e1091647SArun ThomasLINKSGRP?= ${BINGRP}
773e1091647SArun ThomasLINKSMODE?= ${BINMODE}
774e1091647SArun Thomas.include <bsd.man.mk>
7759152e1c5SLionel Sambuc.include <bsd.nls.mk>
776e1091647SArun Thomas.include <bsd.files.mk>
777e1091647SArun Thomas.include <bsd.inc.mk>
778e1091647SArun Thomas.include <bsd.links.mk>
779e1091647SArun Thomas.include <bsd.sys.mk>
780e1091647SArun Thomas.include <bsd.dep.mk>
7819152e1c5SLionel Sambuc.include <bsd.clang-analyze.mk>
7829152e1c5SLionel Sambuc.include <bsd.clean.mk>
783e1091647SArun Thomas
784e1091647SArun Thomas${TARGETS}:	# ensure existence
785e1091647SArun Thomas
786e1091647SArun Thomas.endif	# HOSTPROG
787