xref: /netbsd-src/share/mk/bsd.prog.mk (revision b757af438b42b93f8c6571f026d8b8ef3eaf5fc9)
1#	$NetBSD: bsd.prog.mk,v 1.274 2012/02/29 20:07:57 tron Exp $
2#	@(#)bsd.prog.mk	8.2 (Berkeley) 4/2/94
3
4.ifndef HOSTPROG
5
6.include <bsd.init.mk>
7.include <bsd.shlib.mk>
8.include <bsd.gcc.mk>
9
10#
11# Definitions and targets shared among all programs built by a single
12# Makefile.
13#
14
15##### Basic targets
16realinstall:	proginstall scriptsinstall
17
18.gdbinit:
19	rm -f .gdbinit
20.if defined(DESTDIR) && !empty(DESTDIR)
21	echo "set solib-absolute-prefix ${DESTDIR}" > .gdbinit
22.else
23	touch .gdbinit
24.endif
25.for __gdbinit in ${GDBINIT}
26	echo "source ${__gdbinit}" >> .gdbinit
27.endfor
28
29CLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit
30
31.if defined(SHAREDSTRINGS)
32CLEANFILES+=strings
33.c.o:
34	${CC} -E ${CPPFLAGS} ${CFLAGS} ${.IMPSRC} | xstr -c -
35	@${CC} ${CPPFLAGS} ${CFLAGS} -c x.c -o ${.TARGET}
36	@rm -f x.c
37
38.cc.o .cpp.o .cxx.o .C.o:
39	${CXX} -E ${CPPFLAGS} ${CXXFLAGS} ${.IMPSRC} | xstr -c -
40	@mv -f x.c x.cc
41	@${CXX} ${CPPFLAGS} ${CXXFLAGS} -c x.cc -o ${.TARGET}
42	@rm -f x.cc
43.endif
44
45.if defined(MKPIE) && (${MKPIE} != "no")
46CFLAGS+=	${PIE_CFLAGS}
47AFLAGS+=	${PIE_AFLAGS}
48LDFLAGS+=	${PIE_LDFLAGS}
49.endif
50
51CFLAGS+=	${COPTS}
52OBJCFLAGS+=	${OBJCOPTS}
53MKDEP_SUFFIXES?=	.o .ln
54
55# CTF preserve debug symbols
56.if defined(MKDTRACE) && (${MKDTRACE} != "no") && (${CFLAGS:M-g} != "")
57CTFFLAGS+= -g
58CTFMFLAGS+= -g
59.endif
60
61# ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o
62.ifndef LIBCRTBEGIN
63LIBCRTBEGIN=	${DESTDIR}/usr/lib/crti.o ${_GCC_CRTBEGIN}
64.MADE: ${LIBCRTBEGIN}
65.endif
66.ifndef LIBCRTEND
67LIBCRTEND=	${_GCC_CRTEND} ${DESTDIR}/usr/lib/crtn.o
68.MADE: ${LIBCRTEND}
69.endif
70_SHLINKER=	${SHLINKDIR}/ld.elf_so
71
72.ifndef LIBCRT0
73LIBCRT0=	${DESTDIR}/usr/lib/crt0.o
74.MADE: ${LIBCRT0}
75.endif
76
77##### Installed system library definitions
78#
79#	E.g.
80#		LIBC?=${DESTDIR}/usr/lib/libc.a
81#		LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a
82#	etc..
83#	NB:	If you are a library here, add it in bsd.README
84
85.for _lib in \
86	archive \
87	asn1 \
88	atf_c \
89	atf_cxx \
90	bind9 \
91	bluetooth \
92	bsdmalloc \
93	bz2 \
94	c \
95	c_pic \
96	com_err \
97	compat \
98	crt0 \
99	crypt \
100	crypto \
101	crypto_idea \
102	crypto_mdc2 \
103	crypto_rc5 \
104	curses \
105	dbm \
106	des \
107	dns \
108	edit \
109	event \
110	expat \
111	fetch \
112	fl \
113	form \
114	g2c \
115	gcc \
116	gnumalloc \
117	gssapi \
118	hdb \
119	heimbase \
120	heimntlm \
121	hx509 \
122	intl \
123	ipsec \
124	isc \
125	isccc \
126	isccfg \
127	kadm5clnt \
128	kadm5srv \
129	kafs \
130	krb5 \
131	kvm \
132	l \
133	lber \
134	ldap \
135	ldap_r \
136	lua \
137	lwres \
138	m \
139	magic \
140	menu \
141	objc \
142	ossaudio \
143	pam \
144	pcap \
145	pci \
146	pmc \
147	posix \
148	pthread \
149	pthread_dbg \
150	puffs \
151	quota \
152	radius \
153	resolv \
154	rmt \
155	roken \
156	rpcsvc \
157	rt \
158	rump \
159	rumpfs_cd9660fs \
160	rumpfs_efs \
161	rumpfs_ext2fs \
162	rumpfs_ffs \
163	rumpfs_hfs \
164	rumpfs_lfs \
165	rumpfs_msdosfs \
166	rumpfs_nfs \
167	rumpfs_ntfs \
168	rumpfs_syspuffs \
169	rumpfs_tmpfs \
170	rumpfs_udf \
171	rumpfs_ufs \
172	rumpuser \
173	saslc \
174	skey \
175	sl \
176	sqlite3 \
177	ss \
178	ssh \
179	ssl \
180	ssp \
181	stdcxx \
182	supcxx \
183	terminfo \
184	tre \
185	usbhid \
186	util \
187	wind \
188	wrap \
189	y \
190	z
191.ifndef LIB${_lib:tu}
192LIB${_lib:tu}=	${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a
193.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
194.endif
195.endfor
196
197# PAM applications, if linked statically, need more libraries
198.if (${MKPIC} == "no")
199.if (${MKCRYPTO} != "no")
200PAM_STATIC_LDADD+= -lssh
201PAM_STATIC_DPADD+= ${LIBSSH}
202.endif
203.if (${MKKERBEROS} != "no")
204PAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \
205	-lroken -lcom_err -lheimbase -lcrypto
206PAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \
207	${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO}
208.endif
209.if (${MKSKEY} != "no")
210PAM_STATIC_LDADD+= -lskey
211PAM_STATIC_DPADD+= ${LIBSKEY}
212.endif
213PAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil
214PAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL}
215.else
216PAM_STATIC_LDADD=
217PAM_STATIC_DPADD=
218.endif
219
220#	NB:	If you are a library here, add it in bsd.README
221.for _lib in \
222	FS \
223	GL \
224	GLU \
225	ICE \
226	SM \
227	X11 \
228	XTrap \
229	Xau \
230	Xaw \
231	Xdmcp \
232	Xext \
233	Xfont \
234	Xft \
235	Xi \
236	Xinerama \
237	Xmu \
238	Xmuu \
239	Xpm \
240	Xrandr \
241	Xrender \
242	Xss \
243	Xt \
244	Xtst \
245	Xv \
246	Xxf86dga \
247	Xxf86misc \
248	Xxf86vm \
249	dps \
250	fntstubs \
251	fontcache \
252	fontconfig \
253	fontenc \
254	freetype \
255	lbxutil \
256	xkbfile
257.ifndef LIB${_lib:tu}
258LIB${_lib:tu}=	${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a
259.MADE:		${LIB${_lib:tu}}	# Note: ${DESTDIR} will be expanded
260.endif
261.endfor
262
263.if defined(RESCUEDIR)
264CPPFLAGS+=	-DRESCUEDIR=\"${RESCUEDIR}\"
265.endif
266
267_PROGLDOPTS=
268.if ${SHLINKDIR} != "/usr/libexec"	# XXX: change or remove if ld.so moves
269_PROGLDOPTS+=	-Wl,-dynamic-linker=${_SHLINKER}
270.endif
271.if ${SHLIBDIR} != "/usr/lib"
272_PROGLDOPTS+=	-Wl,-rpath,${SHLIBDIR} \
273		-L=${SHLIBDIR}
274.elif ${SHLIBINSTALLDIR} != "/usr/lib"
275_PROGLDOPTS+=	-Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \
276		-L=${SHLIBINSTALLDIR}
277.endif
278
279__proginstall: .USE
280	${_MKTARGET_INSTALL}
281	${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
282		${STRIPFLAG} ${.ALLSRC} ${.TARGET}
283
284__progrumpinstall: .USE
285	${_MKTARGET_INSTALL}
286	${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \
287		${STRIPFLAG} ${.ALLSRC} ${.TARGET}
288
289__progdebuginstall: .USE
290	${_MKTARGET_INSTALL}
291	${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \
292		${.ALLSRC} ${.TARGET}
293
294
295
296#
297# Backwards compatibility with Makefiles that assume that bsd.prog.mk
298# can only build a single binary.
299#
300
301_APPEND_MANS=yes
302_APPEND_SRCS=yes
303
304_CCLINKFLAGS=
305
306.if defined(PROG_CXX)
307PROG=		${PROG_CXX}
308_CCLINK=	${CXX} ${_CCLINKFLAGS}
309.endif
310
311.if defined(RUMPPRG)
312PROG=			${RUMPPRG}
313.ifndef CRUNCHEDPROG
314PROGS=			${RUMPPRG} rump.${RUMPPRG}
315. if defined(SRCS)
316SRCS.rump.${PROG}:=	${SRCS} ${PROG}_rumpops.c ${RUMPSRCS}
317SRCS+=			${PROG}_hostops.c
318. else
319SRCS=			${PROG}.c ${PROG}_hostops.c
320SRCS.rump.${PROG}=	${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS}
321. endif
322DPSRCS+=		${PROG}_rumpops.c ${RUMPSRCS}
323LDADD.rump.${PROG}+=	-lrumpclient
324DPADD.rump.${PROG}+=	${LIBRUMPCLIENT}
325MAN.rump.${PROG}=	# defined but feeling empty
326_RUMPINSTALL.rump.${PROG}=# defined
327.else # CRUNCHEDPROG
328PROGS=			${PROG}
329CPPFLAGS+=		-DCRUNCHOPS
330.endif
331.endif
332
333.if defined(PROG)
334_CCLINK?=	${CC} ${_CCLINKFLAGS}
335.  if defined(MAN)
336MAN.${PROG}=	${MAN}
337_APPEND_MANS=	no
338.  endif
339.  if !defined(OBJS)
340OBJS=		${OBJS.${PROG}}
341.  endif
342.  if defined(PROGNAME)
343PROGNAME.${PROG}=	${PROGNAME}
344.  endif
345.  if defined(SRCS)
346SRCS.${PROG}=	${SRCS}
347_APPEND_SRCS=	no
348.  endif
349.endif
350
351# Turn the single-program PROG and PROG_CXX variables into their multi-word
352# counterparts, PROGS and PROGS_CXX.
353.if !defined(RUMPPRG)
354.  if defined(PROG_CXX) && !defined(PROGS_CXX)
355PROGS_CXX=	${PROG_CXX}
356.  elif defined(PROG) && !defined(PROGS)
357PROGS=		${PROG}
358.  endif
359.endif
360
361#
362# Per-program definitions and targets.
363#
364
365_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS}
366# Definitions specific to C programs.
367.for _P in ${PROGS}
368SRCS.${_P}?=	${_P}.c
369_CCLINK.${_P}=	${CC} ${_CCLINKFLAGS}
370_CFLAGS.${_P}=	${CFLAGS} ${CPUFLAGS}
371_CPPFLAGS.${_P}=	${CPPFLAGS}
372_COPTS.${_P}=	${COPTS}
373.endfor
374
375_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS}
376# Definitions specific to C++ programs.
377.for _P in ${PROGS_CXX}
378SRCS.${_P}?=	${_P}.cc
379_CCLINK.${_P}=	${CXX} ${_CCLINKFLAGS}
380.endfor
381
382# Language-independent definitions.
383.for _P in ${PROGS} ${PROGS_CXX}					# {
384
385BINDIR.${_P}?=		${BINDIR}
386PROGNAME.${_P}?=	${_P}
387
388.if ${MKDEBUG} != "no" && !commands(${_P})
389_PROGDEBUG.${_P}:=	${PROGNAME.${_P}}.debug
390.endif
391
392.if defined(PAXCTL_FLAGS)
393PAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS}
394.endif
395
396##### PROG specific flags.
397
398_LDADD.${_P}=		${LDADD}    ${LDADD.${_P}}
399_LDFLAGS.${_P}=		${LDFLAGS}  ${LDFLAGS.${_P}}
400_LDSTATIC.${_P}=	${LDSTATIC} ${LDSTATIC.${_P}}
401
402##### Build and install rules
403.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss])
404SRCS+=		${SRCS.${_P}}	# For bsd.dep.mk
405.endif
406
407_YPSRCS.${_P}=	${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}}
408
409DPSRCS+=		${_YPSRCS.${_P}}
410CLEANFILES+=		${_YPSRCS.${_P}}
411
412.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth)
413OBJS.${_P}+=	${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
414LOBJS.${_P}+=	${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln}
415.endif
416
417.if defined(OBJS.${_P}) && !empty(OBJS.${_P})			# {
418.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}}
419
420.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \
421   && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \
422       || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \
423   && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE))
424.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g}
425#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \
426#     ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5}
427.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \
428     || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \
429     || ${CXXFLAGS.$f:D5} == "5") \
430    || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/}))
431XOBJS.${_P}+=	${f:R:S/$/.o/}
432.else
433XSRCS.${_P}+=	${f}
434NODPSRCS+=	${f}
435.endif
436.endfor
437
438${_P}: .gdbinit ${LIBCRT0} ${XOBJS.${_P}} ${SRCS.${_P}} ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
439	${_MKTARGET_LINK}
440.if defined(DESTDIR)
441	${_CCLINK.${_P}} -Wl,-nostdlib \
442	    ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
443	    -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \
444	    -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \
445	    ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
446	    ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib
447.else
448	${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
449	    -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}}
450	    ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
451	    ${_LDADD.${_P}}
452.endif	# defined(DESTDIR)
453.if defined(CTFMERGE)
454	${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
455.endif
456.if defined(PAXCTL_FLAGS.${_P})
457	${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
458.endif
459.if ${MKSTRIPIDENT} != "no"
460	${OBJCOPY} -R .ident ${.TARGET}
461.endif
462
463CLEANFILES+=	${_P}.d
464.if exists(${_P}.d)
465.include "${_P}.d"		# include -MD depend for program.
466.endif
467.else	# USE_COMBINE
468
469${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS}
470
471${_P}: .gdbinit ${LIBCRT0} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
472.if !commands(${_P})
473	${_MKTARGET_LINK}
474	${_CCLINK.${_P}} \
475	    ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \
476	    ${OBJS.${_P}} ${_LDADD.${_P}} \
477	    ${_PROGLDOPTS}
478.if defined(CTFMERGE)
479	${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
480.endif
481.if defined(PAXCTL_FLAGS.${_P})
482	${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
483.endif
484.if ${MKSTRIPIDENT} != "no"
485	${OBJCOPY} -R .ident ${.TARGET}
486.endif
487.endif	# !commands(${_P})
488.endif	# USE_COMBINE
489
490${_P}.ro: ${OBJS.${_P}} ${DPADD}
491	${_MKTARGET_LINK}
492	${CC} ${LDFLAGS} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}}
493
494.if defined(_PROGDEBUG.${_P})
495${_PROGDEBUG.${_P}}: ${_P}
496	${_MKTARGET_CREATE}
497	(  ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \
498	&& ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \
499		--add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \
500	) || (rm -f ${_PROGDEBUG.${_P}}; false)
501.endif
502
503.endif	# defined(OBJS.${_P}) && !empty(OBJS.${_P})			# }
504
505.if !defined(MAN.${_P})
506MAN.${_P}=	${_P}.1
507.endif	# !defined(MAN.${_P})
508.if !empty(_APPEND_MANS:M[Yy][Ee][Ss])
509MAN+=		${MAN.${_P}}
510.endif
511
512realall: ${_P} ${_PROGDEBUG.${_P}}
513
514CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}}
515
516.if defined(OBJS.${_P}) && !empty(OBJS.${_P})
517CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}}
518.endif
519
520_PROG_INSTALL+=	proginstall-${_P}
521
522.if !target(proginstall-${_P})						# {
523proginstall-${_P}::	${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
524		${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
525.PRECIOUS:	${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
526		${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
527
528.if ${MKUPDATE} == "no"
529.if defined(_RUMPINSTALL.${_P})
530${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall
531.else
532${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall
533.endif
534.if !defined(BUILD) && !make(all) && !make(${_P})
535${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE
536.endif
537.if defined(_PROGDEBUG.${_P})
538${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall
539.if !defined(BUILD) && !make(all) && !make(${_P})
540${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE
541.endif
542.endif	#  define(_PROGDEBUG.${_P})
543.else	# MKUPDATE != no
544.if defined(_RUMPINSTALL.${_P})
545${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall
546.else
547${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall
548.endif
549.if !defined(BUILD) && !make(all) && !make(${_P})
550${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE
551.endif
552.if defined(_PROGDEBUG.${_P})
553${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall
554.if !defined(BUILD) && !make(all) && !make(${_P})
555${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE
556.endif
557.endif	#  defined(_PROGDEBUG.${_P})
558.endif	# MKUPDATE != no
559
560.endif	# !target(proginstall-${_P})					# }
561
562lint: lint-${_P}
563lint-${_P}: ${LOBJS.${_P}}
564.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P})
565	${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[  ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}}
566.endif
567
568.endfor # _P in ${PROGS} ${PROGS_CXX}					# }
569
570.if defined(OBJS) && !empty(OBJS) && \
571    (empty(PROGS) && empty(PROGS_CXX))
572CLEANFILES+= ${OBJS} ${LOBJS}
573.endif
574
575.if !target(proginstall)
576proginstall:: ${_PROG_INSTALL}
577.endif
578.PHONY:		proginstall
579
580
581
582realall: ${SCRIPTS}
583.if defined(SCRIPTS) && !target(scriptsinstall)				# {
584SCRIPTSDIR?=${BINDIR}
585SCRIPTSOWN?=${BINOWN}
586SCRIPTSGRP?=${BINGRP}
587SCRIPTSMODE?=${BINMODE}
588
589scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
590.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
591
592__scriptinstall: .USE
593	${_MKTARGET_INSTALL}
594	${INSTALL_FILE} \
595	    -o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
596	    -g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
597	    -m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
598	    ${.ALLSRC} ${.TARGET}
599
600.for S in ${SCRIPTS:O:u}
601.if ${MKUPDATE} == "no"
602${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
603.if !defined(BUILD) && !make(all) && !make(${S})
604${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
605.endif
606.else
607${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
608.if !defined(BUILD) && !make(all) && !make(${S})
609${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
610.endif
611.endif
612.endfor
613.endif									# }
614
615.if !target(scriptsinstall)
616scriptsinstall::
617.endif
618.PHONY:		scriptsinstall
619
620##### Pull in related .mk logic
621LINKSOWN?= ${BINOWN}
622LINKSGRP?= ${BINGRP}
623LINKSMODE?= ${BINMODE}
624.include <bsd.man.mk>
625.include <bsd.nls.mk>
626.include <bsd.files.mk>
627.include <bsd.inc.mk>
628.include <bsd.links.mk>
629.include <bsd.sys.mk>
630.include <bsd.dep.mk>
631.include <bsd.clang-analyze.mk>
632.include <bsd.clean.mk>
633
634${TARGETS}:	# ensure existence
635
636.endif	# HOSTPROG
637