xref: /freebsd/release/Makefile (revision ec09ef4ff8d0a377fd86c0c2e96a807a538fce4b)
1# $FreeBSD$
2#
3# make release CHROOTDIR=/some/dir BUILDNAME=somename CVSROOT=/cvs/dir \
4#	[ RELEASETAG=tag ]
5#
6# Where "/some/dir" is the pathname of a directory on a some filesystem with
7# at least 1000MB of free space, "somename" is what you want the release to
8# call itself, "/cvs/dir" is where our source repo resides and, optionally,
9# which CVS "tag" name should be used when checking out the sources to build
10# the release (default is HEAD).
11#
12# Please note: the vn driver must also be compiled into your kernel,
13# otherwise the target 'release.8' and possibly others will fail.
14#
15# Set these, release builder!
16#
17# Fixed version:
18#BUILDNAME=5.0-RELEASE
19#
20# Automatic SNAP versioning:
21DATE != date +%Y%m%d
22BASE = 5.0
23BUILDNAME?=${BASE}-${DATE}-SNAP
24#
25#CHROOTDIR=/junk/release
26# If this is a -stable snapshot, then set
27#RELEASETAG=RELENG_4
28#
29# Non-zero if ${RELEASETAG} is in the form "RELENG_ver_RELEASE"; we
30# are building an official release.  Otherwise, we are building for
31# a branch.
32.if defined(RELEASETAG)
33ISRELEASE!=	expr ${RELEASETAG} : '^RELENG_.*_RELEASE$$' || true
34.if ${ISRELEASE} != 0
35# Convert "RELENG_ver_RELEASE" to "RELEASE_ver" for ports and doc trees.
36AUXRELEASETAG!=	echo ${RELEASETAG} | sed -e 's/^RELENG_/RELEASE_/' -e 's/_RELEASE$$//'
37DOCRELEASETAG?=		${AUXRELEASETAG}
38PORTSRELEASETAG?=	${AUXRELEASETAG}
39.endif
40.endif
41
42KERNCONF=GENERIC
43
44# If you want to pass flags to the world build such as -j X, use
45# WORLD_FLAGS.  Similarly, you can specify make flags for kernel
46# builds via KERNEL_FLAGS.
47#WORLD_FLAGS=-j4
48#KERNEL_FLAGS=-j4
49
50# If you are using a local CVS repository with components stored in
51# non-standard modules, override these on the make commandline or
52# in the environment.
53RELEASESRCMODULE?=	src
54RELEASEDOCMODULE?=	doc
55RELEASEPORTSMODULE?=	ports
56
57# Unless set elsewhere, indicate the object format we'll be using.
58OBJFORMAT?=		elf
59
60# Uncomment this to disable the doc.1 target.  It is also an ERROR
61# to set NOPORTS and not set NODOC since docs depend on ports.
62# Setting this also disables doc.2 (RELNOTESng).
63#NODOC=  YES
64#NOPORTS=  YES
65
66# RELNOTESng can be enabled be uncommenting the following variable
67# definition.  It depends on having ports and docs enabled for this
68# release build.
69#RELNOTESNG=	YES
70#RELNOTESNG_LANG=	en_US.ISO_8859-1
71
72# Set ALLLANG=no if you want the release documentation to be
73# in English only.
74ALLLANG?=	yes
75DOCPORTS=	textproc/docproj
76# Set this to wherever the distfiles required by ${DOCPORTS} live.
77DOCDISTFILES?=	${.CURDIR}/../../ports/distfiles
78# Set this to 1 if you want -P to be used for automatic keyboard detection
79# on the boot floppy.  WARNING: Breaks on some Athlon (K7) motherboards.
80AUTO_KEYBOARD_DETECT?= 0
81
82.if defined(RELNOTESNG) && ${RELNOTESNG} == "YES"
83DIST_DOCS_ARCH_INDEP=	readme errata
84DIST_DOCS_ARCH_DEP=	installation relnotes hardware
85.else
86DIST_DOCS= ABOUT.TXT ERRATA.TXT LAYOUT.TXT README.TXT HARDWARE.TXT \
87           RELNOTES.TXT TROUBLE.TXT UPGRADE.TXT INSTALL.TXT
88.endif
89
90# Things which without too much trouble can be considered variables
91# BIN_DISTS are special in that they get full /etc installation sets.
92#
93.if ${MACHINE_ARCH} == "i386"
94COMPAT_DISTS?=	compat1x compat20 compat21 compat22 compat3x compat4x
95.else
96COMPAT_DISTS?=	compat4x
97.endif
98OTHER_DISTS?=	manpages catpages games proflibs dict info doc
99CRYPTO_DISTS?=	crypto krb4 krb5
100BIN_DISTS?=	bin
101DISTRIBUTIONS?=	${BIN_DISTS} ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS}
102KERNELS?=	GENERIC
103
104BOOT1=	etc/defaults/rc.conf
105
106# mountpoint for filesystems.
107MNT=			/mnt
108
109# Various floppy image parameters.
110#
111
112.if ${MACHINE_ARCH} == "i386"
113.if ${MACHINE} == "pc98"
114SMALLBOOTSIZE=		1200
115BOOTSIZE=		1440
116FIXITSIZE=		1440
117MFSSIZE=		2880
118BOOTINODE=		80000
119FIXITINODE=		4000
120MFSINODE=		8000
121SMALLBOOTLABEL=		fd1200
122BOOTLABEL=		fd1440
123FIXITLABEL=		fd1440
124MFSLABEL=		minimum2
125.else
126BOOTSIZE=		1440
127FIXITSIZE=		1440
128MFSSIZE=		4320
129BIGBOOTSIZE=		2880
130BOOTINODE=		80000
131FIXITINODE=		4000
132MFSINODE=		8000
133BOOTLABEL=		fd1440
134FIXITLABEL=		fd1440
135MFSLABEL=		minimum3
136BIGBOOTLABEL=		minimum2
137.endif
138.elif ${MACHINE_ARCH} == "alpha"
139BOOTSIZE=		1440
140FIXITSIZE=		2880
141MFSSIZE=		2880
142BIGBOOTSIZE=		2880
143BOOTINODE=		80000
144FIXITINODE=		4000
145MFSINODE=		8000
146BOOTLABEL=		fd1440
147FIXITLABEL=		minimum2
148MFSLABEL=		minimum2
149BIGBOOTLABEL=		minimum2
150.endif
151
152ZIPNSPLIT=		gzip --no-name -9 -c | split -b 240640 -
153
154
155VNDEVICE?=		vn0
156
157# Things which may get you into trouble if you change them
158MTREEFILES=		${.CURDIR}/../etc/mtree
159_R=			/R
160RD=			${_R}/stage
161FD=			${_R}/ftp
162CD=			${_R}/cdrom
163CD_DISC1=		${CD}/disc1
164CD_DISC2=		${CD}/disc2
165
166# Where the bootstrap ports (see DOCPORTS) get installed.
167LOCALDIR=		/usr/local/bin
168
169# ${BOOTSTRAPDIR} is for those utilities that refer to the hosting
170# environment, rather than the target environment.  This is specifically
171# intended for kernel-dependent utilities that are used during the build.
172#
173# ${BOOTSTRAPDIR} is actually being used by prepending it to the normal
174# ${PATH}.  Thus, it's also available to outside utilities like doFS.sh.
175BOOTSTRAPDIR=	/bootstrap
176#
177# The mount subsystem has been changed between 2.2 and 3.0 by the
178# Lite2 import.
179BOOTSTRAPUTILS=	/sbin/mount /sbin/umount
180#
181# 3.0 cpio tries to reference lchown(2) which is not available in 2.2
182BOOTSTRAPUTILS+= /usr/bin/cpio
183
184.if !defined(CRUNCH_TARGETS)
185CRUNCH_TARGETS=	boot fixit
186.endif
187
188.if ${MACHINE} == "pc98"
189EXTRAS= ftp.1
190.else
191EXTRAS= cdrom.1 ftp.1
192.endif
193
194.if !defined(NODOC)
195DOCREL= doc.1
196.if defined(RELNOTESNG) && ${RELNOTESNG} == "YES"
197DOCREL+= doc.2
198.endif
199.endif
200
201.if !defined(NOPORTREADMES)
202MAKEREADMES=	make readmes PORTSDIR=${CHROOTDIR}/usr/ports
203.else
204MAKEREADMES=	true
205.endif
206
207rerelease release:
208.if !defined(CHROOTDIR) || !defined(BUILDNAME) || !defined(CVSROOT)
209	@echo "To make a release you must set CHROOTDIR, BUILDNAME and CVSROOT" && false
210.endif
211.if defined(NOPORTS) && !defined(NODOC)
212	@echo "Ports are required for building the docs.  Either set NODOC or"
213	@echo "unset NOPORTS!"
214	@exit 1
215.endif
216.if defined(RELNOTESNG) && ${RELNOTESNG} == "YES" && defined(NODOC)
217	@echo "Ports and docs are required for building RELNOTESng.  Either"
218	@echo "unset RELNOTESNG or unset both NOPORTS and NODOC!"
219	@exit 1
220.endif
221.if make(release)
222.if exists(${CHROOTDIR})
223# The first command will fail on a handful of files that have their schg
224# flags set.  But it greatly speeds up the next two commands.
225	-rm -rf ${CHROOTDIR} 2>/dev/null
226	-chflags -R noschg ${CHROOTDIR}/.
227	-rm -rf ${CHROOTDIR}
228.endif
229	mkdir -p ${CHROOTDIR}
230	@echo ">>> make release started on `LC_ALL=C TZ=GMT date`"
231	cd ${.CURDIR}/../etc && ${MAKE} distrib-dirs DESTDIR=${CHROOTDIR}
232	cd ${.CURDIR}/../etc && ${MAKE} distribution DESTDIR=${CHROOTDIR}
233	if [ -f /etc/resolv.conf ]; then \
234		cp -p /etc/resolv.conf ${CHROOTDIR}/etc; \
235	fi
236	cd ${.CURDIR}/.. && ${MAKE} installworld DESTDIR=${CHROOTDIR} NOMAN=1
237	mkdir ${CHROOTDIR}/${BOOTSTRAPDIR}
238	for i in ${BOOTSTRAPUTILS} ; do \
239		cp -p ${CHROOTDIR}$$i ${CHROOTDIR}/${BOOTSTRAPDIR} ; \
240	done
241.if !defined(RELEASETAG)
242	cd ${CHROOTDIR}/usr && rm -rf src && \
243		cvs -R -d ${CVSROOT} co -P ${RELEASESRCMODULE}
244.else
245	cd ${CHROOTDIR}/usr && rm -rf src && \
246		cvs -R -d ${CVSROOT} co -P -r ${RELEASETAG} ${RELEASESRCMODULE}
247.endif
248.if defined(LOCAL_PATCHES) && exists(${LOCAL_PATCHES})
249	cd ${CHROOTDIR}/usr/src && patch ${PATCH_FLAGS} < ${LOCAL_PATCHES}
250.endif
251.if defined(LOCAL_SCRIPT) && exists(${LOCAL_SCRIPT})
252	cd ${CHROOTDIR} && env CHROOTDIR=${CHROOTDIR} BUILDNAME=${BUILDNAME} RELEASETAG=${RELEASETAG} ${LOCAL_SCRIPT}
253.endif
254.if !defined(NOPORTS)
255.if defined(PORTSRELEASETAG)
256	cd ${CHROOTDIR}/usr && rm -rf ports && cvs -R -d ${CVSROOT} co -P -r ${PORTSRELEASETAG} ${RELEASEPORTSMODULE} && cd ports && ${MAKEREADMES}
257.else
258	cd ${CHROOTDIR}/usr && rm -rf ports && cvs -R -d ${CVSROOT} co -P ${RELEASEPORTSMODULE} && cd ports && ${MAKEREADMES}
259.endif
260.endif
261.if !defined(NODOC)
262.if defined(DOCRELEASETAG)
263	cd ${CHROOTDIR}/usr && rm -rf doc && cvs -R -d ${CVSROOT} co -P -r ${DOCRELEASETAG} ${RELEASEDOCMODULE}
264.else
265	cd ${CHROOTDIR}/usr && rm -rf doc && cvs -R -d ${CVSROOT} co -P ${RELEASEDOCMODULE}
266.endif
267	if [ -d ${DOCDISTFILES}/ ]; then \
268		cp -rp ${DOCDISTFILES} ${CHROOTDIR}/usr/ports/distfiles; \
269	fi
270.endif
271.endif
272.if make(rerelease)
273.if !defined(RELEASENOUPDATE)
274.if !defined(RELEASETAG)
275	cd ${CHROOTDIR}/usr/src && cvs -R -q update -P -d
276.else
277	cd ${CHROOTDIR}/usr/src && cvs -R -q update -P -d -r ${RELEASETAG}
278.endif
279.if !defined(NOPORTS)
280	cd ${CHROOTDIR}/usr/ports && cvs -R -q update -P -d
281.endif
282.if !defined(NODOC)
283	cd ${CHROOTDIR}/usr/doc && cvs -R -q update -P -d
284.endif
285.endif
286.endif
287	# Add version information to those things that need it.
288	( cd ${CHROOTDIR}/usr/src/sys/conf && \
289	  mv newvers.sh foo && \
290	  sed "s/^RELEASE=.*/RELEASE=${BUILDNAME}/" foo > newvers.sh && rm foo )
291	echo OBJFORMAT=${OBJFORMAT} > ${CHROOTDIR}/etc/objformat
292	-test -f install.cfg && cp install.cfg ${CHROOTDIR}/usr/src/release
293	echo "#!/bin/sh"			> ${CHROOTDIR}/mk
294	echo "set -ex"				>> ${CHROOTDIR}/mk
295	echo "_RELTARGET=\$${1:-doRELEASE}"	>> ${CHROOTDIR}/mk
296	echo "export CFLAGS='-O -pipe'"	>> ${CHROOTDIR}/mk
297	echo "export NO_X=YES"			>> ${CHROOTDIR}/mk
298	echo "export DISTRIBUTIONS=\"${DISTRIBUTIONS}\"" >> ${CHROOTDIR}/mk
299	echo "export BUILDNAME=${BUILDNAME}"	>> ${CHROOTDIR}/mk
300	echo "export VNDEVICE=${VNDEVICE}"	>> ${CHROOTDIR}/mk
301	echo "export OBJFORMAT=${OBJFORMAT}"	>> ${CHROOTDIR}/mk
302.if defined(RELEASETAG)
303	echo "export RELEASETAG=${RELEASETAG}"	>> ${CHROOTDIR}/mk
304.endif
305.if defined(NOPORTS)
306	echo "export NOPORTS=${NOPORTS}"	>> ${CHROOTDIR}/mk
307.endif
308.if defined(NODOC)
309	echo "export NODOC=${NODOC}"		>> ${CHROOTDIR}/mk
310.endif
311.if defined(ALLLANG) && ${ALLLANG} != "NO" && ${ALLLANG} != "no"
312	echo "export ALLLANG=${ALLLANG}"	>> ${CHROOTDIR}/mk
313.else
314	echo "export DOC_LANG=en_US.ISO_8859-1"	>> ${CHROOTDIR}/mk
315.endif
316.if defined(NOSRC)
317	echo "export NOSRC=${NOSRC}"		>> ${CHROOTDIR}/mk
318.endif
319.if defined(RELNOTESNG)
320	echo "export RELNOTESNG=${RELNOTESNG}"	>> ${CHROOTDIR}/mk
321.endif
322.if defined(RELNOTESNG_LANG)
323	echo "export RELNOTESNG_LANG=${RELNOTESNG_LANG}"	>> ${CHROOTDIR}/mk
324.else
325	echo "export RELNOTESNG_LANG=en_US.ISO_8859-1"	>> ${CHROOTDIR}/mk
326.endif
327.if defined(NOSHARED)
328	echo "export NOSHARED=${NOSHARED}"	>> ${CHROOTDIR}/mk
329.endif
330.if defined(BOOT_CONFIG)
331	echo "export BOOT_CONFIG=\"${BOOT_CONFIG}\"">> ${CHROOTDIR}/mk
332.endif
333.if defined(KERNEL_FLAGS)
334	echo "export KERNEL_FLAGS=\"${KERNEL_FLAGS}\"" >> ${CHROOTDIR}/mk
335.endif
336	# Don't remove this, or the build will fall over!
337	echo "export RELEASEDIR=${_R}"		>> ${CHROOTDIR}/mk
338	echo "export PATH=${BOOTSTRAPDIR}:$${PATH}:${LOCALDIR}" >> ${CHROOTDIR}/mk
339	echo "if [ ! -f /tmp/.world_done ]; then" >> ${CHROOTDIR}/mk
340	echo "	cd /usr/src"			>> ${CHROOTDIR}/mk
341.if make(release)
342	echo "	(cd etc; make distrib-dirs distribution)" >> ${CHROOTDIR}/mk
343	echo "	make ${WORLD_FLAGS} world && \\"	>> ${CHROOTDIR}/mk
344.endif
345.if make(rerelease)
346	echo "	make ${WORLD_FLAGS} all install && \\" >> ${CHROOTDIR}/mk
347.endif
348	echo "	touch /tmp/.world_done"		>> ${CHROOTDIR}/mk
349	echo "fi"				>> ${CHROOTDIR}/mk
350	echo "cd /usr/src/release"		>> ${CHROOTDIR}/mk
351	echo "make obj"				>> ${CHROOTDIR}/mk
352	echo "make \$${_RELTARGET}"		>> ${CHROOTDIR}/mk
353	echo "echo \">>> make ${.TARGET} finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${CHROOTDIR}/mk
354	chmod 755 ${CHROOTDIR}/mk
355	chroot ${CHROOTDIR} /mk
356
357clean:
358	rm -rf boot_crunch release.[0-9]
359
360# Clean out ${_R} and make the directory structure.
361release.1:
362	mkdir -p ${_R}
363	-rm -rf ${_R}/* 2> /dev/null
364	-chflags -R noschg ${_R}/.
365	rm -rf ${_R}/*
366	mkdir ${RD}
367	mkdir ${RD}/floppies
368	mkdir ${RD}/trees
369	mkdir ${RD}/dists
370	mkdir ${RD}/kernels
371	for i in ${DISTRIBUTIONS} ; do \
372		mkdir ${RD}/trees/$$i && \
373		mkdir ${RD}/dists/$$i && \
374		mtree -deU -f ${MTREEFILES}/BSD.root.dist \
375		    -p ${RD}/trees/$$i > /dev/null && \
376		mtree -deU -f ${MTREEFILES}/BSD.usr.dist \
377		    -p ${RD}/trees/$$i/usr > /dev/null && \
378		mtree -deU -f ${MTREEFILES}/BSD.include.dist \
379		    -p ${RD}/trees/$$i/usr/include > /dev/null && \
380		mtree -deU -f ${MTREEFILES}/BSD.var.dist \
381		    -p ${RD}/trees/$$i/var > /dev/null ; \
382	done
383	touch release.1
384
385# Install the system into the various distributions.
386release.2:
387	cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/bin
388	cd ${.CURDIR}/.. && make distribworld DISTDIR=${RD}/trees
389.if exists(${.CURDIR}/../kerberosIV) && exists(${.CURDIR}/../crypto) && !defined(NOKERBEROS)
390	cd ${.CURDIR}/../kerberosIV && ( \
391		make bootstrap &&\
392		make obj all help-distribute DISTDIR=${RD}/trees &&\
393		make kprog \
394	)
395.endif
396.if exists(${.CURDIR}/../kerberos5) && exists(${.CURDIR}/../crypto) && !defined(NOKERBEROS)
397	cd ${.CURDIR}/../kerberos5 && ( \
398		make bootstrap &&\
399		make obj all help-distribute DISTDIR=${RD}/trees &&\
400		make kprog \
401	)
402.endif
403	-chflags -R noschg ${RD}/trees
404	touch release.2
405
406# Make and install the generic kernel(s).
407release.3:
408.for kernel in ${KERNELS}
409	-chflags -R noschg ${RD}/kernels/${kernel}
410	rm -rf ${RD}/kernels/${kernel}
411	rm -rf ${.CURDIR}/../sys/compile/${kernel}
412	cd ${.CURDIR} && ${MAKE} doSTDKERNEL KERNEL=${kernel} KODIR=/${kernel}
413	rm -rf ${.CURDIR}/../sys/compile/${kernel}
414	-mkdir ${RD}/trees/bin/boot/${kernel}
415	cp -p ${RD}/kernels/${kernel}/kernel ${RD}/trees/bin/boot/${kernel}
416.endfor
417	# Install a standard boot kernel+modules
418	mkdir -p ${RD}/trees/bin/boot/kernel
419	cp -Rp ${RD}/kernels/GENERIC/* ${RD}/trees/bin/boot/kernel
420	touch release.3
421
422# Make and install the three crunched binaries which live on the floppies.
423# You are not supposed to like this :-)
424release.4:
425	@mkdir -p /stand
426	rm -rf ${RD}/crunch
427	mkdir -p ${RD}/crunch
428	for j in ${CRUNCH_TARGETS} ; do \
429		rm -rf $${j}_crunch && \
430		mkdir $${j}_crunch && \
431		( cd $${j}_crunch && \
432		  ( ( [ -f ${.CURDIR}/${MACHINE}/$${j}_crunch.conf ] && \
433		    crunchgen ${.CURDIR}/${MACHINE}/$${j}_crunch.conf ) || \
434		    ( crunchgen ${.CURDIR}/$${j}_crunch.conf ) ) && \
435		  ${MAKE} -f $${j}_crunch.mk subclean all ) && \
436		mv $${j}_crunch/$${j}_crunch ${RD}/crunch/$${j} && \
437		true || { rm -rf $${j}_crunch ; false ; } ; \
438	done
439	touch release.4
440
441#
442# --==## Fix up the distributions. ##==--
443#
444release.5:
445	# Handle some grief caused by the munition braindeadness.
446	for i in bin/ed usr.sbin/ppp usr.sbin/pppd usr.sbin/sendmail usr.sbin/tcpdump/tcpdump ; do \
447		( cd ${.CURDIR}/../$$i; \
448		  make -DNOCRYPT clean all distribute DISTDIR=${RD}/trees ) ; \
449	done
450
451	# Create any "synthetic dists" now.
452	@for i in ${DISTRIBUTIONS}; do \
453		if [ -f ${.CURDIR}/scripts/$${i}-make.sh ]; then \
454			echo -n "Running $$i dist creation script... "; \
455			env OBJFORMAT=${OBJFORMAT} RD=${RD} sh ${.CURDIR}/scripts/$${i}-make.sh || echo "$$i distribution script returned bad status."; \
456			echo "Done."; \
457		fi \
458	done \
459
460	# Remove all the directories we don't need.
461	-cd ${RD}/trees && \
462		find ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS} -depth -type d -print | xargs rmdir
463	touch release.5
464
465#
466# --==## Package up the tarballs from assembled trees ##==--
467#
468release.6:
469	rm -rf ${RD}/dists
470	mkdir -p ${RD}/dists
471	@for i in ${DISTRIBUTIONS} ; \
472	do \
473		if [ -d ${RD}/trees/$${i} ] ; then \
474			cd ${.CURDIR} && $(MAKE) doTARBALL \
475				SD=${RD}/trees/$${i} \
476				TN=$$i TD=$$i ARG="." && \
477			echo "$${i} distribution is finished."; \
478		fi ; \
479	done
480	# More munition braindeadness.
481	( cd ${RD}/dists && \
482		if [ -f krb4/krb4.aa ] ; then \
483			mv krb4/krb4.* crypto && \
484			cat krb4/CHECKSUM.MD5 >> crypto/CHECKSUM.MD5 && \
485			rm -r krb4; \
486		fi )
487	( cd ${RD}/dists && \
488		if [ -f krb5/krb5.aa ] ; then \
489			mv krb5/krb5.* crypto && \
490			cat krb5/CHECKSUM.MD5 >> crypto/CHECKSUM.MD5 && \
491			rm -r krb5; \
492		fi )
493	touch release.6
494
495
496#
497# --==## Make source dists ##==--
498#
499release.7:
500.if !defined(NOSRC)
501	@cd ${.CURDIR} && $(MAKE) doTARBALL SD=/usr/src \
502		TD=src TN=sbase ARG="[A-Z]*"
503	@for i in `cd /usr/src && echo [a-z]*` ; do \
504		if [ -d /usr/src/$$i ] ; then \
505			cd ${.CURDIR} && $(MAKE) doTARBALL \
506				TN=`echo s$$i | tr -d '.' | \
507				    sed -e 's/usr/u/' \
508					-e 's/kerberosIV/krb4/' \
509					-e 's/kerberos5/krb5/'` \
510				SD=/usr/src TD=src ARG="$$i" ; \
511		fi ; \
512	done
513.if defined(EXTRA_SRC)
514	@set ${EXTRA_SRC} && \
515	while [ $$# -ge 2 ] ; do \
516		if [ -d /usr/src/$$1 ] ; then \
517			cd ${.CURDIR} && $(MAKE) doTARBALL \
518				SD=/usr/src TN="s$$2" TD=src ARG="$$1" ; \
519		fi && shift && shift ; \
520	done
521.endif
522	if [ -d ${RD}/dists/crypto ] ; then ( cd ${RD}/dists/src && \
523		if [ -f ssecure.aa ] ; then mv ssecure.* ../crypto ; fi && \
524		if [ -f scrypto.aa ] ; then mv scrypto.* ../crypto ; fi && \
525		if [ -f skrb4.aa ] ; then mv skrb4.* ../crypto ; fi && \
526		if [ -f skrb5.aa ] ; then mv skrb5.* ../crypto ; fi ; \
527		cd ${RD}/dists/crypto; rm -f CHECKSUM.MD5; \
528		md5 * > CHECKSUM.MD5 ) ; fi
529	(cd ${RD}/dists/src; rm -f CHECKSUM.MD5; md5 * > CHECKSUM.MD5)
530	@echo "src distribution is finished."
531.endif
532	touch release.7
533
534# Complete the bootfd
535#
536# Now, just to get this picture down once and for all:
537#
538# +------------------------------------------------------------------------+
539# |boot.flp                                                                |
540# +-----+-----+------------------------------------------------------------+
541# |boot1|boot2|floppy filesystem "bootfd"                                  |
542# +-----+-----+-+--------------------------------------------------------+-+
543#               |kernel                                                  |
544#               +------------+-----------------------------------------+-+
545#                            |mfs filesystem "mfsfd"                   |
546#                            +-----------------------------------------+
547#
548
549release.8: write_mfs_in_kernel
550	rm -rf ${RD}/mfsfd
551	mkdir ${RD}/mfsfd
552	cd ${RD}/mfsfd && \
553		mkdir -p etc/defaults dev mnt stand/help
554	@cd ${.CURDIR} && $(MAKE) installCRUNCH CRUNCH=boot \
555		DIR=${RD}/mfsfd/stand ZIP=false
556	( cd ${RD}/trees/bin/dev && \
557		ls console tty bpf0 ttyd0 ttyv0 ttyv1 ttyv2 ttyv3 null zero card0 card1 card2 card3 usb usb0 uhid0 ums0 ulpt0 ugen0 kbd0 kmem mem | \
558	cpio -dump ${RD}/mfsfd/dev )
559	( cd ${RD}/mfsfd/dev && rm -f *[swo]d*[bdefgh] )
560	( cd ${RD}/mfsfd && \
561	  for dir in bin sbin ; do \
562		ln -sf /stand $$dir; \
563	  done )
564	cp /sbin/dhclient-script ${RD}/mfsfd/stand
565	cp ${.CURDIR}/../etc/defaults/pccard.conf ${RD}/mfsfd/etc/defaults/pccard.conf
566	cp ${.CURDIR}/../etc/usbd.conf ${RD}/mfsfd/etc/usbd.conf
567	cd ${RD}/trees/bin && ls ${BOOT1} | cpio -dump ${RD}/mfsfd/stand
568	( for F in netconfig protocols ; do \
569		sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \
570		${RD}/trees/bin/etc/$$F > ${RD}/mfsfd/stand/etc/$$F ; \
571	  done )
572	grep -E '^(ftp|nameserver|domain|sunrpc|cmd|nfsd)[^-\w]' \
573	    ${.CURDIR}/../etc/services | \
574	    sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \
575	    > ${RD}/mfsfd/stand/etc/services
576	ln ${RD}/mfsfd/stand/etc/services ${RD}/mfsfd/etc/services
577	ln ${RD}/mfsfd/stand/etc/netconfig ${RD}/mfsfd/etc/netconfig
578	gzip -9c ${.CURDIR}/../COPYRIGHT > ${RD}/mfsfd/stand/help/COPYRIGHT.hlp.gz
579.if defined(RELNOTESNG) && ${RELNOTESNG} == "YES"
580	@for i in ${DIST_DOCS_ARCH_INDEP}; do \
581	  gzip -9c ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/article.txt > ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT.gz; \
582	done
583	@for i in ${DIST_DOCS_ARCH_DEP}; do \
584	  gzip -9c ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/${MACHINE_ARCH}/article.txt > ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT.gz; \
585	done
586	@mv ${RD}/mfsfd/stand/help/INSTALLATION.TXT.gz ${RD}/mfsfd/stand/help/INSTALL.TXT.gz
587.else
588	@for i in README.TXT RELNOTES.TXT INSTALL.TXT UPGRADE.TXT HARDWARE.TXT; do \
589	  if [ -f ${.CURDIR}/texts/${MACHINE_ARCH}/$${i} ]; then \
590	     gzip -9c ${.CURDIR}/texts/${MACHINE_ARCH}/$${i} > ${RD}/mfsfd/stand/help/$${i}.gz; \
591	  else \
592	     gzip -9c ${.CURDIR}/texts/$${i} > ${RD}/mfsfd/stand/help/$${i}.gz; \
593	  fi; \
594	done
595.endif
596	-test -f ${.CURDIR}/install.cfg && cp ${.CURDIR}/install.cfg ${RD}/mfsfd
597	@mkdir -p ${RD}/mfsfd/boot
598	@cp /boot/boot* ${RD}/mfsfd/boot
599	@cp /boot/loader.help ${RD}/mfsfd/boot
600	@cd ${.CURDIR} && ${MAKE} createBOOTMFS
601.if exists(${.CURDIR}/${MACHINE_ARCH}/drivers.conf)
602	@cd ${.CURDIR} && ${MAKE} doMODULES KERNEL=BOOTMFS KERNEL_KO=BOOTMFS KODIR=""
603.endif
604	@echo "Making the regular boot floppy."
605	@tar --exclude CVS -cf - -C /usr/src/usr.sbin/sysinstall help | \
606		tar xf - -C ${RD}/mfsfd/stand
607	@echo "Compressing doc files..."
608	@gzip -9 ${RD}/mfsfd/stand/help/*.hlp
609.if ${MACHINE_ARCH} == "alpha"
610	rm -rf ${RD}/mfsfd/stand/help/*
611.endif
612.if exists(${.CURDIR}/${MACHINE_ARCH}/drivers.conf)
613	@mkdir -p ${RD}/mfsfd/stand/modules
614	@perl ${.CURDIR}/scripts/driver-copy2.pl \
615		${.CURDIR}/${MACHINE_ARCH}/drivers.conf \
616		${RD}/kernels ${RD}/mfsfd/stand/modules
617.endif
618	sh -e ${.CURDIR}/scripts/doFS.sh -s mfsroot ${RD} ${MNT} \
619		${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL}
620	@gzip -9vc mfsroot > mfsroot.gz
621.if ${MACHINE} == "pc98"
622	@sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/mfsroot.flp \
623		${RD} ${MNT} ${SMALLBOOTSIZE} mfsroot.gz \
624		${BOOTINODE} ${SMALLBOOTLABEL}
625	@cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern-small FDSIZE=SMALL
626	@cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern
627.else
628	@sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/mfsroot.flp \
629		${RD} ${MNT} ${BOOTSIZE} mfsroot.gz ${BOOTINODE} ${BOOTLABEL}
630	@cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern
631	@cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=boot FDSIZE=BIG
632.endif
633	@rm mfsroot mfsroot.gz mfsroot.size
634	@echo "Regular and MFS boot floppies made."
635	touch release.8
636
637#
638# --==## Create a fixit floppy ##==--
639#
640release.9:
641	@echo "Making fixit floppy."
642	@rm -rf ${RD}/fixitfd
643	@mkdir ${RD}/fixitfd
644	@cd ${RD}/fixitfd && \
645		mkdir -p dev stand bin sbin etc mnt mnt1 mnt2 mnt3 mnt4 tmp \
646		usr/share/misc
647	@cd ${.CURDIR} && $(MAKE) installCRUNCH CRUNCH=fixit \
648		DIR=${RD}/fixitfd/stand ZIP=false
649	@( cd ${RD}/fixitfd/dev && \
650		cp ${RD}/trees/bin/dev/MAKEDEV MAKEDEV && \
651		chmod 755 MAKEDEV && \
652		sh MAKEDEV fixit )
653	@cp ${RD}/trees/bin/etc/spwd.db ${RD}/trees/bin/etc/group \
654		${RD}/trees/bin/etc/protocols ${RD}/fixitfd/etc
655	@cp ${RD}/trees/bin/usr/share/misc/scsi_modes \
656		${RD}/fixitfd/usr/share/misc
657	@cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile
658	@cp ${.CURDIR}/fixit.services ${RD}/fixitfd/etc/services
659	@cp ${.CURDIR}/scripts/tar.sh ${RD}/fixitfd/stand/tar
660	@chmod 555 ${RD}/fixitfd/stand/tar
661	@sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/fixit.flp ${RD} \
662		${MNT} ${FIXITSIZE} ${RD}/fixitfd ${FIXITINODE} ${FIXITLABEL}
663# Do our last minute floppies directory setup in a convenient place.
664	@cp ${.CURDIR}/texts/FLOPPIES.TXT ${RD}/floppies/README.TXT
665	@(cd ${RD}/floppies; md5 README.TXT *.flp > CHECKSUM.MD5)
666	touch release.9
667
668#
669# --==## Setup a suitable ftp-area ##==--
670#
671ftp.1:
672	@echo "Setting up FTP distribution area"
673	@mkdir -p ${FD}
674	-@ln -s . ${FD}/${BUILDNAME}
675	@cd ${RD} && find floppies -print | cpio -dumpl ${FD}
676	@cd ${RD}/dists && find . -print | cpio -dumpl ${FD}
677.if defined(RELNOTESNG) && ${RELNOTESNG} == "YES"
678	@for i in ${DIST_DOCS_ARCH_INDEP}; do \
679	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/article.txt ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
680	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/article.html ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
681	done
682	@for i in ${DIST_DOCS_ARCH_DEP}; do \
683	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/${MACHINE_ARCH}/article.txt ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
684	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/${MACHINE_ARCH}/article.html ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
685	done
686	@mv ${FD}/INSTALLATION.TXT ${FD}/INSTALL.TXT
687	@mv ${FD}/INSTALLATION.HTM ${FD}/INSTALL.HTM
688.else
689	@for i in ${DIST_DOCS}; do \
690	  if [ -f ${.CURDIR}/texts/$${i} ]; then \
691	     cp ${.CURDIR}/texts/$${i} ${FD}; \
692	  fi; \
693	  if [ -f ${.CURDIR}/texts/${MACHINE_ARCH}/$${i} ]; then \
694	     echo "=== Platform specifics for ${MACHINE_ARCH}" >> ${FD}/$${i}; \
695	     cat ${.CURDIR}/texts/${MACHINE_ARCH}/$${i} >> ${FD}/$${i}; \
696	  fi; \
697	done
698.endif
699	@echo "CD_VERSION = ${BUILDNAME}" > ${FD}/cdrom.inf
700.if !defined(NOPORTS)
701	@tar --exclude CVS -cBf - -C ${CD_DISC1} ports | tar -xBf - -C ${FD}
702.endif
703	touch ftp.1
704
705#
706# --==## Setup a suitable cdrom-area ##==--
707#
708cdrom.1:
709	@echo "Setting up CDROM distribution area"
710	@mkdir -p ${CD_DISC1} ${CD_DISC2}
711	@cd ${RD} && find floppies -print | cpio -dumpl ${CD_DISC1}
712	@cd ${RD}/dists && find . -print | cpio -dumpl ${CD_DISC1}
713	@ln -f ${RD}/kernels/MFSKERNEL.boot ${CD_DISC1}/kernel
714	@for i in ${DISTRIBUTIONS} ; \
715	do \
716		if [ -d ${RD}/trees/$${i} ] ; then \
717			chflags -R noschg ${RD}/trees/$${i} || true ; \
718			( cd ${RD}/trees/$${i} && \
719			find . -depth -print | cpio -dumpl ${CD_DISC2} ) ; \
720		fi \
721	done
722	@rm -f ${CD_DISC2}/.profile
723	@cp ${.CURDIR}/fixit.profile ${CD_DISC2}/.profile
724	@echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC1}/cdrom.inf
725	@echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC2}/cdrom.inf
726.if defined(RELNOTESNG) && ${RELNOTESNG} == "YES"
727	@for i in ${DIST_DOCS_ARCH_INDEP}; do \
728	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/article.txt ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
729	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/article.html ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
730	done
731	@for i in ${DIST_DOCS_ARCH_DEP}; do \
732	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/${MACHINE_ARCH}/article.txt ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
733	  cp ${.CURDIR}/doc/${RELNOTESNG_LANG}/$$i/${MACHINE_ARCH}/article.html ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
734	done
735	@mv ${CD_DISC1}/INSTALLATION.TXT ${CD_DISC1}/INSTALL.TXT
736	@mv ${CD_DISC1}/INSTALLATION.HTM ${CD_DISC1}/INSTALL.HTM
737.else
738	@for i in ${DIST_DOCS}; do \
739	  if [ -f ${.CURDIR}/texts/$${i} ]; then \
740	     cp ${.CURDIR}/texts/$${i} ${CD_DISC1}; \
741	  fi; \
742	  if [ -f ${.CURDIR}/texts/${MACHINE_ARCH}/$${i} ]; then \
743	     echo "=== Platform specifics for ${MACHINE_ARCH}" >> ${CD_DISC1}/$${i}; \
744	     cat ${.CURDIR}/texts/${MACHINE_ARCH}/$${i} >> ${CD_DISC1}/$${i}; \
745	  fi; \
746        done
747.endif
748.if ${MACHINE_ARCH} == "alpha"
749	@echo "Setting up Alpha CD disc1 for booting"
750	@cp -Rp ${RD}/image.boot/boot ${CD_DISC1}
751	@ln -f ${CD_DISC2}/boot/cdboot ${CD_DISC1}/boot
752	@ln -f ${CD_DISC1}/boot/loader.rc ${CD_DISC2}/boot
753	@ln -f ${CD_DISC1}/kernel ${CD_DISC2}/kernel
754.endif
755.if !defined(NOPORTS)
756	@-rm -rf /usr/ports/distfiles/*
757	@mkdir -p ${CD_DISC1}/ports && \
758	  tar --exclude CVS -czf ${CD_DISC1}/ports/ports.tgz -C /usr ports && \
759	  cp ${.CURDIR}/scripts/ports-install.sh ${CD_DISC1}/ports/install.sh \
760	  && (cd ${CD_DISC1}/ports; md5 * > CHECKSUM.MD5)
761.endif
762	touch cdrom.1
763
764#
765# --==## Documentation Project files such as the Handbook and FAQ ##==--
766#
767doc.1:
768	@echo "Making docs..."
769	@for i in ${DOCPORTS}; do \
770	  cd /usr/ports/$$i && make all install clean JADETEX=no FORCE_PKG_REGISTER=yes; \
771	done
772	@cd /usr/doc && make all install 'FORMATS=html html-split txt' INSTALL_COMPRESSED='' DOCDIR=${RD}/trees/bin/usr/share/doc
773	touch doc.1
774
775#
776# --==## RELNOTESng:  Next-generation replacements for *.TXT files ##==--
777#
778doc.2:
779	@echo "Making release documentation..."
780	@cd ${.CURDIR}/doc && make all 'FORMATS=html txt'
781	touch doc.2
782
783# Various "subroutine" and other supporting targets.
784
785# RD=
786# SD=
787# TD=
788# ARG=
789doTARBALL:
790.if !defined(SD)
791	@echo "SD undefined in doTARBALL" && exit 1
792.endif
793.if !defined(TD)
794	@echo "TD undefined in doTARBALL" && exit 1
795.endif
796.if !defined(ARG)
797	@echo "ARG undefined in doTARBALL" && exit 1
798.endif
799	@rm -rf ${RD}/dists/${TD}/${TN}*
800	@mkdir -p ${RD}/dists/${TD}
801	@( cd ${SD} && \
802		tn=`echo ${TN} | tr '[A-Z]' '[a-z]' | cut -c1-8` && \
803		echo rolling ${TD}/$$tn tarball &&\
804		tar --exclude CVS --exclude obj --exclude BOOTMFS -cf - ${ARG} | \
805		${ZIPNSPLIT} ${RD}/dists/${TD}/$$tn. && \
806		sh ${.CURDIR}/scripts/info.sh ${RD}/dists/${TD}/$$tn > \
807		   ${RD}/dists/${TD}/$$tn.inf && \
808		if [ -f ${.CURDIR}/scripts/$${TD}-install.sh ]; then \
809		  cp -p ${.CURDIR}/scripts/$${TD}-install.sh ${RD}/dists/${TD}/install.sh; \
810		fi && \
811		if [ "${SD}" != "/usr/src" ]; then \
812			mtree -c -i -p ${SD}/${ARG} \
813			  -k gname,md5digest,mode,nlink,uname,size,link,type \
814			  > ${RD}/dists/${TD}/$$tn.mtree ; \
815		else \
816			true; \
817		fi; \
818		(cd ${RD}/dists/${TD}; \
819		   rm -f CHECKSUM.MD5; \
820		   md5 * > CHECKSUM.MD5) \
821	)
822
823doRELEASE:  release.1 release.2 ${DOCREL} release.3 release.4 release.5 \
824		release.6 release.7 release.8 release.9
825	@cd ${.CURDIR} && ${MAKE} ${EXTRAS}
826	@echo "Release done"
827
828floppies:
829	@cd ${.CURDIR} && ${MAKE} boot.flp
830	@cd ${.CURDIR} && ${MAKE} fixit.flp
831	@cd ${RD} && find floppies -print | cpio -dumpl ${FD}
832
833boot.flp:
834	@rm -f release.4 release.8
835	@cd ${.CURDIR} && ${MAKE} release.4 release.8 CRUNCH_TARGETS=boot
836
837fixit.flp:
838	@rm -f release.4 release.9
839	@cd ${.CURDIR} && ${MAKE} release.4 release.9 CRUNCH_TARGETS=fixit
840
841write_mfs_in_kernel:	${.CURDIR}/write_mfs_in_kernel.c
842	${CC} ${CFLAGS} -o write_mfs_in_kernel ${.CURDIR}/write_mfs_in_kernel.c
843
844installCRUNCH:
845.if !defined(CRUNCH)
846	@echo "CRUNCH undefined in installCRUNCH" && exit 1
847.endif
848.if !defined(DIR)
849	@echo "DIR undefined in installCRUNCH" && exit 1
850.endif
851.if !defined(ZIP)
852	@echo "ZIP undefined in installCRUNCH" && exit 1
853.endif
854	@if ${ZIP} ; then \
855		gzip -9 < ${RD}/crunch/${CRUNCH} > ${DIR}/${CRUNCH}_crunch ; \
856	else \
857		ln -f ${RD}/crunch/${CRUNCH} ${DIR}/${CRUNCH}_crunch ; \
858	fi
859	@chmod 555 ${DIR}/${CRUNCH}_crunch
860	@if [ -f ${.CURDIR}/${MACHINE}/${CRUNCH}_crunch.conf ] ; then \
861		for i in `crunchgen -l ${.CURDIR}/${MACHINE}/${CRUNCH}_crunch.conf` ; do \
862			ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \
863		done \
864	else \
865		for i in `crunchgen -l ${.CURDIR}/${CRUNCH}_crunch.conf` ; do \
866			ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \
867		done \
868	fi
869
870#
871# --==## BOOTMFS config file ##==--
872#
873
874createBOOTMFS:
875	@cd ${.CURDIR}/../sys/${MACHINE}/conf && \
876	  sh ${.CURDIR}/scripts/dokern.sh ${FDSIZE} < ${KERNCONF} > BOOTMFS && \
877	  [ -r ${KERNCONF}.hints ] && cp ${KERNCONF}.hints BOOTMFS.hints
878.if ${MACHINE_ARCH} == "i386"
879	@echo "options  INTRO_USERCONFIG" >> \
880	  ${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
881.endif
882.if defined(FDSIZE) && ${FDSIZE} == "BIG"
883	@echo "options MD_ROOT_SIZE=`cat mfsroot.size`" >> \
884	  ${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
885.endif
886.if exists(${.CURDIR}/${MACHINE_ARCH}/drivers.conf)
887	@perl ${.CURDIR}/scripts/driver-remove.pl \
888		${.CURDIR}/${MACHINE_ARCH}/drivers.conf \
889		${.CURDIR}/../sys/${MACHINE}/conf/BOOTMFS
890.endif
891
892#
893# --==## Compile a kernel by name ${KERNEL} ##==--
894#
895# We don't erase the sys/compile/${KERNEL} directory, since somebody
896# may want to reuse it (release.8 presently)
897#
898doKERNEL:
899	@rm -f ${RD}/kernels/${KERNEL}
900	@cd ${.CURDIR}/../sys/${MACHINE}/conf && config ${KERNEL}
901	@cd ${.CURDIR}/../sys/compile/${KERNEL} && \
902			make kernel-depend && \
903			make ${KERNEL_FLAGS} ${KERNEL_KO} && \
904			make kernel-reinstall DESTDIR=${RD}/kernels && \
905			[ -r ${.CURDIR}/../sys/${MACHINE}/conf/${KERNEL}.hints ] && \
906			cp ${.CURDIR}/../sys/${MACHINE}/conf/${KERNEL}.hints ${RD}/kernels
907
908doMODULES:
909	@rm -f ${RD}/kernels/*.ko
910	@cd ${.CURDIR}/../sys/${MACHINE}/conf && config ${KERNEL}
911	@cd ${.CURDIR}/../sys/compile/${KERNEL} && \
912			make kernel-depend && \
913			make ${KERNEL_FLAGS} modules && \
914			make modules-reinstall DESTDIR=${RD}/kernels && \
915
916doSTDKERNEL:
917	@rm -f ${RD}/kernels/${KERNEL}
918	@cd ${.CURDIR}/../sys/${MACHINE}/conf && config ${KERNEL}
919	@cd ${.CURDIR}/../sys/compile/${KERNEL} && \
920			make depend && \
921			make ${KERNEL_FLAGS} KERNEL=${KERNEL} && \
922			make KERNEL=${KERNEL} DESTDIR=${RD}/kernels install && \
923			[ -r ${.CURDIR}/../sys/${MACHINE}/conf/${KERNEL}.hints ] && \
924			cp ${.CURDIR}/../sys/${MACHINE}/conf/${KERNEL}.hints ${RD}/kernels
925	@-cd ${.CURDIR}/../sys/compile/${KERNEL} && \
926			make KERNEL=${KERNEL} DESTDIR=${RD}/kernels \
927				kernel-reinstall.debug
928
929#
930# --==## Put a filesystem into a BOOTMFS kernel ##==--
931#
932doMFSKERN:
933	@echo "Running doMFSKERN for ${FSIMAGE}"
934	@rm -f ${RD}/kernels/BOOTMFS.${FSIMAGE}
935	@cd ${.CURDIR} && ${MAKE} createBOOTMFS
936	@cd ${.CURDIR} && ${MAKE} doKERNEL KERNEL=BOOTMFS KERNEL_KO=BOOTMFS KODIR=""
937	@rm -rf ${RD}/image.${FSIMAGE}
938	@mkdir  ${RD}/image.${FSIMAGE}
939	@cd ${RD}/kernels && \
940	  (chflags noschg BOOTMFS || true) && \
941	  strip BOOTMFS && \
942	  cp BOOTMFS BOOTMFS.${FSIMAGE} && \
943	  [ -r BOOTMFS.hints ] && mv BOOTMFS.hints BOOTMFS.${FSIMAGE}.hints
944	mv ${RD}/kernels/BOOTMFS ${RD}/image.${FSIMAGE}/kernel
945	@echo "Setting up /boot directory for ${FSIMAGE} floppy"
946	@mkdir -p ${RD}/image.${FSIMAGE}/boot
947	@cp /boot/loader ${RD}/image.${FSIMAGE}/boot
948	@[ -r ${RD}/kernels/BOOTMFS.${FSIMAGE}.hints ] && \
949	  sed -e '/^hint/s/^/set /' -e '/^#/d' \
950	    ${RD}/kernels/BOOTMFS.${FSIMAGE}.hints > \
951	    ${RD}/image.${FSIMAGE}/boot/device.hints && \
952	  echo "include /boot/device.hints" > ${RD}/image.${FSIMAGE}/boot/loader.rc
953	@echo "load /kernel" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
954.if !defined(FDSIZE) || ${FDSIZE} != "BIG"
955	@echo "echo \\007\\007" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
956	@echo "echo Please insert MFS root floppy and press enter:" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
957	@echo "read" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
958	@echo "load -t mfs_root /mfsroot" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
959.endif
960	@echo "echo \\007\\007" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
961	@echo "autoboot 10" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
962.if ${MACHINE_ARCH} == "i386" && ${AUTO_KEYBOARD_DETECT}
963	@echo "-P" >> ${RD}/image.${FSIMAGE}/boot.config
964.endif
965.if defined(FDSIZE) && ${FDSIZE} == "BIG"
966	@echo "Writing MFS image into kernel for ${FSIMAGE} floppy"
967	@./write_mfs_in_kernel ${RD}/image.${FSIMAGE}/kernel mfsroot
968	@cp ${RD}/image.${FSIMAGE}/kernel ${RD}/kernels/MFSKERNEL.${FSIMAGE}
969.endif
970	@gzip -9v ${RD}/image.${FSIMAGE}/kernel
971	@rm -f ${RD}/floppies/${FSIMAGE}.flp
972.if defined(FDSIZE) && ${FDSIZE} == "BIG"
973	sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \
974		${RD} ${MNT} ${BIGBOOTSIZE} ${RD}/image.${FSIMAGE} \
975		${BOOTINODE} ${BIGBOOTLABEL}
976.elif defined(FDSIZE) && ${FDSIZE} == "SMALL"
977	sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \
978		${RD} ${MNT} ${SMALLBOOTSIZE} ${RD}/image.${FSIMAGE} \
979		${BOOTINODE} ${SMALLBOOTLABEL}
980.else
981	sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \
982		${RD} ${MNT} ${BOOTSIZE} ${RD}/image.${FSIMAGE} \
983		${BOOTINODE} ${BOOTLABEL}
984.endif
985	@echo "Created ${RD}/floppies/${FSIMAGE}.flp"
986
987.include <bsd.prog.mk>
988