Makefile revision 1.257
1#	$NetBSD: Makefile,v 1.257 2003/10/24 20:12:04 jdolecek Exp $
2#	from: @(#)Makefile	8.7 (Berkeley) 5/25/95
3
4# Environment variables without default values:
5#   DESTDIR must be set before anything in this file will work.
6#   RELEASEDIR is where the tarred up stuff for a snapshot or
7#	release will be placed.
8#
9# Environment variables with default values:
10#   LOCALTIME will set the default local time for the system you
11#	build; it determines what /etc/localtime is symlink'd to.
12#   KERNSRCDIR points to kernel source; it is set by default to ../sys,
13#	but can be overridden.
14#   KERNOBJDIR is the kernel build directory, it defaults to
15#	${KERNSRCDIR}/arch/${MACHINE}/compile, but can be overridden.
16#   KERNCONFDIR is where the configuration files for kernels are found;
17#	default is ${KERNSRCDIR}/arch/${MACHINE}/conf but can be overridden.
18#   MKUPDATE; if not `no', don't do a 'make clean' before kernel compile
19#   NO_SENDMAIL is normally undefined; if defined, it will not do a
20#	`make distribution' in the sendmail config file source directory.
21#
22# Targets:
23#    distribution: makes a full NetBSD distribution in DESTDIR. If
24#	INSTALL_DONE is set, it will not do a `make install.'
25#	if DISTRIBUTION_DONE is set, it will not do anything.
26#    distrib-dirs: creates an empty NetBSD directory tree in DESTDIR.
27#	Called by distribution.
28#    snapshot: calls distribution, above, and then tars up the files
29#	into a release(7) format in RELEASEDIR/${MACHINE}.
30#	Any port-dependent stuff for this target is found in
31#	etc.${MACHINE}/Makefile.inc.
32#    release: a synonym for `snapshot'
33#
34
35# For NO_SENDMAIL, INSTPRIV, MKCRYPTO
36#
37.include <bsd.own.mk>
38
39# For KERNSRCDIR, KERNOBJDIR, ...
40#
41.include <bsd.kernobj.mk>
42
43# For TARGET_ENDIANNESS
44#
45.include <bsd.endian.mk>
46
47
48.MAKEOVERRIDES+=	USETOOLS
49
50TZDIR=		/usr/share/zoneinfo
51LOCALTIME?=	UTC
52MAKESUMS=	CKSUM=${TOOL_CKSUM:Q} ${HOST_SH} ${NETBSDSRCDIR}/distrib/sets/makesums
53
54# Flags for creating ISO CDROM image
55# mkisofs is expected to be in $PATH, install via pkgsrc/sysutils/cdrecord
56# Note: At least mkisofs 2.0 should be used.
57#
58MKISOFS?=	mkisofs
59DISTRIBREV!=	sh ${KERNSRCDIR}/conf/osrelease.sh -s
60# ISO 9660 volume ID.  Note that this can only contain [A-Z0-9_].
61ISO_VOLID!=	echo NETBSD_${MACHINE}_${DISTRIBREV} | tr a-z A-Z
62MKISOFS_FLAGS+= -J -l \
63		-r -T -v \
64		-V ${ISO_VOLID} \
65		-P "The NetBSD Project" \
66		-m "${RELEASEDIR}/${MACHINE}/installation/cdrom"
67
68# MD Makefile.inc may append MD targets to BIN[123].  Make sure all
69# are empty, to preserve the old semantics of setting them below with "=".
70#
71BIN1=
72BIN2=
73BIN3=
74
75# Directories to build in ${RELEASEDIR}/${MACHINE}.
76# MD Makefile.inc files can add to this.
77# NOTE: Parent directories must be listed before subdirectories.
78#
79INSTALLATION_DIRS=	binary binary/sets binary/kernel installation
80
81.if exists(etc.${MACHINE}/Makefile.inc)
82.include "etc.${MACHINE}/Makefile.inc"
83.endif
84
85# -rw-r--r--
86BINOWN= root
87BINGRP= wheel
88UTMPGRP= utmp
89BIN1+=	bootptab changelist csh.cshrc csh.login csh.logout daily \
90	daily.conf dm.conf floppytab ftpchroot ftpusers \
91	gettytab group hosts hosts.lpd inetd.conf lkm.conf \
92	mailer.conf man.conf monthly monthly.conf mrouted.conf \
93	netconfig networks newsyslog.conf nsswitch.conf ntp.conf \
94	passwd.conf phones printcap profile protocols rbootd.conf rc rc.conf \
95	rc.lkm rc.local rc.subr rc.shutdown remote rpc \
96	security security.conf services shells sysctl.conf syslog.conf \
97	weekly weekly.conf wscons.conf \
98	etc.${MACHINE}/ttys
99
100# Use machine-specific disktab if it exists, or the MI one otherwise
101.if exists(etc.${MACHINE}/disktab)
102BIN1+=	etc.${MACHINE}/disktab
103.else
104BIN1+=	disktab
105.endif
106
107.if exists(etc.${MACHINE}/ld.so.conf)
108BIN1+=	etc.${MACHINE}/ld.so.conf
109.endif
110
111.if exists(etc.${MACHINE}/ttyaction)
112BIN1+=	etc.${MACHINE}/ttyaction
113.endif
114
115# -rw-rw-r--
116BIN2+=	motd
117
118# -rw-------
119BIN3+=	hosts.equiv
120
121ETC_PKG=-T etc_pkg
122BASE_PKG=-T base_pkg
123ETC_INSTALL_FILE=cd ${.CURDIR} && ${INSTALL_FILE} ${ETC_PKG}
124ETC_INSTALL_LINK=cd ${.CURDIR} && ${INSTALL_LINK} ${ETC_PKG}
125ETC_INSTALL_SYMLINK=cd ${.CURDIR} && ${INSTALL_SYMLINK} ${ETC_PKG}
126
127NAMEDB=	127 root.cache named.conf localhost loopback.v6
128
129.if ${TARGET_ENDIANNESS} == "1234"
130PWD_MKDB_ENDIAN=	-L
131.elif ${TARGET_ENDIANNESS} == "4321"
132PWD_MKDB_ENDIAN=	-B
133.else
134PWD_MKDB_ENDIAN=
135.endif
136
137
138# distribution --
139#	Build a distribution
140#
141distribution: check_DESTDIR .WAIT distrib-dirs
142.if !defined(DISTRIBUTION_DONE)
143.if !defined(INSTALL_DONE)
144	(cd ${NETBSDSRCDIR}; ${MAKE} _DISTRIB= includes)
145	(cd ${NETBSDSRCDIR}; ${MAKE} _DISTRIB= install)
146.endif	# !INSTALL_DONE
147	(cd ${.CURDIR}; ${MAKE} install-etc-files)
148.endif	# !DISTRIBUTION_DONE
149
150.PHONY: MAKEDEV
151MAKEDEV:
152	awk -v ETCDIR="${.CURDIR}" -f ${.CURDIR}/MAKEDEV.awk ${.CURDIR}/MAKEDEV.tmpl > ${.TARGET}
153
154	
155
156# install-etc-files --
157#	Install etc (config) files; not performed by "make build"
158#
159install-etc-files: check_DESTDIR MAKEDEV
160	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
161	    ${BIN1} ${DESTDIR}/etc
162	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 664 \
163	    ${BIN2} ${DESTDIR}/etc
164	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 600 \
165	    ${BIN3} ${DESTDIR}/etc
166	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
167	    aliases ${DESTDIR}/etc/mail
168	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
169	    /dev/null ${DESTDIR}/etc/mail/local-host-names
170	${ETC_INSTALL_FILE} -o root -g wheel -m 600 \
171	    crontab ${DESTDIR}/var/cron/tabs/root
172	${ETC_INSTALL_FILE} -o root -g wheel -m 600 \
173	    master.passwd ${DESTDIR}/etc
174	${TOOL_PWD_MKDB} -p ${PWD_MKDB_ENDIAN} -d ${DESTDIR}/ \
175	    ${DESTDIR}/etc/master.passwd
176.if ${MKUNPRIVED} != "no"
177	( \
178		for metaent in passwd pwd.db spwd.db; do \
179	    		echo "./etc/$${metaent} type=file mode=0644 uname=root gname=wheel tags=etc_pkg"; \
180		done; \
181	) | ${METALOG.add}
182.endif	# MKUNPRIVED != no
183	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 555 \
184	    MAKEDEV ${DESTDIR}/dev
185	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 555 \
186	    MAKEDEV.local ${DESTDIR}/dev
187	${ETC_INSTALL_FILE} -o root -g wheel -m 600 \
188	    minfree ${DESTDIR}/var/crash
189.for file in cshrc login profile shrc
190	${ETC_INSTALL_FILE} -o root -g wheel -m 644 \
191	    root/dot.${file} ${DESTDIR}/root/.${file}
192.endfor
193	${ETC_INSTALL_FILE} -o root -g wheel -m 600 \
194	    root/dot.klogin ${DESTDIR}/root/.klogin
195	rm -f ${DESTDIR}/.cshrc ${DESTDIR}/.profile
196	${ETC_INSTALL_LINK} ${DESTDIR}/root/.cshrc ${DESTDIR}/.cshrc
197	${ETC_INSTALL_LINK} ${DESTDIR}/root/.profile ${DESTDIR}/.profile
198	(cd ${.CURDIR}/defaults; ${MAKE} install)
199	(cd ${.CURDIR}/mtree; ${MAKE} install)
200.for file in ${NAMEDB}
201	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
202	    namedb/${file} ${DESTDIR}/etc/namedb
203.endfor
204	(cd ${.CURDIR}/powerd; ${MAKE} install)
205	(cd ${.CURDIR}/rc.d; ${MAKE} install)
206	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
207	    postinstall ${DESTDIR}/etc
208	${ETC_INSTALL_SYMLINK} -o root -g wheel -m 755 \
209	    ${TZDIR}/${LOCALTIME} ${DESTDIR}/etc/localtime
210	${ETC_INSTALL_SYMLINK} -o root -g wheel -m 755 \
211	    /usr/sbin/rmt ${DESTDIR}/etc/rmt
212	${ETC_INSTALL_FILE} -o ${BINOWN} -g operator -m 664 \
213	    /dev/null ${DESTDIR}/etc/dumpdates
214	${ETC_INSTALL_FILE} -o ${BINOWN} -g operator -m 600 \
215	    /dev/null ${DESTDIR}/etc/skeykeys
216	${ETC_INSTALL_FILE} -o root -g wheel -m 600 \
217	    /dev/null ${DESTDIR}/var/at/at.deny
218	${ETC_INSTALL_FILE} -o nobody -g ${BINGRP} -m 664 \
219	    /dev/null ${DESTDIR}/var/db/locate.database
220	${ETC_INSTALL_FILE} -o uucp -g dialer -m 640 \
221	    /dev/null ${DESTDIR}/var/log/aculog
222	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 600 \
223	    /dev/null ${DESTDIR}/var/log/authlog
224	${ETC_INSTALL_FILE} -o root -g wheel -m 600 \
225	    /dev/null ${DESTDIR}/var/log/cron
226	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 664 \
227	    /dev/null ${DESTDIR}/var/log/lastlog
228	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 640 \
229	    /dev/null ${DESTDIR}/var/log/lpd-errs
230	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 600 \
231	    /dev/null ${DESTDIR}/var/log/maillog
232	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
233	    /dev/null ${DESTDIR}/var/log/messages
234	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 600 \
235	    /dev/null ${DESTDIR}/var/log/secure
236	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
237	    /dev/null ${DESTDIR}/var/log/sendmail.st
238	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
239	    /dev/null ${DESTDIR}/var/log/wtmp
240	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
241	    /dev/null ${DESTDIR}/var/log/wtmpx
242	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 600 \
243	    /dev/null ${DESTDIR}/var/log/xferlog
244	${ETC_INSTALL_FILE} -o daemon -g staff -m 664 \
245	    /dev/null ${DESTDIR}/var/msgs/bounds
246	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${UTMPGRP} -m 664 \
247	    /dev/null ${DESTDIR}/var/run/utmp
248	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${UTMPGRP} -m 664 \
249	    /dev/null ${DESTDIR}/var/run/utmpx
250	${ETC_INSTALL_FILE} -o games -g games -m 664 \
251	    /dev/null ${DESTDIR}/var/games/atc_score
252	${ETC_INSTALL_FILE} -o games -g games -m 664 \
253	    /dev/null ${DESTDIR}/var/games/battlestar.log
254	${ETC_INSTALL_FILE} -o games -g games -m 664 \
255	    /dev/null ${DESTDIR}/var/games/cfscores
256	${ETC_INSTALL_FILE} -o games -g games -m 664 \
257	    /dev/null ${DESTDIR}/var/games/criblog
258	${ETC_INSTALL_FILE} -o games -g games -m 660 \
259	    /dev/null ${DESTDIR}/var/games/hackdir/perm
260	${ETC_INSTALL_FILE} -o games -g games -m 660 \
261	    /dev/null ${DESTDIR}/var/games/hackdir/record
262	${ETC_INSTALL_FILE} -o games -g games -m 664 \
263	    /dev/null ${DESTDIR}/var/games/larn/llog12.0
264	${ETC_INSTALL_FILE} -o games -g games -m 664 \
265	    /dev/null ${DESTDIR}/var/games/larn/lscore12.0
266	${ETC_INSTALL_FILE} -o games -g games -m 664 \
267	    /dev/null ${DESTDIR}/var/games/larn/playerids
268	${ETC_INSTALL_FILE} -o games -g games -m 664 \
269	    /dev/null ${DESTDIR}/var/games/robots_roll
270	${ETC_INSTALL_FILE} -o games -g games -m 664 \
271	    /dev/null ${DESTDIR}/var/games/rogue.scores
272	${ETC_INSTALL_FILE} -o games -g games -m 664 \
273	    /dev/null ${DESTDIR}/var/games/saillog
274	${ETC_INSTALL_FILE} -o games -g games -m 664 \
275	    /dev/null ${DESTDIR}/var/games/snakerawscores
276	${ETC_INSTALL_FILE} -o games -g games -m 664 \
277	    /dev/null ${DESTDIR}/var/games/snake.log
278	${ETC_INSTALL_FILE} -o games -g games -m 664 \
279	    /dev/null ${DESTDIR}/var/games/tetris.scores
280	(cd ${.CURDIR}/skel; ${MAKE} distribution)
281	(cd ${NETBSDSRCDIR}/usr.bin/mail; ${MAKE} distribution)
282	(cd ${NETBSDSRCDIR}/gnu/usr.sbin/postfix/; ${MAKE} distribution)
283.if (${MKCRYPTO} != "no")
284	(cd ${NETBSDSRCDIR}/usr.bin/ssh; ${MAKE} distribution)
285.endif
286.if !defined(NO_SENDMAIL) || ${NO_SENDMAIL} == "no"
287	(cd ${NETBSDSRCDIR}/gnu/usr.sbin/sendmail/cf/cf; ${MAKE} distribution)
288.endif
289
290
291# install-obsolete-lists --
292#	Install var/db/obsolete set lists; this is performed by "make build"
293#
294OBSOLETE.dir=		${.OBJDIR}/obsolete.dir
295OBSOLETE.files=		base comp etc games man misc text
296
297install-obsolete-lists:
298	mkdir -p ${OBSOLETE.dir}
299	(cd ${NETBSDSRCDIR}/distrib/sets && \
300	    MAKE=${MAKE:Q} ${HOST_SH} ./makeobsolete -t ${OBSOLETE.dir})
301.for file in ${OBSOLETE.files}
302	${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
303	    ${OBSOLETE.dir}/${file} ${DESTDIR}/var/db/obsolete
304.endfor
305
306
307# distrib-dirs --
308#	Populate $DESTDIR with directories needed by NetBSD
309#
310.if ${MKUNPRIVED} == "no"
311TOOL_MTREE.unpriv=
312.else
313TOOL_MTREE.unpriv=	-W
314.endif
315
316distrib-dirs: check_DESTDIR
317.if !defined(DISTRIBUTION_DONE)
318	${INSTALL_DIR} -o root -g wheel -m 755 ${BASE_PKG} ${DESTDIR}
319.endif
320	${TOOL_MTREE} -def ${.CURDIR}/mtree/NetBSD.dist -N ${.CURDIR} \
321	    -p ${DESTDIR}/ -U ${TOOL_MTREE.unpriv}
322
323
324# release, snapshot --
325#	Build a full distribution including kernels & install media.
326#
327release snapshot: check_DESTDIR check_RELEASEDIR .WAIT \
328		    distribution .WAIT \
329		    snap_pre .WAIT snap_kern .WAIT \
330		    snap_post .WAIT snap_md_post
331	(cd ${NETBSDSRCDIR}/distrib/sets; ${MAKE} sets)
332	${MAKESUMS} -t ${RELEASEDIR}/${MACHINE}/binary/kernel '*.gz'
333
334
335# iso-image --
336#	Standalone target to create a CDROM image after the release
337#	was composed.  Should be run after "make release" in src and xsrc.
338#
339#	Note: At least mkisofs 2.0 should be used.
340#
341CDROM.image=${RELEASEDIR}/${MACHINE}/installation/cdrom/netbsd-${MACHINE}.iso
342CDROM.dir=	cdrom.dir
343CDROM.pathlist=	cdrom.pathlist
344
345iso-image: check_DESTDIR check_RELEASEDIR .WAIT iso-image-md-post
346	${MAKESUMS} -t ${RELEASEDIR}/${MACHINE}/installation/cdrom '*.iso'
347
348iso-image-setup: check_RELEASEDIR
349	rm -f ${CDROM.pathlist}
350	echo "${MACHINE}=${RELEASEDIR}/${MACHINE}" >> ${CDROM.pathlist}
351	mkdir -p ${CDROM.dir}
352	mkdir -p ${RELEASEDIR}/${MACHINE}/installation/cdrom
353
354# iso-image-mi --
355#	Create the image after the MD operations have completed.
356#
357iso-image-mi: check_DESTDIR check_RELEASEDIR .WAIT \
358		iso-image-setup .WAIT iso-image-md-pre
359	@if ! ${MKISOFS} --version; then \
360		echo "install pkgsrc/sysutils/cdrecord and run 'make iso-image'." ; \
361		false; \
362	fi
363	${MKISOFS} ${MKISOFS_FLAGS} -graft-points -path-list ${CDROM.pathlist} \
364	    -o ${CDROM.image} ${CDROM.dir}
365
366# iso-image-md-pre --
367#	Setup ${CDROM.dir} to produce a bootable CD image.
368#	Overridden by etc.$MACHINE/Makefile.inc
369#
370iso-image-md-pre: check_DESTDIR check_RELEASEDIR
371#	(empty -- look in the machine-dependent Makefile.inc)
372
373# iso-image-md-post --
374#	Fixup the CD-image to be bootable.
375#	Overridden by etc.$MACHINE/Makefile.inc
376#
377iso-image-md-post: check_DESTDIR check_RELEASEDIR .WAIT iso-image-mi
378#	(empty -- look in the machine-dependent Makefile.inc)
379
380
381# snap_pre --
382#	Create ${RELEASEDIR} and necessary subdirectories.
383#
384snap_pre: check_DESTDIR check_RELEASEDIR
385	${INSTALL} -d -m 755 ${RELEASEDIR}
386.if ${MKUPDATE} == "no"
387# Could be a mount point, ignore the errors
388	-/bin/rm -rf ${RELEASEDIR}/${MACHINE}
389.endif
390	${INSTALL} -d -m 755 ${RELEASEDIR}/${MACHINE}
391.for dir in ${INSTALLATION_DIRS}
392	${INSTALL} -d -m 755 ${RELEASEDIR}/${MACHINE}/${dir}
393.endfor
394
395# snap_post --
396#	Build the install media and notes from distrib
397#
398snap_post: check_DESTDIR check_RELEASEDIR
399.if ${MKUPDATE} == "no"
400	cd ${NETBSDSRCDIR}/distrib && ${MAKE} cleandir
401.endif
402	cd ${NETBSDSRCDIR}/distrib && ${MAKE} depend && ${MAKE} && \
403	    ${MAKE} release
404
405# snap_kern --
406#	This target builds the kernels specified by each port.
407#	A port may specify the following kernels:
408#
409#	KERNEL_SETS		The list of kernels that will be
410#				packaged into sets, named
411#				kern-${kernel}.tgz.  These kernels
412#				are also placed in the binary/kernel
413#				area of the release package as
414#				netbsd-${kernel}.gz.
415#
416#	EXTRA_KERNELS		Additional kernels to place in the
417#				binary/kernel area of the release
418#				package as netbsd-${kernel}.gz, but
419#				which are not placed into sets. This
420#				allows a port to provide e.g. a netbootable
421#				installation kernel containing a ramdisk.
422#
423#	BUILD_KERNELS		Additional kernels to build which are
424#				not placed into sets nor into the
425#				binary/kernel area of the release
426#				package.  These are typically kernels
427#				that are built for inclusion only in
428#				installation disk/CD-ROM/tape images.
429#
430#	A port may also specify KERNEL_SUFFIXES, which is an optional list
431#	of filename suffixes for kernels to include in the kernel sets and
432#	in the binary/kernel area of the release package (e.g. "netbsd" vs.
433#	"netbsd.ecoff" and "netbsd.srec").  It is not an error if kernels
434#	with these suffixes do not exist in the kernel build directory.
435#
436#
437# A list of all the kernels to build, which can be overridden from
438# external sources (such as make(1)'s environment or command line)
439#
440ALL_KERNELS?=	${KERNEL_SETS} ${EXTRA_KERNELS} ${BUILD_KERNELS}
441
442GETKERNELAWK=	awk '/^config/ {print $$2; found=1} \
443		END{ if (found == 0) print "netbsd"; }'
444
445.if !target(snap_kern)						# {
446
447# build_kernels --
448#	Configure & compile kernels listed in ${ALL_KERNELS}
449#
450.if !defined(KERNELS_DONE)						# {
451.for configfile in ${ALL_KERNELS}					# {
452_KERNELS_TO_BUILD+=kern-${configfile}
453kern-${configfile}:
454	cd ${KERNCONFDIR} && ${TOOL_CONFIG} -s ${KERNSRCDIR} \
455	    -b ${KERNOBJDIR}/${configfile:C/.*\///} ${configfile}
456.if ${MKUPDATE} == "no"
457	cd ${KERNOBJDIR}/${configfile:C/.*\///} && ${MAKE} distclean
458.endif
459	cd ${KERNOBJDIR}/${configfile:C/.*\///} && ${MAKE} depend && ${MAKE}
460.endfor	# ALL_KERNELS							# }
461.endif	# KERNELS_DONE							# }
462
463build_kernels: ${_KERNELS_TO_BUILD}
464
465# build_kernelsets --
466#	Create kernel sets from ${KERNEL_SETS} into
467#	${RELEASEDIR}/${MACHINE}/binary/sets
468#
469.for configfile in ${KERNEL_SETS}					# {
470_KERNELSETS_TO_BUILD+=kernset-${configfile}
471kernset-${configfile}:
472	@ kernlist=`${GETKERNELAWK} ${KERNCONFDIR}/${configfile}`; \
473	kerndir=${KERNOBJDIR}/${configfile:C/.*\///}; \
474	kernsuffixes="${KERNEL_SUFFIXES:S/^/./}"; \
475	kern_tgz=${RELEASEDIR}/${MACHINE}/binary/sets/kern-${configfile}.tgz; \
476	pax_cmd="GZIP=-9 ${TOOL_PAX} -O -zw -M -N ${NETBSDSRCDIR}/etc -f $${kern_tgz}"; \
477	cd $${kerndir} && { \
478		kernels=; newest=; \
479		for kernel in $${kernlist}; do \
480			for s in "" $${kernsuffixes}; do \
481				ks="$${kernel}$${s}"; \
482				[ -f $${ks} ] || continue; \
483				kernels="$${kernels} $${ks}"; \
484				[ -z "$${newest}" -o $${ks} -nt "$${newest}" ] && \
485					newest=$${ks}; \
486			done; \
487		done; \
488		[ $${kern_tgz} -nt "$${newest}" ] || { \
489			echo "echo $${kernels} | $${pax_cmd}"; \
490			( echo "/set uname=${BINOWN} gname=${BINGRP}"; \
491			echo ". type=dir optional"; \
492			for kernel in $${kernels}; do \
493				echo "./$${kernel} type=file"; \
494			done ) | eval $${pax_cmd}; \
495		} \
496	}
497.endfor	# KERNEL_SETS							# }
498
499build_kernelsets: ${_KERNELSETS_TO_BUILD}
500
501# build_releasekernels --
502#	Build kernel.gz from ${KERNEL_SETS} ${EXTRA_KERNELS} into
503#	${RELEASEDIR}/${MACHINE}/binary/kernel
504#
505.for configfile in ${KERNEL_SETS} ${EXTRA_KERNELS}			# {
506_RELEASEKERNELS_TO_BUILD+=releasekern-${configfile}
507releasekern-${configfile}:
508	@ kernlist=`${GETKERNELAWK} ${KERNCONFDIR}/${configfile:C/.*\///}`; \
509	kerndir=${KERNOBJDIR}/${configfile:C/.*\///}; \
510	kernsuffixes="${KERNEL_SUFFIXES:S/^/./}"; \
511	cd $${kerndir} && {	\
512		for kernel in $${kernlist}; do \
513			for s in "" $${kernsuffixes}; do \
514				ks="$${kernel}$${s}"; \
515				[ ! -f $${ks} ] && continue; \
516				knl_gz="${RELEASEDIR}/${MACHINE}/binary/kernel/$${ks}-${configfile:C/.*\///}.gz"; \
517				[ $${knl_gz} -nt $${ks} ] && continue; \
518				echo "gzip -c -9 < $${kerndir}/$${ks} > $${knl_gz}"; \
519				gzip -c -9 < $${ks} > $${knl_gz}; \
520			done; \
521		done; \
522	}
523.endfor	# KERNEL_SETS EXTRA_KERNELS					# }
524
525build_releasekernels: ${_RELEASEKERNELS_TO_BUILD}
526
527# snap_kern --
528#	build the kernels, then the sets & release kernels
529#
530snap_kern: check_DESTDIR check_RELEASEDIR .WAIT \
531	    build_kernels .WAIT \
532	    build_kernelsets build_releasekernels
533
534.endif # !target(snap_kern)					# }
535
536
537# snap_md_post --
538#	Machine dependent distribution media operations.
539#	Overridden by etc.$MACHINE/Makefile.inc
540#
541snap_md_post: check_DESTDIR check_RELEASEDIR
542#	(empty -- look in the machine-dependent Makefile.inc)
543
544
545clean:
546	-rm -rf ${CDROM.dir} ${CDROM.pathlist} ${OBSOLETE.dir}
547
548.include <bsd.prog.mk>
549